Financial Quiz Funnel
Delivery Status
- Branch:
seo-financial-literacy-test - Status: implemented on the feature branch; not published to production
- Published: no
- Sanity changes: none
- Outbound email, SMS, or notification behavior: none
- Primary conversion: existing Clerk free-account signup after an ungated result
- Persisted quiz data:
public.quiz_sessions+public.quiz_answers(RLS deny-all, service-role writes only). See “Session persistence” below anddocs/quiz-tracking.md. - Analytics: landing, start, completion, result view, retake, and signup click (all PostHog events now include the DB
session_id), plus aquiz_signup_attributedevent fired from/auth/callbackwhen a signup is linked back to a quiz session.
Routes
Every route uses the existing public
SiteTopNav and SiteFooter. The page
order is deliberately conversion-first:
- Compact breadcrumb, H1, description, and trust facts.
- First question, without an intro gate.
- Immediate result and outcome-specific Silvia CTA.
- Methodology, educational SEO copy, sources, related quizzes, FAQ, and disclaimer.
Funnel and CTA Rules
Results are ungated. The user receives the answer before the account CTA. The CTA is placed directly below the result headline and before secondary diagnostics. It changes by outcome so the transition is relevant:- Strong result: connect real accounts and put knowledge into practice.
- Developing result: identify gaps and organize the full financial picture.
- Low result: treat the score as a signal to act and build the foundation.
- Retirement ready: stress-test the retirement plan with actual account data.
- Retirement close: find the gap preventing a clear yes.
- Retirement not ready: build a plan before leaving employment income.
plan=free, quiz ID, outcome, score, and referrer. It
does not include ages, balances, income, net worth, debt, or individual answers.
Retirement Readiness Methodology
Questions
Calculation
The estimate uses the same general spending-gap framework documented for Silvia’s retirement calculator:- Project retirement savings to the target age using 3% annual growth above inflation.
- Calculate the annual portfolio income gap as retirement spending minus expected Social Security and pension income.
- Divide the annual gap by a 4% planning withdrawal rate to create a simple portfolio target.
- Compare projected savings with the target.
- Add limited readiness credit for the current savings rate, high-interest debt plan, and healthcare preparation.
Outcome Thresholds
Knowledge Test Keys
Tax Intelligence Test
Investing IQ Test
Debt Knowledge Quiz
Portfolio Knowledge Test
Financial Planning Assessment Key
The planning assessment has no objectively correct answers. Every item uses the same maturity scale: current and specific (3), partial or stale (2), informal (1), or not yet done (0).Design and Accessibility
- Existing public navigation and footer are reused without modification.
- New quiz surfaces use semantic theme tokens only; no new hardcoded colors.
- CTA surfaces use
bg-surface-cardwithtext-content-titleandtext-content-muted, avoiding the unreadable light-card/dark-theme pairing found in the first financial-literacy result CTA. - Every question uses a fieldset and legend.
- Numeric fields have persistent labels, bounds, input modes, and inline errors.
- Choice labels and radio controls share a single touch target.
- Progress, result changes, and errors have accessible labels or live regions.
- Focus moves to the next question or result only after a user action.
- Raw personal answers are not written to the URL or PostHog events.
Session persistence
Quiz sessions and answers are persisted to Supabase for growth reporting:public.quiz_sessions— one row per visit, keyed by a client-generatedsession_id(localStorage, per quiz). Stores the score, outcome, structured result data, and first-touch attribution captured on/api/quiz/start(utm_source/medium/campaign/term/content,gclid,fbclid,ttclid,msclkid, referrer, landing URL, user agent, hashed IP, geo).public.quiz_answers— one row per(session_id, question_id)with the latest answer, upserted on/api/quiz/answerso revisions overwrite rather than duplicate.clerk_idonquiz_sessionsis filled in by/api/quiz/attribute-signup— the signup CTA appends?quiz_session=<uuid>&quiz_id=<slug>to the sign-up href and stashes the same pair in sessionStorage;/auth/callbackreads it after Clerk resolves and hits the endpoint once per new signup. Retakes generate a freshsession_idso first-take conversion is measurable.
/api/quiz/* using SUPABASE_SERVICE_ROLE_KEY. The four API routes (/start, /answer, /complete, /attribute-signup) use Upstash Redis for per-IP sliding-window rate limits and fail open on Redis errors so the browser experience is never blocked. The full architecture and column-by-column rationale is in docs/quiz-tracking.md.
Benchmark Notes
- iA Financial’s retirement readiness quiz covers finances, health, housing, and retirement lifestyle and returns advice matched to the result.
- Family Investors uses a one-question-at-a-time 10-question flow covering retirement timing, income planning, confidence, taxes, and guaranteed income.
- U.S. Department of Labor retirement worksheets begin with age, expected retirement timing, projected income, assets, and expenses.
- SSA recommends using an official earnings-linked benefit estimate rather than guessing Social Security income.
QA Record
The final branch pass covered the complete interaction, not only route renders:- All seven routes loaded with the shared public navigation and footer.
- Every question in each quiz was answered in a real browser through the result state.
- The retirement ready-path returned 85/100, 750,000 simple target, 160% coverage, and the retirement stress-test CTA.
- The financial-literacy low path returned 0/100, the one-line attention
headline, and the prominent
Start My Free Silvia AccountCTA. - Repeating the same radio-option position on consecutive questions was tested; the radio group is keyed and remains controlled so the next button unlocks.
- Light and dark result surfaces passed automated WCAG A/AA checks with zero violations in the quiz UI. The existing gradient navigation signup button is reported as contrast-incomplete because the scanner cannot resolve its gradient.
- A 390-by-844 mobile pass found no horizontal overflow on the retirement start or portfolio result surfaces, and CTA buttons remain visible and full width.
- Targeted ESLint, TypeScript, and 34 Vitest checks pass.
- The production bundle compiles and completes its lint/type phase. Full page-data
collection remains blocked in this local environment by the pre-existing
/api/account/deleteauthenticator initialization and missing service credentials.
Silvia Skills Sync
These are new public pages and user-visible flows. Perdocs/SILVIA-SKILLS-SYNC.md, a companion update to
CFO-Silvia/skills/silvia-navigation-skills/SKILL.md is required before the
feature is merged and deployed. The companion documentation has been prepared,
but the current GitHub account cannot push to CFO-Silvia/skills, and that
repository has forks disabled. A skills-repo maintainer must apply the prepared
navigation update and complete the normal S3 sync before this feature is
released.