Stories: 5
TDD: yes
Containment: flag (default-off)
What to build
Close audit gap G5 (#4289): today apps/web/src/pages/landingGating.ts removes the rite framing for every signed-in user, so a fresh çaylak's first authenticated screen at / is emptier than the anonymous one. Extend the three-valued phase (anonymous / signedIn / resolving, kept DOM-free and unit-testable per the file's own contract) so the signed-in reading distinguishes tier — via useMe, the same signal the topbar reads, keeping #1784's single-source-of-truth — and apps/web/src/pages/LandingPage.tsx renders a signed-in-çaylak variant of the rite copy: where you stand (çaylak), what the yazarlık rite ahead looks like, honest framing per #4261. The anonymous join CTA is unchanged; other tiers keep today's quiet signed-in landing. This is copy and gating only — no second standing source, no meter here (that is the topbar slice's seam).
Acceptance criteria
Stories: 5
TDD: yes
Containment: flag (default-off)
What to build
Close audit gap G5 (#4289): today
apps/web/src/pages/landingGating.tsremoves the rite framing for every signed-in user, so a fresh çaylak's first authenticated screen at/is emptier than the anonymous one. Extend the three-valued phase (anonymous/signedIn/resolving, kept DOM-free and unit-testable per the file's own contract) so the signed-in reading distinguishes tier — viauseMe, the same signal the topbar reads, keeping #1784's single-source-of-truth — andapps/web/src/pages/LandingPage.tsxrenders a signed-in-çaylak variant of the rite copy: where you stand (çaylak), what the yazarlık rite ahead looks like, honest framing per #4261. The anonymous join CTA is unchanged; other tiers keep today's quiet signed-in landing. This is copy and gating only — no second standing source, no meter here (that is the topbar slice's seam).Acceptance criteria
/sees the rite explainer addressed to them instead of no framing, while the anonymous join CTA renders exactly as todaylandingGating.tspattern, covering anonymous, resolving, signed-in-çaylak and non-çaylak-tier readingsuseMe(no second signal that could disagree with the topbar, Landing 'hesap aç' join CTA renders for logged-in users (auth-blind LandingPage) #1784)