Phase 47 · Capture board · status: ✅ ALL SIX PLANS COMPLETE — pending iPad UAT · 2026-05-27

Spatial Intelligence — Developments + Heatmap

Two paired map features on one shared foundation: NYC Heatmap (per-NTA liveness coloring, saved-nabes dropdown) and Developments & Permits (clickable hard-hat markers, announcements feed, per-development & builder drawers). The heatmap shows the NOW; developments show the FUTURE. Built together so the map architecture serves both.

6 plans · 4 waves · all 6 open questions resolved 2026-05-27 · 26 decisions locked
6
Plans
6
Executed (00, 01, 02, 03, 04a, 04b) — 10/10 AC in code
0
Open questions (all 6 resolved)
26
Decisions locked (D-01 → D-26)
🎬 Kickoff prompt — paste at start of next session (iPad UAT pass)
Phase 47 (Spatial Intelligence) is code-complete across all 6 plans. Run the iPad UAT pass against 47-VALIDATION.md "Manual-Only Verifications" table. Demo path: W'burg → LA → Tokyo → Vesta. AC checklist: AC-1 heatmap colors NYC NTAs · AC-2 CityPillModal saved-nabes flow · AC-3 hard-hat markers + popup · AC-4 DevelopmentDrawer · AC-5 BuilderDrawer · AC-6 Coming chip in Explore · AC-7 Vault per-nabe "What's coming" tile · AC-8 Right Now banner triggers + tap → DevelopmentDrawer + proximity sort · AC-9 Day 4 two-tile · AC-10 polygon-only view for non-NYC.

Read 47-CONTEXT.md, 47-VALIDATION.md, the six PLAN files + six SUMMARY files first.
🔗 Quick links
📋 Phase scope — 6 plans across 4 waves
Plan Wave Status Objective (one line)
00-WAVE-0 Wave 0 ✅ Shipped Vitest scaffold + 3 stub test files + capture board (this page).
01 Wave 1 ✅ Shipped Foundation shipped 2026-05-27. Types + mock data for 4 cities + computeLiveness + entityNav contract. Drawers + UI deferred to Waves 2/3.
02 Wave 2 ✅ Shipped Heatmap + Saved Nabes shipped 2026-05-27. AC-1, AC-2, AC-10 (non-NYC polygon view) in code; iPad UAT pending. OQ-3 (REPLACE dropdown) + OQ-5 (30-day TTL) implemented.
03 Wave 3 ✅ Shipped Developments + drawers shipped 2026-05-27. AC-3, AC-4, AC-5, AC-10 in code; iPad UAT pending. Marker icon: HardHat (OQ-2 resolved; Construction fallback unused — verified imports cleanly). Permit click behavior: tooltip-only (OQ-4 resolved). Mockup-approval gate skipped per founder direction memory/feedback_no_mockup_approval_gate.md.
04a Wave 4 ✅ Shipped Discovery (in-tab) shipped 2026-05-27. AC-6 (Coming chip + ComingFeed in Explore), AC-7 (Vault per-nabe "What's coming" tile + deep-link), AC-9 (Day 4 two-tile w/ Developments mini) all in code; iPad UAT pending. OQ-6 (Day 4 two-tile pattern) resolved + implemented as side-by-side independently completable. Mockup-approval gate skipped per founder direction memory/feedback_no_mockup_approval_gate.md.
04b Wave 4 ✅ Shipped Discovery (ambient) shipped 2026-05-27. AC-8 (Right Now banner triggers for ≥50-unit permits + milestones + proximity sort + tap → DevelopmentDrawer) + D-19 ambient surfaces (building-detail "Developments in [Nabe]" section + PostCard exact-name mention links via React node tree (no innerHTML) + GlobalSearch indexing of developments + builders) all in code; iPad UAT pending. D-20 satisfied by absence (Phase 48+ deferred items remain unshipped).
Wave dependency: 00 → 01 → 02 → 03 → 04a → 04b. Capture-board file overlap forces sequential execution between 04a and 04b.
✅ Decisions locked (26)
Navigation Placement (Q1)
  • D-01: Heatmap lives in header city-pill modal (no new tab).
  • D-02: Developments lives in 3 existing tabs (Explore map + Coming chip + entity drawers).
  • D-03: Vault tile per nabe is REQUIRED.
  • D-04: Right Now banner triggers are REQUIRED.
  • D-05: 5-tab cap preserved — no new top-level tab.
