Place Journey v2 — master-plan SSOT

Fresh journey mockup, premium component system only. Governed by build/place-pages/master-plan/ — each screen implements its council decision sheet verbatim (✅ rulings only; ⏳/🚫 absent by design). C13-amended / DECISIONS #8: ONE language per screen — the app renders a single locale via i18n (12 locales); frames are English, plus one hi-locale reference frame. Currently: S1 Entry + Set-your-place (5 states + locale check), S2 Intro (the carousel is dead — land on the page, a ~40% sheet does the talking; 3 states + locale check) and S3 Adaptive landing + place header (THE HEADER DIET — top bar → counted ladder → Today strip → sticky tabs, ≈230px vs 510px; identity blocks move into Overview; 5 states + locale check) and S4 Overview tab content (identity blocks first; ONE builder/consumer reorder at 60%; ONE consolidated builder card; directory trust anatomy — checkmark only on claimed, no party on administrative roles, no dead call chips; hybrid local places + POI sheet; 4 states + locale check). Later screens land here as their councils rule.

‹ All screensS3·A Daily return · FeedS3·B Overview tabS3·C Banner statesS3·D District headerS3·E Urban 5-rungS3·F hi locale check
S3 · landing · returning daily

The header diet — home-first, Feed-first

Implements A1 home-first EVERY session — widening-as-landing is dead ("your own door redirecting you to the block office"); "glimpse all locations" is the LADDER's job · A2 activity-teaser ladder: every rung carries its post count ("Saran · 140"), quiet rungs say "quiet" — data already in the landing payload, zero new queries · B5 header = 4 things ONLY: top bar (name + type + tappable "Home · Resident" chip, D13 — never a bare Follow CTA on own home, D12 auto-follows at confirm) → ladder → Today strip → STICKY tab bar. Header ≈230px before content vs 510px before (−55%) — the tab bar was OFF-SCREEN in the most common state · B7 Today cells: ① 6 new (7d window v1) → Feed ② 3 open issues → Issues ("0 open" = health signal) ③ personal slot, v1 = "62% built" on own home · B8 the strip is place-pulse, valid on every tab · C9 returning sessions default to FEED ("checking home is a habit; building is a task"). App-only: A3 client skips the landing call when placeIntroSeen unset, lazy ladder · E15 userId-prefixed landing cache key BEFORE any personal cell. S3 AMENDMENT 2026-06-11 (a)–(g) applied: two-line ladder rungs (name over level sublabel, brand-tint count pill; ACTIVE = solid brand fill, NO pulse dot) · number-first Today cells with brand/warn/gold left accents · 34px top-bar pin tile · Feed/Issues tab count badges. Item (e) animated tab ink underline is BUILD-ONLY — not drawn in mockups.

3:42
••••

Bheldi Village

BheldiVillage6 GarkhaBlockquiet SaranDistrict140 BiharState2.1k
6new
Feed →
3open
Issues →
62%
built · Finish
Overview
Feed6
Issues3
People
STICKY
header ends · ≈230px (was 510px)
RK
Ramesh Kumar
Resident · 2h
The handpump near the school is leaking again — reported it to the Panchayat with photos.
124
SD
Sunita Devi
Contributor · 5h
Added the PHC phone number to Bheldi's page.
★ +10 Seva
62
MS
Manoj Singh
Resident · yesterday
Chhath ghat cleaning drive this Sunday morning — bring gloves, tea is on me.
S3 · landing · Overview tab

Hero, breadcrumb, stats, completeness — now tab content

B6: hero, breadcrumb, stats and completeness ALL MOVE INTO the Overview tab as its first content blocks — they are identity/builder content, not daily pulse. Same dieted header as S3·A (B8: the Today strip stays — place-pulse is valid on every tab). Filled hero carries "Edit photo" (level-aware; the empty stub elsewhere shrinks 150→~80px) · breadcrumb + AC/PC chips rendered as "Vidhan Sabha" / "Lok Sabha", locale-aware (C11) · stats line uses Material icons + shows on-Nyburs count only at ≥3 alongside the census line · the completeness card is titled "Bheldi info" (the F18 rename of "Page completeness"; i18n batch is build-phase). Below, the existing overview sections (offices etc.) continue unchanged. App-only: E15 invalidatePlaceDetail also busts the landing cache; 10-min remount refresh gate. Header refresh per S3 AMENDMENT 2026-06-11 (a)–(d); (e) tab ink underline = build-only.

