Phase 47 mockup · 2026-05-27

NYC Heatmap — 3 visual variants to pick from

Your idea: tap a NYC map → see each nabe colored by how busy / live it is → tap a polygon to set that nabe as active. Plus the dropdown becomes saved/favorite nabes instead of all cities. Compare the 3 visual treatments below, pick the one that lands for you, and I'll ship it as a code feature in Phase 47.

NYC first per your direction — same data shape extends to LA / Tokyo / Vesta / Paris / Austin / BA / Cape Town / etc. once you approve the visual. ~20 NYC neighborhoods rendered with approximate polygons (real polygons come from NYC NTA dataset, already in src/data/neighborhoodPolygons.ts for the 3 pilot cities).

Variant 1

Subtle gradient — cool to warm

Quiet, professional. Neighborhoods shade from cool blue (quiet) to warm orange (busy). Looks like a real-estate market map.

Quieter
Busier
Variant 2

Saturated heat — Nabe brand gradient

On-brand. Indigo (quiet) → violet → magenta (alive). Stronger, more emotional. Same color family as the rest of the app.

Quieter
Busier
Variant 3

Neutral polygons + live badges

Map stays calm. Each nabe gets a small badge with current Right Now activity count. Reads "data layer over geography" rather than "heat map of feelings." More legible at iPad scale.

Badges show "live count" — RIGHT NOW events / posts in last hour.
Before

Current dropdown — all 10 cities

All NYC
Williamsburg Active
Greenpoint
East Village
Los Angeles
Tokyo
Paris
Austin
Buenos Aires
Cape Town
Vesta

10 entries, equal weight, no signal about what you actually use.

After

Saved / favorite nabes only

Your nabes
Williamsburg home Active
East Village work
Greenpoint friends
Browse all cities
Los Angeles Tokyo Paris +7 more

Just the nabes you care about. Labels (home / work / friends) are optional. Full list collapsed behind "Browse all cities."

📐 Architecture notes (optional — tap to expand)

The data structure is city-agnostic from day 1. Each neighborhood gets a liveness score computed from 3 inputs: (a) post count in last N hours, (b) event count today, (c) Right Now hotspot activity. Combined into a normalized 0–1 score that drives the color.

NYC-first means: the 3 NYC pilot polygons (W'burg / Greenpoint / East Village) come from real NTA data in src/data/neighborhoodPolygons.ts. To roll out, we add the remaining ~15 NYC neighborhoods (Manhattan grid + Brooklyn nabes) from the same NTA dataset. The data pipeline doesn't change — just add more polygon entries.

For LA / Tokyo / Paris / etc., the city-scale polygons we already have render at the SAME zoom level. For "drill into LA neighborhoods" we'd add LA neighborhood polygons (Silver Lake, Echo Park, Venice, etc.) from OpenStreetMap admin boundaries — same pipeline as NYC NTA.

The saved-nabes dropdown reads from localStorage.nabe_saved_nabes (a string array of NeighborhoodKey IDs). EditProfile gets a "Manage your nabes" section. No backend needed for v1.

When you've decided

Three actions — tell me in chat which one:

  1. 1. "Variant 1 / 2 / 3 — ship it" → I code the chosen variant as a Phase 47 feature (after the iPad UAT + monetization deep dive).
  2. 2. "Mix variants" → e.g. "Variant 2 colors + Variant 3 badges" → I revise the mockup before coding.
  3. 3. "None of these — try X" → I rework the mockup before any code.

All mockup data is fake — the liveness scores are made up so the visual reads correctly. Real data hooks come from MOCK_POSTS / MOCK_EVENTS / MOCK_HOTSPOTS at code time.