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 screensS6·A Feed · villageS6·B Composer · PostS6·C Composer · ShikayatS6·D Empty + quietS6·E 2G + end of feedS6·F hi locale check
S6 · feed · village daily

Feed tab — recency-first, the REAL post card

Implements A1 RECENCY-DEFAULT at village level, hard — engagement-ranking on ~3 posts/day buries today's flooded road under last week's festival photo; district/state get ranked + a "Latest" chip · A2 the Today strip's "6 new" tap lands HERE recency-first, scrolled to top (build contract, not a note) · A3 count honesty: "new"/"recent", never "today" until 🔨 todayCount (IST midnight) ships · B6 slim compose bar KEPT — fake-input, edit glyph, NO avatar, persona placeholder · B7 open posting, residency SURFACED not gated: subtle "Resident" chip on the place·time line + "Residents post here" signal · C9 civic post = WRAPPER overlay (amber left bar + status chip + "Filed with…" + Samarthan count) AROUND an UNTOUCHED UserPostWidget · C10 resolved issues stay; recency sinks them · DECISIONS #11: card = 1:1 redraw of refs/real-place-feed-post.png. App-only 🔨: A1 server sortBy in getPlaceFeedPage · A4 P0 14d cap on the DB fallback (posts.repo.ts:3927) · A5 Gorse re-score now intentional · C9 status/routedTo/supportCount onto Fragment$post · F20 batch the 20× GetPostV2 hydration · F21 q:60 media variant. S3 AMENDMENT 2026-06-11 (a)–(d) + (g): the amber bullhorn tile at the compose bar's right end is a one-tap ISSUE shortcut — opens the composer directly in Shikayat mode ("one big tap to complain"); the bar keeps no-avatar, edit glyph, persona placeholder.

3:42
••••

Bheldi Village

Home · Resident
BheldiVillage6 GarkhaBlockquiet SaranDistrict140 BiharState2.1k
6new
Feed →
3open
Issues →
62%
built · Finish
Overview
Feed6
Issues3
People
What's happening in Bheldi?
Residents post here
AD
Anita Devi@anitadevi_b
Bheldi, Bihar · 1hResident
Road repair started near the panchayat bhavan 🙏
Bheldi, Saran, Bihar
14 6 212
Open Filed with Gram Panchayat, Bheldi 12 Samarthan
RK
Ramesh Kumar@rameshk_bheldi
Bheldi, Bihar · 4hResident
Handpump near the school is leaking for a week — children wade through the mud.
12 5 167
MS
Manoj Singh@manoj_bheldi
Bheldi, Bihar · yesterday
Chhath ghat cleaning drive this Sunday morning — bring gloves, tea is on me.
Resolved Resolved by Gram Panchayat, Bheldi 9 Samarthan
SK
Sita Kumari@sitak_bheldi
Bheldi, Bihar · 3 days agoResident
Street light near the bus stand was dead for weeks — fixed yesterday. Thank you 🙏
23 4 198
S6 · composer · Post mode

One composer — destination in place brand green

