Working internal project: NYCLL152Verdict
Suggested package root: owner.nycll152
Date: 2026-04-14 (Asia/Seoul)
Purpose: This folder is a self-contained design packet for building an NYC-focused LL152 checker + filing next-step + records brief site.
An NYC-only compliance decision site for building owners, landlords, supers, and managers who need an answer now:
- is this building covered?
- is this building due in the current cycle?
- what exactly must be filed next?
- what happens if there is no gas piping?
- what happens if there is no active gas service?
- what is the penalty or waiver path if nothing was filed?
- what records or proof do I need to gather next?
The product should tell the user:
- likely applicability
- likely due cycle and deadline
- exact next filing or correction path
- penalty and waiver exposure
- who needs to act next
- which records request or filing check should happen next
Phase 1 is narrower than the full LL152 category.
The launch wedge is:
- current-cycle or near-term due owner intent
- address or building-profile verdict
- filing next-step uncertainty
- filing next-step guidance plus records requests
This means the first public build should behave more like:
LL152 checker + filing next-step + records brief
and less like:
NYC gas safety bloggeneric plumber directory
- The trigger is deadline and penalty driven.
- Official guidance exists, but it is fragmented across pages, FAQs, notices, and rule updates.
- Follow Up #7 introduced new nuance around no-active-gas-service, no-gas-piping, 2-day notifications, fees, and violation resolution.
- The user need is immediate because filing ambiguity, penalties, and record gaps all show up at once.
- The product can stay narrow and useful without depending on an intermediary layer.
Do not build What is Local Law 152?
Build a LL152 checker + filing next-step + records brief engine for users trying to answer:
- Am I due now?
- What exactly must I file next?
- What changes if there is no gas piping versus no active gas service?
- What do the penalty and waiver paths actually mean?
- What should I send or verify before anyone files against the wrong path?
AGENT_START_HERE.md- read order and continuity rules for any future agentops/context_tracker.md- current status, decisions, and next tasksops/wedge_focus_2026-04-13.md- current primary wedge and narrow operating loop for the first build phaseops/source_audit_2026-04-13.md- official-source anchor map and how each source should shape the productops/persona_council_2026-04-13.md- forced debate across demand, SERP, funnel, risk, and portfolio perspectivesops/genius_persona_council_2026-04-14.md- product-thinking council that tightened blocker-first UX, confidence, and evidence displayops/promotion_review_system_2026-04-13.md- how future agents should review metrics and recommend route promotionops/route_promotion_board.md- current held-route board and recommendation statusspec/00_strategy.md- market thesis, positioning, wedge, and rollout philosophyspec/01_query_and_user_map.md- jobs-to-be-done, trigger states, query families, and first user mapspec/02_site_architecture.md- canonical entities, URL graph, route families, and internal linkingspec/03_data_and_operations.md- data model, source hierarchy, verification workflow, and refresh cadencespec/04_commercial_model.md- archived commercialization notes from an older direction; not part of the active B2C planspec/05_editorial_rules_and_execution.md- writing rules, trust guardrails, and page-family ship criteriaspec/06_indexing_quality_and_analytics.md- indexing gates, route quality rules, and measurement planspec/07_technical_architecture.md- system boundaries, package map, rendering model, and servicesspec/08_delivery_and_continuity.md- delivery sequencing notes from an older internal workflow experimentspec/09_launch_surface_and_route_inventory.md- first launch-surface page inventoryspec/10_acceptance_test_matrix.md- launch-critical tests and definition of done
Spring Boot+jte- Server-rendered checker and compliance pages with file-backed content
- File-based pipeline using raw
CSVplus normalized and derivedJSON - No runtime database in phase 1
- Java runtime baseline:
21
- Spring Boot plus jte scaffold is in place
- Phase-1 home, checker, trust routes, core route pages, and admin summary are implemented
- File-backed route inventory, route-status tracking, and lead capture storage are seeded
- Official-source normalization is in place for the core DOB page, LL152 FAQs, Follow Up #7, the Cycle 2 service notice, NYC311 GPS2 guidance, and the current rule text
- The checker reads official cycle, exemption, penalty, filing-timeline, and gas-status rules from
data/normalized/ll152/checker-rules.json - Home, checker, and route surfaces now reflect the latest persona-council decisions: blocker-first entry, confidence labels, preparation checklists, and official source anchors
- Pre-deploy locks are active by default: admin authentication, global noindex, disallow-all
robots.txt, request rate limiting, CSP and browser security headers, and deployment guards for public indexing
app.public-indexing-enabled=trueis now enabled for the live domain, but the deployment guards still block startup if the public-indexing requirements are not met/adminrequires HTTP Basic auth usingapp.admin.usernameandapp.admin.password- public indexing cannot be enabled with a localhost or non-HTTPS
app.base-url - public indexing cannot be enabled while the admin password is still the default placeholder
- public indexing cannot be enabled if any indexable route in
data/ops/route-status.csvis not markedcurrent
- canonical production domain is
https://ll152guide.com app.base-urlis hardcoded tohttps://ll152guide.cominapplication.properties- requests that arrive on the wrong public host or over plain
httpare redirected to the configured canonical base URL app.public-indexing-enabled=trueis now hardcoded for the live deploy onll152guide.com- only the admin credentials should come from runtime environment variables:
APP_ADMIN_USERNAMEandAPP_ADMIN_PASSWORD - use
.env.production.exampleas the deployment variable checklist
- GitHub Actions builds an ARM64 image and pushes
shinhyeok22/152 - OCI runs
docker composefrom~/deploy/ll152guide - nginx on the OCI host already routes
ll152guide.comandwww.ll152guide.comto127.0.0.1:8099 - required GitHub Actions secrets:
DOCKERHUB_USERNAME,DOCKERHUB_TOKEN,OCI_HOST,OCI_USERNAME,OCI_KEY,APP_ADMIN_PASSWORD - optional GitHub Actions secret:
APP_ADMIN_USERNAME(defaults toadmin) - optional GitHub Actions variable:
OCI_APP_PORT(defaults to8099)
Start with NYC only.
Reason:
- the law and filing system are city-specific
- the official sources are concentrated and structured
- the active wedge is tied to NYC timing and filing confusion, not broad national content
- checker
- filing next-step
- no-gas versus no-active-gas-service
- extension, penalty, and waiver
- after-inspection timing
- due-cycle and deadline guidance
- held district overlays later
- checker
- filing next-step
- no-gas versus no-active-gas-service
- extension-penalty-waiver
- after-inspection timing
- 2026 sub-cycle C guide
Everything else should start as support-layer or noindex inventory until the first wedge proves traction.
- records-brief and reply guidance
- no-gas or no-active-gas-service branch clarification
- later district overlays only if route demand is proven
This is a strong priority-2 tactical build candidate.
Why:
- first cash can be faster than many broader home-service ideas
- but market ceiling is narrower and more cycle-driven than the best evergreen assets
- This is a compliance verdict product, not a local plumbing blog.
- The winning moment is
am I due, what do I file next, and what proof do I need. - Always separate official filing guidance from optional follow-up help.
- Always separate
no gas pipingfromno active gas service. - Show uncertainty when critical inputs are missing, and show source anchors where the decision is made.
- If a page does not reduce filing ambiguity or route to the next action, it probably should not ship.