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 B10 progressive disclosure — NAME + PHONE visible (3 elements max incl. the auto-detected area chip); everything else waits behind "Add more details" · B11 role-specific label ("Mukhiya's name", never "Representative"), red asterisk (error token, not literal red) replaces the "required" pill, area chip reframed as a GIFT — "Your area — filled automatically", no lock icon · A3 phone label "Government office number (public)" + permanent amber microcopy "publicly visible — office numbers only" · A9 attribution NAMED by default; the opt-out surfaces AT the moment of fear — the preview line "Will show as: Sunita D. · change" toggles to "a local contributor" per-account (Steward/Founding roles always named) · B13 fear-free trust note: destination-framed ("everyone in Bheldi can see it on the page") + undo comfort — review/pending/steward never appear in the contributor flow · submit carries the live ★ +10 Seva badge (DECISIONS #10 — "karma" never rendered). App-only: A5 place velocity cap · A6 heroPhoto NSFW async gate (Seva fires after pass) · A7 <7-day accounts → held on official contributions · A4 flag-as-incorrect = the shared S4 REPORT kind (no duplicate affordance here).
A1: PHONE = HIGH-RISK ALWAYS — any phone number is held regardless of seat/claim status; the field carries the "checked before going live" note while name/party/tenure keep publish-then-patrol (publish instantly) · A2: source-link becomes REQUIRED because a phone is present — "Where did you find this? Link to government website"; optional otherwise; a mobile-looking number additionally gets the soft warning "official numbers are usually landlines — sure?" · B10: expander contents = party PICKER tile (colour dot, alias search, Independent, can't-find — elected only), tenure, seat, source · B14: tenure range 1947–now+1; the year error says "Write the full year, like 2022"; a tenure-END field is absent by design on current-officeholder forms · B12 (admin variant, same system): no party/seat, ONE "In office since" + inline note "Government officials have no party — only elected seats ask".
Implements B12 the admin variant of the SAME sheet system: appointed officials (Panchayat Secretary, BDO, CO, SP, Civil Surgeon…) carry NO party picker and NO seat field — the expander degrades to ONE "In office since" field, and an inline note explains it: "Government officials have no party — only elected seats ask" (kills the "which party is the BDO?" confusion). Everything else is identical to S5·A/B — role-specific label ("Panchayat Secretary's name", B11), area-gift chip, the phone A1 gate + amber microcopy, A9 attribution preview, the ★ +10 Seva badge, fear-free framing (B13). The contrast with the elected sheet (S5·B — party dot + seat + tenure) is the whole point: the form asks only what the role actually has.
C15 3-tier capture: Tier 1 PRIMARY = big "Use my location" GPS button → Tier 2 = landmark text "Where is it? (e.g. behind the school)" → Tier 3 = ghost "Show on map" (opens the S5·D full-screen picker). PlayServices-absent devices simply get tiers 1–2 — the flow never blocks on a map · C17: the Seva split is communicated LIVE at input time — the ladder + submit badge animate as location attaches: +5 name-only · +7 landmark · +10 pin/GPS (shown here in the +10 state after a GPS fix). Coordinates are NEVER displayed — the confirmation is "Location saved ✓", not lat/long · C18: self-undo is OUT for v1 — publish-then-patrol + edit-again covers it (the trust-note comfort from S5·A) · A9 attribution preview rides every sheet. App-only: the optional landmark key + the +7 weighting are server-side.
C15: tier 3 opens a FULL-SCREEN route, not a sheet — map pan/zoom and sheet-drag fight over the same gesture arena. Crosshair + camera-move pin pattern: the pin stays centred, the MAP moves under it; opens centred on the place's stored centroid. Bottom confirm bar = brand "Confirm location" + the "Use my location instead" escape back to tier 1. Per-theme map styling — these tiles are built from theme tokens, so dark and light each get a native map treatment. PlayServices-absent devices never reach this screen (fallback = tiers 1–2) · C16: the design is LIBRARY-AGNOSTIC — neutral tile blocks, zero provider chrome; everything on this screen binds whichever map library ships · C17: confirming reports "Location saved ✓" — coordinates are never surfaced to the user.
D19: the toast names WHAT went live and WHERE — "Mukhiya's name added — live on Bheldi's page", 5s, tappable → scrolls to the live section; never a generic "Contribution added". Founding-Steward dialog: primary CTA = "See it on Bheldi's page" — the promise lands where they live; the steward desk is the secondary link · A1 phone-pending variant keeps the win in front: "everything else is live" · B13 duplicate-pending stays fear-free — no "rejected", no "review", a clear nothing-more-to-do · A5 place-level velocity cap: the PLACE enters a 24h review mode with the "High edit activity — contributions being reviewed" state; individual sheets keep working. App-only: A5 cap thresholds · A6 heroPhoto NSFW async gate — Seva fires only after the pass · A7 <7-day account hold on official contributions · B13 rejected = SPECIFIC reason + path forward via steward canned-reasons.
Your first contribution started the page — ★ +10 Seva earned.
DECISIONS #8: ONE language per screen via i18n — this frame renders S5·A end-to-end in hi to validate every S5 key: sheet title, area-gift chip (B11's "Aapka area — apne aap bhara gaya"), role-specific field label मुखिया का नाम (B11 — never "Representative"), phone label + amber microcopy, attribution preview + "बदलें", expander row, trust note (B13's "गाँव के सब लोग देख सकते हैं" framing + undo comfort), Publish CTA, nav. Seva = सेवा (DECISIONS #10 — "★ +10 सेवा" on the submit badge; "karma"/"कर्म" never rendered). Numerals and brand "Nyburs" stay Latin. Layout, components and states identical to S5·A.
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.