The Nabe · Founder UAT

All outstanding tests

Done
0 / 0
How to use this page
Phase 63 · Just built · Review the deck

Compass International (CIH) RE-centric pitch deck

0 / 4
This is a content/design deliverable, not app code — so "UAT" = open the deck and read it, not walk the app. Brand-new CIH-centric, RE-forward deck (separate from the attorney deck, which was untouched). 15 slides incl. two ★ wow centerpieces: the choose-your-agent showpiece and the persona section. All deck gotchas pass (no gradient-clip / web fonts / shadow-under-scale / teal leak / no pricing). I sent the PDF to your device for review.
Files (in pitch/): Nabe-Compass-International-RE-Deck.html · …-2026-06-11.pdf (19pp) · Nabe-Compass-RE-OnePager.html + PDF
63 · Read the deck
Open the deck PDF and click/scroll through all 15 slides

What to review → Cover ("It's everything, and like nothing that exists." / "One world, one community.") → the "real estate has never had a home" hook → aggregators-are-a-thin-slice → what Nabe is → off-the-screen → the RE foundation / "context sells" → what it does for agents → why only CIH can build this → the new layer CIH owns → model & scale (residents free, revenue directional) → the Ask → close. Does the narrative land for an RE-literate Compass leadership room?

63 · ★ Wow centerpieces
Check the two centerpieces read as "the next big thing"

What to review → (1) Showpiece — browse a listing / "choose your agent" → connected → see what that agent posted in the neighborhood (relationship-gen, not lead-gen; universal across personas). (2) Persona section — opens on the RE trio (broker · developer · regular→future-customer), then sweeps resident/newcomer/business/journalist, each with a Today→Nabe contrast. Do these hit the "wow" bar?

63 · ⚑ Design call — needs your eyes
Light slides + purple text — or dark-purple→black slides?

The brief said both "dark purple → black palette" AND "use solid purple text." Those conflict (purple text needs a light bg; a dark bg needs white text). I built it as light paper + solid-purple text/accents (matches "solid purple text" + the attorney deck). If you pictured a dramatic dark deck (purple→black slide backgrounds, white text), say the word — it's a quick swap. This is the one open decision.

63 · Deferred (D-14) — not blocking
Find-your-agent gap shots (3 placeholders on the showpiece)

The showpiece has 3 empty phone placeholders for screens that don't exist yet (the choose-agent CTA → connected → agent's-posts flow). The capture script is staged but not run (pitch/capture-agent-flow.cjs). When you want them filled, say so — I'll capture from the live app and re-export the PDF.

Phase 62 · Just shipped · Walk me

Places/POI as entities + spatial conversation layer + block discovery

0 / 15
Phase 62 makes places first-class: parks, plazas, landmarks, transit and businesses are now tappable entities with their own page (banner → photo-wall hero → happening today → check-ins → conversation). The block chat grew into a spatial conversation layer (per-place + per-block rooms, an "around me" nearby strip, map activity dots), and the buried Block features got surfaced. Domino Park is the headline place — start there. All 17 design decisions verified in code; build + 797 tests green; the code-review gate found 2 bugs + 5 nits and all 7 were fixed this run. These cards are your on-device walk.
Live app: 192.168.1.171:5173 — all features live. 2 founder-review flags at the bottom (design calls, not bugs).
62-01/03/04 · Map → place page
Tap a park pin (Domino Park) → its place page opens
pending

Parks/plazas/landmarks/transit are now real map pins. Tapping one opens its place page directly (no popup) — the same direct-open behavior businesses and developments use.

