.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.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.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).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).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.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.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.#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.| 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 |
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).
192.168.1.171:5173 and confirm legibility:- Home tab — header pill / Right Now banner / a Featured Agent card / a post card text legible
- Explore tab — neighborhood hero card legible, text contrast ≥ AA
- Calendar drawer — hero header legible, date numbers visible
- Morning Briefing drawer — hero header + body legible
- Profile tab — gradient hero readable, stat boxes legible
- WC Hub drawer (if open) — sectioned scroll, all body text legible
git checkout v1.2-warm-palette to roll back, then re-plan with a different palette variant.After reviewing the 8 plan files, paste this to ship Phase 36
⚠ 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.
The 8 PLAN.md files
| Plan | Wave | Depends on | Implements | Commit |
|---|---|---|---|---|
| 36-01 ✅ | 1 | — | US pilot expansion (LA + Austin + 2 new Featured Agents) — shipped 2026-05-25 | 0c8a733 |
| 36-02 ✅ | 1 | 36-01 | Palette refresh + 10-city accent map (v1.2-warm-palette rollback tag) — shipped 2026-05-25 | d16c1fc |
| 36-03 ✅ | 2 | 36-02 | WC Hub V2 mock data scaffold (12 concepts) — shipped 2026-05-25 | 2304d5b |
| 36-04 ✅ | 3 | 36-03 | WC Hub V2 sectioned drawer UI (6 sections, Vesta full-width hero, D-11 date-gate removed) — shipped 2026-05-25 | aba53eb |
| 36-05 ✅ | 2 | 36-02 | Photo threading types + mock data (4 events, 43 photos, NYC + Tokyo + Paris) — shipped 2026-05-25 | bc94853 |
| 36-06 | 3 | 36-05 | Gallery + "On the ground" + Right Now photo-surge escalation | 22f9a67 |
| 36-07 ✅ | 2 | 36-02 | Calendar polish (8-category dots, density indicator, empty-date CTA, +33 fan-out events) — shipped 2026-05-25 | 7980036 |
| 36-08 | 4 | 36-01, 36-03, 36-05 | Photo 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) becauseteam-2/team-3were already in use by Rivera Group + Sarah Park Rentals
| 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 |
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."reported: number data hook ships (Phase 37 moderation).author.photosArePublic ?? true. Phase 37 polish adds the settings UI.src/utils/eventCategoryColor.ts.·activeDate → EventEditorialFeed pipeline. Date chip dismissible by ✕.~30 design questions captured across 7 streams in .planning/phase-36-open-questions.md.
- 1. Profile section name — "Where they've been" vs "On the ground" vs "Photos"? (Stream 2b.1)
- 2. Photo thread time decay — 24-hour auto-lock OK? (Stream 2.3)
- 3. Calendar dot color mapping — 8 categories or fewer? (Stream 3.1)
- 4. Per-city accent gradient mapping — confirm 10 city palette assignments? (Stream 2c.2)
- 5. Photo audit — keep Picsum or upload curated images for hero shots? (Stream 2d.3)