The People tab's leaderboard — the journey's highest-polish surface. Implements S10-decision-sheet.md verbatim (✅ designed; 🚫/⏳ absent; 🔨 in captions). Owner-draft podium / you-card / clocks adopted + corrected: A1 two clocks defaulting to a winnable "This month", B5/B6 village-first scope + minimum-5 podium gate, C8 you-card nudge naming the person above you + the 9:16 level-up share card, D11 contribution-engine vs governance-ladder SPLIT, C9 status levels teased — never money language. 🔴 F15: the built page still renders "karma" (DECISIONS #10 violation) — these frames are the corrective reference: it is Seva, everywhere, in every locale.
Implements A1 TWO CLOCKS, default = This month — a newcomer must open onto a winnable frame, never the all-time #1 at 1,240; all-time = one tap away, and the all-time rank rides month rows as secondary text (hi labels इस महीने / शुरुआत से, never raw "All-time") · B5 geo scope chips, default = the place you're on (village-first) · C8 the YOU-CARD — owner-draft's strongest element adopted (gradient brand tint, big rank) and upgraded with the NAME above you: "15 Seva behind Sunita" (🔨 nextRankHolderName, S — reuses the leaderboard build, retires the 2-extra-query findRank path) · A3 the monthly badge rides its row permanently ("Top Voice · May 2026") · D12 podium role labels ≥11px · rows = rank + N Seva + editCount. 🔴 F15 P0: the BUILT page renders "karma" (_KarmaPill, _ViewerRankRow) violating DECISIONS #10 — this frame is the corrective reference (Seva / आपका स्थान); fix before any release. 🔨 A2 month backend IS built (monthKarma/monthKey lazy reset, 1h cache) but the me-response rank is ALL-TIME ONLY — month view shows a WRONG rank; add month rank BEFORE the toggle ships. E13 app-invisible: 150 Seva/day/place cap · founding-steward 30-day cool-off · tie = earlier-achiever. + owner adds 2026-06-13: (1) a first-time "See how you earn Seva" learn hint under the clocks — first-timers only, dismiss-once, taps → the S10·D engine card (the board self-teaches for users who skipped the S2 intro); (2) an on-demand re-share button on the you-card — fire the 9:16 card anytime, not only on the auto #1/role-up moment (same render + share_plus, zero new backend; strengthens the D30 acquisition loop).
All-time = the LEGACY view, one tap from the month default (A1). A3 a monthly win converts to a PERMANENT dated badge ("Top Voice · May 2026", $addToSet like founding_steward) — the score resets on the 1st, the legacy STACKS: veteran rows carry badge stacks; Founding Steward renders brand-tint (the bootstrap +500 is transparent). 🔨 rollover grant = lazy-on-first-access or cron (S); ⏳ historical month boards (snapshot collection, M) — v1 = current month only. A4 🚫 hard same-person podium cap — suppressing real ranks is dishonest UI (Law 7): Anita's 1,240 IS the truth; the fairness valve is the monthly default + badge stacks + the N-gate, never rank fiction. "Naya maheena, naya mauka" push on the 1st = scheduled notif, ~0 build. B7 cross-place Seva totals = a profile/S12 concern (🔨 XS totalKarma on /karma/me/across), never this page.
B6 MINIMUM-N PODIUM GATE: the podium renders only at ≥5 contributors with ≥1 Seva in the window (🔨 client-side, XS) — below 5 = flat ranked list with MEDAL GLYPHS + "Be among the first 5 voices of Bheldi" CTA; 🚫 podium-of-everyone (a 3-person podium is a graveyard photo); 🚫 "you're the only contributor" copy (Law 7 honesty without shame). B5 boards are PER-PLACE KEYSPACES, not rollups — district/state tabs run near-empty BY DESIGN: flat list only, podium suppressed, ONE explainer line; never promise "your rank in Bihar". Cold board = first-voice CTA framed on the month reset — A4 "naya maheena, naya mauka" push lands on the 1st (scheduled notif, ~0 build). G cold_village_cta_tapped · leaderboard_viewed.
Naya maheena, naya mauka — the board reset on the 1st.
D11 THE CONFLATION FIX — two SEPARATE cards: "How Seva works" = the CONTRIBUTION ENGINE (what earns points: fact +12 · photo +15 · founder +20); "Roles unlocked by Seva" = the GOVERNANCE ladder (Resident → Contributor → Steward → Lead) framed as capability-unlock — owner-draft you're-here / next-step pills KEPT + a vertical connector line (rural micro); 🚫 owner-draft's "How Seva works" title on the role ladder. D12 hi role names ship as i18n starting points (निवासी / सहयोगी / संरक्षक / अगुआ); contributor copy DE-PHOTO'D — "keep your place's info correct", never "add photos" (device-capability gatekeeping). C9 TEASE: 7-rung status levels = a LOCKED progress bar (Batch5 compute) + the earning tier as a vague "special recognition · coming soon" ghost row — NEVER concrete money language (the nobility of Seva collapses; coins are removed from Nyburs). C10 🚫 streaks and weekly quests cut.
C8 SHIP (overrides product's tease-only — the cost argument fell): the LEVEL-UP SHARE CARD, 9:16 WhatsApp-status crop, Hindi-first — "इस महीने #1" huge, "{village}, {state}", the Nyburs mark + "apne gaon ka page banao"; 🚫 English-jargon badge names ever appear on the card. The card is a FIXED dark art asset (an exported image — theme-independent by design). 🔨 client-side render off the EXISTING reward/roleChanged signal + share_plus — zero new backend; fires on month-#1, role-up and badge grants — and now ALSO on demand from the you-card share button (owner add 2026-06-13), so a proud #3 or any badge-holder can share their standing anytime; village + state + rank are template slots filled per-locale. G share_card_shared · monthly_badge_earned. METRIC: D30 board-visible contributor retention ≥60% (<40% = the clock mechanic failed) — this card is the acquisition loop closing back into S1's "is this your village?".
DECISIONS #8: ONE language per screen via i18n — this frame renders S10·A end-to-end in hi. 🔨 F16 P0 i18n: every string on the BUILT page is hardcoded EN today (ZERO keys) — clocks, board labels, you-row, ladder, CTAs all need keys + 12 locales (level titles too when status levels ship). Clocks = इस महीने / शुरुआत से (A1 — never raw "All-time"); points = सेवा everywhere (DECISIONS #10 + F15 — "karma" never renders); the you-card rank label = आपका स्थान; roles = निवासी / सहयोगी / संरक्षक / अगुआ (D12 i18n starting points, ≥11px); badge = टॉप वॉइस · मई 2026; the C8 nudge = "सुनीता से 15 सेवा पीछे". Numerals, ranks and the brand "Nyburs" stay Latin. Layout, components and ordering identical to S10·A.
S10 position: People tab of the place page (S3 header diet above; the leaderboard IS the tab body). Owner-draft (Nyburs Places/app/people.jsx) podium / you-card / clocks adopted, re-expressed in v2 tokens with the council's corrections — most importantly D11: the owner-draft titled the ROLE ladder "How Seva works"; here the contribution engine and the governance ladder are SEPARATE cards. App-only / build-phase rulings cited in captions: 🔴 F15 P0 — _KarmaPill + _ViewerRankRow render "karma" on screen (DECISIONS #10 violation): "Seva" / "आपका स्थान", fix before any release of this page · 🔨 A2 the me-response rank is all-time only — month view shows a WRONG rank; add month rank to the me-response (S) BEFORE the clock toggle ships (month backend itself is built: monthKarma/monthKey lazy write-time reset, 1h cache) · 🔨 A3 monthly-badge rollover grant = lazy-on-first-access or cron (S); ⏳ historical month boards (snapshot collection, M) · A4 "naya maheena, naya mauka" scheduled push on the 1st; 🚫 same-person podium cap (dishonest UI) · B6 minimum-5 podium gate computed client-side (XS) · 🔨 B7 XS totalKarma on /karma/me/across when S12 wants cross-place totals · 🔨 C8 nextRankHolderName in the me-response (S — reuses the leaderboard build, retires the 2-extra-query findRank path); share card = client-side render off the existing reward/roleChanged signal + share_plus, template slots {village}/{state}/{rank} per-locale · E13 150 Seva/day/place cap on the existing abuse-cache pattern · cross-steward approval-guard audit across ALL contribution types · founding-steward 30-day cool-off on approval-derived Seva · tie = earlier-achiever first, "tied" at delta 0; ⏳ quality-weighted karma + diminishing returns (task #13, Batch5) · E14 leaderboard-rebuild singleflight lock (thundering herd, not urgent) · 🔨 F16 i18n: ZERO keys on this page today — full key sweep + 12 locales; hi starting points: इस महीने / शुरुआत से / सेवा / आपका स्थान / निवासी / सहयोगी / संरक्षक / अगुआ / टॉप वॉइस. G events: leaderboard_viewed · clock_toggled · you_row_seen · rank_delta_tapped · profile_tapped_from_leaderboard · monthly_badge_earned · share_card_shared · cold_village_cta_tapped. METRIC: D30 board-visible contributor retention — % of users on any monthly board in month M who contribute in M+1; target 60%, <40% = the clock mechanic failed.