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.
Real starting state: MLA and MP data is system-seeded from election records for all locations — so the directory is never truly empty. Completeness starts at ~20% (2 system rows of ~10 expected). What's missing: Mukhiya, ward members, GRS, SHO, photo, About, POIs. What shows: hero stub + breadcrumb + census stats + constituency chips (from election data) + builder card with Panchayat-focused chips + directory showing MLA+MP as dataOnly rows (B6 — no checkmark, "from election records" attribution, B10) with Mukhiya/ward-member vacant below. Panchayat roles hidden until first data point added — showing N empty roles at once is overwhelming; the builder card chips guide one step at a time. Today strip = muted zeros (no posts yet). Test cases: (1) first user confirms village → this state; (2) Mukhiya added → exit shell, Mukhiya row fills, completeness +15%; (3) location has no MLA/MP mapping (data gap) → only census shell, builder card starts with MLA chip first.
Implements A1 identity blocks first · A2 at 38% builder card leads · A3 ONE card: bar + dynamic top-2-3 chips (system picks highest-priority missing fields from a priority-ordered list; chips update as items are filled — these 3 are a snapshot of "top missing at 38%") + "See all missing →" for the full list (S5 scope). Directory rule: filled rows + ONE next-prompt only — never dump N blank rows; GRS appears only after ward members are added. Builder card chips are dynamic: priority order = Mukhiya(+15) → ward-members(+15) → photo(+10) → SHO(+10) → GRS(+10) → about(+10) → local places(+10) → … ; top 2-3 still-missing items show; card advances to celebration badge at 100% then disappears. B6 Mukhiya = dataOnly, no checkmark · B10 inline attribution · B8 no dead call on vacant · ward members = grouped row (0 of N, scales to any panchayat size) · B9/B7 SHO = appointed, no party · B15 2 POIs = flat chips. Steward tools removed from card — lives in ⋯ menu (role-gated). Today cell 3 = personal Seva (not page %, which lives in the card). Tall frame = full Overview scroll.
A2 at 100% the DIRECTORY leads after identity blocks; A3 builder card = one-line celebration badge (shown for ~7 days after reaching 100%, then gone — app behaviour, not a design element); A4 block order identity → directory → local places → about → maintained-by → active residents. Trust anatomy: B5 offgrp + merged section label · B6 verified badge ONLY on the claimed MLA row; dataOnly Mukhiya = no checkmark + attribution (B10) + ⋯ report-wrong (B11) · B7 SHO/CO = no party ever · B9 elected "Elected 2020 · 5-yr term" vs appointed "Posted since Mar 2024 · transfers frequent" (>12mo) · B12 Vidhansabha / Lok Sabha / Thana / Circle · section "5 of 5" = MLA + MP + Mukhiya + SHO + CO (the B14 aggregate "Saran's MLAs" row is removed from the village page — it belongs on Saran District's Overview, not here) · B15 10 POIs → 2-col grid + individual chips · B16 pin glyph → S4·C sheet · B17 About + Did-you-know ONE card · B18 stewards + Lead crown · B19 Active residents 3 rows. App-only: B6 verifiedCivic DTO, B8 _ContactChip onTap, B11 REPORT kind.
B16: POI tap → detail sheet — name · big CALL button (when a phone exists; tap opens the locked Call·WhatsApp·Copy sheet, B8) · the resident note · "~1 km from you" distance (only when lat/lng exists) · open-in-maps row (the pin glyph's intent) · report-wrong as a quiet ghost link (B11 — never an inline flag). No map widget ships in this wave — the maps row hands off to the OS; the location PICKER is S5's design, this is the consumption view. App-only: lat/lng is currently silently dropped on save — plumb it (S effort) before the distance line and maps intent can light up. Background page header refreshed per S3 AMENDMENT 2026-06-11 (a)/(c)/(d).
The official-row state system — B6 three-tier trust: checkmark ONLY on claimStatus=claimed (today it renders on ALL rows — actively misleading); dataOnly = nothing, linked = subtle link mark, claimed+verifiedCivic = verified badge · B9 elected vs appointed split: elected carries "Elected · term" and DEGRADES to "Term may have ended" (fade, never delete); appointed carries "Posted since", a transfers-frequent hint past 12 months, and never a party chip (B7) or a term-end field · B14 election-pending = a 30-day banner mode (the state is designed here; refresh mechanics ride the election runbook). Vacant rows never show dead call affordances (B8) — one add chip only.
DECISIONS #8: ONE language per screen via i18n — this frame renders S4·B end-to-end in hi to validate every S4 key. Numerals and the brand "Nyburs" stay Latin. DECISIONS #10: Seva = सेवा — "★ +10 सेवा", "1,240 सेवा"; "karma"/"कर्म" never rendered. B12 locale-aware chips: where S4·B shows Vidhansabha, hi renders विधान सभा; Lok Sabha = लोक सभा, Thana = थाना, Circle = अंचल (CO label "Revenue Circle" = राजस्व अंचल). Elected/appointed copy: "2020 में निर्वाचित · 5 साल का कार्यकाल" / "मार्च 2024 से तैनात · तबादले आम हैं"; attribution "सुनीता ने जोड़ा · 2 दिन"; aggregate honesty "~10 में से 8 दिख रहे — कवरेज बढ़ रही है". Layout, components and states identical to S4·B. Header refresh per S3 AMENDMENT 2026-06-11 (a)–(d) (rung sublabels गाँव/प्रखंड/ज़िला/राज्य); (f) asides read निवासियों द्वारा ("By residents").
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.