3:42
••••

Bheldi Village

BheldiVillage6 GarkhaBlockquiet SaranDistrict140 BiharState2.1k
6new
Feed →
3open
Issues →
62%
built · Finish
Overview
Feed6
Issues3
People
STICKY
Edit photo
BiharSaranGarkhaBheldi
Vidhan SabhaMarhaura Lok SabhaSaran
14 on Nyburs 6 contributors village of 4,200
Bheldi info 62% · Finish →
Still missing — ward member, nearest bank, 2 photos
Bheldi's offices4 of 6
Mukhiya · Gram Panchayat
Ramnath Singh
MLA · Marhaura
Jitendra Rai
S3 · landing · banner states

One slot, three states — nav, not guilt

C10: the quiet banner collapses to ONE slot in neutral-info tone — the orange alarm is dead as a resting state (orange only ever transient). The slot renders below the sticky tab bar, above tab content. State A = orientation when home is <80% built AND the user is viewing a widened rung THEY tapped (A4: widened is always user-chosen — the auto-jump is removed): "Showing Saran — Go to Bheldi →". State B = invite-neighbours on ≥80%-built-but-quiet villages — the deferred share CTA lands here, opening the D15 share card (built with the profile/share wave). State C = alive: nothing — silence is the healthy state. App-only: pushReplacement on "Go to" (fixes the stack-growth bug); impression cap 3 in the first 2 weeks, then the orientation state retires; E15 landing-cache bust kills the 15-min banner lag.

3:42
••••
The banner slotONE slot · orientation only (owner 2026-06-12)
Neutral-info tone only. Lives below the sticky tab bar, above tab content — it is content, never header (B5).
A · Orientation — ALWAYS when viewing a non-home rung
Showing Saran — your home is Bheldi
Go to Bheldi →
Navigation, not guilt. "Go to" swaps in place (pushReplacement — no stack growth). UNCAPPED (owner 2026-06-12): it IS the way back home, not a promo.
B · Invite neighbours — KILLED (owner 2026-06-12): duplicate of the Overview quiet banner; invites live there + D15 share card
B · Alive / on home — no banner
place alive → the slot renders nothing (zero height)
No filler, no "all good" badge — a quiet slot IS the health signal, same as "0 open" in the Today strip (B7).
S3 · landing · district (browsed)

Saran — same diet, level-aware Follow

The user TAPPED the Saran rung (A4: widened is user-chosen, never imposed). Same 4-part header at district level: D14 Follow keeps its CTA on non-home places with a level-aware label — "Follow district" · A2 the home chip rides along carrying its house icon + count ("Bheldi · 6" — the icon stays even when the chip is active, F17 design note; wiring is build-phase) · B7 district Today strip — ③ shows the viewer-rank form ("#12 Seva rank") where cheap; the slot is DESIGNED for the deferred personal-delta upgrade (E16) · C10-A the orientation banner in situ: first content block under the sticky tabs, neutral-info, "Go to Bheldi →" (pushReplacement). App-only: E15 isFollowedByViewer pre-warm/fold kills the 5th per-mount query; open-issues count rides the landing payload. Header refresh per S3 AMENDMENT 2026-06-11 (a)–(d) — the active Saran rung is the solid-brand two-line chip, the home chip keeps icon + count pill; (e) ink underline = build-only.

3:42
••••

Saran District