What to walk →
  1. Open 192.168.1.171:5173.
  2. Go to the Map (Feed → Map toggle, or Explore's map). Make sure the "Places" filter chip is on.
  3. Find Domino Park on the Williamsburg waterfront — its pin is category-colored (a park glyph), not all-teal.
  4. Tap the pin → the place page drawer should open immediately (no intermediate popup card).
  5. Expected: a full place page for Domino Park. If the tap does nothing or shows only a popup, tap Bug.
Open the app →
62-04/05/06 · Place page layout (D-03)
Place page reads top-to-bottom: banner → photo wall → happening today → check-ins → conversation
pending

The agreed section order (D-03): a slim official banner pinned at top, then the photo wall as the hero, then time-sensitive content (events → check-ins), then the conversation at the bottom.

What to walk →
  1. On the Domino Park page (from the previous card), scroll from top to bottom.
  2. Order should be: (1) Coastal-navy gradient banner with name + type → (2) photo wall (big hero grid) → (3) "Happening today" / events → (4) Check-ins → (5) Conversation.
  3. Expected: that exact order, all on one scroll (no tabs for the page itself). If sections are out of order or missing, tap Bug.
Open the app →
62-06 · Official banner (D-05)
Banner shows name·type, official blurb, key-facts, and Save Place + Follow
pending

The pinned banner is curated/official content: "Domino Park · Waterfront park", a short blurb ("6-acre park on the East River…"), a key-facts row (hours/address), and two distinct actions — Save Place (bookmark) and Follow (updates) — plus a show-on-map tap.

What to walk →
  1. On the Domino Park page, look at the top banner.
  2. Confirm: name + type ("Domino Park · Waterfront park"), a short official blurb, and a key-facts row (hours/address).
  3. Tap Save Place → it should toggle to a saved state. Tap Follow → it should toggle independently (Save and Follow are different actions).
  4. Tap show on map / directions — it should point to the place's location.
  5. Expected: all present, Save and Follow toggle separately. If either is missing or they're wired together, tap Bug.
Open the app →
62-05 · Photo wall (D-04)
Photo wall is the hero — magazine grid of recent photos
pending

Recent photos taken at the place lead the page (most visual / shareable). Layout is a hero-left magazine grid: one big tile + smaller tiles, with a "+N" overlay when there are extra photos.

What to walk →
  1. On the Domino Park page, look just under the banner — the photo wall.
  2. Domino Park has 5 photos → expect a big first tile + smaller tiles (magazine grid), full-bleed.
  3. Open a place with few/no photos (e.g. a smaller transit/landmark place) → expect a graceful 1–2 photo layout or a "No photos yet — be the first to share" empty state, not a broken grid.
  4. Expected: photo wall is visually the hero. If it's tiny, below the fold, or broken, tap Bug.
Open the app →
62-05 · Happening today (D-06)
"Happening today" + upcoming events surface on the place page
pending

Events near the place (pulled from the calendar by location) show up as a time-sensitive section under the photo wall.

What to walk →
  1. On the Domino Park page, scroll to the "Happening today" / events section (below photos).
  2. Expect event cards for things near the park, or a clear "Nothing scheduled today — check back soon." empty state.
  3. Expected: events tied to the place, not random city-wide events. If empty for Domino Park specifically (it should have some) or showing unrelated events, tap Bug.
Open the app →
62-06 · Check-ins (D-15..D-17)
"I'm Here" check-in works; "here now" + "been here" history both show
pending

One-tap "I'm Here" (required for parks, which aren't businesses) PLUS existing check-in posts get pulled in so businesses feel alive on day one. "Here now" (recent) sits above "been here" (history). Names are visible to everyone.

What to walk →
  1. On the Domino Park page, scroll to Check-ins. Tap "I'm Here" → the button should switch to a green "Here now" state and your check-in should appear under "here now".
  2. Open a business place page (via Explore or search — see later cards). Its Check-ins should show "been here" history populated from existing check-in posts, even before anyone taps.
  3. Expected: tap works on parks; businesses show historical check-ins; here-now above, been-here below; real names shown. If the button does nothing or businesses show zero history, tap Bug.
Open the app →
62-01/04 · Place conversation room (D-08/D-09/D-11)
Each place has its own conversation room (reuses block-chat, verified-to-post gate)
pending

The bottom of every place page is a conversation room — the same component as block chat, now serving places. Everyone can read; verified residents/visitors post. Domino Park and the other headline parks have seeded messages.

What to walk →
  1. On the Domino Park page, scroll to the bottom Conversation section.
  2. Expect seeded messages (it's a real room). Confirm the read/post gate behaves like block chat (post box present for a verified resident).
  3. Open a different place (e.g. McCarren Park) → its conversation should be a separate room with its own messages (not shared with Domino).
  4. Expected: per-place isolated rooms. If two places share the same messages, tap Bug.
Open the app →
62-02/03 · Map activity dots (D-10)
Places with a live conversation show a subtle activity dot on the map
pending

The visible "spatial" part: a small sky-blue glow dot sits on the pins of places/blocks that have an active conversation, so you can see where the neighborhood is talking.

What to walk →
  1. On the Map with the "Places" filter on, look at the place pins.
  2. Pins for places with active rooms (Domino Park, McCarren Park, etc.) should carry a small sky-blue glow dot; quiet places should not.
  3. Expected: a subtle dot/glow (not just a number badge, not invisible). If no dots appear on any active place, tap Bug.
Open the app →
62-07/08 · "Around me" nearby (D-08)
"What's being said nearby" strip shows the most-active nearby places
pending

Like "walking outside and hearing the block" — a compact strip aggregating the nearest active place conversations, at the top of the Places/Blocks band in Explore.

What to walk →
  1. Open Explore tab and scroll to the Places & Blocks band.
  2. At the top of that band, find the "What's being said nearby" strip — up to 3 chips, each a nearby active place + a small activity dot + "talking".
  3. Tap a chip → it should open that place's page.
  4. Expected: the strip shows nearby active places and chips open the place. If it's empty when active places exist nearby, tap Bug.
Open the app →
62-08 · Explore browse (D-12/D-13)
Explore has a Places/Blocks browse section (no new bottom-nav tab)
pending

Discovery lives inside Explore: a horizontal row of place cards (photo + name + type + "X here now"), plus a Blocks sub-section. No new tab was added to the bottom nav.

What to walk →
  1. Open Explore tab → scroll to the Places & Blocks band (between the Neighbor Economy and "More to explore" bands).
  2. Scroll the place tiles sideways; tap one → its place page opens.
  3. Scroll to the Blocks sub-section; tap a block entry → the block page/drawer opens.
  4. Confirm the bottom nav still has the same tabs as before (no new "Places" tab).
  5. Expected: browse band present, tiles open pages, nav unchanged. Otherwise tap Bug.
Open the app →
62-08 · Global search (D-12)
Global search finds places and blocks
pending

Places (by name/type/neighborhood) and blocks (by label/intersection/neighborhood) are now indexed in global search, each in its own results section.

What to walk →
  1. Open the search (header search icon).
  2. Type "Domino" → expect a Places results section with Domino Park (MapPin icon). Tap it → place page opens.
  3. Type a neighborhood or block term → expect a Blocks section too.
  4. Expected: places + blocks appear as their own sections and open the right entity. Otherwise tap Bug.
Open the app →
62-09 · Right Now feed chip (D-12)
"Right Now" banner has a place chip for the most-active nearby place
pending

The home-feed "Right Now" banner now surfaces the single most-active nearby place as a tappable chip.

What to walk →
  1. Open the Feed and look at the Right Now banner near the top.
  2. Expect a place chip (a nearby active place). Tap it → that place's page opens.
  3. Expected: chip present and opens the place. If absent when an active place exists nearby, tap Bug.
Open the app →
62-06/09 · Saved places (D-07/D-12)
Save a place → it shows in Profile, and in the Profile "Saved places" card
pending

Saving a place adds it to a new "Saved places" bucket in Profile › Saved AND a "Saved places" card on the Me page (mirroring the My Block card). Full round-trip.

What to walk →
  1. On a place page, tap Save Place.
  2. Go to Me tab → look for the "Saved places" card (just after "My Block"). The place you saved should be a tile there; tap it → place page opens.
  3. Check Profile › Saved — the place should also appear in the saved-places bucket alongside saved posts/listings.
  4. Un-save it → it should disappear from both.
  5. Expected: save/un-save round-trips to both surfaces. Otherwise tap Bug.
Open the app →
62-08 · Block features surfaced (D-14)
Block features (Time Machine, throwbacks, timeline) are reachable + a highlight is promoted
pending

The rich block features stay nested in the block page but are now easy to reach, and a highlight (Time Machine) is promoted to a discoverable surface — fixing the "buried behind one profile card" problem you flagged.

What to walk →
  1. In Explore → Places & Blocks → Blocks sub-section, confirm block entries show a "Time Machine available" pill (the surfaced highlight).
  2. Tap a block → the block page/drawer opens with the full feature set still reachable: Time Machine (year slider), throwbacks, 30-day timeline.
  3. Confirm the old path still works too: Me → My Block → Open Time Machine.
  4. Expected: blocks discoverable from Explore + Time Machine promoted; nested features intact. Otherwise tap Bug.
Open the app →
62 · Founder review flag · design call (not a bug)
"Browse all" in the Explore Places band opens the first place, not a dedicated list view
pending

The Explore Places band has a horizontal scroll of place tiles + a "Browse all" link. Right now "Browse all" opens the first place (a demo shortcut) rather than a full scrollable list/grid of every place. We deliberately did NOT build a new list view this phase (out of scope) and flagged it for you. Decision needed: is the horizontal scroll enough, or do you want a dedicated "all places" list view in a future phase? Also worth your eye: the activity-dot glow and place pins render only in the live browser (not testable headless) — confirm they look right on-device.

What to decide →
  1. Open Explore → Places & Blocks, scroll the place tiles, and tap "Browse all" — note it opens a place page, not a list.
  2. Decide: keep the horizontal scroll as the browse mechanism, OR queue a dedicated "all places" list/grid view for a later phase.
  3. Tap ✓ Tested if the current behavior is fine for now, or ✗ Bug with a note if you want the list view queued.
Open the app →
Phase 61 · Just shipped · Finalize

Coastal Slate — Visual UAT finalize (inline leak fixes + design-system lock)

0 / 8
Phase 61 did the visual finish on the Coastal Slate recolor: drove the live app surface-by-surface with Playwright (S1–S20), fixed the grep-invisible inline leaks 61-01 missed (onboarding dark-indigo, warm card tints, fuchsia star, AI toggle), and locked the design-system + brand memories. The app is navy → teal → sky everywhere brand appears. These cards confirm the fixes are visible on-device and flag two items that need your eyes: the sent-bubble color call and the agent-dashboard surface (not reachable headless).
Live app: 192.168.1.171:5173 — all fixes are live. Build + 704 tests green.
61-01 · Onboarding + feed + promo (confirmed Playwright)
Onboarding reads Coastal NAVY — not the old dark-indigo
pending

The onboarding flow (first thing a new user sees) used a dark-indigo bg #1e1b4b → #312e81 that grep missed. Phase 61 fixed it to Coastal navy. Playwright-confirmed live. Also: feed header, Right Now banner, and promo cards all read navy→teal→sky.

What to walk →
  1. Open 192.168.1.171:5173.
  2. Go to Me tab → scroll to the bottom → tap "Reset Onboarding" (dev button). App reloads to the first-run flow.
  3. The welcome screen background should read deep navy (#0f172a) fading to teal — no purple or indigo cast.
  4. Tap through NeighborhoodPicker and InterestGrid — both header frames should stay Coastal navy→teal, not indigo.
  5. After finishing, check the Feed: header reads navy→teal→sky, Right Now banner cool (no green glow), active chip teal.
  6. Expected: navy background, not dark-purple/indigo. If it still reads violet, tap Bug.
Open the app →
61-02 · Vault + Notifications (confirmed Playwright)
Vault FeaturedGuideCard and Notifications unread rows read slate-neutral — no warm violet/pink tint
pending

Three places had a #faf8ff → #fdf2f8 warm violet→pink card tint that grep missed. All three fixed to slate-neutral #f8fafc → #f0f9ff. The Vault's featured card star was also fuchsia — now teal.

What to walk →
  1. Open 192.168.1.171:5173, tap Vault tab.
  2. The Featured Guide card (top of Vault) should have a cool slate background — no warm violet/pink tint. The star icon should be teal, not fuchsia/purple.
  3. Tap the bell icon in the header to open Notifications.
  4. Unread notification rows (those with the "unread" indicator) should have a cool slate/sky card background — no warm violet/pink tint.
  5. Expected: cool/neutral card backgrounds throughout. If you see a warm pink or violet tint on any card background, tap Bug.
Open the app →
61-03 · AI / Ask (confirmed Playwright)
AI chat Resident mode toggle reads cool teal — not warm coral/amber
pending

The active "Resident" mode toggle used from-primary-500 to-accent-500 — the accent token is warm coral/amber-tan, so it read as a warm gradient on AI chrome. Fixed to from-primary-500 to-primary-600 (cool teal). The Agent toggle (amber) is intentionally kept — that's a categorical role color.

What to walk →
  1. Open 192.168.1.171:5173, tap Explore tab → tap the AI / Ask button or the sparkle icon.
  2. The Resident mode toggle (when active/selected) should be a cool teal gradient — no warm amber or coral tint.
  3. The Agent toggle (if visible) stays amber — that's intentional categorical color.
  4. Expected: Resident toggle = cool teal. If it reads warm/coral, tap Bug.
Open the app →
61-04 · Listings / Explore / Profile / Map (confirmed Playwright)
Listings detail, Explore, Profile/Me, and Map chrome read navy→teal→sky — semantic colors and map pins intact
pending

Playwright-confirmed: Listings CTA gradient teal, score bars teal; Explore header + chips teal; Profile hero teal, progress bar teal; Map chrome teal. Exemptions intact: "Active" badge green, rating stars amber, like-heart red, map pins category-colored.

What to walk →
  1. Open 192.168.1.171:5173.
  2. Explore tab → find a listing and open its detail. Header, CTA button ("Message Emma…"), and score progress bars should be teal. The like-heart should still be red/pink. The "Active" status badge should be green.
  3. Me tab: hero header reads navy→teal→sky; progress bar teal; active tab underline teal.
  4. Map view (Feed → Map toggle or Explore map): map chrome (cluster bubbles, legend) teal; pins keep category colors (not all teal).
  5. Expected: all brand chrome teal, semantic + map-pin colors unchanged. Tap Bug with the surface name if anything reads purple/indigo.
Open the app →
61-05 · Messaging / Drawers / Developments / Settings (confirmed Playwright)
Drawers, messaging header, developments, and settings all read navy→teal→sky
pending

Playwright-confirmed: all gradient hero drawers navy→teal, messaging header teal, builder-claim drawer teal, settings toggles teal. Neighborhood selector hero teal. Calendar event-category colors exempt (categorical).

What to walk →
  1. Open 192.168.1.171:5173.
  2. Tap the messages icon (header) → Inbox should have a navy→teal header and teal active tab.
  3. Tap any post or person card to open a drawer — the gradient hero header in the drawer should read navy→teal→sky.
  4. Open Me tab → Settings: toggle switches should be teal when on.
  5. On the Feed, tap into a Development card (if visible) — builder-claim drawer hero should be navy→teal.
  6. Expected: all hero headers + toggles teal. Tap Bug with the surface name if anything reads purple.
Open the app →
61-06 · FOUNDER TASTE CALL · Messaging sent bubble
Sent message bubbles: Coastal TEAL (current) vs legacy semantic BLUE — your call
decision

Phase 60 deliberately recolored sent bubbles to the brand teal gradient (bg-gradient-brand-r). Received bubbles are slate-sky, so sent/received distinction is preserved (teal vs pale sky). The Phase 61 UAT flagged this because messaging typically uses semantic blue for "you" bubbles (iMessage, WhatsApp). This is NOT a leak — it's a design judgment. No auto-change was made.

What the two options look like:
Option A (current): sent = Coastal teal gradient → brand consistency, but departs from the universal "blue = you" convention.
Option B: sent = semantic blue (#3b82f6 or similar) → familiar iMessage-style, but interrupts the Coastal Slate palette in the thread.
What to walk →
  1. Open 192.168.1.171:5173, tap the messages icon in the header.
  2. Open any conversation thread (Personal or Professional).
  3. Look at the sent bubbles (right-aligned, your messages) — they currently read navy→teal→sky (Coastal brand gradient).
  4. Decide: does teal feel right for sent messages, or would you prefer the classic semantic blue?
  5. Tap ✓ Tested if teal is fine (no change needed), or ✗ Bug and write "restore semantic blue" if you want the classic look.
Open the app →
61-07 · MANUAL CONFIRM · Agent dashboard
Agent dashboard IntroRequestsList card background reads slate-neutral — no warm violet/pink tint
manual

The agent-dashboard IntroRequestsList had a warm tint (#faf8ff → #fdf2f8) that Phase 61 fixed (commit c67748a). This surface is gated behind the agent/broker role — the Playwright walk runs as a resident so it couldn't screenshot it. The fix is grep-confirmed clean (faf8ff | fdf2f8 = 0 hits in src/), but an on-device confirm in agent role is the final sign-off.

What to walk →
  1. Open 192.168.1.171:5173.
  2. Switch to agent/broker role (demo role switcher, or via the Me tab if there's a role toggle).
  3. Navigate to the Agent DashboardIntro Requests section.
  4. The card background for intro-request rows should be cool slate-neutral — no warm violet/pink tint.
  5. Expected: neutral/cool card background. If you still see a warm pink or violet tint, tap Bug.
Open the app →
61-08 · Map popup card + exemptions sign-off
Map popup card reads brand teal — and category/semantic colors everywhere read their intended color
pending

Map pins were verified category-colored in the headless walk, but the popup CARD that appears when you tap a pin wasn't opened headless. This card should follow brand (teal header/CTA). Also: a final sweep confirming semantic/categorical colors still read their meaning — hearts red, success green, warnings amber, event-type category colors intact.

What to walk →
  1. Open 192.168.1.171:5173, tap Explore → open the Map view.
  2. Tap any map pin — a popup card should appear. Its header/CTA should read teal (brand), while the pin itself keeps its category color.
  3. On the Feed: tap "like" on any post → heart should turn RED (not teal).
  4. Find a warning badge (e.g. "MEDIUM" flood risk, or any amber alert) → should still be AMBER.
  5. Open Calendar → event-type colored dots/chips should keep their purple/teal/pink category identities (these encode meaning, not brand).
  6. Expected: popup card = teal brand; hearts red; warnings amber; category colors intact. Tap Bug for any surface that looks wrong.
Open the app →
Phase 60 · Just shipped · Design-pick

Original Recolor → "Coastal Slate" — color-only sweep of the original design (navy → teal → sky)

0 / 5
This is the Original Recolor track — one of the 3 parallel design explorations. It changes ONLY the color palette of the original Nabe design (the one on the pitch branch); layout, structure, type, copy, and interactions are frozen. The new palette is "Coastal Slate" — a navy #0f172a → teal #0e7490 → sky #0ea5e9 gradient replacing the old midnight-purple→black brand.
Coastal Slate is now the live app — you picked it as the working design (2026-06-07), so it's the build at 192.168.1.171:5173. The old purple original is parked (recoverable in git), so there's no side-by-side anymore — these cards are just an on-device spot-check that everything reads navy→teal→sky and nothing structural moved.
Automated already green: whole-codebase grep proves no brand-purple identity survives outside the allow-list, build passes, and 699 tests pass. These 5 cards are the on-device visual sign-off — and your call on whether Coastal Slate is the recolor you want.
60-01 · Color-only check
The live app reads navy→teal→sky everywhere — and NOTHING structural changed from the original
pending

The whole point of this track: only the hue changed. Same layout, same spacing, same type, same cards — just teal instead of purple.

What to walk →
  1. Open the app: 192.168.1.171:5173.
  2. On the Feed: header wordmark/skyline, the Right Now banner, and the active filter chips should read navy→teal→sky (no purple anywhere).
  3. Avatars should be cool teal/slate/sky.
  4. Confirm only the colors changed from the original design — layout, type, spacing, and card structure are untouched.
  5. If anything other than color moved, tap ✗ Bug and say which surface.
Open the app →
60-02 · Glow fix (the "green banner")
Right Now banner + promo cards glow COOL sky — not the old green/amber tint
pending

This was your repeated complaint: the decorative amber/violet "glow" blobs layered over the banner turned green on teal. They were hunted down and recolored to cool sky.

What to walk →
  1. Open 192.168.1.171:5173, look at the Right Now banner at the top of the Feed.
  2. The soft glow over the gradient should read cool blue/sky — no green cast, no muddy amber.
  3. Scroll for other promo/hub banner cards (World Cup hub, developments banner, photo-surge banner) — confirm their glows are also cool.
Open the app →
60-03 · Map pins exempt
Map pins keep their category colors (legibility) — only the brand map surfaces recolored
pending

Per your direction, category-coded map markers stay colorful for legibility. The brand frame around the map (cluster bubble, legend, preview) recolored to teal.

What to walk →
  1. Open 192.168.1.171:5173 and open the Map (Feed → "Map" toggle, or the Explore map).
  2. Confirm the category pins/markers keep their distinct colors (food, events, developments, etc.) — they should NOT all be teal.
  3. Confirm the map's brand chrome (cluster bubbles, legend, any gradient header/preview) reads teal, not purple.
Open the app →
60-04 · WC-Hub zinc theme
The World Cup Hub "stadium" dark zinc theme is intact — not teal-washed
pending

The WC-Hub V2 zinc "stadium" surface is a deliberate dark theme, exempt from the recolor. It should look exactly as before.

What to walk →
  1. Open 192.168.1.171:5173 and open the World Cup Hub (the "Right Now" World Cup 2026 banner → tap in).
  2. Confirm the dark zinc "stadium" surface is unchanged — dark/charcoal, not recolored teal.
  3. This surface should look structurally identical to the original — only the hue changed.
Open the app →
60-05 · Semantic colors
Hearts still RED, success GREEN, warnings AMBER, sent message-bubbles BLUE
pending

Status/meaning colors are NOT brand colors — they stay put so the app stays readable. Only the brand identity went teal.

What to walk →
  1. Open 192.168.1.171:5173.
  2. On the Feed, "like" a post — the heart should be RED (not teal).
  3. Find a success state (e.g. "Resolved" / saved confirmation) — still GREEN; a warning badge (e.g. "MEDIUM") — still AMBER.
  4. Open Messages → a conversation — your sent bubbles should still be BLUE.
  5. The "love" reaction stays pink (semantic, like the heart) — that's intended, not a leak.
Open the app →
Phase 57 · Just shipped

Explore + Vault Redesign — single-page Explore, unified headers, Real Estate section, Local Spots, Vault mixed-size cards, feed diversity, profile view-as

0 / 13
Phase 57 replaced the Phase-56 bucket-FILTER Explore with a single lively scrolling page where everything is visible (nothing hidden behind filters). It also unified Explore and Vault under a shared brand header, added a consolidated Real Estate section, combined Local Spots into one buzzy section, upgraded Vault's topic-collection rows into mixed-size cards, diversified the Williamsburg feed lead block, and extended the profile view-as toggle to a 3-way mode. Walk these on the live build: 192.168.1.171:5173. Build + 666 automated tests green; color-audit test guards brand tokens.
Key change: the 5 chips now scroll to a band (everything stays on the page); tapping "Happening" does NOT filter — it jumps you to the Happening section. All 19 canonical sections are still reachable.
Design-judgment items for founder review (built, not locked):
  • ExploreMapModule: the dark tint overlay now uses bg-gradient-brand opacity-30 and the footer uses bg-gradient-brand-b + a mask — the effect is very similar to before but test on device to confirm legibility of the "Open map" pill and label text is acceptable.
  • The "Open map" pill in ExploreMapModule now reads text-cyan-800 (dark brand purple) instead of the previous #0e7490 — these are the same actual color; this is a migration to a Tailwind class, not a design change.
57-01 · Feed diversity
First ~10 Williamsburg feed posts span at least 6 distinct types — not 4+ bridge Q&A in a row
pending

The lead block was re-curated: photo → safety → bridge-tip → event → marketplace → agent-insight → news → help/lost-pet → community → check-in. Only one bridge-moment post in the first 10.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap the Home tab (or it's the default view)
  3. Scroll through the first 10 feed cards
  4. Confirm you see a variety of card types — a photo post, a safety post, an event, a marketplace post, an agent insight, etc. (not 4+ identical bridge Q&A rows in a row)
  5. Confirm the first 10 cards are all Williamsburg / Greenpoint (no Austin, Paris, Tokyo content)
Open the app →
57-02 · Profile 3-way view-as
Profile has 3-way view-as toggle: Me (with agent) · Agent view · Resident — no agent
pending

The demo toggle at the bottom of the Me tab now has 3 modes. "Resident — no agent" hides all agent sections (Active Engagement timeline, Ask My Agent, First 30 Days, Welcome Kit, Move-In).

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap the Me tab in the bottom nav
  3. Scroll to the very bottom of the profile page — find the demo View As toggle
  4. Confirm it shows 3 modes: "Me (with agent)", "Agent view", "Resident — no agent"
  5. Tap Resident — no agent — confirm the agent-engagement sections disappear (timeline, Ask My Agent, First 30 Days, Welcome Kit, Move-In)
  6. Tap Me (with agent) — confirm the agent sections return
Open the app →
57-03 · Shared header — Explore + Vault
Explore and Vault both open with the same brand gradient header (they look like siblings)
pending

Both tabs now use the shared SurfaceHeader primitive: midnight-purple gradient, centered icon + title + subtitle + glassy search. Explore adds a "Map" pill top-right; Vault does not. They must not visually drift.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap the Explore tab — notice the dark gradient header with "Explore" and a subtitle + search bar
  3. Tap the Vault tab (BookOpen icon in the nav) — the header should look like Explore's: same dark gradient, same layout (icon + "The Vault" + subtitle + search bar)
  4. Compare: they should look like siblings from the same design — NOT one drab gray and one colorful
  5. Confirm Explore has a "Map" pill top-right; Vault does NOT have that pill
Open the app →
57-04 · Explore jump-nav chips scroll-to (not filter)
5 sticky chips scroll to a section band; everything stays on the page; active chip follows scroll
pending

Below the Explore header is a sticky row of 5 short chips: Happening · People · Local · Homes · Economy. Tapping a chip SCROLLS to that section — it does NOT filter/hide everything else. The active chip highlights as you scroll through sections.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore — below the gradient header you should see a sticky chip row: Happening · People · Local · Homes · Economy
  3. Tap Homes — the page should scroll smoothly to the Real Estate section (nothing disappears)
  4. Tap Economy — it should scroll to Neighbor Economy at the bottom
  5. Tap Happening — should scroll back to the top section
  6. Manually scroll down through the page — the active chip should update as you pass through each section heading (Happening → People → Local → Homes → Economy)
Open the app →
57-05 · Stories rail, map card, Trending, Seasonal, Featured collections
Explore opens with a live stories rail, a prominent map preview card, Trending (not "Rising"), seasonal cards, and a Featured collections carousel
pending

These 5 elements all appear in the Happening band near the top of Explore: a horizontal stories rail (round brand-ringed bubbles of live spots + active developments), a full-width map preview card with "Open map" pill, a "Trending" section (numbered topics), a seasonal card (cherry blossom / day-of weather), and a "Featured collections" horizontal carousel.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore
  3. Just below the header + chips row, look for a horizontal row of round bubble avatars (stories rail) — confirm bubbles show business emoji and/or development cover photos
  4. Below the stories rail, confirm a map preview card with a photo background, colored pins, and an "Open map" pill on the right — tap it to confirm it opens the full map
  5. Scroll into the Happening band — find a Trending section labeled "Trending" (NOT "Rising") with a numbered list of topics
  6. Find a Seasonal visual card (cherry-blossom or weather-aware prompt)
  7. Find a "Featured collections" heading with a horizontal scroll of editorial image cards (Best of the Waterfront, Where locals get coffee, etc.)
Open the app →
57-06 · Real Estate section
Real Estate section: Find Your Agent → Top Agents → 2-up Listing + Development → Browse / New developments CTAs
pending

The "Homes" anchor band consolidates all RE into one branded card: a Find Your Agent entry (the built intake flow), the agent leaderboard, a 2-up sample listing + development card, and two CTAs.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore → tap the Homes chip (or scroll down past People and Local)
  3. Confirm a "Real Estate" card with a dark gradient header strip appears
  4. Look for a Find Your Agent entry — tap it and confirm the intake form opens (neighborhood, beds, budget, etc.)
  5. Back out — confirm an agent leaderboard (Top Agents) is visible below
  6. Confirm a 2-column grid shows a sample Listing card and a Development card side by side
  7. Confirm two CTA buttons: Browse listings and New developments
  8. Tap "Browse listings" — confirm it switches to the Listings tab
Open the app →
57-07 · Local Spots — Hot this week + Neighbor favorites
Local band leads with "Local Spots": two strips — Hot this week (buzz-ranked cards) + Neighbor favorites (recommendation-ranked rows)
pending

The Local band's first section is "Local Spots" with a subtitle "What neighbors love — and what's buzzing now". Hot this week: horizontal cards with a buzz pill (e.g. "24 love it") and an honest discovery signal. Neighbor favorites: stacked rows ranked by recommendation count.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore → tap the Local chip
  3. Confirm the "Local Spots" heading appears with subtitle "What neighbors love — and what's buzzing now"
  4. Confirm a "🔥 Hot this week" horizontal strip with scrollable business cards, each showing a buzz pill (e.g. "24 love it" or "Buzzing") and a star rating
  5. Tap one of the Hot cards — confirm it opens a business detail drawer
  6. Below Hot, confirm a "💜 Neighbor favorites" strip with stacked rows showing business name, emoji icon, star rating, and "N recommend"
  7. Tap a Neighbor favorites row — confirm it opens the business detail drawer
Open the app →
57-08 · All 19 sections reachable
All 19 canonical Explore sections are still visible on the page (nothing hidden)
pending

The jump-not-filter approach keeps all sections on the page. Scroll from top to bottom and confirm each band contains its sections. Automated test (exploreSections.test.ts + color-audit) covers this in CI; this card verifies the visual rendering.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore — confirm the page is one long scroll (no tab-switch to see content)
  3. Happening band: Stories rail → Map preview → Trending section → Seasonal card → Featured collections → Explore other nabes (ExploreNeighborhoodMode)
  4. People band: Singles, Neighbors, Families, Groups cards
  5. Local band: Local Spots (Hot + Favorites) → Find a Pro tile → Coming soon tile → Ask section
  6. Homes band: Real Estate card (Find Agent + Top Agents + Listing/Dev + CTAs)
  7. Economy band: Micro-economy / Neighborhood challenge content
  8. Confirm you didn't have to tap a filter chip to see any of the above — just scrolled
Open the app →
57-09 · Vault mixed-size topic cards + hero + stats
Vault "Topic guides" shows mixed-size cards: first collection is a full-width image hero card; remaining collections are 2-up compact icon tiles
pending

Vault's flat one-line topic rows were replaced with an Explore-matching mixed-size card layout. The stats card (Guides / Threads / Contributors count) is preserved and still floats below the hero header.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap the Vault tab (BookOpen icon)
  3. Confirm the dark gradient header with "The Vault" + search bar appears (same design language as Explore)
  4. Just below the header, confirm a floating stats card with three numbers: Guides · Threads · Contributors
  5. Scroll down — find the "Topic guides" section (previously called "Topic Collections")
  6. Confirm the first collection renders as a full-width image hero card (cover photo with gradient overlay, collection name + emoji + counts)
  7. Confirm the remaining collections render as a 2-column grid of compact icon tile cards (emoji, name, guide count)
  8. Tap a collection card — confirm it opens the collection detail
Open the app →
57-10 · Prominent map module opens the full map
The map preview card near the top of Explore opens the full NabeMap when tapped
pending

The map card is a first-class h-32 card (not a tiny button) — a preview image, 4 colored pins, label "Explore on the map" with a subtitle, and an "Open map" pill. Tapping the card OR the pill calls onOpenMap. From the map view, a back-to-Explore button returns to the single page.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore
  3. Below the stories rail, confirm a wide map card — a photo background with colored pin dots, "Explore on the map" label, and an "Open map" pill on the right
  4. Tap the card — confirm the full NabeMap opens (interactive map with pins, category chips)
  5. Confirm there is a "← Explore" (or "← Back") button to return to the single-page Explore view
  6. Tap it — confirm you land back on the scrolling Explore page (not the old bucket hub)
Open the app →
57-11 · Brand color check
Explore and Vault headers, chips, and cards use the dark midnight-purple brand color — no bright indigo/pink gradient from earlier phases
pending

The brand is midnight-purple → black (not bright indigo → pink). Active chips, section labels, and header backgrounds should look deep/dark. Automated color-audit test guards this; this card confirms it visually on device.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore — the header gradient should look dark (deep purple → black), NOT a bright indigo/magenta/pink
  3. Tap a jump chip (e.g. "Homes") — the active chip pill should show a dark gradient (not bright indigo/pink), with white text
  4. Tap Vault — confirm same dark gradient header
  5. If you see any bright neon indigo or hot-pink gradient anywhere in the new Explore/Vault surfaces, that is a bug
Open the app →
57-12 · People band — Singles · Neighbors · Families · Groups
The People band shows singles, neighbors, families, and groups content without tapping a filter
pending

The People anchor band re-homes MeetPeopleView — singles discovery, neighbor matching, families, and groups — all visible on the page as you scroll through.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore → tap the People chip
  3. Confirm the page scrolls to a Meet People section header
  4. Confirm you can see singles, neighbors, families, and/or groups content in that band (open-to-meeting toggle, neighbor profiles, group cards)
  5. Confirm you did NOT have to tap a separate chip/filter to reveal this content — it's all on the page
Open the app →
57-13 · Explore header "Map" pill also opens the full map
The "Map" pill in the Explore gradient header opens the full map view (same as tapping the map preview card)
pending

Two ways to open the Explore map: the header "Map" pill (top-right corner of the gradient header) and the large map preview card below the stories rail. Both should open the same NabeMap view.

What to walk →
  1. Open the app: 192.168.1.171:5173
  2. Tap Explore
  3. In the dark gradient header, find a "Map" pill in the top-right corner (with a map icon)
  4. Tap it — confirm the full NabeMap opens
  5. Use the back button to return to Explore — confirm you land back on the scrolling single page
Open the app →
Phase 56 · Just shipped

Explore Redesign — hub landing, bucket filters & shorter scroll

0 / 11
The complete Phase 56 walk — Explore was rebuilt to fix the core complaint ("chips scroll too long, every post is a full line, endless scroll"). Explore now opens as a hub: a search/ask bar, a short curated lead mix (Happening now / Meet people / Local biz preview blocks, each with a "See all"), and a row of 5 bucket filter chipsHappening · Meet People · Local Biz & Services · Build & Permits · Neighbor Economy. Tapping a chip filters the page to that bucket (it does not jump-scroll); "See all" drills into a focused bucket view with a "< All" back link. ExploreContainer went 822 → 189 lines (decomposed). Walk these on the live build: 192.168.1.171:5173 (dev server, always current). Live-smoke-tested after execution.
How to reach Explore: open the app, tap the Explore tab in the bottom nav. The bucket chip row + the curated lead mix are at the top; the Map toggle is top-right.
⚑ Flagged for founder (judgment calls — built, not locked):
  • In Local Biz & Services, the Find-a-Service / coming-soon icon tiles use icon size 18. Decide by eye whether 16 looks cleaner — see card 56-11.
  • The pre-existing PushToast nested-button console warning is logged separately (not introduced by this phase) — noted in 56-11, no action needed for UAT.
56-01 · Hub landing
Explore opens as a hub: search/ask bar + a short curated lead mix at the top
pending

Opening Explore now lands on the ExploreHub: a search/ask bar at the very top, then a curated lead mix of preview blocks (Happening now / Meet people / Local biz & services), each capped with a "See all". It is NOT a 12-chip wall and NOT one endless stack of full-width posts.

What to walk →
  1. Open the live app: 192.168.1.171:5173
  2. Tap the Explore tab in the bottom nav
  3. Confirm the top shows a search / ask bar
  4. Below it, confirm a few short preview blocks (e.g. Happening now, Meet people, Local biz & services), each with a "See all" — not a wall of chips, not one long stack of posts
Open the app →
56-02 · Bucket chips present
Five bucket chips, labeled correctly
pending

A single row of exactly five bucket filter chips replaces the old long chip overflow row.

What to walk →
  1. On the Explore tab, find the bucket chip row near the top
  2. Confirm there are exactly 5 chips, labeled: Happening · Meet People · Local Biz & Services · Build & Permits · Neighbor Economy
  3. Confirm there is NOT a long overflow wall of 12+ chips
Open the app →
56-03 · Chips filter, not scroll
Tapping a bucket chip FILTERS the page to that bucket (it does not jump-scroll)
pending

This is the core fix. Tapping a chip swaps the page content to that bucket's view — it does NOT scroll you down one long page to a section heading.

What to walk →
  1. On the Explore tab, tap the Meet People chip
  2. Confirm the content swaps to the Meet People bucket (the chip goes active) — the page does NOT just scroll down through everything else
  3. Tap Build & Permits — confirm the content swaps again to that bucket
  4. Tap back to Happening — confirm it returns to the Happening content
Open the app →
56-04 · "See all" drill-in
"See all" drills into a focused bucket view, with a back link
pending

From a hub preview block, "See all" opens that bucket's full view. A "< All" back link returns you to the hub.

What to walk →
  1. On the Explore hub, find a preview block (e.g. Happening now) and tap its "See all"
  2. Confirm it drills into that bucket's focused view
  3. Confirm there is a "< All" back link at the top
  4. Tap the back link — confirm you return to the hub landing
Open the app →
56-05 · Build & Permits grid
Developments & permits show as 2-up grid cards (2 per row), not big stacked posts
pending

A key density fix: in Build & Permits, developments and permits render as compact grid cards two-per-row, instead of full-width stacked posts that ran on forever.

What to walk →
  1. On Explore, tap the Build & Permits bucket chip
  2. Confirm developments and permits show as a 2-up grid — two compact cards per row
  3. Confirm they are NOT full-width, one-per-line stacked posts
  4. Tap a card and confirm it still opens the development/permit detail
Open the app →
56-06 · Meet People bucket
Meet People: Singles, Meet new neighbors, Families, and Groups all reachable
pending

The Meet People bucket consolidates the social features: Singles, Meet new neighbors, Families (via identity chips in Groups), and Groups.

What to walk →
  1. On Explore, tap the Meet People bucket chip
  2. Confirm you can reach Singles
  3. Confirm you can reach Meet new neighbors
  4. Confirm you can reach Families (via the identity chips in Groups)
  5. Confirm you can reach Groups
Open the app →
56-07 · Local Biz & Services bucket
Local Biz & Services: Discovery, Businesses (with filters), Find a Service, coming-soon biz, Agents, Ask, Browse-Listings CTA
pending

The Local Biz & Services bucket gathers the commerce + service surface: Local Discovery, Local Businesses (with category filters), Find a Service, coming-soon businesses, agents, Ask, and a Browse Listings CTA.

What to walk →
  1. On Explore, tap the Local Biz & Services bucket chip
  2. Confirm you can reach Local Discovery
  3. Confirm Local Businesses shows with category filters
  4. Confirm Find a Service is present
  5. Confirm coming-soon businesses and agents are present
  6. Confirm Ask and a Browse Listings CTA are present
Open the app →
56-08 · Neighbor Economy bucket
Neighbor Economy: skill sharing, tool lending, babysitting co-op, neighborhood challenge
pending

The Neighbor Economy bucket gathers the give-and-get features: skill sharing, tool lending, babysitting co-op, and the neighborhood challenge.

What to walk →
  1. On Explore, tap the Neighbor Economy bucket chip
  2. Confirm skill sharing is present
  3. Confirm tool lending is present
  4. Confirm the babysitting co-op is present
  5. Confirm the neighborhood challenge is present
Open the app →
56-09 · Map toggle
Map toggle on Explore still loads the map and toggles back to List
pending

The redesign kept the Explore Map toggle intact. Tapping it loads the Leaflet map; toggling back returns to the List/hub view.

What to walk →
  1. On the Explore tab, tap the Map toggle (top-right)
  2. Confirm the Leaflet map loads (tiles + pins)
  3. Tap the toggle back to List
  4. Confirm you return to the Explore hub/list view
Open the app →
56-10 · Overall feel
Explore feels organized and shorter to scroll than before
pending

The headline check, against the original complaint: "chips scroll too long, every post is a full line, endless scroll." Explore should now feel organized into buckets, with a short hub landing and far less endless scrolling.

What to walk →
  1. Open Explore and scroll the hub top to bottom
  2. Confirm it feels organized into buckets, not one endless stack
  3. Confirm the chip row is short (5 buckets), not a long overflow wall
  4. Confirm posts aren't all full-width single lines running on forever (grid cards where it makes sense)
  5. Gut check: does Explore feel meaningfully shorter / easier to navigate than before? Flag anything that still feels too long.
Open the app →
56-11 · ⚑ Founder judgment call (not pass/fail)
Icon-tile size in Local Biz & Services (18 vs 16), plus the logged PushToast warning
flag

Two flags to decide by eye — not a pass/fail walk. (1) In Local Biz & Services, the Find-a-Service / coming-soon icon tiles use icon size 18; decide whether 16 reads cleaner. (2) The pre-existing PushToast nested-button console warning is logged separately — it was NOT introduced by this phase and needs no UAT action; noted here only so it's not a surprise in the console.

What to walk →
  1. On Explore, tap the Local Biz & Services bucket chip
  2. Look at the Find a Service / coming-soon icon tiles
  3. Decide by eye: does the current icon size (18) look right, or would 16 be cleaner? Note your preference in the box.
  4. (No action needed) The PushToast nested-button warning is a pre-existing console note, tracked separately.
Open the app →
Phase 54 · Just shipped

Unified Map — filter chips, markers/bubbles & popup redesign

0 / 13
The complete Phase 54 walk — the map's new layer-first filter chips (Now / Coming / History with a chip row that swaps per layer), the three confirmed logic bugs (A / C / D), the three already-fixed "verify-only" checks, and the marker/bubble + popup repaint. Walk these on the live build: 192.168.1.171:5173 (dev server, always current). Build + 525 automated tests green; an automated mobile drive captured every screen below.
The visual proposals to react to (open on iPad): marker / bubble + popup mockup · filter-chip mockup (Variant A / B / C). These are the side-by-side "today vs proposed" boards — react to anything you don't like and it gets fixed.
How to reach the map: on the Home feed tap the floating Map button (bottom-left); the Explore tab has its own Map toggle (top-right). The Now / Coming / History segmented control + the chip row sit at the top of the map.
⚑ Flagged for founder (design-judgment calls — built, not locked; change anything by eye):
  • 3 lucide icon swaps on map markers (kept emoji everywhere else): Tips → lightbulb, Package → box, Help → life-buoy. Approve by eye or revert any.
  • Chip layout = Variant A (layer-first contextual chips) was built. Variant B (grouped + "More" sheet) / Variant C (category-first) are still on the table — see the chip mockup. The layer→chip backbone is reused if you switch.
  • Q1 — rich neighborhood-memory timeline popup is left merged into the standard popup this phase (no separate timeline UI). Flagged as possible future polish.
  • Q3 — a dedicated "Stories" toggle was NOT built (stretch). Stories got a legend entry + clickable interactive dots instead. Flag if you want the toggle.
54-1 · Chips / IA — the redesign
Layer-first chips: Now / Coming / History segmented control + a chip row that swaps per layer
pending

The old 18-chip overflow row is gone. The map now leads with a segmented Now / Coming / History control (gradient when active), a contextual label, and a chip row that shows only the chips valid for the active layer. Verified live: Now shows All / Live / Safety / Events / Tips / Help / Market / Community / Families / Singles / Meet Neighbors / Properties / Businesses / Listings; Coming shows All / Developments / Permits; History shows All / Throwbacks. No Developments chip appears on History.

What to walk →
  1. Open the live app: 192.168.1.171:5173 (Williamsburg)
  2. On the Home feed, tap the floating Map button (bottom-left)
  3. Confirm the top of the map shows a pill segmented control: Now · Coming · History (Now active = brand gradient), with a small contextual label ("Happening now") below it
  4. Confirm the chip row below shows the Now set (All, Live, Safety, Events, Tips, Help, Market, Community, Families, Singles, Meet Neighbors, Properties, Businesses, Listings) and scrolls horizontally
  5. Tap Coming — confirm the chip row swaps to just All · Developments · Permits and the label reads "Coming to the block"
  6. Tap History — confirm the chip row swaps to just All · Throwbacks (NO Developments chip), label "How it used to be"
Open the app →
54-2 · Chips / IA — no stale state
Switching layers resets an invalid chip selection back to "All"
pending

A chip selected on one layer can't strand you in an empty/stale state on another. Verified live: selecting Safety on Now then switching to History snapped the selection back to All.

What to walk →
  1. Open the map (Home → Map button), make sure Now is the active layer
  2. Tap the Safety chip — it goes gradient/active
  3. Tap the History layer segment
  4. Confirm the chip selection has reset to All (Safety is no longer offered on History, and you're not left on an empty filter)
Open the app →
54-3 · Chips / IA — icon system
Chips render lucide line-icons, not emoji
pending

The chip + layer-segment registry was migrated off emoji glyphs to lucide icon components (per DESIGN_STANDARDS). Verified live: an automated scan of every chip/segment button found zero emoji glyphs.

What to walk →
  1. Open the map and look at the chip row + the Now/Coming/History segments
  2. Confirm each chip's icon is a crisp single-color line icon (lucide) — e.g. Live = a zap/bolt, Events = calendar, Tips = lightbulb — not a colorful emoji
  3. Switch layers and confirm the same on the Coming/History chips (Developments, Permits, Throwbacks)
Open the app →
54-4 · Bug C — no out-of-layer pins
History never shows orange neighborhood-memory via a Developments selection
pending

Previously History + Developments leaked orange neighborhood-memory pins. The chip row now makes that combo unselectable (Developments isn't offered on History), and the data layer is layer-aware as a backstop. Verified live + locked by test: on History, "All" shows only throwbacks + memory — no development / permit / business pins.

What to walk →
  1. Open the map and tap the History layer
  2. Confirm there is NO Developments chip in the row (only All · Throwbacks)
  3. With All selected, confirm the pins on the map are throwback/memory pins only — no hard-hat development pins, no permit pins, no business pins
  4. Tap Throwbacks and confirm pins stay throwback/memory-only (no leak)
Open the app →
54-5 · Bug A — status-aware dev/permit
Developments & permits appear on the layer their status maps to
pending

A development/permit no longer leaks across layers. Placement is driven by status: under-construction → Now; proposed/filed/approved/opening-soon → Coming; completed/expired → History. Verified live: the Coming layer shows the hard-hat development clusters + a permit pin; the exact status→layer table is locked by a test.

What to walk →
  1. Open the map, tap the Coming layer, tap the Developments chip
  2. Confirm you see hard-hat development pins/clusters (upcoming projects)
  3. Switch the chip to Permits — confirm permit pins appear (e.g. a small "…0402" permit pin)
  4. Tap the Now layer — confirm any actively-under-construction development sits here, not on Coming
  5. Tap History — confirm completed/expired items (if any) sit here, not on Now/Coming
Open the app →
54-6 · Bug D — story pin label + CTA
Story pin popup reads "Story" (not "Business"); interactive stories show "View story →", label-only dots show no dead CTA
pending

Story/camera pins used to mislabel as "Business" and showed a dead "View Full" button on non-clickable dots. Fixed: the badge now reads Story; a story with an entity shows "View story →"; a label-only story shows no CTA. A Stories legend entry was added too. The automated drive couldn't isolate a single story dot (they cluster/overlap at WB zoom) — confirm this one by eye on the device. The label + CTA logic is locked by unit tests and verified in code.

What to walk →
  1. Open the map, stay on the Now layer (stories live here)
  2. Pinch-zoom in until the clusters break apart into individual pins; find an indigo camera pin (📸)
  3. Tap it — confirm the popup badge reads Story (NOT "Business")
  4. If it's an interactive story (e.g. tied to a block/business), confirm the CTA reads "View story →" and tapping it opens the story
  5. Find a label-only story dot — confirm its popup has NO button (no dead "View Full")
  6. Open the legend and confirm a Stories entry with an indigo camera swatch is listed
Open the app →
54-7 · Verify-only — map parity
Home-tab map and Explore-tab map are identical (chips / markers / legend), across neighborhoods
pending

Already unified in Phase 51 (one NabeMap component mounted in both tabs) — this just confirms it still holds. Verified live: the Williamsburg Home map and Explore map showed the identical Variant A chip control + the same round brand markers (11 markers each); checked Paris too. The old "Explore only shows hard-hat/permit until you zoom in" complaint did NOT reproduce — both maps show the full marker set on the Now layer; that earlier report was a zoom/density perception, not a real gap.

What to walk →
  1. Open the Home map (Williamsburg) and note the chip control + the markers/clusters
  2. Go to the Explore tab, tap its Map toggle (top-right)
  3. Confirm the Explore map has the SAME Now/Coming/History control, the SAME chips, and the same round brand markers/clusters as the Home map
  4. Switch to a different neighborhood (e.g. Paris) via the header pill and repeat — Home map vs Explore map should still match
  5. Confirm the Now layer shows the full mix of markers (not just hard-hat/permit) without needing to zoom in
Open the app →
54-8 · Verify-only — one History layer
Exactly one History layer (neighborhood-memory folds in — no separate memory layer)
pending

Phase 51 merged the two history surfaces. Verified live: the segmented control has exactly three layers (Now / Coming / History) — there is no separate neighborhood-memory layer; memory pins surface under History.

What to walk →
  1. Open the map and look at the layer segmented control
  2. Confirm there are exactly three options: Now · Coming · History (no fourth "Memory" layer)
  3. Tap History → All and confirm old-timer memory + throwback pins both appear under this one layer
Open the app →
54-9 · Verify-only — Coming layer scope
Coming layer shows only developments + permits — no current/open businesses
pending

Phase 51 removed businesses from the Coming gate. Verified live: the Coming chip row offers only All · Developments · Permits — open businesses are excluded by construction.

What to walk →
  1. Open the map and tap the Coming layer
  2. Confirm the chip row is only All · Developments · Permits — no Businesses chip
  3. With All selected, confirm the pins are upcoming developments + permits — no current/open restaurant/shop pins
Open the app →
54-10 · Bubbles — marker repaint
Markers are consistent round bubbles; urgency tiers visible (emergency pulses, everyday calm); legend matches
pending

Emoji glyphs were kept (3 lucide swaps — see flags), colors harmonized (3 clashing hexes fixed), sizes brought onto one round-bubble scale, and ONE urgency system spans content + hotspot pins: calm everyday dots, a subtle ring for medium, an animated pulse + size bump for emergency/safety. Verified live: markers render as round brand bubbles; the nabe-marker-pulse keyframe is defined; compare against the bubbles mockup.

What to walk →
  1. Open the map on the Now layer and look at the individual pins (zoom in to break clusters)
  2. Confirm pins are consistent round bubbles with a colored ring + glyph (not a grab-bag of squares/sizes)
  3. Find a safety/emergency pin — confirm it's bigger/bolder and has an animated pulse ring; everyday pins (events, tips) sit calm
  4. Open the legend — confirm the swatches/labels match the markers on the map (including the Stories entry)
  5. Compare to the bubbles mockup and flag any color/size you don't like
Open the app →
54-11 · Bubbles — unified popup
One on-brand preview card: gradient CTA, category color as accent only, consistent across types (permits = light, no CTA)
pending

The three old inline-styled popups are unified into one MapPreviewCard: brand-gradient header band + brand-gradient CTA (the old hardcoded purple is gone), category color demoted to a small accent dot. Verified live: a tapped content pin showed the new card with the bg-gradient-brand "View Full →" CTA (no #7C3AED); a permit pin showed the light card with NO CTA and "Tap-outside to dismiss · no drawer".

What to walk →
  1. Open the map (Now layer) and tap a content pin (e.g. a throwback/event)
  2. Confirm the popup is a card with a brand-gradient header strip, a small category-color accent dot, photo thumb, title + description, and a brand-gradient CTA button (not flat purple)
  3. Tap a few different pin types (post, business, hotspot) — confirm they all use the same card shape/treatment
  4. Go to Coming → Permits, tap a permit pin — confirm a LIGHT card with NO CTA button ("Tap-outside to dismiss · no drawer")
  5. Flag anything off about the card style against the bubbles mockup
Open the app →
54-12 · Bubbles — hybrid tap (B4)
Rich pins (listing / property / business / development) open the drawer on a single tap; stories & permits show the quick popup
pending

Replaces the old uniform two-step (tap → popup → "View Full" → drawer). Rich content jumps straight to its full entity drawer; light content (story, permit) keeps a quick preview popup. The automated drive couldn't isolate a single rich pin (they cluster at WB zoom) — confirm by eye on device. The routing predicate (property/business/development = direct-open; story/permit = popup) is exhaustive and locked by a unit test.

What to walk →
  1. Open the map (Now layer), tap the Listings chip, pinch-zoom in to break clusters into single pins
  2. Tap a property/listing pin — confirm it opens the full listing drawer directly, with NO intermediate popup flash
  3. Do the same with a Businesses pin and a development pin (Coming → Developments) — both should open their drawer on the single tap
  4. Now tap a story dot or a permit pin — confirm those show the quick preview popup instead (not a direct drawer)
Open the app →
54-13 · Bubbles — cluster family
Cluster bubbles are on-brand and consistent (content vs hotspot clusters read as a sibling family)
pending

The two cluster bubbles were restyled into one family on a shared size ladder: content clusters use the dark brand gradient, hotspot clusters a red gradient + soft glow, both with the same white border/shadow/font. Verified live: zooming out produced consistent brand-gradient cluster bubbles.

What to walk →
  1. Open the map and pinch-zoom OUT so pins collapse into clusters
  2. Confirm content clusters are dark brand-gradient circles with a count, clean white border
  3. If hotspots are present, confirm their clusters are the red-glow sibling (same size scale + treatment, just a different accent)
  4. Confirm the look matches the cluster panel in the bubbles mockup; flag anything off
Open the app →
Phase 55 · Just shipped

AI Re-Imagining — Ambient Intelligence Layer

0 / 14
The complete Phase 55 walk — every new AI capability surfaced in this phase. Four pillars: ACTS (agentic confirm flow), SEES (vision/image input), EVERYWHERE (inline Ask-AI triggers + AI briefing narrative), REMEMBERS (session preferences + personalization). Plus model upgrade to claude-sonnet-4-6. Walk these on the live build: 192.168.1.171:5173 (dev server, always current). Build + 471 automated tests green. DESIGN_STANDARDS sweep: all 15 components PASS.
Note on agentic actions (A-series): The confirm-gate flow fires when Claude's tool_use returns from the live API. This requires VITE_ANTHROPIC_API_KEY in .env.local. If no key is set, the scripted fallback runs instead (no action-proposal card appears). Scripted paths (snap-building, snap-apartment, plan-weekend) work with or without a key.
Open question for founder (non-blocking): Set VITE_ANTHROPIC_API_KEY for live wow-moments, or rely on scripted fallback for the demo? Both paths are production-quality.
A1 · Pillar A — Agentic actions
Action-proposal card appears and confirm → result flow works (live API)
pending

When a live Claude response includes a tool_use block, an action-proposal card renders (purple AI card, "Proposed Action" label, Confirm / Edit / Cancel buttons). Confirming executes the tool against mock state and shows an action-result card with a navigable link. Requires VITE_ANTHROPIC_API_KEY.

What to walk →
  1. Open the live app: 192.168.1.171:5173
  2. Tap the Sparkles AI bubble (bottom right)
  3. Type a request that triggers a tool: "RSVP me to the next event in Williamsburg" or "Set up a saved search: 2BR under $4K in Williamsburg"
  4. Expect: an action-proposal card with a warm violet gradient, "Proposed Action" header, detail rows showing the tool inputs, and three buttons: Confirm / Edit / Cancel
  5. Tap Confirm — expect: the card switches to a green "Confirmed" badge + an action-result card below it ("Done" header + summary text)
  6. If the result has a navigable artifact (event, saved search, post), expect a "View it" button — tap it and verify navigation opens the right entity
  7. Try Cancel on a second request — expect: the proposal card turns gray with a strikethrough description and a "Cancelled" label
Note: requires VITE_ANTHROPIC_API_KEY set in .env.local. Without a key, the chat falls back to the scripted mock path (no tool_use).
A2 · Pillar A — Scripted path (works without key)
"Plan my weekend in Williamsburg" prompt card fires the neighborhood-vibe scenario
pending

The welcome screen's "Plan my weekend in Williamsburg" card triggers the scripted neighborhood-vibe scenario (not a live API call). Renders listing cards, community data, events, and follow-up chips. Works with or without API key.

What to walk →
  1. Open the live app and tap the AI bubble
  2. Confirm welcome screen shows 4 prompt cards: "Plan my weekend in Williamsburg", "Snap a building for Nabe intel", "Find me a 2BR under $4K", "What does $3,500/mo get me?"
  3. Also confirm 3 capability pills below the welcome bubble: Plan, See, Find (in violet/pink/indigo)
  4. Tap "Plan my weekend in Williamsburg"
  5. Expect: AI responds with the neighborhood-vibe scripted scenario — rich Williamsburg intel, listing cards, transit info, follow-up chips
  6. Tap a follow-up chip and verify further scripted steps render
B1 · Pillar B — Vision / snap-building
"Snap a building for Nabe intel" scripted flow renders building score + tenant intel
pending

The "Snap a building" prompt card triggers the snap-building scenario. Scripted path renders nabe-data card with building score, tenant review summary, noise/safety, transit hint, and nearby listings. Works with or without API key.

What to walk →
  1. Open the AI drawer (Sparkles bubble)
  2. On the welcome screen, tap "Snap a building for Nabe intel"
  3. Expect: AI responds with a Nabe data card — building score (e.g. 87/100), tenant review summary, noise level, transit info (L train distance), and 2-3 nearby listing compact rows
  4. Tap any listing row — expect entity navigation to the listing detail drawer
  5. Return to AI drawer via re-open — confirm scroll position is preserved
B2 · Pillar B — Vision / snap-apartment
Typing "snap apartment" or attaching a photo triggers the snap-apartment scenario (AI-drafted listing)
pending

The snap-apartment scenario fires when the user types a message containing "snap" + "apartment/interior/room" keywords OR attaches an image. Scripted path renders an agent-draft card with a full listing description.

What to walk →
  1. Open the AI drawer
  2. Type: "snap my apartment" or "photograph this room for a listing" and send
  3. Expect: AI responds with the snap-apartment scripted scenario — an agent-draft card with a full listing description (Williamsburg 2BR, exposed brick, hardwood floors, building amenities, agent-style commentary)
  4. Alternatively: tap the camera icon in the chat input, attach any photo, send — same scripted snap-apartment flow fires
  5. Confirm the agent-draft card shows the draft text, "Copy" + "Send" buttons, and a "Nabe" badge
B3 · Pillar B — Camera / file-picker affordance
Camera button in chat input opens file picker; attachment preview strip shows; can be removed
pending

A camera icon sits left of the chat textarea. Tapping it opens the OS file picker (rear camera on device). After selecting an image, a preview strip appears above the input showing the file type + name. An X dismisses it.

What to walk →
  1. Open the AI drawer and look at the chat input bar at the bottom
  2. Confirm a camera icon button appears to the LEFT of the text input (circular, neutral border)
  3. Tap the camera icon — confirm the OS file picker opens
  4. Select any image — confirm a preview strip appears above the input: shows file format badge (e.g. "JPEG") + file name + size
  5. Confirm an X button on the preview removes the attachment
  6. Attach a photo and send (no text needed) — confirm the send button activates when only an image is attached
C1 · Pillar C — Inline Ask-AI trigger
Listing cards have "Ask AI about this" pill that opens concierge pre-loaded with listing context
pending

Each listing card in the Listings tab has an "Ask AI about this" pill at the bottom. Tapping it opens the Nabe AI drawer with a preloaded message referencing the listing entity tag.

What to walk →
  1. Open the app and go to the Listings tab (via Explore or direct nav)
  2. Scroll to any listing card — confirm "Ask AI about this" pill appears at the very bottom of each card (violet gradient pill, Sparkles icon)
  3. Tap the pill (not the card itself) — confirm it does NOT open the listing detail drawer; instead the AI drawer opens
  4. Confirm the AI chat starts with a message like "Get the Nabe take on [listing reference]" — the concierge answers with Nabe data about that specific listing
  5. Verify the pill tap stops propagation: tapping the pill should NOT also open the listing drawer
C2 · Pillar C — Inline Ask-AI on listing detail
Listing detail drawer has "Ask AI about this listing" pill below the action buttons row
pending

Inside the listing detail drawer, an "Ask AI about this listing" pill sits just below the action buttons (Save, Share, Compare, Agent) and above the Proactive Nudges. Tapping opens the AI drawer with the listing ID preloaded.

What to walk →
  1. Open any listing detail (tap a listing card, or via Listings tab)
  2. Scroll past the photo carousel and action buttons row
  3. Confirm "Ask AI about this listing" pill appears (violet gradient, Sparkles icon, centered)
  4. Tap it — confirm AI drawer opens and starts a response about the listing
  5. Verify: listing detail drawer closes first, AI drawer opens (they don't stack)
C3 · Pillar C — Inline Ask-AI on event cards
Event cards in the feed have "Ask AI about this event" pill below the RSVP buttons
pending

Event-type feed posts now have an "Ask AI about this event" pill at the bottom of the event content block (below RSVP Going/Interested buttons). Tapping deep-links into the AI drawer with event title + venue preloaded.

What to walk →
  1. Open the Home feed (Feed tab)
  2. Scroll to find an event card (purple category badge like "Community" or "Music", calendar/location details, RSVP buttons)
  3. Confirm "Ask AI about this event" pill appears below the Going/Interested buttons
  4. Tap the pill — confirm AI drawer opens with event context ("Tell me about this event: [title] at [venue]")
  5. Confirm the tap stops propagation — does NOT also open the event/post detail
C4 · Pillar C — AI narrative in morning briefing
Morning Briefing shows an AI-generated narrative at the top + "Ask Nabe AI for details" footer button
pending

The Morning Briefing drawer now has two AI additions: (1) a small violet narrative bar at the top with a Sparkles icon and italic AI-voice copy tailored to the current neighborhood + time of day; (2) an "Ask Nabe AI for details" footer button that opens the AI concierge pre-loaded with a briefing context prompt.

What to walk →
  1. From the Home feed, tap the briefing split-bar (left half, "Morning Briefing" / "Today So Far" / "Evening Briefing" depending on time of day)
  2. Confirm the drawer opens with the Variant C gradient hero header
  3. Confirm a small AI narrative bar appears near the top — violet-to-pink gradient background, Sparkles icon, italic text in sky-800 referencing a neighborhood-specific event or forecast (e.g. for Williamsburg: "Jazz Night at Devocion + rain forecast tonight…")
  4. Scroll to the bottom of the drawer and confirm "Ask Nabe AI for details" footer button (violet tint, Sparkles icon, indigo-600 text, arrow →)
  5. Tap it — confirm it closes the briefing AND opens the AI drawer pre-loaded with "Give me the full briefing breakdown for today"
C5 · Pillar C — Resident proactive cards
Resident proactive context cards appear in AI drawer — "Rain Saturday", events tonight, new neighbors, trending
pending

When a resident opens the AI drawer after the proactive notification fires (the notification dot on the AI bubble), the drawer shows 4 resident proactive cards: Rain Saturday, 2 events tonight, 2 new neighbors, trending neighborhood buzz. Each card has an action label that deep-links to a context-preloaded follow-up.

What to walk →
  1. Reset the chat (tap the rotate/reset icon in the AI header if a conversation is open)
  2. Switch to the Resident mode toggle in the AI header (if in Agent mode)
  3. If a red dot appears on the AI bubble, tap it to open the drawer — or just open a fresh drawer
  4. Confirm: "Here's what's happening in your neighborhood today:" introductory text + 4 proactive cards stacked below it
  5. Cards should be: "Rain Saturday — 3 indoor plans near you" | "2 events tonight you might like" | "2 new neighbors joined this week" | "Neighbors are buzzing about something"
  6. Tap the action label on any card (e.g. "Plan my weekend") — confirm the AI drawer responds with a context-aware message
C6 · Pillar C — Agent proactive cards
Agent mode still shows agent proactive cards on mode switch (Sarah follow-up, listing expiry, meeting prep)
pending

Switching to Agent mode in the AI drawer triggers proactive agent cards ("Welcome back, Emma! Here are things that need your attention"). Cards include client follow-up, listing expiry, and meeting prep. Follow-up chips "Draft response for Sarah" and "Prep my next meeting" fire scripted scenarios.

What to walk →
  1. Open the AI drawer and reset the chat
  2. Switch the mode toggle to "Agent"
  3. Confirm: the drawer shows "Welcome back, Emma!" introductory text + a set of agent proactive cards (urgent client, listing expiry, meeting prep)
  4. Confirm follow-up chips appear below: "Draft response for Sarah" and "Prep my next meeting"
  5. Tap "Draft response for Sarah" — confirm scripted agent-draft scenario fires
  6. Switch back to Resident mode — confirm the cards change back to resident proactive context
D1 · Pillar D — Session preferences / personalization
AI references earlier conversation context — "Based on what you told me earlier..." personalization works
pending

The session preferences store seeds from the Intake context (budget, neighborhood interests, intent) and accumulates facts during the conversation. On a live API path, the system prompt includes these preferences so Claude can reference them. This is a session-memory (in-memory, not persisted), so context is per-drawer-open.

What to walk →
  1. Open the AI drawer (requires VITE_ANTHROPIC_API_KEY for live personalization)
  2. Send a message mentioning a preference: "I'm looking for a 2BR in Williamsburg, budget around $4K/mo"
  3. Then ask a follow-up: "What about the commute from there?"
  4. Expect: Claude's response references your prior mention of Williamsburg + $4K without you repeating it
  5. If no API key: the scripted fallback still runs (no personalization from Claude, but the welcome message adapts to Intake context if Intake was completed)
  6. To verify the preferences store feeds the system prompt: check the network request to the API — the system prompt should include neighborhood/budget hints if Intake was filled out
Note: requires VITE_ANTHROPIC_API_KEY. Session preferences are in-memory — they reset when the page reloads.
E1 · Concierge polish — refreshed welcome
Welcome screen has new act/see/find capability pill labels + updated prompt cards showcasing new capabilities
pending

The AI welcome screen now shows: 4 resident prompt cards (Plan my weekend, Snap a building, Find 2BR, Budget explorer), 3 capability pills below the welcome bubble (Plan in violet, See in pink, Find in indigo), and a refreshed welcome message. Agent mode has 4 agent-specific prompt cards.

What to walk →
  1. Open the AI drawer (reset chat if needed)
  2. Confirm welcome bubble says "Hey! I can help you find apartments, plan your weekend, or snap a building for instant Nabe intel. What would you like to do?"
  3. Confirm 3 capability pills below the welcome text: "PLAN" (violet), "SEE" (pink), "FIND" (indigo)
  4. Confirm 4 prompt cards in a 2×2 grid: Plan my weekend in Williamsburg | Snap a building for Nabe intel | Find me a 2BR under $4K | What does $3,500/mo get me?
  5. Switch to Agent mode — confirm 4 different agent-specific prompt cards appear (Draft response, Prep meeting, Client follow-ups, New listings)
E2 · Concierge polish — model upgrade + graceful fallback
Model is claude-sonnet-4-6 (not the retired claude-sonnet-4-20250514); keyless fallback works cleanly
pending

The CLAUDE_MODEL constant is now "claude-sonnet-4-6" (the old id "claude-sonnet-4-20250514" was deprecated and retires 2026-06-15). When no API key is set, the app falls back gracefully to scripted/mock responses — no crash, no blank bubble, no error message shown to the user.

What to walk →
  1. Graceful fallback (works without API key): Open AI drawer, type a free-form message like "What's the best brunch spot?", send it — expect a fallback response (scripted suggestion or mock text), NOT a blank/crashed state
  2. No error toast or broken UI should appear
  3. Scripted flows (prompt card taps) always work regardless of key
  4. Model upgrade (for founder curiosity): the automated test already verifies CLAUDE_MODEL === "claude-sonnet-4-6" — 471 tests green confirms this. No manual step needed unless you want to inspect src/services/aiService.ts line 25
C7 · Pillar C — Ask AI from the map area
A small "Ask AI" pill on the map opens the concierge pre-loaded about the active neighborhood
pending

Added post-build to close the Pillar-C "map area view" gap. On the map view a small Sparkles "Ask AI" pill sits near the bottom-center with the active neighborhood name; tapping it opens the AI drawer already asking what's happening there right now.

What to walk →
  1. Open the map view (any neighborhood)
  2. Find the "Ask AI" pill near the bottom-center, above the tab bar
  3. Tap it — confirm the AI drawer opens asking about that neighborhood right now
E3 · Fix — "why two?" duplicate entry point
Only one AI bubble on the feed now — the "Ask The Nabe AI" teaser above it is gone
pending

Your 2026-05-29 note: "the AI bubble to open it, and right above it an Ask the Nabe AI thing — why two?" Removed the redundant first-use tooltip pill. The bubble is the single global AI entry point; proactive nudges now show as the bubble's pulse + in-chat cards, not a second floating button.

What to walk →
  1. Open the Home feed
  2. Look at the bottom-right AI bubble
  3. Confirm there is no second "Ask The Nabe AI" pill floating above it
Phase 53 · Just shipped

UAT Fix Pass 3 — every bug, one card each

0 / 85
The complete Phase 53 walk — every fix from this pass, one tap-to-test card each (not a highlights subset). Walk these on the frozen build → 192.168.1.171:5174, refreshed this session to include all Phase 53 fixes. Build + 304 automated tests green. Each card's "What to walk →" steps were verified against the current live build.
📱 CHECK ON DEVICE = can't be confirmed on desktop — check on the iPhone/iPad (9 items: A1, A5, B3, B4, F1, F2, J6, M2, ON1).
🟡 DECISION — confirm = decided autonomously while you were away (reversible) — just confirm you agree (4 items: Chat/Discussion separate, bridge moments, push-toast tap, heatmap live buttons).
Cards marked "was already correct" were re-verified by driving the live app (a prior phase claimed them, you doubted them) — they hold; just confirm.
A · Top nav / header + safe-area
Header stays pinned everywhere; sits below the notch.
A1 · re-verify
Top bar stays pinned below the notch in every section
pending
📱 CHECK ON DEVICE

You reported the top bar collapsing / falling below the notch on device. On desktop the header is unconditionally pinned (sticky, top 0) — confirmed live, no collapse state exists in the code. The notch behavior is iOS-only: viewport-fit=cover + safe-area padding shipped.

What to walk →
  1. Open the app on the iPhone
  2. Scroll the Home feed, open the map, open Messages, switch tabs
  3. Confirm the top bar stays pinned at the top in every section — never collapses or slides under the notch
Open the app →
A2 · fixed (logic)
Tapping a filter chip no longer collapses the top bar
pending

You reported: selecting a filter chip collapsed the top bar and it stayed collapsed across other tabs until refresh. Driven live — no header-collapse state exists; tapping a chip then switching Home→Explore→Home keeps the header pinned (top 0, height 63).

What to walk →
  1. On Home, tap a filter chip (e.g. a category)
  2. Switch to Explore, then back to Home
  3. Confirm the top bar is still fully visible the whole time — no collapse that persists across tabs
Open the app →
A3 · fixed (logic)
Opening the map keeps the top nav (not just the red banner)
pending

You reported the top nav collapsing to only the red urgent banner when opening the map / toggling list↔map. Re-verified live: header stays pinned with the bottom nav present through the list↔map toggle.

What to walk →
  1. On Home, open the map
  2. Toggle between list and map a few times
  3. Confirm the full top bar stays pinned each time (not just the red urgent banner)
Open the app →
A4 · fixed (logic)
The top header persists on a listing page
pending

You reported the top header disappearing on a listing page. Re-verified live: opening a listing keeps the header pinned at the top.

What to walk →
  1. Open a listing (Listings tab → tap a listing, or a listing card in the feed)
  2. Confirm the top header is still present at the top of the listing
Open the app →
A5 · re-verify
Top banner sits below the status bar; logo clears the Dynamic Island
pending
📱 CHECK ON DEVICE

You reported the banner cutting into the battery/signal area and the logo clipped by the Dynamic Island. The header now pads for the safe-area inset and paints white up under the status bar — an iOS-only behavior.

What to walk →
  1. Open the app on a notch / Dynamic Island iPhone
  2. Confirm the 'Nabe' wordmark + skyline logo sit fully below the status bar — not clipped by the island
  3. Battery / signal indicators stay clearly visible above the banner
Open the app →
B · Feed scroll / pull-to-refresh / tap-to-top
Only the feed scrolls; PTR spinner restored; tap header to top.
B1 · fixed (was never built)
Pull-to-refresh shows a spinner again
pending

You reported pull-to-refresh leaving a blank gap with no spinner. There was actually no pull-to-refresh built at all — a new one was added: pulling past the threshold shows a spinning icon inside the feed, then resolves.

What to walk →
  1. On the Home feed at the very top, pull down
  2. Confirm a spinning refresh icon appears (inside the feed area, not a blank gap)
  3. Release → the spinner resolves and the feed returns to top
Open the app →
B2 · built
Tap the top of the screen to jump back to the top of the feed
pending

You asked to build 'tap the top to return to the top of the feed.' Tapping the header wordmark/logo now smooth-scrolls the active feed back to top (verified: scrollTop 600 → 0).

What to walk →
  1. On the Home feed, scroll down a few screens
  2. Tap the 'Nabe' wordmark / skyline logo at the very top
  3. Confirm the feed smooth-scrolls back to the top
Open the app →
B3 · re-verify
PTR spinner renders below the locked header; drag doesn't pull the bottom bar
pending
📱 CHECK ON DEVICE

You reported the spinner rendering above the locked top banner and dragging pulling the bottom bar past the fold. The gesture is now bound to the scroll container only (never the page body) and arms only at the top — an iOS-only behavior to confirm on device.

What to walk →
  1. On the iPhone Home feed, pull down at the top
  2. Confirm the spinner appears BELOW the locked top banner (not above/over it)
  3. Confirm the locked bottom tab bar does NOT get pulled past the fold while dragging
Open the app →
B4 · re-verify
Only the feed scrolls — not the whole page / header / bottom bar
pending
📱 CHECK ON DEVICE

You reported intermittent whole-page scrolling (header + bottom bar moving) and sometimes being unable to scroll down. The scroll container now keeps overscroll contained — an iOS touch behavior to confirm on device.

What to walk →
  1. On the iPhone Home feed, scroll up and down briskly several times
  2. Confirm only the feed content moves — the top bar and bottom tab bar stay put
  3. Repeat a few times to confirm it's not intermittent
Open the app →
C · Bottom nav / FAB overlap
Chip row + AI FAB clear the bottom nav; FAB can't block Me.
C1 · fixed
Map filter-chip row + AI FAB clear the bottom nav
pending

You reported the map filter-chip row and the AI FAB being cut off by the bottom nav. The page bottom padding + FAB lift now account for the safe-area inset (verified: FAB bottom clears nav top).

What to walk →
  1. On Home, open the map
  2. Confirm the filter-chip row above the bottom nav is fully visible (not cut off)
  3. Confirm the AI bubble (FAB) sits clear of the bottom tab bar
Open the app →
C2 · confirmed intended
Bottom nav hidden on a listing page is intended
pending

You flagged the bottom nav disappearing on a listing page. This is intended — the listing detail is a focused full-screen sheet with its own 'Message [agent]' CTA bar; the top header is still present. Confirm it reads as intentional, not broken.

What to walk →
  1. Open a listing
  2. Confirm the bottom tab bar is gone but the listing has its own action/Message bar at the bottom and the top header is still present
  3. Close the listing → the bottom tab bar returns
Open the app →
C3 · already handled
Expanded AI bubble can't block the Me tab
pending

Found in a live hunt: the expanded 'Ask The Nabe AI' card could overlap content / intercept the Me-tab tap. Confirmed handled — the bubble container is click-through except the button, and opening it hands off to a drawer.

What to walk →
  1. Tap the AI bubble to expand it
  2. Confirm you can still tap the Me tab (the expanded card doesn't swallow the tap)
  3. Confirm the expanded chat doesn't sit on top of feed/profile action buttons
Open the app →
D · Say Hi / messaging
Back+X both return to the profile; messages persist; single drawer.
D1 · fixed
Say Hi: BOTH back arrow and X return to the profile it opened from
pending

You reported the back arrow dumping you in Messages while X returned to the profile. Now, when Say Hi was opened from a profile, BOTH back and X return to that profile (verified live).

What to walk →
  1. Open a neighbor's profile (e.g. Marcus Rivera) → tap Say hi
  2. Tap the back arrow → confirm you land back on that profile (not the Messages inbox)
  3. Re-open Say hi → tap the X → confirm you again land back on that profile
Open the app →
D2 · fixed
Say Hi message persists after close + reopen
pending

You reported a sent Say Hi message showing then vanishing — reopening showed a blank thread. Sent messages now persist per-conversation (localStorage), so they survive close + reopen (verified live).

What to walk →
  1. Open a profile → Say hi → send a message (tap a chip like '👋 Wave hi' or type one)
  2. Confirm it appears in the thread
  3. Close the conversation, then reopen Say hi for the same person → confirm your message is still there
Open the app →
D3 · re-verify
'Meet new neighbors' opens a single clean profile drawer (no doubled drawer)
pending

You reported a doubled drawer (two X's + handles, cut off at top) opening a neighbor from 'Meet new neighbors'. The browse drawer now closes before the profile opens, so it's a single clean drawer (verified live — was 2 drawers, now 1). Also fixed on Singles.

What to walk →
  1. Explore → Meet new neighbors → tap a neighbor
  2. Confirm exactly ONE drawer opens (one X, one handle) — not a doubled/stacked drawer cut off at the top
  3. Repeat from Singles → tap a single → confirm a single clean drawer
Open the app →
D4 · re-verify
Say Hi opens consistently with how messages open elsewhere
pending

You asked to confirm Say-Hi messaging is consistent with the standard message-open pattern. It now routes through the same shared open path; the back/X behavior (D1) and single-drawer (D3) are the alignment.

What to walk →
  1. Open a profile → Say hi → note how it opens (elevated above the header, with back/X)
  2. Open a normal message thread elsewhere → confirm it opens the same way
  3. Confirm closing returns you correctly in both cases
Open the app →
D5 · fixed
Messages screen no longer throws a hidden React error
pending

Found in a live hunt: a button nested inside a button in the conversation list caused a React hydration error when opening Messages. The inner chip is now valid markup — verified live: 0 console errors (was 2).

What to walk →
  1. Open Messages
  2. Confirm conversation rows render normally and the entity chip inside a row is still tappable
  3. (No visible glitch — this confirms the underlying error is gone)
Open the app →
E · Post detail
No empty Category row; action bar padded.
E1 · fixed
No empty 'Category' row on a tip post
pending

Found in screenshot 1: '💡 Local Tip → Category' rendered an empty 'Category' row when a post had no category. The row now only renders when there's an actual category.

What to walk →
  1. Open a post detail that is a tip / help post
  2. Confirm there is NO empty 'Category' label with nothing after it
  3. A tip that DOES have a category still shows it
Open the app →
E2 · fixed
Post-detail bottom action / name bar has padding
pending

You reported the author/developer-name bar sitting too close to the bottom edge. The action-bar bottom padding was increased so it has comfortable clearance.

What to walk →
  1. Open a post detail (ideally one with a broker/business 'Message [name]' CTA)
  2. Scroll to the bottom action / Message bar
  3. Confirm it isn't jammed against the very bottom edge of the screen
Open the app →
F · Development drawer — Chat vs Discussion
Disclaimer added; input/persistence/sentiment/moderation fixed.
F · decision
Chat and Discussion kept separate + disclaimer added — confirm
pending
🟡 DECISION — confirm

Decided autonomously while you were away (reversible): Chat and Discussion stay SEPARATE surfaces this pass — their bugs were fixed and a Discussion disclaimer was added. Merging the two is a structural redesign, and the disclaimer you ordered implies they stay distinct, so the merge is recommended for its own pass. Confirm you're happy keeping them separate for now.

What to walk →
  1. Open a development drawer → note the separate Chat and Discussion tabs (with the new disclaimer on Discussion)
  2. Confirm: keeping them as two distinct surfaces this pass is the right call
  3. If you'd rather merge them, that's its own redesign pass — flag it
Open the app →
F1 · re-verify
Adding a comment doesn't pull the screen up (Chat & Discussion)
pending
📱 CHECK ON DEVICE

You reported that adding a comment pulled the screen up / showed underneath, in both Chat and Discussion. The composer now uses the keyboard inset + safe-area with a fixed drawer height — an iOS keyboard behavior to confirm on device.

What to walk →
  1. On the iPhone, open a development drawer → Chat → tap the message bar
  2. Confirm the keyboard opens without pulling the whole screen up or showing empty space underneath
  3. Repeat on the Discussion tab
Open the app →
F2 · re-verify
Tapping the message bar doesn't zoom + get stuck
pending
📱 CHECK ON DEVICE

You reported the message bar zooming + distorting on tap, unable to unzoom, ending up stuck zoomed on the explore feed. This is iOS auto-zoom on small inputs — the composer now forces 16px on touch devices so iOS won't auto-zoom. Confirm on device.

What to walk →
  1. On the iPhone, open a development drawer → Discussion → tap the message bar
  2. Confirm the screen does NOT zoom in on focus
  3. Confirm you can type and dismiss the keyboard without getting stuck zoomed
Open the app →
F3 · fixed
Long-press a discussion/chat message opens moderation; long messages scroll
pending

You reported long-tap moderation doing nothing and not being able to scroll a long message. A 500ms touch long-press now opens the moderation sheet (iOS doesn't reliably fire the desktop right-click), and long messages render in full and scroll.

What to walk →
  1. Open a development drawer → Chat (or Discussion)
  2. Press and hold a message ~half a second → confirm a moderation sheet appears (Hide / Report / Block)
  3. Confirm a long message shows in full and the thread scrolls
Open the app →
F4 · built
Discussion has a disclaimer explaining what it's for
pending

You asked to add a Discussion disclaimer/info bar (you said 'add it, not a decision'). An info bar now sits at the top of Discussion explaining what it's for vs Chat.

What to walk →
  1. Open a development drawer → Discussion tab
  2. Confirm there's an info / disclaimer bar at the top explaining what Discussion is for (vs casual Chat)
Open the app →
F5 · re-verify — was already correct
Chat and Discussion don't cross-post
pending

You reported a Chat message also appearing in Discussion and vice-versa. Re-verified live: it was already correct — both directions show zero leak, and a regression test now locks it. Confirm it holds.

What to walk →
  1. Open a development drawer → Chat → post a test message
  2. Switch to Discussion → confirm your Chat message is NOT here
  3. Post in Discussion → switch to Chat → confirm that Discussion post is NOT here
Open the app →
F6 · re-verify — was already correct
You can cast sentiment in Discussion
pending

You reported no way to cast sentiment ('1 neighbor weighed in — how?'). Re-verified live: the Bullish / Neutral / Concerned cast control is present and castable in Discussion. Confirm it holds.

What to walk →
  1. Open a development drawer → Discussion
  2. Find the sentiment bar ('N neighbors weighed in')
  3. Tap Bullish / Neutral / Concerned → confirm the bar + count update with your vote
Open the app →
F7 · re-verify — was already correct
Discussion message persists; drawer height stays stable on blur
pending

You reported the drawer changing height on input blur and a Discussion message not persisting after Send. Re-verified live: a Discussion message survives Send + close + reopen, and the drawer height is fixed. Confirm it holds.

What to walk →
  1. Open a development drawer → Discussion → type a message → Send
  2. Confirm the drawer doesn't jump/resize when you tap away (blur)
  3. Close + reopen the drawer → confirm your Discussion message is still there
Open the app →
G · Calendar RSVP
RSVP note Send button now works.
G1 · fixed (real bug found)
RSVP note Send button is now clickable
pending

You reported the RSVP note Send button present but not clickable. A real bug was found (the gating compared the draft against itself, so Send never enabled) and fixed — now Send enables once you type, saves the note, and re-disables after.

What to walk →
  1. Calendar → open an event → RSVP Going
  2. Type a note in the 'Add a note' field → confirm the Send button becomes clickable
  3. Send → confirm a 'Note saved' confirmation and the note sticks
Open the app →
H · Morning briefing
Top buttons navigate; event opens event; highlight goes somewhere.
H1 · re-verify — was already correct
Briefing top buttons navigate (no dead white popup)
pending

You reported the top briefing buttons (posts / events / new neighbors) showing a white popup that didn't navigate. Re-verified live: they navigate (events → calendar, new neighbors → Explore) — no dead popup. Confirm it holds.

What to walk →
  1. Open the morning briefing
  2. Tap the events stat → confirm it navigates (to the calendar)
  3. Tap the new-neighbors stat → confirm it navigates (to Explore) — no blank white popup
Open the app →
H2 · re-verify — was already correct
Briefing event opens the event; highlight navigates
pending

You reported a briefing event opening the Calendar instead of the event, and a community highlight just collapsing the briefing. Re-verified live: an event row opens that event's detail (with RSVP); highlights navigate. Confirm it holds.

What to walk →
  1. Open the morning briefing
  2. Tap an upcoming event → confirm it opens THAT event's detail (with 'Add to your calendar'), not the calendar list
  3. Tap a community highlight → confirm it navigates somewhere real (not just a dead collapse)
Open the app →
I · Nabe Pulse
Place tap → place; person tap → profile; home pulse density + reactions.
I1 · fixed (real bug found)
Pulse: tap the place opens the place; tap the person opens the profile
pending

You reported everything in Nabe Pulse opening the profile. Re-verified live it was still broken (every row opened a profile), then fixed: each row now has a separate person tap (→ profile) and place tap (→ business). Verified: tapping 'Devocion' opens the Devocion business drawer.

What to walk →
  1. On Home, open the Nabe Pulse drawer (tap the pulse row)
  2. Tap a person (avatar / name) → confirm their PROFILE opens
  3. Tap the venue name → confirm the PLACE / business opens (not the profile)
Open the app →
I2 · re-verify — was already correct
Home pulse shows several people + inline quick-reactions
pending

You reported the home pulse showing only 1 of 4 people and missing the quick-reactions. Re-verified live: the home pulse right card already shows a 4-avatar stack ('4 live now') with inline wave / heart / celebrate. Confirm it holds.

What to walk →
  1. On the Home feed, find the Nabe Pulse row → look at the right card
  2. Confirm it shows several avatars + a 'live now' count (not just one person)
  3. Confirm inline quick-reactions (wave / heart / celebrate) are present on the pulse itself
Open the app →
J · Listings
Map=tab architecture, chip restored, save flow, scoped messaging, honest panel, city isolation. (Deeper rework = own phase.)
J1 · re-verify — was already correct
A listing from the map matches a listing from the Listings tab
pending

You reported two different listing layouts (map vs tab). Re-verified live: a map property tap → 'View Full' opens the SAME listing detail the tab uses. Confirm it holds.

What to walk →
  1. Listings tab → open a listing → note the layout
  2. Go to the map → tap a property pin → 'View Full'
  3. Confirm it's the same listing layout as the tab version
Open the app →
J2 · fixed
Listings filter chip is back on the home feed
pending

You reported the Listings filter chip removed from the home feed. It's restored — a gradient 'Listings' chip leads the home filter row and routes to the Listings tab (verified live).

What to walk →
  1. On the Home feed, look at the filter-chip row
  2. Confirm a 'Listings' chip is present
  3. Tap it → confirm it routes to the Listings tab
Open the app →
J3 · fixed
Save/heart a listing: confirmation, persists, lands under Me → Saved listings
pending

You reported the heart filling with no confirmation, the heart clearing on reload, and 'saved' listings not having a home. Now: a confirmation shows, the heart persists on reopen, and saved listings live under Me → Saved listings (separate from saved posts).

What to walk →
  1. Open a listing → tap the heart / save
  2. Confirm a confirmation appears and the heart stays filled (reopen the listing → still saved)
  3. Go to Me → confirm a 'Saved listings' section holds it (separate from saved posts)
Open the app →
J4 · fixed
Price-alert fires on ANY activity, not just price changes
pending

You asked for the alert to fire on any activity (new post, sold/rented), not only price changes. The save flow now reads 'price changes, sold/rented, or new posts' and the alert scope is locked by a test.

What to walk →
  1. Open a listing → save it / open the alert toggle
  2. Confirm the copy says it alerts on ANY activity (price changes, sold/rented, or new posts) — not price-only
Open the app →
J5 · re-verify
Ask Agent: the sent message goes to a findable thread
pending

You flagged 'where does the Ask Agent message go?' (screenshot 3). The inline Send keeps its in-place confirmation AND now offers 'View in messages' → opens a listing-scoped thread seeded with your exact question.

What to walk →
  1. Open a listing → find the agent 'Ask Agent' section → type a question → Send
  2. Confirm an inline 'question sent' confirmation
  3. Tap 'View in messages' → confirm a thread opens that references this listing and contains your question
Open the app →
J6 · re-verify
'Message [agent] about this listing' bottom bar clears the home indicator
pending
📱 CHECK ON DEVICE

You reported the listing's bottom message bar being too low / cut off. Safe-area padding shipped — an iOS-only behavior to confirm on device.

What to walk →
  1. On the iPhone, open a listing
  2. Confirm the 'Message [agent] about this listing' bottom bar isn't cut off and clears the home indicator
Open the app →
J7 · fixed
Messaging from a listing references THAT listing
pending

You reported listing messaging opening a plain message with no listing context. It now opens a thread carrying the listing reference — a 'Re: [address]' header + the listing card.

What to walk →
  1. Open a listing → 'Message [agent] about this listing'
  2. Confirm the thread shows a 'Re: [address]' header and a card for that specific listing (not a blank message)
Open the app →
J8 · fixed
'What they don't tell you' shows on the listing
pending

You reported the honest-take panel not showing on the listing. It now renders on the listing (verified live). (The visual facelift of this panel is a separate future phase.)

What to walk →
  1. Open a listing
  2. Confirm a 'What they don't tell you' honest-take section is present
Open the app →
J9 · fixed
'What they don't tell you' is positioned higher
pending

You asked for the honest-take panel to sit higher on the listing. It was raised from deep-after-Building-Insights to right after the Scores section.

What to walk →
  1. Open a listing → scroll down
  2. Confirm 'What they don't tell you' appears high up (right after the Scores), not buried near the bottom
Open the app →
J10 · re-verify (real leak found)
Listings tab shows only the active city (no cross-city leak)
pending

You reported the Listings tab showing listings from all cities. The listing DATA was already scoped — the real leak was the matched-agent card hard-coding 'Williamsburg' on a non-WB city. Fixed so the agent card derives its area from the listing's own neighborhood (verified: Tokyo/LA show zero WB strings).

What to walk →
  1. Switch to a non-NYC city (e.g. Tokyo or LA) → Listings tab
  2. Confirm the listings AND the matched-agent card reference that city — no 'Williamsburg' text leaking in
Open the app →
M · Heatmap / live look
Live buttons removed; pinch-collapse fixed. (Live-look redesign = own phase.)
M1 · built
Live buttons removed from all heatmaps
pending

You confirmed removing the 'live' buttons from all heatmaps. The on-map 'X live' badges were removed from all four city heatmaps (verified: 0 live badges on NYC/LA/Paris/Tokyo). Liveness now reads from the polygon color + tap popup.

What to walk →
  1. Open the heatmap (each city)
  2. Confirm there are NO 'X live' buttons/badges floating on the map
  3. Liveness still reads via the polygon color and the tap popup
Open the app →
M2 · re-verify
Pinch-zooming a non-WB heatmap doesn't collapse + bounce to the nabe selector
pending
📱 CHECK ON DEVICE

You reported pinch-zooming a non-WB heatmap (e.g. LA) collapsing the heat and bouncing to the nabe selector (WB didn't). Couldn't reproduce on desktop (it's a pinch gesture); the fix stops the sheet from misreading the pinch as a drag-dismiss. Confirm on device.

What to walk →
  1. On the iPhone, open a non-WB heatmap (e.g. LA)
  2. Pinch-zoom the map
  3. Confirm it does NOT collapse the heat / bounce back to the nabe selector
Open the app →
M3 · fixed (via M1)
No live dots rendering in the river
pending

You reported live dots rendering in the river instead of on the nabe. Removing the live badges (M1) removes this entirely — confirm none appear in the water.

What to walk →
  1. Open a coastal-nabe heatmap
  2. Confirm there are no live dots/badges floating in the river/water
Open the app →
M · decision
Heatmap: live buttons removed + redesign deferred — confirm
pending
🟡 DECISION — confirm

Decided autonomously while you were away (reversible): the FIX is removing the live buttons + the pinch-collapse fix; the full live/writing-live look redesign is deferred to its own phase. Confirm you're happy deferring the redesign.

What to walk →
  1. Confirm: removing the live buttons now + fixing the collapse is the right scope for this pass
  2. Confirm: the bigger 'live look' redesign can wait for its own phase
Open the app →
N · My Block + Time Machine
Both surfaced / made reachable.
N1 · built
'My Block' is discoverable
pending

You were promised ~3 ways to reach My Block and could find none. A clear 'My Block' card now sits on your own (Me) profile and opens the block detail (block chat, throwbacks, honest take, Time Machine); the map story-dot path remains a second way.

What to walk →
  1. Go to Me (your own profile)
  2. Find the 'My Block' card → tap it
  3. Confirm the block detail opens (chat / throwbacks / honest take / Time Machine)
Open the app →
N2 · fixed (real bug found)
Time Machine (1996–2026 year slider) is reachable
pending

You reported the Time Machine being buried. A real bug was found — it opened to 'Block not found' (a null id on close) so nobody could reach the slider. Fixed: it now opens with the 1996→2026 year slider.

What to walk →
  1. Open My Block (from the Me profile card)
  2. Open the Time Machine
  3. Confirm the 1996→2026 year slider appears with per-year businesses/permits/residents
Open the app →
O · Bridge moments
Question shown with its longtime-neighbor answer, tappable, pair-badged only.
O1 · re-verify (real bug found) · decision
Bridge moment: question shows with its longtime-neighbor answer attached
pending
🟡 DECISION — confirm

You reported the 'Bridge moment' badge on a lone question with the answer nowhere. Re-verified it was still broken, then fixed: the question now renders with its longtime-neighbor answer attached as a tappable 'Answered by a longtime neighbor' affordance, and only the connected pair is badged (never a lone question). DECISION (reversible): this is a tap-to-expand affordance — if you'd prefer it always-expanded or a dedicated drawer, it's a one-component change.

What to walk →
  1. On the Home feed, find a post with the 'Bridge moment' badge
  2. Confirm it's a question that has an 'Answered by a longtime neighbor' affordance attached (not a lone badged question)
  3. Tap it → confirm the longtime-neighbor's answer reveals (author + tenure + text)
  4. Confirm: are you happy with tap-to-expand, or would you prefer always-expanded?
Open the app →
P · Throwbacks / archive
Archive posts sized right; My Archive populates; history+archive unified; Places venue text.
P1 · fixed
'From the archive' posts are normal feed-card size
pending

You reported archive posts being huge on the feed. The throwback image was changed to the standard feed-card banner ratio and the year badge shrunk.

What to walk →
  1. On the Home feed, find a 'From the archive' / throwback post
  2. Confirm it's the same compact size as other feed cards (not a giant full-screen photo)
Open the app →
P2 · re-verify (real bug found)
My Archive populates after posting a throwback
pending

You reported My Archive staying empty after posting a throwback. A real bug was found — a caption-less throwback bailed out before submitting. Fixed: throwbacks no longer require a caption, so posting one populates My Archive.

What to walk →
  1. Create a throwback post (a past year + photo, caption optional) → post it
  2. Go to Me → My Archive
  3. Confirm the throwback now appears there (not an empty archive)
Open the app →
P3 · re-verify
'History' and 'From the archive' are now one feed chip
pending

You reported the feed 'History' chip and 'From the archive' being two disconnected things. Re-verified they were still separate, then unified: there's now a single 'From the archive' chip that surfaces both. (The map-level history merge is a separate phase.)

What to walk →
  1. On the Home feed, look at the filter chips
  2. Confirm there is ONE 'From the archive' chip (not a separate 'History' chip too)
  3. Tap it → confirm it surfaces both history and throwback posts together
Open the app →
P4 · fixed
Places: text under the map shows the venue + links to the post
pending

You reported the Places map text showing just a street + nabe. It now leads with the venue name (street drops to a sublabel) and still links to the post.

What to walk →
  1. Open a place (Places history / a venue with a map)
  2. Confirm the text under the map leads with the venue name (not just a street + nabe)
  3. Confirm the 'Open post →' link still works
Open the app →
Q · Developments / permits + community submit
Permits clickable + scoped; address-picker; builder dev tied to post-update.
Q1 · re-verify — was already correct
Permits are clickable and link to the development
pending

You reported the permits feed not being clickable / not rich. Re-verified live: tapping a permit row opens the parent development drawer. Confirm it holds.

What to walk →
  1. Explore → open the Permits feed
  2. Tap a permit row
  3. Confirm it opens the related development
Open the app →
Q2 · fixed
Community submit uses the address-picker; a submitted biz shows up
pending

You reported the community-submit address being plain text and a submitted coming-soon biz not appearing. The coming-soon biz submit now uses the post address-picker, and a submitted biz appears in the coming-soon section (verified live with Domino Park).

What to walk →
  1. Find the community / coming-soon biz submit
  2. Confirm the address uses a map address-picker (not a plain text box)
  3. Submit a coming-soon biz → confirm it appears in the coming-soon section
Open the app →
Q3 · fixed
Builder 'post update' is tied to a named development
pending

You reported a builder's 'post update' button not being tied to an actual development. It now shows the target development name ('Posting to [name]' + an 'Update for: [name]' chip).

What to walk →
  1. Open a claimed builder profile → tap 'post update' on a development
  2. Confirm it clearly names which development the update is for
Open the app →
Q4 · re-verify — was already correct
Permits feed shows only the active nabe (no cross-nabe leak)
pending

You reported permits leaking across nabes and the feed being too long. Re-verified live: WB shows WB-only permits, LA shows LA-only — no cross-nabe leak (locked by a test). Confirm it holds.

What to walk →
  1. Set the nabe to Williamsburg → open the Permits feed → note the permits
  2. Switch to another nabe (e.g. LA)
  3. Confirm the permit list changes to that nabe's permits, not a mixed all-nabe list
Open the app →
R · Builder / service-provider profile
2-per-line dev cards, header/banner, owner view, claim height. (Full parity = own phase.)
R1 · fixed
Claim-builder dev cards are 2-per-line
pending

You reported the claim-builder developments being too big (one big column). They now lay out 2-per-line like the public builder profile.

What to walk →
  1. Claim a builder profile → open the builder dashboard
  2. Find Active developments
  3. Confirm they're laid out 2-per-line (not one giant column)
Open the app →
R2 · re-verify — was already correct
Builder profile has a header/banner
pending

You reported the builder profile having no header/banner. Re-verified live: the builder dashboard has a gradient header (greeting + verified badge + stats). Confirm it holds.

What to walk →
  1. Open a claimed builder profile / dashboard
  2. Confirm there's a header/banner with name, verified badge, and stats (like the user profile)
Open the app →
R3 · re-verify — was already correct
Owner view of a development differs from the public view
pending

You reported an owner opening their own development seeing the public view. Re-verified live: the owner dashboard is distinct (leasing signals + permit counts / post-update). Confirm it holds.

What to walk →
  1. As a claimed builder, open your own development
  2. Confirm you see owner-specific tools (edit / post update / leasing signals), not just the public view
Open the app →
R4 · re-verify — was already correct
Claim-builder drawer opens at a sensible height
pending

You reported the claim-builder drawer opening at the wrong height / messy. Re-verified live: the claim drawer opens at a fixed ~70vh (measured 591px on an 844px screen) — not near-fullscreen. Confirm it holds.

What to walk →
  1. Start the builder claim flow (open a development → Claim this profile)
  2. Confirm the claim drawer opens at a sensible height (not jammed to the top / messy)
Open the app →
S · Reset Demo
Findable escape hatch from any demo role.
S1 · fixed
Reset Demo is findable
pending

You kept getting stuck as a developer/builder with no way out — Reset Demo was a tiny gray link bottom-right that blended into the map. It's now a clear pill bottom-LEFT (so it doesn't collide with the AI FAB); when you're in a non-resident role it turns amber and reads 'Exit demo role'.

What to walk →
  1. From any tab, look for the Reset Demo pill (bottom-left)
  2. Claim a builder/agent role → confirm the pill turns amber and reads 'Exit demo role'
  3. Tap it → confirm it clears the demo state (back to resident / onboarding)
Open the app →
T · Video posts
Removed for now.
T1 · done
Video posts removed from the feed
pending

You asked to remove all video posts for now (the Ana Reyes video was huge / didn't fit). Every video post now renders as a plain photo (no play button / duration badge) — verified: zero video badges across many feed screens. (It's flagged to reconsider later.)

What to walk →
  1. Scroll the Home feed for several screens
  2. Confirm there are no video play-buttons / duration badges — former video posts show as plain photos
Open the app →
U · Wrong profile links / user-not-found
Authors and notifications resolve to the right profile.
U1 · re-verify — was already correct
Jenna Park's post opens Jenna Park's profile
pending

You reported a Jenna Park family post opening Daniel Okonkwo's profile. Re-verified live: it opens Jenna Park's profile (id fix from Phase 51 held, locked by a test). Confirm it holds.

What to walk →
  1. On the feed, find a post by Jenna Park → tap her name
  2. Confirm it opens Jenna Park's profile (not Daniel Okonkwo's)
Open the app →
U2 · re-verify — was already correct
Singles in other cities resolve (no 'user not found')
pending

You reported tapping 'Priya' opening Jenna's profile and many singles in other cities → 'user not found'. Re-verified: all singles + neighbors resolve to their own profiles (both 'Priya' singles resolve correctly). Confirm it holds.

What to walk →
  1. Switch to another city → Singles / Meet neighbors → tap a person (e.g. a 'Priya')
  2. Confirm their own profile opens — no 'user not found'
Open the app →
U3 · fixed (real bug found)
'Priya joined your block' notification opens a real profile
pending

You reported the 'Priya joined your block' notification → 'user not found'. Fixed — and the new test caught two MORE orphaned newcomer notifications (Jamie Torres, David Park) which were also fixed.

What to walk →
  1. Open the notifications drawer
  2. Tap a 'joined your block / neighborhood' notification (e.g. Priya)
  3. Confirm it opens a real newcomer profile — no 'user not found'
Open the app →
V · Cross-city content parity
Seasonal/vault leaks closed; alert replaced with in-app sheet.
V1 · already fixed — spot check
No Williamsburg seasonal content leaks into other cities
pending

Confirmed already fixed: WB seasonal content (cherry blossoms, Domino Park) no longer leaks into LA/Austin/Paris/Tokyo. Only the explicitly-labeled 'Explore Other Neighborhoods → Williamsburg' carousel shows WB (intended). Just spot-check it holds.

What to walk →
  1. Switch to a non-WB city → Explore / things-to-do
  2. Confirm no Williamsburg-specific seasonal items leak in (cherry blossoms, Domino Park, Smorgasburg)
Open the app →
V2 · fixed
Seasonal guide cards open an in-app sheet (not a native popup)
pending

Found this session: seasonal guide cards fired a native OS alert ('peak bloom this week') instead of an in-app sheet. Replaced both with a styled in-app bottom sheet.

What to walk →
  1. Explore → tap a seasonal guide card
  2. Confirm it opens an in-app sheet (gradient header, drag handle, 'Got it') — NOT a plain native OS popup
Open the app →
V3 · already fixed — spot check
'Meet new neighbors' present in all cities
pending

Confirmed already fixed: 'Meet new neighbors' is present in all cities (city-agnostic, opt-in-gated; Austin shows both Singles + Neighbors). Just spot-check it holds.

What to walk →
  1. Switch to a non-WB city → Explore
  2. Confirm 'Meet new neighbors' is available (not WB-only)
Open the app →
V4 · re-verify (real leak found)
Vault Community Threads are city-scoped
pending

You reported the Vault community threads leaking WB content cross-city (LA Vault showed 'Best coffee in Williamsburg', 'Greenpoint'). Fixed — threads are now scoped to the active city (a review-pass also fixed user-created threads being stamped WB). Verified: LA + Tokyo show zero NYC threads.

What to walk →
  1. Switch to a non-NYC city (e.g. LA or Tokyo) → Vault → Community Threads
  2. Confirm there are no Williamsburg / Greenpoint / Brooklyn threads leaking in
  3. (WB itself still shows its own NYC threads)
Open the app →
W · Notifications drawer
Settings tab, constant height, X keeps drawer open, digest preview works.
W1 · fixed
Notification Settings is a real tab
pending

You reported Settings buried at the bottom of the notifications list. It's now a top-level Inbox / Settings tab.

What to walk →
  1. Open the notifications drawer
  2. Confirm there are Inbox and Settings tabs at the top
  3. Tap Settings → confirm the settings open as a tab (not buried at the bottom of the posts)
Open the app →
W2 · fixed
Notifications drawer height stays constant
pending

You reported the drawer resizing when you tapped a pill with less content (e.g. 'Block'). The drawer height is now constant (measured 743px in both All and Block views).

What to walk →
  1. Open the notifications drawer
  2. Tap different filter pills (All, Block, etc.)
  3. Confirm the drawer height does NOT shrink/grow when the content count changes
Open the app →
W3 · fixed
X-ing a notification keeps the drawer open
pending

You reported X-ing a notification closing all the way to Home. Now the per-notification X dismisses only that one and keeps the drawer open.

What to walk →
  1. Open the notifications drawer
  2. Tap the X on a single notification
  3. Confirm just that notification is removed and the drawer stays open (you don't get kicked to Home)
Open the app →
W4 · fixed
'Preview this week's digest' works
pending

You reported 'Preview this week's digest' doing nothing. It now opens the email-digest preview ('This week in [nabe] — N highlights').

What to walk →
  1. Open the notifications drawer → Settings tab
  2. Tap 'Preview this week's digest'
  3. Confirm a digest preview opens
Open the app →
Y · Misc / smaller
Copy fixes; saved-nabes empty state; push-toast tap.
Y1 · re-verify — was already correct
'What's coming in [Nabe]' reads 'in', not 'on'
pending

You reported it reading 'on'. Re-verified: the visible string already reads 'in [nabe]' (only stale code comments said 'on', now corrected). Just confirm.

What to walk →
  1. Find a 'What's coming in [nabe]' header (developments/coming-soon)
  2. Confirm it reads 'in [nabe]', not 'on [nabe]'
Open the app →
Y2 · confirmed
City pill 'saved nabes' shows a clear empty state
pending

You reported the city pill 'saved' section showing nothing. Confirmed: it shows a proper 'No saved nabes yet' empty state with explanatory copy. (The 'Add a nabe' button stays routed to the post-pitch saved-nabes backlog.)

What to walk →
  1. Tap the city pill (top-right) → look at the saved nabes section
  2. Confirm a clear 'No saved nabes yet' empty state (not a blank gap)
Open the app →
Y3 · re-verify · decision
Mock push toast tap opens the relevant target
pending
🟡 DECISION — confirm

You reported the mock push toast tap doing nothing. Confirmed it's already wired to open the target via the notification deeplink. DECISION (reversible): tapping the toast opens the notification's entity / feed — a sensible default.

What to walk →
  1. Trigger a mock push toast (it appears on the demo flow)
  2. Tap it → confirm it opens the relevant target (the related development / post)
  3. Confirm: opening the target on tap is the behavior you want
Open the app →
Y4 · fixed
'Families with kids' renamed to 'Families'
pending

You asked to rename 'Families with kids' to 'Families'. Done.

What to walk →
  1. Open the neighbor filter chips (Meet neighbors / Explore)
  2. Confirm the chip reads 'Families' (not 'Families with kids')
Open the app →
ON · Onboarding / intro
Pages fit the screen; skip is a real shortcut.
ON1 · re-verify
Intro / welcome pages fit without scrolling
pending
📱 CHECK ON DEVICE

You reported the intro pages not fitting (button past the fold; iPad too big). Rebuilt as flex columns so the CTA is always visible and the interests grid scrolls internally. Verified above-the-fold at iPhone + iPad widths — but real iOS safe-area must be confirmed on device.

What to walk →
  1. On the iPhone / iPad, trigger onboarding (reset the demo, or a fresh tab)
  2. On the welcome screen, confirm the CTA button is fully visible without scrolling
  3. Step to Pick interests → confirm 'Show me my Nabe' is visible; the chips scroll inside their own area
Open the app →
ON2 · fixed
'Skip intro' is a genuinely shorter path
pending

You reported 'skip intro' producing the identical flow. Now 'skip intro' completes onboarding immediately with sensible defaults (WB + resident) and drops you into the app — distinct from the full nabe → interests → welcome flow.

What to walk →
  1. Trigger onboarding
  2. Tap 'Skip intro' → confirm it drops you straight into the app (defaults applied)
  3. Re-trigger → take the full path → confirm it walks the nabe picker → interests → welcome (genuinely different from skip)
Open the app →
MN · Misc — found this session
Self-only content gating, recs landing, bio, NTA log.
MN1 · fixed
Another user's profile doesn't show your self-only archive CTA
pending

Found this session: another user's profile (e.g. Marcus Rivera) showed the self-only empty-archive CTA ('no archives yet, tap Create…'). The empty-archive CTA was already gated; the actual leak was the self-framed 'Your Nabe Cards' section — now gated to your own profile only.

What to walk →
  1. Open another user's profile (e.g. Marcus Rivera)
  2. Confirm it does NOT show 'no archives yet, tap + Create to share'
  3. Confirm it does NOT show a self-framed 'Your Nabe Cards' section
Open the app →
MN2 · re-verify — was already correct
A nabe card inside a profile fits + has an X
pending

Found this session: a nabe card opened inside a profile was too big with no X. Re-verified live: the nabe-card preview has a Close X and fits the viewport (~523px in an 844px screen). With MN1's gate, other-user profiles no longer surface these at all. Confirm.

What to walk →
  1. Open a nabe card (from your own profile's Nabe Cards)
  2. Confirm it fits the screen and has an X to close
Open the app →
MN3 · fixed (real bug found)
Day-4 'Try a rec' lands on an actual recommendation
pending

You reported Day-4 'Try a rec' opening the top of Explore instead of a recommendation. A real bug was found (the scroll fired before Explore mounted). Fixed — it now reliably lands ON Local Discovery (Peter Luger, Devocion, etc.).

What to walk →
  1. On Day-4 of the demo flow, tap 'Try a recommendation'
  2. Confirm it lands on the Local Discovery recs (actual recommendations) — not the top of the Explore tab
Open the app →
MN4 · fixed
Profile bio de-Italianized
pending

Found in a live hunt: the profile bio over-Italianized ('Italian American, 5th gen' + 'Italian Food' tag). Trimmed per your sensitivity flag — bio now ends 'always down for a good slice'; the tag is 'Local Food'.

What to walk →
  1. Open your own (Me) profile → read the bio + expertise tags
  2. Confirm it no longer says 'Italian American, 5th gen' and the tag reads 'Local Food' (not 'Italian Food')
Open the app →
MN5 · fixed (low)
NYC boundary fetch error is quieted
pending

Found in live-hunt notes: the NYC neighborhood-boundary fetch logged a red 'TypeError: Failed to fetch' on first load (the static fallback works fine). It's now a single quiet info log; real errors still surface. Low priority — confirm nothing looks broken.

What to walk →
  1. Open the app fresh → open the NYC heatmap / map
  2. Confirm the map / boundaries render normally (the underlying fetch warning is now silenced; nothing user-visible should be broken)
Open the app →
Phase 52 · Just shipped

UAT Fix Pass 2 — your post-P51 bug reports

0 / 15
Every concrete bug you logged after Phase 51, fixed and tested (build + 222 automated tests green). Walk these on either build — the frozen :5174 was just refreshed to this Phase 52 snapshot, and the live :5173 has it too. 52-01, 52-02, 52-03 are best checked on a real iPhone/iPad (scroll, notch, fit). 5 things you re-reported turned out to already be fixed in code — you were testing the old frozen build; they're in 52-14.
52-01 · device test — do on iPhone
Home feed: only the feed scrolls, not the whole page
pending

Your report: scrolling pulled the whole page + header + bottom bar up/down (intermittently) instead of the feed, and pull-to-refresh sat above the locked top bar and shoved the bottom bar past the fold. The feed is now the single scroll container with overscroll contained and the page body locked.

What to walk →
  1. On the Home feed, scroll up and down briskly several times
  2. Confirm the top banner stays put and the bottom tab bar stays put — only the feed content moves
  3. Try the same a few times to confirm it's not intermittent anymore
  4. Pull down hard at the very top — the page should not rubber-band the whole UI or push the bottom bar past the fold
Open the app →
52-02 · device test — needs a notch/Island iPhone
Top banner clears the status bar / Dynamic Island
pending

Your report: the locked top banner cut into the battery/signal area and the logo was clipped by the iPhone island. The header now pads for the safe-area inset and centers the logo below it.

What to walk →
  1. Open the app on an iPhone with a notch or Dynamic Island
  2. Confirm the "Nabe" wordmark + skyline logo sit fully below the status bar — not clipped by the island
  3. The battery/signal indicators stay clearly visible above the banner
Open the app →
52-03 · best on iPad
Intro / welcome pages fit the screen without scrolling
pending

Your report: the intro pages didn't fit on iPad and the bottom button was past the fold. Each step now fits the viewport with the CTA always visible; the interests grid scrolls internally rather than pushing the button down.

What to walk →
  1. Trigger onboarding (clear the app data / "reset intro" if available, or open in a fresh tab)
  2. On the welcome screen, confirm the "Let's go" button is fully visible without scrolling
  3. Step to Pick interests — confirm the "Show me my Nabe" button is visible; the chips scroll inside their own area if there are many
  4. No step should require scrolling the whole page to reach its button
Open the app →
52-04
Post detail: you can add a comment + edge padding fixed
pending

Your report: no way to comment on a post, and the like/bookmark row sat too close to the bottom edge. There's now a comment composer; the action bar has safe-area padding.

What to walk →
  1. On the Home feed, tap a post to open its detail
  2. Scroll to the comments — confirm there's a text field + Send at the bottom (not just a "be the first" dead end)
  3. Type a comment, press Send (or Enter) → it appears immediately in the list
  4. Confirm the like / bookmark / share row isn't jammed against the very bottom edge
Open the app →
52-05 · the big one
Development Discussion: input, persistence, sentiment, height
pending

Your report had four parts: discussion input sat mid-screen (chat was at bottom), typed messages didn't persist after Send, typing broke the UI / changed drawer height, and the sentiment bar couldn't be cast. All four addressed.

What to walk →
  1. Open a development drawer → Discussion tab
  2. Confirm the input bar is at the bottom (same as the Chat tab)
  3. Type a message → Send → confirm it appears and stays (re-open the drawer; it should still be there)
  4. Find the sentiment bar ("N neighbors weighed in") → tap bullish / neutral / concerned → confirm the bar + count update with your vote
  5. Tap the input to bring up the keyboard → confirm the drawer doesn't jump/resize; dismiss → it restores
Open the app →
52-06
Calendar RSVP note has a Send button
pending

Your report: after RSVPing "Going" you typed a comment but there was no Send button, so it just sat there. There's now a Send action + a "Note saved" confirmation.

What to walk →
  1. Calendar → open an event → RSVP Going
  2. Type a note in the "Add a note" field → confirm a Send button appears (or press Enter)
  3. Send → confirm a "Note saved" confirmation and the note sticks
Open the app →
52-07
Morning briefing: event opens the event; highlight goes somewhere
pending

Your report: tapping an event in the briefing opened the calendar (not the event), and tapping a community highlight just collapsed the briefing and did nothing. Events now open their own detail; highlights navigate to the relevant business / meetup / event.

What to walk →
  1. Open the morning briefing (the briefing card / banner on the feed)
  2. Tap an upcoming event → confirm it opens that event's detail (with RSVP), not the calendar list
  3. Tap a community highlight → confirm it navigates somewhere real (e.g. the business, a meetup, or the calendar) — not a dead collapse
Open the app →
52-08
Permits show only the active nabe (no cross-nabe leak)
pending

Your report: permits were leaking across nabes (showing every nabe's permits). The permit feed now filters to the active neighborhood.

What to walk →
  1. Set your nabe to Williamsburg → Explore → open the Permits feed
  2. Confirm the permits shown belong to Williamsburg
  3. Switch to Greenpoint (or another nabe) → confirm the permit list changes to that nabe's permits, not a mixed list
Open the app →
52-09
Explore: no Williamsburg content in other nabes
pending

Your report: Explore kept showing "cherry blossoms" and other Williamsburg things-to-do even in different nabes. The seasonal + trending sections no longer default to Williamsburg — a non-WB nabe shows generic / its-own content.

What to walk →
  1. Switch to a non-Williamsburg nabe (Greenpoint, East Village, or another city)
  2. Open Explore → scroll the seasonal / "things to do" / trending sections
  3. Confirm you do NOT see Williamsburg-specific items (Cherry Blossoms in Domino Park, Smorgasburg, East River Greenway)
Open the app →
52-10
Claim-builder profile: active developments are rich, clickable cards
pending

Your report: in the claimed-builder profile, active developments were plain one-line text you couldn't click. They're now rich cards (cover photo, status) that open each development — with a little deeper owner detail.

What to walk →
  1. Claim a builder profile (the builder claim flow) → open the builder dashboard / profile
  2. Find Active developments → confirm they're rich cards (image + status), not one-line text
  3. Tap a card → confirm it opens that development
  4. Confirm the claim drawer opened at a sensible height with a confirmation (not jammed to the top / messy)
Open the app →
52-11
Singles / Meet Neighbors / Families chips surface real content
pending

These chips were removed in P51 because they were empty. They're back, each backed by real seeded content so a tap is never empty — including on the map (a tag-mismatch bug that would have left Families empty was caught and fixed).

What to walk →
  1. On the map filter chips, tap Singles → confirm pins show (not an empty map)
  2. Tap Meet Neighbors → confirm pins show
  3. Tap Families → confirm pins show (this is the one that was at risk)
  4. Switch nabes and repeat — each chip should surface ≥1 item in each active NYC nabe
Open the app →
52-12
Nabe Pulse shows several people + quick reactions
pending

Your report: the Pulse right card showed only one person even though tapping in revealed ~4, and quick reactions weren't on the pulse itself. It now surfaces up to 4 avatars with inline Wave / Love / Celebrate reactions.

What to walk →
  1. On the Home feed, find the Nabe Pulse row → look at the right card
  2. Confirm it shows several avatars + a "{N} live now" line (not just one person)
  3. Tap a quick reaction (Wave / Love / Celebrate) right on the pulse → it registers
Open the app →
52-13
"Ask Agent" has an inline text field to ask
pending

Your report: tapping "Ask Agent" opened an agent page with no way to ask — it should have a text field. There's now an inline composer (type a question + Send) right in the listing, with the full conversation as a secondary link.

What to walk →
  1. Open a listing → find the agent's take / "Ask Agent" section
  2. Confirm there's an inline text field + Send to type a question
  3. Type a question → Send → confirm a "question sent" confirmation
Open the app →
52-14 · verified working by driving the live app
Re-check sweep: 4 things you re-reported (confirmed working)
pending

You re-reported these after P51; driving the live app confirmed these 4 are genuinely working (Say Hi was the exception — it really was broken and is fixed in card 52-15). Quick confirm on this snapshot:

What to walk →
  1. Other-user archive: open another user's profile (e.g. Marcus Rivera) → confirm it does NOT say "no archived yet, tap + Create to share" (that's self-only)
  2. Nabe card size: tap a nabe card in a profile → it fits the screen and has an X to close
  3. Listings city filter: Listings tab shows the active nabe's listings (not all cities) when a nabe is selected
  4. Vault collections: switch to a non-Williamsburg city → Vault still shows the topic collections (not an empty screen), with city-specific featured guides
Open the app →
52-15 · you caught this — it really was broken
Say Hi: close X restored + readable suggestion chips
pending

You were right: on :5173 the Say Hi conversation had no X to close it and the suggestion chips were dark-on-dark (only the 👋 showed). The conversation now opens above the app header with its own back/X, and the chips are readable. Verified end-to-end in a real browser (iPhone + iPad).

What to walk →
  1. Open a neighbor's profile (e.g. Marcus Rivera) → tap Say hi
  2. Confirm the conversation has a visible X (and back arrow) at the top to close it — and the Nabe app header is NOT sitting on top of it
  3. Confirm the 3 suggestion chips ("👋 Wave hi", "Coffee this week?", "New to the area") are readable (dark text on light violet) — not dark-on-dark
  4. Tap a chip → it sends that message; also try typing in the box → it accepts text
  5. Tap the X → you return to the feed (not stuck, not a stale profile)
Open the app →
Phase 51 · Just shipped

UAT Fix Pass — Phases 44–50

0 / 24
These test Phase 51 fixes. Walk them on the LIVE build → 192.168.1.171:5173 (the frozen :5174 snapshot is still at Phase 50 and does NOT include these fixes — ask Claude to refresh :5174 to Phase 51 if you prefer a stable snapshot). MV-02, MV-03, and MV-13 are iPhone/keyboard checks best done on a real device.
51-01
Drawer height stays constant across tabs
pending

Opening a drawer and switching between its Overview / Chat / Discussion tabs should not change the drawer's size — the sheet stays at a fixed height, with content scrolling inside it.

What to walk →
  1. Open a development drawer (tap any hard-hat pin or a card in Explore → Coming)
  2. Switch between Overview, Chat, and Discussion tabs
  3. Confirm the drawer does NOT resize or jump — footprint stays constant
  4. Chat and Discussion content should scroll inside a panel under a pinned hero, not resize the whole sheet
  5. Repeat for a building drawer and a business drawer
Open the app →
51-02 · HIGHEST RISK — do first
Chat input: keyboard doesn't hide the X or hero
pending

When you tap the chat input field inside a drawer, the keyboard should open without hiding the close button (X) or the drawer's hero area. Dismissing the keyboard should restore the full sheet. Best tested on iPhone.

What to walk →
  1. Open any drawer with a Chat tab (e.g. a development) → tap Chat
  2. Tap the chat input field at the bottom → keyboard opens
  3. Confirm the gradient hero and its X (close) button are still visible and tappable above the keyboard
  4. Type a few characters — input should be responsive (no dead / frozen input)
  5. Dismiss the keyboard (tap outside or swipe down) → full sheet restores to its original height
Open the app →
51-03
Chat and Discussion are separate — posts don't bleed across
pending

A message posted in Chat should only appear in Chat, not in Discussion — and vice-versa. Seeded Discussion content (civic threads, upvoted posts) should still show up in Discussion.

What to walk →
  1. Open a development drawer → tap Chat → post a test message (e.g. "test chat")
  2. Tap Discussion → confirm your "test chat" message does NOT appear here
  3. Confirm Discussion shows structured civic content (upvoted threads, concerns) — not empty
  4. Post in Discussion → switch to Chat → confirm that Discussion post is absent from Chat
Open the app →
51-04 · re-test (was blocked)
Moderation: hide / report a chat message in a drawer
pending

This was blocked in Phase 50 UAT because the drawer keyboard bug made the chat unusable. Now that the drawer is fixed, re-test: long-press any chat message to get the moderation sheet.

What to walk →
  1. Open a drawer (development, building, or business) → tap Chat
  2. Press and hold a message until the moderation sheet appears
  3. Tap Hide → the message disappears from the thread
  4. Tap Report and Block user on other messages — confirm they show a confirmation (no error)
Open the app →
51-05 · re-test (was blocked)
Development Discussion tab: civic posts stay in Discussion only
pending

Previously blocked by the drawer bug. A development's Discussion tab should show structured civic content (CB1 threads, upvotes, "concerned" signals) — not the casual Chat messages.

What to walk →
  1. Open a development drawer (e.g. tap "Berry St Workforce Housing" in Explore → Coming)
  2. Tap Discussion → confirm civic content: permit filings, CB1 meeting threads, shadow analysis, upvoted concerns
  3. Confirm the sentiment bar (Positive / Neutral / Concerned) appears in Discussion
  4. Tap Chat → confirm the civic Discussion posts are NOT visible here
Open the app →
51-06 · re-test (was blocked)
Follow / bell control confirms (development + block)
pending

Previously blocked. Tap the follow/bell button on a development or block to subscribe — the button should fill (active state) and tapping again unfollows.

What to walk →
  1. Open a development drawer → find the follow / bell button (in the header area or Overview tab)
  2. Tap it → it fills / shows "Following" state
  3. Tap again → reverts to unfollowed state
  4. Repeat on a block drawer (reach via Calendar → "My block" or map drill-in)
Open the app →
51-07 · re-test (was blocked)
Business drawer: Chat "honest take" panel works
pending

Previously blocked. Open a business (restaurant or shop) and confirm the Chat tab shows an honest-take / neighbor-chat panel you can post in.

What to walk →
  1. Tap ExploreBusinesses → tap any business card to open its drawer
  2. Tap Chat → neighbor-chat / honest-take panel visible
  3. Post a message → it appears in the thread
  4. Switch to Discussion → confirm your Chat message is NOT here
Open the app →
51-08 · re-test (was blocked)
Building Chat post stays in Chat only
pending

Previously blocked. Open a building, post in its Chat tab, and verify the post does not bleed into the Discussion tab.

What to walk →
  1. Open any building (tap a building pin on the map, or find one via Explore)
  2. Tap Chat → post a casual message
  3. Tap Discussion → confirm your Chat message is absent; Discussion shows maintenance/review threads
Open the app →
51-09
Top nav stays visible everywhere (iPhone: clears the notch)
pending

The Nabe wordmark + logo + bell in the top nav should remain visible at all times: with the map open, in messages, on Explore, scrolling the home feed, and with any drawer open. On iPhone it should also clear the Dynamic Island / notch.

What to walk →
  1. On the Home feed, scroll down fast — confirm the top nav (wordmark, skyline logo, bell) stays pinned and visible
  2. Open the Home map — confirm nav still visible above the map
  3. Tap Explore — confirm nav visible
  4. Tap Messages — confirm nav visible above the conversation thread
  5. Open any drawer — confirm nav is not covered by the drawer overlay
  6. (iPhone) Confirm the nav doesn't sit behind the Dynamic Island / status bar — it should clear the notch area
Open the app →
51-10
Map History layer: throwbacks AND archival posts in one surface
pending

Two previously separate history surfaces (throwback photos + neighborhood memory archive) are now merged into one History layer on the map, with exactly one History control.

What to walk →
  1. Open the Home map — find the layer row at the top: Now / Coming / History
  2. Tap History → the map should show dots for both throwback photos AND neighborhood memory entries (amber pins with a clock icon)
  3. Confirm there is only ONE "History" control — no second separate archive toggle anywhere on the map
  4. Tap a history pin → popup opens showing a preview of the archived content
Open the app →
51-11
Story dots visible on Now; dev/permits show under Now + History; throwback fills My Archive
pending

Three layer/archive behaviors fixed together: story dots on the Now map are visually distinct (indigo camera pins), developments/permits appear under both Now and History layers, and posting a throwback actually fills your "My archive" tab in your profile.

What to walk →
  1. On the Home map → Now layer → look for indigo pins with a camera icon — those are story dots
  2. Tap a story dot → popup opens (confirm it's distinct from other pin types)
  3. Switch to Coming layer → development hard-hat pins and permit pins should be visible
  4. Switch to History → development and permit pins should also appear here (completed/historical ones)
  5. Tap + (create) → find the Throwback / archive option → pick a year + add a caption → post
  6. Go to Profile (Me tab) → My archive tab → your throwback should appear
Open the app →
51-12
Explore map matches Home map; tapping a chip no longer empties the map
pending

The Explore tab's map view was previously showing reduced content (no stories, hotspots, or listings). It should now show the same full set of pins + filter chips as the Home feed map.

What to walk →
  1. Tap Explore → tap the Map button (top-right of the Explore header)
  2. Confirm the Explore map shows pins: stories (indigo camera), developments (hard-hat), businesses, listings — same variety as the Home map
  3. Find the filter chips row — confirm it includes chips like Singles, Meet Neighbors, Families, Listings (newly added in Phase 51)
  4. Tap any chip → map should filter to that content type (it should NOT go blank/empty)
  5. Tap the same chip again to deselect — map restores
Open the app →
51-13
Listing opened from the map matches the Listings tab layout
pending

Tapping a listing pin on the map used to open a deprecated simpler view. It should now open the same full listing detail (nabe-score breakdown, commute, reviews, work-done section) as tapping a card in the Listings tab.

What to walk →
  1. On the Home map (Now layer) → find a listing pin (house icon) and tap it to open the listing
  2. Scroll down: confirm you see a nabe-score breakdown, a commute section, at least 2 reviews + "view all" link, and a "work done near here" section near the bottom
  3. Close it, then go to the Listings tab → open the same listing from there
  4. Confirm both views look identical in layout and section order
Open the app →
51-14
Cross-city: real profiles open, no WB landmarks, every city has meet-neighbors
pending

In LA, Tokyo, Paris, and Austin: tapping a Singles or Neighbors card should open a real profile (not a "User not found" error). No Williamsburg landmarks (Domino Park, East River Greenway) should bleed into these cities. Every city should have a "meet new neighbors" section in Explore.

What to walk →
  1. Switch city to LA → Explore → Singles → tap any profile card → a real profile opens (name matches the card)
  2. In LA Explore → look at the seasonal guides / highlights section — confirm no WB landmarks ("peak bloom at Domino Park", "East River Greenway run")
  3. In LA Explore → confirm a "Meet new neighbors" section exists with at least one person card
  4. Repeat for Tokyo, Paris, and Austin — check: no 404, no WB landmarks, neighbors section present
Open the app →
51-15
Vault: non-WB cities show no WB collections; WB still does
pending

Non-Williamsburg cities (LA, Tokyo, Paris, Austin) should see a "coming soon in your area" placeholder in the Vault, not WB-authored topic-collections. Williamsburg, Greenpoint, and East Village still see their full Vault.

What to walk →
  1. Switch to LA → tap Vault tab → confirm you see a placeholder message (e.g. "Neighborhood guides and collections coming soon for your area.") — NOT WB topic-collections
  2. Switch to Tokyo and Paris — same: placeholder, no WB content
  3. Switch back to Williamsburg → Vault shows the full collection of WB guides and topic threads as before
Open the app →
51-16
Tapping the mock push toast opens the related item
pending

A mock push notification slides in from the top during a session. Tapping it should navigate to the linked item (a development or post) — not just dismiss the toast.

What to walk →
  1. Open the app on Williamsburg and leave it on the Home feed
  2. Wait ~30 seconds — a push notification toast slides in from the top of the screen
  3. Tap the toast (don't let it auto-dismiss) → it should open the linked development or post directly
  4. If it auto-dismissed: wait for the second toast at ~90 seconds and tap that one
Open the app →
51-17
New-here guide Day 4: no Developments card
pending

The new-member onboarding guide (the "Day 1–7" nurturing cards on the Home feed) previously showed a Developments tile on Day 4 that felt out of place. It should be gone — Day 4 is now a single "Try a rec" tile.

What to walk →
  1. If you need to see Day 4: tap Reset Demo (visible on any tab in the top-right area of the header) to reset the onboarding state
  2. On the Home feed, find the "Your first week in the nabe" guide card
  3. Advance to Day 4 — confirm it shows only a single tile ("Try a rec" or similar) with NO "See Developments" / "What's coming on your block" secondary tile
Open the app →
51-18
"From a longtime neighbor" bridge posts appear in the feed
pending

Bridge-moment posts (old-timer↔newcomer pairs) were previously buried past the feed's "caught up" divider. They've been moved to the top of the post list so they appear within the first visible cards.

What to walk →
  1. On the Williamsburg Home feed, scroll through the first 10–15 posts without going below the "You're all caught up" divider
  2. Confirm you see at least one post with a "from a longtime neighbor" gradient pill or a bridge-moment badge on the author card
  3. Look for a newcomer-question + old-timer-answer pair — both should have a bridge badge
Open the app →
51-19
Reset Demo (on every tab) clears builder/agent/onboarding state
pending

"Reset Demo" is now visible on every tab (not just the Me tab) and clears all persona state: if you're stuck as a developer or agent, one tap returns you to the resident default and clears onboarding.

What to walk →
  1. Confirm "Reset Demo" is reachable from the Home tab (look for it in the top-right header area or a menu)
  2. If currently in resident view: tap "Reset Demo" → app stays in resident view with onboarding cleared
  3. To test the developer-persona reset: use the Builder Claim flow (48-B above) to enter developer mode, then tap "Reset Demo" from ANY tab → app should return to resident view and show the normal onboarding intro
Open the app →
51-20
Morning Briefing buttons and rows navigate for real (no popup)
pending

The Morning Briefing drawer previously had placeholder alert() popups on every button. All 13 actions are now wired: events go to Calendar, new-neighbors goes to Explore, posts close the drawer to reveal the feed.

What to walk →
  1. On the Home feed, find the Morning Briefing card and tap it to open the drawer
  2. Tap the Posts stat button (e.g. "14 posts") → no popup appears; drawer closes and feed is visible
  3. Reopen Morning Briefing → tap Events stat → drawer closes and Calendar tab opens
  4. Reopen → tap New neighbors stat → drawer closes and Explore tab opens
  5. Tap any event row → drawer closes + Calendar opens
  6. Confirm NO JavaScript alert() dialog pops up at any point
Open the app →
51-21
Tapping Jenna Park's post opens Jenna Park (not Daniel Okonkwo)
pending

A data-reference bug caused Jenna Park's feed posts to resolve to Daniel Okonkwo's profile when tapped. Fixed: tapping any Jenna Park post now opens Jenna Park's profile.

What to walk →
  1. On the Williamsburg Home feed, scroll to find a post authored by Jenna Park
  2. Tap her name or avatar → a profile drawer opens
  3. Confirm the profile shows Jenna Park — not Daniel Okonkwo or any other person
  4. Look for her posts: family playdates, family tip, family bike ride — these should all correctly resolve to Jenna Park
Open the app →
51-22
Explore banner reads "Explore" not "Discover"
pending

A leftover copy error had the Explore tab banner showing "Discover" as the heading. It's now been corrected to "Explore."

What to walk →
  1. Tap the Explore tab
  2. Look at the large heading in the purple gradient banner at the top
  3. Confirm it reads "Explore" — not "Discover"
Open the app →
51-23 · iPhone checks
iPhone nits: Vault copy, video sizing, header island, pull-to-refresh, bottom bar
pending

Five small iPhone-specific fixes: Vault tile now reads "in {nabe}" (not "on"), video thumbnails match standard post size, header clears the Dynamic Island, pull-to-refresh sits above the locked nav banner, and the bottom tab bar is stable (no jank).

What to walk →
  1. On iPhone: tap Vault → find the "What's coming…" tile → confirm it reads "What's coming in Williamsburg" (not "on Williamsburg")
  2. On the Home feed, find a post with a video play-button overlay — confirm the video thumbnail is the same size as standard post images (not oversized)
  3. On iPhone: confirm the top nav (wordmark + logo + bell) sits below the Dynamic Island / status bar — not behind it
  4. Pull down to refresh on the Home feed — confirm the pull-to-refresh animation appears below the locked top nav (not hidden behind it)
  5. Scroll up fast and down fast — confirm the bottom tab bar doesn't jitter or disappear briefly
Open the app →
51-24
LA / Tokyo / Paris heatmaps are less cluttered (fewer live dots)
pending

Non-NYC heatmaps previously showed a live-activity badge on almost every neighborhood, making the map look noisy. Now only genuinely active neighborhoods (liveness score ≥ 0.5) show a live count badge — quieter nabes show the colored shape without a badge.

What to walk →
  1. Switch city to LA → tap the city pill → "Browse all LA" → full-screen heatmap opens
  2. Compare to before: confirm NOT every neighborhood has a live-count badge floating over it — only the more active ones do
  3. Repeat for Tokyo and Paris — same expectation: fewer badges, less visual clutter
  4. Switch to NYC (Williamsburg) heatmap → confirm NYC's active nabes (Williamsburg, Greenpoint, East Village) still show their live counts
Open the app →
Phase 50 · Just shipped

Place + Time + Community

0 / 16
Test against the frozen UAT build → 192.168.1.171:5174 — just refreshed to include Phase 50. It's a built snapshot, so it won't reload or reset state mid-test (unlike the live :5173 dev server). Every "Open the app" button here points to :5174.
50-A
Map time layers — Now / Coming / History
pending

The map has a time toggle: Now = today's posts + stories, Coming = developments + permits, History = old throwback photos as dots.

What to walk →
  1. Open the map (Explore → map, or the Map button)
  2. Find the layer chips at the top: Now / Coming / History
  3. Tap Coming → only construction + permit pins show
  4. Tap History → old/faded photo dots appear
  5. Tap Now → back to live posts + stories
  6. Red flag: the chip rows crowd the map or don't fit vertically on iPad
Open the app →
50-B
Story dots on the map (one per place)
pending

Each place with stories shows one dot (not a cluster). Tapping it opens a popup with Now (last 24h) and All-time tabs.

What to walk →
  1. On the map (Now layer), find a story dot
  2. Tap it → a story popup opens
  3. Toggle between the Now and All-time tabs
  4. Confirm one place = one dot (no duplicate dots stacked on the same spot)
Open the app →
50-C
Map → block drill-in (trickiest wire)
pending

From a block's story dot you can jump into that block's full page — the 3rd way to reach a block. This was a gap I just closed, so worth a real check.

What to walk →
  1. Switch city to Williamsburg
  2. On the map, find the Bedford Ave story dot
  3. Tap it → popup → tap "View block details"
  4. The block page opens (timeline, chat, etc.)
Open the app →
50-D
Block surface + its sections
pending

A block now has its own page: a 30-day timeline, stories, neighbor chat, honest take, and throwbacks. Reachable from the Calendar "My block" toggle too.

What to walk →
  1. Calendar tab → find the "My block" toggle → tap it
  2. (Or reach a block via the map drill-in, 50-C)
  3. Scroll: Timeline (last 30 days) → Stories → Neighbor chat → Honest take → Throwbacks
  4. Confirm each section has content (not empty or broken)
Open the app →
50-E
Block Time Machine (year slider)
pending

A year slider lets you travel a block back through time.

What to walk →
  1. Open a block (50-C or 50-D)
  2. Tap the "Time Machine" button
  3. Drag the year slider (1996 → 2026)
  4. Sparse years show a friendly "Not much to see here yet" message
Open the app →
50-F
Throwbacks ("from the archive")
pending

Old neighborhood photos with a year. They appear in the feed as vintage cards, you can post one, and they collect in your Profile "My archive" + on the map's History layer.

What to walk →
  1. Home feed → scroll for a vintage amber "from the archive" card (year badge)
  2. Tap + (create) → find the Throwback / archive prompt → pick a year + add photo + caption → post
  3. Profile (Me) → "My archive" tab → your throwback shows in a grid
  4. Map → History layer → throwbacks appear as dots
Open the app →
50-G
Neighbor chat on 4 surfaces
pending

The same neighbor-chat thread now lives on developments, buildings, businesses, and blocks. A "verified residents" gate is shown but stays frictionless in the demo.

What to walk →
  1. Open a development (hard-hat pin) → Chat tab → post a message
  2. Open a building → Building chat section → post
  3. Open a business → Neighbor chat section → post
  4. Open a block → its chat → post
  5. Confirm a "verified residents" badge appears but doesn't block you
Open the app →
50-H
Moderation — Report / Hide / Block
pending

Long-press any chat message to Report it, Hide it, or Block the user.

What to walk →
  1. In any neighbor chat (50-G), press-and-hold a message
  2. A sheet appears: Report / Hide / Block user
  3. Tap Hide → the message disappears from the thread
  4. Report + Block just confirm (mock) — check they don't error
Open the app →
50-I
Development: Chat vs Discussion tabs
pending

A development drawer has a casual Chat tab and a structured Discussion tab with a community sentiment bar (positive / neutral / concerned).

What to walk →
  1. Open a development (hard-hat pin)
  2. See the tabs: Overview / Chat / Discussion
  3. Tap Discussion → sentiment bar + top concerns
  4. Tap Chat → casual thread (50-G)
Open the app →
50-J
"Here's the honest take" panel
pending

Listings, buildings, businesses, and blocks now show an honest-signals panel — factual, soft cues, no harsh flags — with an owner's right-of-reply.

What to walk →
  1. Open a listing (real-estate) → scroll to the honest-take panel
  2. Repeat for a building, a business, and a block
  3. Find an owner/manager reply on at least one
  4. Red flag: tone feels harsh/editorial rather than factual
Open the app →
50-K · ⭐ your parked review
Business honest-take — BRAND-FIT call
pending

You parked a careful look at whether an honest-signals panel feels right on a restaurant/shop (vs only real estate). This is that check — it's a judgment call, not a bug.

What to walk →
  1. Open a business (a restaurant or shop) → find the honest-take panel
  2. Ask: does this fit Nabe's brand on a business, or feel off / harsh?
  3. Tap ✗ Bug + note your call (keep / soften / remove on business) → Log to GSD
Open the app →
50-L
Notifications — filters + settings + digest
pending

The notification drawer has category filter chips; settings has category toggles, digest cadence, quiet hours, and an email digest preview.

What to walk →
  1. Tap the bell → notification drawer → tap category chips (the list filters)
  2. Open notification settings → toggle categories, set digest cadence (Daily/Weekly/Off), quiet hours
  3. Tap "Preview this week's digest" → email-style preview opens
  4. Red flag: the email from-line isn't @thenabe.com
Open the app →
50-M
Follow controls (the bell)
pending

A follow/bell button lets you subscribe to a development, a thread, or a block.

What to walk →
  1. Open a development → tap the follow/bell → it fills (following)
  2. Same on a neighbor chat and on a block timeline
  3. Tap again → unfollows
  4. Red flag: buttons crowd or overflow on the narrow iPad screen
Open the app →
50-N
Mock push toast (timing/feel)
pending

A mock push notification slides in from the top during a session (demo fires around 30s and 90s).

What to walk →
  1. Open the app and leave it sitting for ~30 seconds
  2. A push toast slides in at the top, then auto-dismisses
  3. Check it looks right (icon, text) and isn't annoying / mistimed
Open the app →
50-O
Bridge moments (old-timers ↔ newcomers)
pending

Four mechanisms surface longtime residents to newcomers: a "longtime neighbor" pill, bridge-pair badges on Q&A, old-timer composer prompts, and feed mixing.

What to walk →
  1. Home feed → look for a gradient "from a longtime neighbor" pill on some posts
  2. Find a newcomer-question / old-timer-answer pair both showing a "bridge moment" badge
  3. Tap + (create) → if set as long-tenure, see old-timer prompts
  4. Red flag: too many pills (feels spammy) — note the density
Open the app →
50-P
Community submit + permits + coming-soon biz
pending

Residents can submit a development they've heard about; there's a standalone permit feed; and community coming-soon businesses.

What to walk →
  1. Explore → Coming → "Submit a development you've heard about" → fill + submit → it appears (auto-verifies after ~10s)
  2. Explore → Permits → standalone permit feed with time-window filters
  3. Explore → Coming-soon biz → submit one → it appears
Open the app →
Phase 48 · Just shipped

Deep audit + demo data sweep

0 / 5
48-A
Cross-city content quality
pending

All 6 non-NYC cities (LA, Tokyo, Paris, Austin, Buenos Aires, Cape Town) have baseline content. Do they feel lived-in, not formulaic?

What to walk →
  1. Tap city pill → switch to LA
  2. Scroll Home feed — does it sound like LA, not "demo content"?
  3. Open Explore → Businesses, Singles, Families
  4. Repeat for Tokyo, Paris, Austin, Buenos Aires, Cape Town
  5. Red flag: stereotypes (tacos/tango/sake), repeated phrasing, generic names

Heads up: Phase 49 will deepen this further. Test now to surface tonal issues we should catch in Phase 49.

Open the app →
48-B
Builder claim flow — end to end
pending

A builder can fake-log-in, claim a development, post updates. Mirror of the agent/contractor pattern.

What to walk →
  1. Open the map (Explore) — find a hard-hat icon
  2. Tap it → DevelopmentDrawer with builder, timeline, permits
  3. Tap "Claim this profile" CTA
  4. BuilderClaimDrawer opens → fake-login form → submit
  5. Profile (Me tab) → BuilderDashboard with greeting + verified badge + your developments list
  6. Tap a development → "Post update" → write + post → update appears on timeline
Open the app →
48-C
Non-NYC heatmaps (LA / Tokyo / Paris)
pending

LA (32 neighborhoods), Tokyo (23 wards), Paris (20 arrondissements) — same brand-gradient liveness shading as NYC.

What to walk →
  1. Switch city to LA via city pill
  2. Tap city pill again → "Browse all LA" button
  3. Full-screen heatmap with violet/pink polygons + live-count badges
  4. Tap a colored neighborhood → app switches to that nabe
  5. Repeat Tokyo + Paris
Open the app →
48-D
Saved / bookmarked developments
pending

1:1 copy of saved-nabes pattern. Bookmark icon on dev drawer hero, "Saved developments" section in Profile.

What to walk →
  1. Open a development drawer (any hard-hat icon)
  2. Top-right of gradient hero → tap bookmark icon → fills
  3. Close drawer → Profile (Me tab) → "Saved developments" warm gradient card
  4. Tap → re-opens dev drawer
  5. Bookmark a 2nd → both list. Unbookmark → leaves list.
Open the app →
48-E
Mock video thumbnails (~15%)
pending

No real video — play overlay + duration badge on ~15% so the pitch script can say "photos and video".

What to walk →
  1. Scroll Home feed — ~every 6-7th post has a Play ▶ overlay + duration badge ("0:42")
  2. Switch to LA + Tokyo — same pattern (sprinkled across all 6 non-NYC cities)
  3. Tap a video-flagged post → behaves normally (visual signal only, no playback)
  4. Red flag: every post has it (too many), or none (sprinkle failed)
Open the app →
Phase 47 · UAT never done

Spatial intelligence — developments + heatmap

0 / 10

Phase 47 shipped 2026-05-27 (6 plans). All 10 acceptance criteria implemented; never iPad-tested.

47-AC1
City pill → saved nabes + Browse all NYC
pending

Tap city pill in header. Panel opens with saved nabes + "Browse all NYC" + "Pin demo cities" + "Add to saved list".

What to walk →
  1. On Home, tap the purple "Wburg" pill in the top-right of the header
  2. A panel slides up: "Switch neighborhood / Your nabes"
  3. Confirm you see: a "Saved nabes" section, a "Browse all NYC →" button, a "Pin demo cities to top" switch, and a dashed "Add Williamsburg to your saved list" button
Open the app →
47-AC2
Browse all NYC → full-screen heatmap → tap to switch
pending

From city-pill modal, tap "Browse all NYC". NYC neighborhood polygons in brand gradient + live-count badges. Tap any colored nabe → switches.

What to walk →
  1. Open the city pill → tap "Browse all NYC →"
  2. A full-screen "Browse NYC by liveness" sheet opens — wait ~2-3s for the shapes to load (first open fetches map data; a "Loading…" note is normal)
  3. NYC shows as colored neighborhood shapes (purple→pink = quieter→busier; legend at the bottom)
  4. Tap any neighborhood → it becomes active and the app switches to it
Open the app →
47-AC3
Hard-hat markers on Explore map
pending

⚠ Drifted since Phase 50: Explore → Map DOES show hard-hat markers for developments, but it has NO filter chips — the Developments/Permits toggle moved to the HOME map's new "Now / Coming / History" layer row.

What to walk →
  1. Tap "Explore" → tap the "Map" button (top-right of the purple Discover header)
  2. Markers cluster over Williamsburg — zoom in (pinch / + button) until clusters split into pins
  3. Confirm development pins = white hard-hat on a violet pin (permits = neutral pins with a permit-number badge)
  4. Note: this map has no filter chips — the dev/permit toggle is on the HOME map's "Now / Coming / History" row, and Home hides developments until you pick "Coming"
Open the app →
47-AC4
Tap dev marker → drawer with builder + timeline + permits + sentiment
pending

Tap any hard-hat. Drawer with: builder name (tappable), other projects from same builder, permit list, timeline, community sentiment.

What to walk →
  1. Easiest path: Explore → top section "What's coming in Williamsburg" → tap a card (e.g. "Berry St Workforce Housing")
  2. A sheet opens: purple header with title, a tappable underlined "by [builder]", a "Follow this development" button, Units/Status/Expected stats
  3. Scroll Overview → confirm a Timeline, "Linked permits", and a "From the neighborhood" sentiment section (and Overview/Chat/Discussion tabs near the top)
  4. Confirm an "Other projects by [builder]" grid + a "View [builder]" button at the bottom
Open the app →
47-AC5
Tap builder name → BuilderDrawer with other developments
pending

From dev drawer, tap builder's name. New drawer: bio + signature project + their other developments, each tappable.

What to walk →
  1. In an open development sheet (AC4), tap the underlined "by [builder]" in the header (or "View [builder]" at the bottom)
  2. A builder sheet opens (e.g. "North River Development"): logo, projects/units/years stats, an "About" bio
  3. Confirm a "Signature project" card + an "All projects (N)" list
  4. Tap any project in that list → it opens that development's sheet
Open the app →
47-AC6
Explore "Coming" chip → temporal announcements feed
pending

⚠ Drifted since Phase 50: the "Coming" chip still opens the temporal developments feed (with a "N new" badge), but the Explore chip row was expanded (added Permits + Coming-soon biz) and the feed gained a "Submit a development" button.

What to walk →
  1. Tap "Explore" — the chip row now starts "Coming", then "Permits", "Coming-soon biz", "Services", "Listings"…
  2. Tap "Coming" (it's selected by default)
  3. Confirm the "What's coming in Williamsburg" feed with status cards (Newly filed / Breaking ground / Topping out / Opening) + a purple "N new" badge for the first ~2s
  4. Confirm a "Submit a development you've heard about" button above the cards
Open the app →
47-AC7
Vault → "What's coming on [Nabe]" tile → Coming feed
pending

Open Vault. New tile "What's coming on [Williamsburg]" with live counts. Tap → Coming feed pre-filtered to active nabe.

What to walk →
  1. Tap "Vault" (Williamsburg active, and keep the Vault search box empty)
  2. At the very top, confirm a purple "What's coming on Williamsburg" tile with a count
  3. Tap it
  4. Confirm it switches to Explore → the "Coming" feed, scoped to Williamsburg (tile is hidden if a search is typed)
Open the app →
47-AC8
Right Now banner fires for ≥50-unit permit
pending

Right Now banner on feed fires when ≥50-unit permit drops in active nabe, or when tracked dev hits milestone. Mock-triggered — visible on first load in W'burg.

What to walk →
  1. Open Home in Williamsburg (default on first load)
  2. In the "RIGHT NOW" banner row near the top, swipe the cards sideways
  3. Find the hard-hat card "New filing — 184 Bedford Ave" (88-unit) with a pulsing amber DEVELOPMENT/PERMIT label
  4. Tap it → confirm it opens that development's sheet
Open the app →
47-AC9
Day 4 onboarding has Developments second card
pending

⚠ Drifted — walk path corrected: the Day 4 "See Recommendations" + "See Developments" tiles live in the Home "New Here Guide" 7-day strip, NOT inside the onboarding swipe flow — and Day 4 only unlocks after you finish Days 1-3.

What to walk →
  1. "Me" tab → "Reset Onboarding" (bottom), then complete the short onboarding (pick Williamsburg)
  2. On Home, find the "New Here Guide" strip (horizontal day cards, "0/7 done")
  3. Complete Day 1 → Day 2 → Day 3 (tap each card's CTA) so Day 4 becomes active
  4. Open Day 4 ("Day 4 of 7 · 2 things") → confirm TWO tiles: "See Recommendations" + "See Developments"
How to reset onboarding →

Profile → bottom → Settings → "Reset onboarding". Or Safari Settings → Advanced → Website Data → 192.168.1.171 → Remove.

Open the app →
47-AC10
Switch to LA / Tokyo / Vesta → 2-3 devs per nabe
pending

Switch via city pill → LA / Tokyo / Vesta. Each demo city has 4-6 developments (more than the "2-3" originally stated), and the drawer pattern works.

What to walk →
  1. Tap the city pill → optionally turn on "Pin demo cities to top" so LA / Tokyo / Vesta sit at the top
  2. Tap "Los Angeles" → Explore → "Coming" → confirm multiple development cards; open one to confirm the sheet works
  3. Repeat for "Tokyo" and "Vesta"
  4. (Optional) Explore → Map for each → zoom in to confirm hard-hat markers
Open the app →
Phase 44 · Original 12-step walk

Pre-pitch punch list — never walked

0 / 12

Original 12-step walk from mockups/uat-checklist.html — never iPad-completed. Phase 48 self-testing covered most surfaces but not these specific checks. Folded here.

44-01
Switch cities from every tab
pending

Home / Explore / Vault / Me / Calendar — switching should NOT leak W'burg content into LA / Tokyo / Vesta / Greenpoint.

Open the app →
44-02
Tap 6 different W'burg feed authors
pending

Every one should open a real profile drawer. NO "User not found." Repeat 6×.

Open the app →
44-03
Save a hero W'burg listing + price alert
pending

Tap bookmark heart → toast "we'll notify on price changes" → reload → bookmark stays filled. Tap violet dot to disable.

Open the app →
44-04
Say hi suggestion chips
pending

Open Say hi thread → 3 chips visible above input ("Wave hi" / "Coffee this week?" / context chip) → tap "Wave hi" → message sends.

Open the app →
44-05
Families feed chip
pending

Filter feed by "Families" → playdate / library workshop / Strider bike posts visible.

Open the app →
44-06
Families with kids — Neighbors browse
pending

Open Neighbors browse → tap "Families with kids" chip → Park family + Sofia & Jin visible.

Open the app →
44-07
Vault vote CTA in non-NYC cities
pending

Open Vault on LA / Tokyo / Vesta → "Want Vault in your city? Vote" CTA visible → tap → vote count increments. Note: Phase 49 will override this to actually seed vaults everywhere — test now to capture baseline.

Open the app →
44-08
AI chat tooltip on first session
pending

Open AI chat (sparkle FAB bottom-right) → first session shows "Ask The Nabe AI" tooltip → dismissible. Reload → stays dismissed.

Open the app →
44-09
Esc key + X icon escape
pending

Open any drawer + press Esc on connected keyboard → closes. Open Say hi thread + tap X → returns to caller surface (profile/explore), NOT inbox.

Open the app →
44-10
MorningBriefingDrawer Lucide icons
pending

Open MorningBriefingDrawer → 8 section headers render Lucide icons (Building2 / Package / Moon / Flame / UserPlus / Heart / Bird-or-Heart / Star). No emoji.

Open the app →
44-11
Warm gradient page backgrounds
pending

Open Me / Family profile / Feed → warm violet→pink gradient background. NOT gray.

Open the app →
44-12
Brand gradient on every demo surface 🚨 highest-risk
pending

Eyeball every demo surface — should be dark Variant C (deep purple → black) everywhere. NOWHERE the old lighter violet→orchid. 224 instances were swept; this catches any regression.

Open the app →
Phase 45 · Carried-over reviews

Pitch-mode items (parked)

0 / 4

Pitch-mode work parked per "build mode" rule. Tracked here for visibility — no pressure to do now.

45-HM
Heatmap v2 mockup — approve / mix / redo
pending

The static heatmap mockup that drove Phase 47. Now that the live version ships (47-AC2 above), confirm the mockup direction was correct.

Open the mockup →
45-W5.17
Valuation tone confirmation
pending

Read deck Slide 13 and PITCH_OBJECTIONS §3-4 — does the "$25-40M with creative structure" framing read better than the old "$40-60M inbound interest"?

Where to read →
  • pitch/pitch-deck.html Slide 13
  • pitch/PITCH_OBJECTIONS.md §3 + §4
  • pitch/PITCH_STRATEGY.md (valuation section)
Open the deck →
45-W5.18/19/32
Deck-content drafts — approve / edit / defer
pending

Three deck drafts on founder-review.html: W5.18 Corcoran broker workflow story, W5.19 W'burg-at-maturity density model, W5.32 Meta-variant Neighborhoods-failure slide.

Open founder-review →
45-DEMO
Demo-script walk-through (whenever pitch happens)
pending

The 5-6 min demo walk in pitch/DEMO_SCRIPT.md — 7 wow moments + open + ask. Practice with timer when pitch nears.

Open the app →
Actions
Capture boards → Phase 48 · Phase 47 · All phases
Sources: .planning/TODOS.md outstanding UAT log + Phase 48 VERIFICATION.md + Phase 47 SPEC + Phase 44 PLAN