Phase 36 · Capture board · status: ✅ ALL 8 PLANS COMPLETE — awaiting founder iPad walk-through (D-52, D-53, D-36 legibility gate) · 2026-05-25

Rich Content & Live Coverage

Phase 36 captures six demo-impact upgrades bundled — US pilot expansion, palette refresh (per-city accents subsequently rolled back to a single unified Variant C gradient — see Recently Shipped), WC Hub V2 (12 of 14 concepts), live photo threading + UserProfile linkage, calendar polish, and a pitch-critical photo audit. All 8 plans shipped 2026-05-25, plus a post-walkthrough palette rollback sweep on the same date.

Captured: 2026-05-25 · CONTEXT.md + 8 PLAN.md files committed end-of-session 2026-05-25 · All plans executed: 8/8 ✅
8
Plans
8
Executed · ALL 8 plans shipped 2026-05-25 ✅
0
Open questions
53
Decisions locked (D-01 → D-53)
📦 Recently shipped Plans that landed during Phase 36 execution — newest at top
✅ Palette rollback sweep — shipped 2026-05-25 (post-walkthrough)
Founder direction during iPad walkthrough: collapse per-city accents + roll the legacy indigo/purple/pink brand gradient to the new Variant C black + purple everywhere it surfaces. Six atomic commits: (1) added .bg-gradient-brand / -r / -b utility classes in src/index.css + removed per-city --accent-* CSS tokens; (2) collapsed cityAccent.ts to a unified Variant C shim — getCityAccent() is now a no-op returning the same gradient for every city so all 9 call sites still compile but visually unify; (3-5) swept ~142 component files across feed, layout, messaging, ask, calendar, businesses, professionals, profile, explore, vault, services, ui, listings, ai, discovery, groups, hotspots, agent-dashboard, agent-engagement, post-hire, onboarding, notifications, properties, search, map, create — every saturated bg-gradient-to-r/br/b from-indigo-500 via-purple-500 to-pink-500 chain (and 2-stop / dark / 400/600 variants) replaced with .bg-gradient-brand-*. Also swept inline style={{ background: 'linear-gradient(135deg, #6366f1, #8b5cf6, #ec4899)' }} hex triples to the Variant C hex triple #1a0033 → #4c1d95 → #000000. AppShell + AppErrorFallback Living Skyline SVG logo gradient stops swapped. Pastel -50/-100 warm card tints (the Phase 32 two-layer system) intentionally preserved. Per-category single colors (eventCategoryColor, scoreUtils, agent dots, vault accent colors) intentionally preserved — those are differentiation tokens, not the brand gradient. (6) DESIGN_STANDARDS.md updated: rolled-back palette section, new utility class table, anti-pattern callout, decisions log updated. Build green throughout (3.14s last). ~190 occurrences swept across ~145 files.
✅ Plan 36-08 — Photo audit (FINAL Phase 36 plan) — shipped 2026-05-25
Swept all 6 mock data files (mockPosts.ts, mockBusinesses.ts, mockUsers.ts, mockEvents.ts, mockListings.ts, mockServiceProviders.ts) per D-37 mismatch rubric (D-38: content / locale / identity / business identity). ~25 entity-level Picsum seed swaps with // seed verified for content match comments per D-39. D-40 per-locale curated PICSUM SEED REFERENCE headers added to all 6 files (NYC, LA, Austin, Paris, Tokyo, BA, Cape Town, Vesta). Highest-leverage swaps: listings 1-3 photos (the demo-most-likely tap targets — lst1a/b/c, lst2a/b/c, lst3a/b/c → wburg-condo-interior, gp-brownstone-interior, wburg-bedford-studio etc.), 7 legacy NYC events (trivia1/openmic1/smorg1/yoga1/blockparty1-2/brooklynbowl1 → wburg-petes-trivia-night / wburg-rough-trade-openmic etc.), 3 Vesta events realigned (incl. evt-vesta-3 fixed from vesta-harbor-1 → vesta-civic-council-hall — civic council ≠ harbor), Vesta closing-beat post-vesta-6 hero → vesta-community-center-warm aligned with D-42 CULTURAL_HERO. D-42 Vesta closing-beat hero curated upload: public/curated/ scaffold + ATTRIBUTION.md with founder follow-up shipped; CulturalSection.tsx renderer patched to detect /-prefixed paths as direct curated assets vs Picsum seeds; actual image sourcing deferred to founder per plan defensive clause (requires founder taste judgment to avoid exploitation / non-conflict markers per Phase 35 D-11). All Vesta entities verified zero forbidden words (war/bombed/siege/refugees/ruins). Per D-41 no mid-phase founder checkpoint — founder spot-checks at end-of-phase iPad walk-through per D-53. Build green (3.24s), tsc clean.
✅ Plan 36-06 — Photo gallery + On the ground + Right Now escalation — shipped 2026-05-25
3 deliverables: (a) LivePhotoGallery + LivePhotoLightbox inside PostDetail per D-16 (3-col grid with contributor + caption + timestamp, full-screen lightbox with chevron / arrow-key / touch-swipe nav, Aperture lucide section header, Camera empty state, react-loading-skeleton everywhere). PostDetail gains scrollToGallery (D-17 — 350ms delay for vaul) + highlightPhotoId (D-24 — violet ring + scrollIntoView) props. (b) New OnTheGroundSection.tsx always rendered on UserProfile drawer per D-26 — 4-col photo grid with post-title captions (D-23a/c) + 160px CartoDB Voyager mini-map with one pin per location, fitBounds (D-23b/D-29). Respects photosArePublic per D-28 (false → empty state). Cross-city visibility per D-27. AppShell adds a cross-context PostDetail mount for "On the ground" taps so tile/pin tap opens the original post scrolled-to-gallery with the photo highlighted. (c) PhotoSurgeBannerCard.tsx in RightNowBanner per D-19 — w-72 card matching WCHubCard footprint, Camera lucide (NOT 📸 emoji per DESIGN_STANDARDS), "N photos posted in the last 30 min · {title}", pulsing violet dot + "PHOTO SURGE" label. 2 cards surface (Williamsburg block party 12 photos + NYC fire 9 photos) from Plan 36-05 pre-flagged data. Tap → opens PostDetail scrolled to gallery. Surge derivation lives in FeedContainer (not AppShell as plan suggested — keeps existing PostDetail mount as single source per file, no regression to PostCard / banner-alert tap paths). D-16/D-17/D-19/D-21/D-22/D-23/D-24/D-26/D-27/D-29 all locked. Build green (3.25s, 0 errors).
✅ Plan 36-04 — WC Hub V2 sectioned drawer UI — shipped 2026-05-25
Rebuilt WCHubDrawer.tsx as a 239-line orchestrator + 6 per-section sub-components under src/components/feed/wc-hub-v2/ (HeroLiveMomentSection, HappeningNowSection, HyperlocalSection, CrossCitySection, TouristDiasporaSection, CulturalSection + extracted WCHubLoadingSkeleton). All 6 sections render in D-09 order: Hero → Happening Now → Hyperlocal → Cross-city → Tourist+Diaspora → Cultural. 12 of 14 brainstormed concepts land as feature cards (#12 jersey wall + #14 player roots NOT rendered per D-10). Vesta cultural hero renders FULL-WIDTH at the bottom per D-09 + D-12 using the slate per-city accent gradient. Cheer heatmap uses 4-state intensity (zinc-300 / yellow-400 / emerald-400 / rose-500-pulse). HappeningNow + Hyperlocal cards branch off discriminated item.type via exhaustiveness-checked switch. Drawer hero header uses getCityAccent(activeNeighborhood).gradient per D-32 so switching cities changes the gradient flavor. D-11 OVERRIDE shipped: removed showWorldCupHub() import + wcHubEnabled date gate from AppShell — drawer + card render regardless of date so the pitch demo always works. WCHubCard copy refresh: "through July 19" → "tap to enter →" + fallback subtitle "all 6 cities" → "10 cities" (Phase 36 D-07 footprint correction). Per-section try/catch surfaces a per-section error placeholder so one broken section doesn't kill the drawer. No emoji glyphs — lucide-react components only. All sub-components ≤200 lines. Build green (tsc + vite).
✅ Plan 36-07 — Calendar polish — shipped 2026-05-25
New src/utils/eventCategoryColor.ts helper exposing getCategoryDotColor() + getCategoryDotHex() for the 8 D-43 demo categories (social=indigo, fitness=emerald, community=purple, food=orange, arts=pink, cultural=violet, singles=rose) plus 4 in-union extras. MonthGrid rewritten with extracted DateDots sub-component rendering up to 3 distinct-category dots at w-1.5 h-1.5 per D-43, plus · density indicator for 4+ events per D-44. Empty-date tap shows amber CTA banner "No events on [date] · [city]. Browse upcoming events ↓" with click-to-scroll wiring per D-45. +33 fan-out mock events distributed 2026-05-25 → 2026-06-24 (Williamsburg/Greenpoint/East Village 5 each, LA/Austin/Vesta 3 each, Paris/Tokyo/BA 2 each, Cape Town 3) — every (city × week) slot now has ≥1 event per D-46 (was 17/50 → 50/50). Per-city dot filtering per D-47 already wired via CalendarDrawer's pre-filter pipeline. Tap-to-filter-list per D-48 preserved through existing activeDate flow. Vesta tone clean (no forbidden words — civic kitchen / kids' soccer / harbor cleanup). Build green.
✅ Plan 36-05 — Photo threading types + mock data — shipped 2026-05-25
PhotoContribution interface + photoThread / isLivePhotoSurge on BasePost + photosArePublic on Author (default true) per D-13/D-18/D-19/D-28. 4 demo posts seeded with 43 photo contributions (Williamsburg block party 12 + NYC fire 9 + Tokyo Sanja Matsuri parade 14 + Paris climate march 8 — NYC + Tokyo + Paris coverage). 2 posts pre-flagged isLivePhotoSurge=true (Williamsburg block party + NYC fire) for Right Now banner escalation in Plan 36-06. 4 active contributors documented in MOCK_USERS comment block per D-25 (Maria G. 12, Yuki Sato 10, Camille Moreau 6, user-lb-3 4). No GPS verification (D-14), no time decay (D-15 override), no flag-button UI (D-20 data hook only). Build green.
✅ Plan 36-03 — WC Hub V2 mock data scaffold — shipped 2026-05-25
Per-section types + arrays in new sibling file src/data/mockWorldCupV2.ts (re-exported via canonical @/data/mockWorldCup): HERO_LIVE_MOMENT, HAPPENING_NOW, HYPERLOCAL, CHEER_HEATMAP (10 cells), LIVE_STITCHES, FANS_NEARBY, HOSTED_PARTIES, VISITOR_GUIDES, CULTURAL_HERO + aggregate WC_HUB_V2. 12 of 14 concepts kept (#12 jersey wall + #14 player roots dropped per D-10). Vesta cultural hero cross-linked to post-vesta-6 / evt-vesta-1 per D-12. Lucide icon names (PartyPopper / Beer / Tv / Handshake / MapPin / Utensils / Trophy / Award) verified against lucide-react. Existing MOCK_WC_GATHERINGS + findCrossCityGatherings preserved (consumers still compile). Build green.
✅ Plan 36-02 — Palette refresh + per-city accents — shipped 2026-05-25
Variant C swap (#1a0033 → #4c1d95 → #000000), 10-city accent map (violet/emerald/amber/orchid/warm-orange/deep-blue/crimson/sky/gold/slate), getCityAccent() helper at src/utils/cityAccent.ts, 6 consumer surfaces wired (NeighborhoodSelector pill, RightNowBanner urgent border, MorningBriefingDrawer hero, CalendarDrawer hero, ExploreNeighborhoodMode hero cards, ProfileContainer hero), pitch-deck-v2.html + one-pager.html updated to Variant C, DESIGN_STANDARDS.md documents two-layer system (frames dark / cards warm) per D-34, v1.2-warm-palette rollback tag created at HEAD prior to swap (D-36 gate). Build green.
✅ Plan 36-01 — US pilot expansion (LA + Austin) — shipped 2026-05-25
10-key NeighborhoodKey, 2 city configs + admin polygons, 20 posts (10 LA + 10 Austin), 10 residents (5 + 5), 6 businesses (3 + 3), 6 events (3 + 3), 2 hotspots, 2 morning briefings, 2 Featured Agents (Marcus Reyes — Compass Eastside LA, Sofía Calderón — Compass East Side ATX, both team-5 / team-6 to avoid collision), 4 WC watch parties (2 Argentina-vs-Brazil + 2 Argentina-vs-France), 10-entry onboarding picker in US-first order. Build green, verify:coords PASS 82 entries.
✅ Post-verification fixes (2026-05-25, founder iPad pass)
Founder ran iPad verification on Phase 36 features and surfaced 5 bugs. All fixed autonomously in this session:
Bug Fix Commit
1. Photo gallery glitchy + takes too much screen 3-col-with-labels → 4-col compact tiles; labels moved to lightbox; touchAction pan-y on lightbox kills swipe lag 72f4475
2. Tapping contributor name in gallery did nothing Lightbox now wires the contributor avatar+name row to useAuthorClick() → opens UserProfile drawer (D-24 cross-context flow complete) 72f4475
3. Calendar dots too sparse — no multi-dot days visible +64 events seeded 2026-05-25 → 2026-06-30; Williamsburg gets 34 events with multi-dot days; June 13 hits the D-44 density indicator; all 11 categories represented a6f8933
4. Empty-date CTA hidden, doesn't look/work well Moved CTA from above day-headers row → below the date grid as a prominent card-style banner with full-width button; subtitle now uses today's month (was hardcoded "March 2026") 4663961
5. WC Hub V2 cards weren't tappable All 14+ cards across 6 sections converted from div → button. Hero tiles + heatmap cells switch city. Vesta hero + cross-city thread open source posts. Every card has focus ring, active scale, aria-label. ee1290b
5b. Tappable cards still felt like "nothing happened" — they just collapsed the hub back to the home feed Every WC Hub V2 card now opens a real post or event when tapped (not just a city switch). Added 10 new mock posts + 6 new mock events for the demo (Williamsburg watch-map editorial, El Cocinero empanada special, Franklin BBQ Austin special, Williamsburg + LA bracket pools, 4-city goal-stitch photo, fans-gathered post, 3 Argentine/Tokyo visitor guides; caracas-celebration meetup, McCarren + Zilker pickup games, Berry Park Brazil meetup, Maria's rooftop + Camila's backyard hosted parties). Added sourcePostId + sourceEventId to HappeningNowItem / HyperlocalItem / LiveStitch / FansNearby / HostedParty / VisitorGuide. Each card branches: event > post > city-switch fallback. AppShell mounts a cross-context EventDetailDrawer (mirrors crossContextPost pattern). WCHubDrawer gets onNavigateToEvent prop and threads onOpenPost + onOpenEvent down through every section. Hero tiles + heatmap cells intentionally keep city-switch (they're explicit city pickers). 403316e, 4741c2a, 13753ef, 0ab6b8a
6. WC Hub collapsed under child drawers + EventDetailDrawer felt sparse vs PostDetail WCHubDrawer no longer dismounts when child post/event drawers open (parent stays visible behind child, founder lands back on hub on close). EventDetailDrawer gained a mini-map at the venue lat/lng (matches PostLocationMiniMap convention — CartoDB Voyager, scrollWheelZoom off, single Marker) so cross-context event taps from the hub feel as substantial as cross-context post taps. 2a1a696
7. Other-user profile drawer felt sparse vs Me tab + photo contributions invisible in Me tab Photos Founder asked "didn't we already build other user profiles to look like what my profile looks like?" — hero/badges were unified, but sections weren't.

(a) PlacesHistory Photos tab now merges authored photos + photoThread contributions (each contributed tile gets a top-right "Contrib" badge). Tap on contributed tile opens host post scrolled to gallery, photo highlighted. Wired through ProfileContainer → AppShell's existing handleOpenPostFromProfile.

(b) UserProfileDetail now mirrors Me tab: hero → expertise → badges → Contributions (OnTheGround, unchanged) → Activity (MyActivity userId={userId} — Posts/Events/Recs filtered to viewed user) → Places & Photos (PlacesHistory userId={userId}) → Follow + Message CTAs. MyActivity refactored to take optional userId + title props (defaults preserve Me-tab behavior). Events render empty for other users (mockEvents has no per-user store — won't fabricate); Recs mine quick-rec posts so real recommenders surface. Removed nested scroller inside drawer (iPad gesture trap).

Skipped intentionally: NabeCards (personal shareable), LevelProgress / BlockScoreCard (self-progression), FollowingList / Leaderboard / SavedContent (personal surfaces), active-engagement blocks (agent-relationship UX).
30d5987, 6003f27, 525f346
Build: npm run build green after each fix. Orchestrator was working on palette rollback in parallel — no overlap with that file set (AppShell.tsx was only touched to wire onNavigateToPost / onNavigateToEvent / onOpenPost and mount the cross-context EventDetailDrawer; no palette/gradient classes were modified).
⬜ iPad legibility verification — Plan 36-02 (D-36 gate)
For each city in the selector (10 cities), walk these 6 screens on iPad Safari at 192.168.1.171:5173 and confirm legibility:
  1. Home tab — header pill / Right Now banner / a Featured Agent card / a post card text legible
  2. Explore tab — neighborhood hero card legible, text contrast ≥ AA
  3. Calendar drawer — hero header legible, date numbers visible
  4. Morning Briefing drawer — hero header + body legible
  5. Profile tab — gradient hero readable, stat boxes legible
  6. WC Hub drawer (if open) — sectioned scroll, all body text legible
Pass criteria: ALL text on ALL screens reads cleanly on iPad in normal indoor light. If ANY screen fails, run git checkout v1.2-warm-palette to roll back, then re-plan with a different palette variant.
Founder runs this check at end of phase per D-53. No mid-phase verification required.
🚀 Next session kickoff — Phase 36 ready to execute

After reviewing the 8 plan files, paste this to ship Phase 36

Read .planning/HANDOFF.md, then mockups/phase-36-capture-board.html. I've reviewed the 8 plan files in .planning/phases/36-rich-content-live-coverage/ and they're good to go. Run /gsd:execute-phase 36 to ship Phase 36 autonomously. All 8 plans are autonomous: true — execute through to end of phase without mid-phase gates. I'll review the full result at the end. Reminders: - Stay on pitch branch (do NOT merge design-unification → main) - Wave order: 36-01 → 36-02 → (36-03 + 36-05 + 36-07 parallel) → (36-04 + 36-06 parallel) → 36-08 last - Plan 36-02 must create git tag v1.2-warm-palette BEFORE any palette changes (rollback gate per D-36) - Plan 36-08 (photo audit) runs LAST so it sees newly-added entities - Update mockups/phase-36-capture-board.html status counters as plans complete - Final verification: build green + verify:coords green + iPad walk-through of all 10 cities

⚠ Before running execute-phase: open the 8 PLAN.md files and skim. Decision IDs (D-01 → D-53) reference back to 36-CONTEXT.md if you want to verify a plan implements what you locked.

✅ Phase 36 planned · ready for review Committed 2026-05-25 · 10 atomic commits (CONTEXT + discussion log + 8 plans)

The 8 PLAN.md files

Plan Wave Depends on Implements Commit
36-01 ✅1US pilot expansion (LA + Austin + 2 new Featured Agents) — shipped 2026-05-250c8a733
36-02 ✅136-01Palette refresh + 10-city accent map (v1.2-warm-palette rollback tag) — shipped 2026-05-25d16c1fc
36-03 ✅236-02WC Hub V2 mock data scaffold (12 concepts) — shipped 2026-05-252304d5b
36-04 ✅336-03WC Hub V2 sectioned drawer UI (6 sections, Vesta full-width hero, D-11 date-gate removed) — shipped 2026-05-25aba53eb
36-05 ✅236-02Photo threading types + mock data (4 events, 43 photos, NYC + Tokyo + Paris) — shipped 2026-05-25bc94853
36-06336-05Gallery + "On the ground" + Right Now photo-surge escalation22f9a67
36-07 ✅236-02Calendar polish (8-category dots, density indicator, empty-date CTA, +33 fan-out events) — shipped 2026-05-257980036
36-08436-01, 36-03, 36-05Photo audit (runs LAST so it sees new entities)7d0031b

All 8 plans are autonomous: true per D-53. Founder reviews at end of phase only.

Claude judgment calls captured in plans (review if any feel wrong):

  • Plan 36-03 — Lucide icon names stored as strings in mock data so 36-04 can dynamically lookup via LucideIcons[iconName]
  • Plan 36-02 — per-city accent gradients built as linear-gradient(135deg, #1a0033 0%, {city-mid} 50%, #000000 100%) to keep cities unified inside Variant C dark family
  • Plan 36-08 — Vesta hero curated upload is the only non-Picsum image (per D-42 default); per-city heroes deferred
  • Plan 36-01 — Featured Agent team IDs landed at team-5 (Marcus Reyes — Compass Eastside LA) + team-6 (Sofía Calderón — Compass East Side ATX) because team-2/team-3 were already in use by Rivera Group + Sarah Park Rentals
🔗 Quick links Everything click-through for Phase 36
📦 Phase 36 scope 8 plans across 5 waves · ~16-25 hours wall-clock
Plan Scope Theme
36-01 US pilot expansion — LA + Austin foundation (types, polygons, mock data, briefings, hotspots) scale
36-02 Palette refresh + per-city accent colors — Variant C swap + unique gradient per city brand
36-03 WC Hub V2 mock data scaffold — per-section sub-arrays + types WC hub
36-04 WC Hub V2 sectioned drawer — hero + 5 sections + 14 feature cards + Vesta full-width WC hub
36-05 Photo threading types + mock data — `photoThread` field on Post, contributor photos live cov
36-06 Photo threading UI + UserProfile — gallery view, map pin handler, "Where they've been" section live cov
36-07 Calendar polish — color-coded dots + upcoming-date wiring + empty-date state polish
36-08 Photo audit — sweep every mock data file, fix mismatched photos pitch crit
✅ Decisions locked Settled. No re-litigation.
Autonomy
All 8 plans `autonomous: true`
Founder reviews everything at end of phase, no mid-phase gates.
Phase 36 scope
6 upgrades bundled, 8 plans
Founder said "I love it all" — including the late additions (palette, photo audit).
US cities
LA + Austin (Day 30 pilots)
SF + Boston + Miami deferred to Phase 37.
Palette
Variant C (midnight-purple → black)
Plus unique accent color per city to signal switch.
WC Hub V2 section order (D-09)
Hero → Happening Now → Hyperlocal → Cross-city → Tourist+Diaspora → Cultural
Cultural last so the Vesta full-width hero closes the drawer scroll as the emotional beat. Locked via Plan 36-03 data scaffold.
WC Hub V2 concept set (D-10)
12 of 14 — drop #12 jersey-spot wall + #14 player roots
Plan 36-03 scaffolded mock data for the remaining 12 concepts across the 5 themed sections.
WC Hub V2 Vesta beat (D-12)
Single full-width cultural hero cross-linked to post-vesta-6 + evt-vesta-1
CULTURAL_HERO export wires the Phase 35 Vesta content into the drawer's closing slot. No additional cultural concepts under it.
WC Hub date gate (D-11 OVERRIDE)
No auto-hide after Jul 19 — hub is always visible
Plan 36-04 removed showWorldCupHub() gate from AppShell so the WC card + V2 drawer render regardless of date. Founder: "I would like this to survive so we can show as a demo that this was able to hold/host all this content."
Photo thread qualifying types (D-13)
event / safety / located community only
Other post types (marketplace, tip, listing, etc.) MUST leave photoThread undefined. Enforced by mock-data convention + Plan 36-06 UI type guard.
Photo contribution gates (D-14 + D-15 + D-20)
No GPS verification · no 24-hour auto-archive · no flag-button UI
Demo relaxations: anyone with the city as active neighborhood can contribute; threads stay open indefinitely; only the reported: number data hook ships (Phase 37 moderation).
PhotoContribution shape (D-18)
{ id, contributorId, timestamp, imageUrl, caption?, reported? }
Plan 36-05 seeded 43 contributions across 4 posts (Williamsburg 12 + NYC fire 9 + Tokyo parade 14 + Paris protest 8).
Right Now photo-surge escalation (D-19)
isLivePhotoSurge=true on 2 demo posts
Williamsburg block party + NYC fire pre-flagged so Plan 36-06's RightNowBanner photo-surge card fires. Promoted from Phase 37 stretch into Phase 36 scope.
Active contributors (D-25)
Maria G. (12) · Yuki Sato (10) · Camille Moreau (6) · user-lb-3 (4)
Plan 36-06's UserProfile "On the ground" section renders their contributions; all other profiles get the empty state per D-26.
Author.photosArePublic (D-28)
Optional boolean on Author, default true (no UI toggle in Phase 36)
Plan 36-06 consumer reads author.photosArePublic ?? true. Phase 37 polish adds the settings UI.
Calendar dot mapping (D-43)
8 categories → 8 colors
social=indigo / fitness=emerald / community=purple / food=orange / arts=pink / cultural=violet / family=cyan (ref) / singles=rose. Lives in src/utils/eventCategoryColor.ts.
Calendar density rule (D-44)
≤3 dots; 4+ events → 2 dots + ·
Distinct categories preferred (3 social events render 1 dot). Density driven by TOTAL events on date, not unique-cat count.
Empty-date tap CTA (D-45)
"No events on [date] · [city]. Browse upcoming events ↓"
Amber banner above the month grid. ↓ CTA scrolls feed to top + clears any selected-date filter. Banner cleared by tapping a different date or changing months.
+30-day fan-out (D-46)
33 new events 2026-05-25 → 2026-06-24
50/50 (city × week) slots covered (was 17/50). ≥4 distinct categories per city. Vesta civic-coded per Phase 35 Pattern H.
Per-city dot filtering (D-47)
Active city's events only · "All Neighborhoods" sums all 10
Wired via CalendarDrawer's pre-filter (events prop into MonthGrid is already filtered by activeNeighborhood). MonthGrid stays presentation-only.
Selected-date list filter (D-48)
Tap date with events → inline list filters to that day
Preserved unchanged through existing activeDateEventEditorialFeed pipeline. Date chip dismissible by ✕.
⬜ Open questions Founder marks ⬜ → ✅ before plan-phase

~30 design questions captured across 7 streams in .planning/phase-36-open-questions.md.

Stream 0 · US expansion
8 questions · Featured Agent in LA? Locale themes? WC content per city?
Stream 1 · WC Hub V2
4 questions · Section order? Drop any of 14? Time-bound auto-hide?
Stream 2 · Photo threading
8 questions · Contribution model, time decay, UI placement, moderation
Stream 2b · Profile linkage
8 questions · Section name, what displays, privacy default, map view
Stream 2c · Palette + colors
7 questions · Where accents surface, migration risk, rollback strategy
Stream 2d · Photo audit
6 questions · Verification rubric, locale-specific seeds, curated images?
Stream 3 · Calendar polish
6 questions · Dot colors, empty-date behavior, +30-day mock data range
Stream 4 · Cross-cutting
5 questions · Branch, plan order, what to cut if scope slips. Autonomy ✅
🎯 Highest leverage to answer If you only answer 5 questions, answer these
  1. 1. Profile section name — "Where they've been" vs "On the ground" vs "Photos"? (Stream 2b.1)
  2. 2. Photo thread time decay — 24-hour auto-lock OK? (Stream 2.3)
  3. 3. Calendar dot color mapping — 8 categories or fewer? (Stream 3.1)
  4. 4. Per-city accent gradient mapping — confirm 10 city palette assignments? (Stream 2c.2)
  5. 5. Photo audit — keep Picsum or upload curated images for hero shots? (Stream 2d.3)
📌 Outstanding + parked Things to circle back on
discuss
Story bubbles in non-NYC cities — keep or remove?
From iPad test. Could be its own decision in discuss-phase 36 or left for Phase 37.
deck
Vesta language on V2 deck slide 6 — "Mariupol, Gaza, Sudan" reference
Soften to "places under duress" or leave as-is? Founder hasn't ruled.
promoted ✅
Live photo threading → escalate to Right Now banner if photo flurry
Stream 2.7 — promoted from Phase 37 stretch into Phase 36 scope per D-19. Mock data flagged in Plan 36-05; UI ships in Plan 36-06.
phase 37
SF + Boston + Miami (Day 90 deck markets)
If pitch goes well, expand US footprint in Phase 37.
iPad bookmarks

URLs to save

App · http://192.168.1.171:5173/
Phase 36 capture board · http://192.168.1.171:8001/phase-36-capture-board.html
Phase 35 capture board · http://192.168.1.171:8001/phase-35-capture-board.html
Capture boards index · http://192.168.1.171:8001/index-capture-boards.html
WC Hub V2 mockup · http://192.168.1.171:8001/wc-hub-v2-all-concepts.html
Variant C palette mockup · http://192.168.1.171:8001/palette-purple-black.html
Session 2026-05-25 summary · http://192.168.1.171:8001/session-2026-05-25-summary.html
Pitch deliverables · http://192.168.1.171:8000/
Pitch deck V2 · http://192.168.1.171:8000/pitch-deck-v2.html