Follow district
BiharState2.1k SaranDistrict140 GarkhaBlockquiet BheldiVillage6
23new
Feed →
9open
Issues →
#12
Seva rank
Overview
Feed23
Issues9
People
STICKY
Showing Saran — your home is Bheldi
Go to Bheldi →
PS
Priya Singh
Chhapra · 1h
New bridge approval for Garkha block announced at the DM office today — work starts after the monsoon.
4817
AK
Arvind Kumar
Marhaura · 3h
Power cut schedule for this week is up on the district board — mornings 10 to 12.
S3 · landing · urban 5-rung fit

Five rungs, one row — scrolled to active

The Bengaluru/Delhi pilot chain (data-notes): Karnataka → Bangalore → Bengaluru (BBMP) → Domlur Ward → Domlur, every rung with its A2 count. Fit mechanics (F17 — wiring is build-phase, the DESIGN is binding): chips get a maxWidth + ellipsis (see "Bengaluru (BB…"), the row auto-scrolls so the ACTIVE chip is in view (Karnataka sits half off-canvas left), and the home icon STAYS on the active home chip — brand fill + house glyph together, so "this is home" survives selection. Quiet sublabels sit at ≥11px on the text tiers (the F17 AA fix). Header diet and Today strip identical to rural — one system, both worlds (B5/B7). Header refresh per S3 AMENDMENT 2026-06-11 (a)–(d) — two-line rungs hold the 5-rung fit (ellipsis still on "Bengaluru (BB…"); (e) ink underline = build-only.

3:42
••••

Domlur Locality

KarnatakaState3.4k BangaloreDistrict1.2k Bengaluru (BBMP)City460 Domlur WardWardquiet DomlurLocality12
12new
Feed →
2open
Issues →
58%
built · Finish
Overview
Feed12
Issues2
People
STICKY
LN
Lakshmi N
Resident · 1h
BBMP has started relaying the 100 Feet Road stretch near the park — expect diversions till Friday.
93
VR
Vikram Rao
Resident · 4h
Ward office confirmed the new garbage pickup slots — mornings 7 to 9 from next week.
S3 · hi locale reference — translation check (NOT a design pattern)

The daily view, rendered in the hi locale

DECISIONS #8: ONE language per screen via i18n — this frame renders S3·A end-to-end in hi to validate every S3 key: top bar + type chip, "Home · Resident" status chip (घर · निवासी), counted ladder ("quiet" = शांत), Today strip cells, tab labels, feed cards, nav. Numerals stay Latin, brand "Nyburs" stays Latin. Seva = सेवा (DECISIONS #10 — "★ +10 सेवा" visible on the contribution card; "karma"/"कर्म" never rendered). C11: AC/PC chips are locale-aware — where S3·B shows "Vidhan Sabha" / "Lok Sabha", the hi locale renders विधान सभा / लोक सभा. Layout, components and states identical to S3·A (spec annotations like the STICKY tag are mockup-only and not part of the UI). Header refresh per S3 AMENDMENT 2026-06-11 (a)–(d) — rung level sublabels render गाँव / प्रखंड / ज़िला / राज्य, numerals stay Latin; (e) ink underline = build-only.

3:42
••••

भेल्दी गाँव

भेल्दीगाँव6 गढ़खाप्रखंडशांत सारणज़िला140 बिहारराज्य2.1k
6नई
फ़ीड →
3खुली
समस्याएँ →
62%
बना · पूरा करें
ओवरव्यू
फ़ीड6
समस्याएँ3
लोग
रा
रमेश कुमार
निवासी · 2 घं
स्कूल के पास वाला चापाकल फिर टपक रहा है — फ़ोटो के साथ पंचायत को रिपोर्ट भेज दी।
124
सु
सुनीता देवी
योगदानकर्ता · 5 घं
भेल्दी के पेज पर PHC का फ़ोन नंबर जोड़ा।
★ +10 सेवा
62
मनोज सिंह
निवासी · कल
इस रविवार सुबह छठ घाट की सफ़ाई — दस्ताने लेकर आइए, चाय मेरी तरफ़ से।

