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.
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.
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.
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.
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.
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.
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.
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.