Data Architecture (Q2)
  • D-06: New types: Development, Permit, Builder, NeighborhoodLiveness, DevelopmentStatus, DevelopmentCategory.
  • D-07: MapContent gains 'development'; permits use smaller pins.
  • D-08: entityNav extended with 'development' + 'builder'.
  • D-09: Liveness is DERIVED (pure function), not stored.
  • D-10: Mock data shaped like future API client return — swap-not-refactor.
Per-City Demo Path (Q3)
  • D-11: Demo flow: W'burg → LA → Tokyo → Vesta.
  • D-12: NYC = full treatment (heatmap + ~6 devs per nabe + permits + builders).
  • D-13: LA + Tokyo = "prove-it-extends" (2-3 devs, polygon-only).
  • D-14: Vesta = emotional close. RECOVERY framing (refugee housing, civic rebuild).
  • D-15: Heatmap shading = NYC-only in Phase 47.
Resident Discovery (Q4)
  • D-16: Right Now triggers: ≥50-unit permit / milestone / proximity.
  • D-17: Map markers VISIBLE BY DEFAULT (hideable via filter chip).
  • D-18: Onboarding gets developments as a 2nd card on Day 4 (not Day 8).
  • D-19: Tier 3 ambient: building hook + post mentions + global search.
  • D-20: Push, email digest, bookmarks → deferred to Phase 48+.
Phase Scope (Q6) + Non-NYC Data (Q5)
  • D-21: ONE combined phase with 4 waves (~3-4 weeks).
  • D-22: Wave 1 blocks 2+3; Wave 4 waits on 3.
  • D-23: Effort: W1 3-4d · W2 4-5d · W3 5-6d · W4 4-5d.
  • D-24: All 4 cities ship Phase 47 with mock data.
  • D-25: Tokyo + Vesta = mock-only forever; LA + Paris swap post-acquisition.
Out-of-Scope Lock (Q7)
  • D-26: Explicitly OUT, no re-litigation: push · builder accounts · comment system · time-machine · non-NYC heatmap shading · email digest · bookmarks · standalone permit feed · real-API integration · community devs · sub-nabe granularity.
✅ All 6 questions resolved 2026-05-27 founder decisions (delegated discretion to orchestrator) — full context in 47-RESEARCH.md
OQ-1 · Vitest?
YES — add to devDependencies. Shipped Wave 0 (this commit).
OQ-2 · Development marker icon?
HardHat (lucide-react). Fall back to Construction if import fails. ✅ Implemented Wave 3 (HardHat used; Construction fallback unused).
OQ-3 · Replace or coexist?
REPLACE the dropdown variant. Add "Pin demo cities" affordance in the modal. ✅ Implemented Wave 2.
OQ-4 · Permit click behavior?
Tooltip only (filing # + units + status). No "View DOB filing" link. ✅ Implemented Wave 3 (permit popups render filing #, address, units, status, filedDate — no CTA button).
OQ-5 · NTA cache TTL?
30 days. Static fallback ships in public/. ✅ Implemented Wave 2 (262 NTAs in public/nyc-ntas-fallback.json).
OQ-6 · Day 4 second card layout?
Stack as two mini-tiles. Both must complete to advance Day 4 to "done." ✅ Implemented Wave 4a (NurturingCardExpanded TwoTileCard branch; sub-flags in localStorage).
🎯 Ready for iPad UAT — Phase 47 closeout
All 6 plans + 10/10 AC in code · pending visual verification
Walk the full demo path on iPad: W'burg (heatmap + hard-hat markers + Right Now permit trigger + listing-detail "Developments in Williamsburg" + post mention links + global search) → LA (polygon-only view, 3 devs) → Tokyo (polygon-only view, 3 devs) → Vesta (recovery framing on transitional housing / school rebuild / market square / levee). Confirm each AC in 47-VALIDATION.md "Manual-Only Verifications" table.
After UAT
If clean: mark Phase 47 fully complete in ROADMAP.md and move to the next Pitch-Mode item. If founder finds issues: log to .planning/TODOS.md for a focused follow-up plan. Phase 48+ deferred items (push notifications, builder accounts, comment system, time-machine, non-NYC heatmap shading, email digest, saved-devs, standalone permit feed, real-API integration, community-contributed developments, sub-nabe granularity) stay parked per D-26.
📌 Outstanding + parked (Phase 48+)
📱 iPad bookmarks (flat list)