Journey position: S1 confirm → LAND on the home-village page + intro sheet (S2 — the carousel gate is dead per S2·A1/A2; adaptive landing starts from the SECOND session) → S3+. All frames render inline in the Place branch (root tab, no back chevron). One language per screen (C13-amended / DECISIONS #8): en frames + one hi-locale translation check per screen (S1·F, S2·D). S1 app-only rulings (A2 key scoping, A3 far-GPS soft confirm, A4 gpsAccuracy + 3/30d rate-limit, E21 timeout→retry, F28 events) ship in set_your_place.page.dart + nybursapi. S2 app-only rulings: A3 PlaceIntroRoute/PlaceIntroExtra deleted — the sheet lives in place-page logic reading the loaded PlaceDetail, placeIntroSeen + double-show guard, ~1.2s rise · D13 funnel events · D14 kill criterion (D1-return uplift ≥ +4pp or the intro is removed) · D15 post-first-contribution share card — part of the S2 design set, designed & built with the profile/share wave · E16 interim carousel bugs die with the carousel. C12's ⏳ rename is RESOLVED by DECISIONS #10: points = "Seva" — UI renders "★ +N Seva" / "Seva score" ("सेवा" in hi); "karma" survives only as internal code identifiers. S3 (header diet) app-only/build-phase rulings cited in captions: A3 first-arrival = client skips the landing call when placeIntroSeen unset + lazy ladder after paint (zero API change) · D12 auto-follow home wired as an UpdatePinnedRegions side-effect of confirmHomePlace · E15 invalidatePlaceDetail also busts places#landing#<id> (15-min banner lag), 10-min remount refresh gate, isFollowedByViewer pre-warm/fold, landing cache key gains a userId prefix BEFORE any personal cell ships (cross-user leak), open-issues count added to the landing payload · E16 personal-delta cells (Seva delta / issue-moved / per-rung rank) are deferred — the ③ Today slot is DESIGNED for them · F17/F18 mechanical-AA + i18n batches: ≥11px sublabels, kPlaceWarn light variant, chip maxWidth/ellipsis/scroll-to-active wiring, home icon on active chip, "1 contributor" singular, onAppCount stats gate ≥3, Material icons for stats, hide the "Nearby" stub tab, 44px back-chevron, "Page completeness" → "{place} info" (hi: jaankari), live "karma" string → Seva. Banner mechanics: "Go to" = pushReplacement; orientation state capped at 3 impressions in the first 2 weeks. S4 (Overview tab content) app-only/build-phase rulings cited in captions: A1 identity blocks structurally relocate from pre-tab slivers into the Overview tab + sticky TabBar via SliverPersistentHeader · B6 expose verifiedCivic in DTOs (the checkmark currently renders on ALL rows — must become claimed-only) · B8 _ContactChip currently has NO onTap — wire the locked Call·WhatsApp·Copy sheet · B10 attribution = batched revision join on directoryTemplate (M); the ⏳ confirm-counts mechanism ("6 logon ne sahi maana") + confirm-gated call = slot designed, built later · B11 new REPORT contribution kind (S) · B14 election-staleness refresh mechanics ride the election runbook · B16 POI lat/lng is currently silently dropped — plumb it (S) for distance + open-in-maps · D ledger: onAppCount display DEPENDS on the primaryLocation sync flag (currently OFF — everything reads 0; launch-blocking) + ≥3 gate, emoji stats → icons, "1 contributors" singular, helpChipMeta missing keys (popularPlace/co/civil_surgeon/chief_secretary/dgp/panchayat_secretary = invisible chips), hardcoded-strings batch (hero fallback, completeness card, "Add a place", empty states, "karma" in _LeaderRow → Seva ×2), placeText3 ≥11px/text-2, party+seat 320px overflow guards, breadcrumb › RTL, rank width, _SectionLabel merge, canRevert role-gate, kPlaceWarn light #D9641B, "View all" 44px tap targets, steward card tap + role label. The S4·A/S4·B/S4·E tall frames render the FULL Overview scroll in one device frame — in app the same content scrolls under the sticky tab bar.