Evolves the owner-APPROVED place-composer.html. Implements D11 destination chip "Posting to → Bheldi" in PLACE BRAND GREEN — amber is Shikayat-ONLY (today both modes show issue tint, a semantic bleed; 🔨 palette fix + "Yahan post hoga:" i18n); chip is NON-EDITABLE (no caret/picker) and is designed with a second-line extension point for the future follower-timeline disclosure — until that ships the composer says NOTHING about followers (Law #7) · B8 [Post | Shikayat] selector — Shikayat carries a slightly LARGER tap target even when inactive (mis-mode guard on budget phones); modes never bleed · B6 persona-aware placeholder, resident frame (hi: "Gaon mein kya ho raha hai? Batao…" — never raw EN on the hi locale, 🔨 i18n batch; follower/migrant + visitor variants ship as keys) · B7 posting open to all. App-only 🔨: D14 P0 DATA CHECK — no code path injects CreatePostPageExtra.placeId into a normal post's regionIds (issues use issuePlaceId); the chip's promise is broken until wired — verify before any build sign-off.

3:42
••••
New Post
Posting to →Bheldi
Post Shikayat
SD
Sunita Devi
Bheldi · Village
What's happening in Bheldi?
Photo
Camera
Video
GIF
Poll
Allow comments
S6 · composer · Shikayat mode

Categories, title, routing preview — always visible

Implements B8 "Issue" label = Shikayat (localized term, never an untranslated EN word; selector target slightly larger) · D11 Shikayat-ONLY amber destination chip · D13 10 icon+label category chips with "Yojana", not "Scheme" (highest-search Bihar civic term); title placeholder ships Hindi-frame · D12 routing preview card ALWAYS VISIBLE — 🚫 conditional hide (discovery fails). Resolved copy is locally legible office-title honesty: "Will be sent to Gram Panchayat, Bheldi" (hi-frame ruling copy "Gram Panchayat, Bheldi ko bheja jayega") — NO arrow glyph, no person promised (S7 4-tier honesty applies to the preview too). Empty state below = "Pick a category first" (hi-frame "Pehle category chuniye"); 2G: lookup >5s → fallback "It will reach the right office for this category" and the user may proceed. Evidence media stays (Photo/Camera/Video); GIF/Poll disabled. App-only 🔨: routing computed server-side from category + region; D14 regionIds wiring check rides this mode's sibling too.

3:42
••••
New Shikayat
Posting to →Bheldi
Post Shikayat
Category
Road Water Electricity Streetlight Sanitation Drainage Health Yojana Highway Other
Short description of the problem
Water supply cut since 3 days near the school. The handpump is dry and families are walking to the next ward for drinking water.
Where this goes
Will be sent to Gram Panchayat, Bheldi
Based on category · Water
Routing preview — always visible (D12) · empty state
Where this goes
Pick a category first
The right office shows here before you send
2G honesty: office lookup >5s → fallback "It will reach the right office for this category" — the user may proceed; the card never blocks submit and never hides (D12).
Photo
Camera
Video
GIF
Poll
S6 · feed · empty + quiet

Empty teaches, quiet nudges — never guilt

Implements E15 empty (0 posts) = use-case VISUAL prompts — road/water/news mini-rows showing WHAT people post — with the compose bar prominent above and a place-silhouette illustration (🚫 bare "Be the first" EN text-nudge · 🚫 sad-cloud) · E16 quiet (1–5 posts/14d) = show the posts with honest "Posted 11 days ago" labels (A4: the 14-day window holds at all levels, no silent widening), then ONE low-key below-feed nudge "4 people posted this week — add yours" rendered ONLY when N≥3 (B7-amended: below 3, show NOTHING); resident-aware variant ships as a key · E17 the invite CTA deep-links the D15 share card (place name + honest post count + Feed deep link — the primary viral loop); ⏳ the card itself is designed at the S14/S16 window, so this frame carries a placeholder slot. The banner stays the S3 single-slot system — S6 adds NO fourth banner state. Top-bar pin tile per S3 AMENDMENT 2026-06-11 (c); tab badges omitted here (empty/quiet counts), the (g) issue shortcut shows on S6·A/S6·F.

3:42
••••

Bheldi Village

Home · Resident
Overview
Feed
Issues
People
Empty — 0 posts (E15)
What's happening in Bheldi?
A broken road? Post a photo — the whole village sees it.
Water cut, power gone? File it as a Shikayat — it reaches the office.
Mandi prices, events, good news — share it with Bheldi.
Quiet — 1–5 posts / 14 days (E16)
AD
Anita Devi@anitadevi_b
Bheldi, Bihar · Posted 11 days ago
Anganwadi enrollment is open this week — take the bachche ke kagaz.
3 1 41
4 people posted this week — add yours
Nudge renders ONLY at N≥3 (B7-amended) — below 3, nothing shows. Honest day-labels above: the 14d window never silently widens (A4).
Invite your neighbours — share Bheldi's page
D15 card · S14/S16
S6 · feed · 2G + end of feed

Skeletons, a 44px retry, and a silent ending

Implements F19 skeleton states REQUIRED — shimmer post-shaped rows between feed-load and hydration-complete (today: a blank list on 2G → rage-refresh loop); the error state's retry button is a ≥44px target · E18 end-of-feed is SILENT (a minimal spacer at most) — 🚫 "You're all caught up" congratulatory tone on a thin village feed. App-only 🔨 (the real 2G fixes live server-side): F20 the 20× parallel GetPostV2 hydration is the highest-impact perf fix — first page currently gated on the SLOWEST of 20 calls; batch endpoint or batched GraphQL (M) · F21 place feed passes a medium-quality image hint (q:60) — the card today defaults to q:100/h:1080 ⇒ 4–10MB pages on 2G · F22 landing-cache single-flight (district scale, low priority) · A5 sort mode resets per session. G events: place_feed_open · place_feed_new_tap · place_compose_bar_tap · place_compose_submitted/_type · place_empty_share_tap · place_feed_scroll_depth; metric = weekly place-post rate ≥10% of active places within 60 days. Top-bar pin tile per S3 AMENDMENT 2026-06-11 (c); tab badges omitted while counts are still loading.

3:42
2G

Bheldi Village

Home · Resident
Overview
Feed
Issues
People
Loading on 2G — shimmer, never blank (F19)
Failed — retry is a ≥44px target (F19)
Couldn't load Bheldi's feed
Weak network — your data is safe
End of feed — silent (E18)
No "You're all caught up" — a thin village feed ends quietly with a minimal spacer; the 100d viewed-flip fallback (never-empty rule) is a feed-algo concern, not a UI banner.
S6 · hi locale reference — translation check (NOT a design pattern)

The village feed, rendered in the hi locale

DECISIONS #8: ONE language per screen via i18n — this frame renders S6·A end-to-end in hi to validate every S6 key: persona placeholder "गाँव में क्या हो रहा है? बताओ…" (B6 — the current fallback is raw EN on the hi locale, 🔨 i18n batch; "post" is never a Hindi verb — लिखना framing), "Residents post here" → "भेल्दी के निवासी यहाँ लिखते हैं", Resident chip (निवासी), civic wrapper strip: status खुली, routed-to "ग्राम पंचायत, भेल्दी को भेजा गया" (no arrow glyph, D12 honesty) and 12 समर्थन (the Shikayat/Samarthan vocabulary is locale-native, B8/D13). Handles, numerals and brand "Nyburs" stay Latin. Layout, components and recency order identical to S6·A. S3 AMENDMENT 2026-06-11 (a)–(d) + (g) applied in hi (rung sublabels गाँव/प्रखंड/ज़िला/राज्य); the amber bullhorn opens the composer directly in Shikayat mode.

3:42
••••

भेल्दी गाँव

घर · निवासी
भेल्दीगाँव6 गढ़खाप्रखंडशांत सारणज़िला140 बिहारराज्य2.1k
6नई
फ़ीड →
3खुली
समस्याएँ →
62%
बना · पूरा करें
ओवरव्यू
फ़ीड6
समस्याएँ3
लोग
गाँव में क्या हो रहा है? बताओ…
भेल्दी के निवासी यहाँ लिखते हैं
अनीता देवी@anitadevi_b
भेल्दी, बिहार · 1 घंनिवासी
पंचायत भवन के पास सड़क की मरम्मत शुरू हो गई 🙏
भेल्दी, सारण, बिहार
14 6 212
खुली ग्राम पंचायत, भेल्दी को भेजा गया 12 समर्थन
रमेश कुमार@rameshk_bheldi
भेल्दी, बिहार · 4 घंनिवासी
स्कूल के पास का चापाकल हफ़्ते भर से टपक रहा है — बच्चे कीचड़ से होकर निकलते हैं।
12 5 167

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.