B2C Strategic Practice (one-tap practice + onboarding once)¶
Status: in progress Owner: Bhanu Related: Study Plan engine (#1127, PR #1204), AITutorPage practice flow
Why this exists (Product Mindset Gate)¶
- Who asked for it? Bhanu, from dogfooding the Study Plan. Direct observation: "Start practice takes me through the mock-test onboarding every time. Onboarding is for one-time. Driving the user through it on every practice start doesn't make sense."
- What user pain? A learner taps "Start practice" on a ranked chapter (e.g. Electrostatics) from their Study Plan and, instead of practicing it, hits a wizard re-asking subject / chapter / question-count / difficulty they already implied by tapping that chapter. Friction sits on the single action the whole Study Plan exists to drive.
- Cost of not doing it? The Study Plan's promise ("study what is ranked next") dies at the click. Every practice start taxes the user with a setup wizard. Lower practice-start rate, and the paid Pro feature feels hollow.
- Validated or guess? Validated. Owner observation plus every serious competitor doing the opposite: Duolingo (one tap, algorithm picks next), Embibe (auto weak-chapter practice), Physics Wallah / Allen / Aakash (chapter to DPP, one tap), Unacademy / Toppr / Doubtnut (topic to adaptive set, one tap). None gate practice behind a per-session wizard; onboarding is one-time at signup.
- How we know it worked? Tap-to-first-question drops to ~0 extra steps; practice-starts-per-session rises. Sean Ellis counterfactual: if we re-added the per-session wizard, returning learners would complain "why is it asking me again."
What changes¶
One-tap practice (decision: derived params)¶
- "Start practice" on a Study Plan chapter goes straight into a practice set for that chapter.
- Parameters are derived, not asked: difficulty = adaptive from mastery (cold-start = mixed), question count = a sensible default (10).
- The
PracticePickerwizard is demoted from a mandatory gate to an optional "Customize" affordance.
Onboarding once (decision: once, then never)¶
- The mock-test / practice onboarding wizard (AITutorPage
wizardSteps) runs on first practice only. - Persist a "completed" flag (profile or durable store), then skip on every subsequent practice.
- Stays re-accessible from settings; an already-onboarded learner (signup captured exam/subjects) skips it entirely.
Non-goals (v1)¶
- Redesigning the chat/practice generation itself or the question engine.
- Changing the trainer (teacher) practice-authoring flow — this is the learner practice path only.
- Re-theming the switcher / other Study Plan visuals (tracked separately, needs a screenshot).
- Building a brand-new adaptive difficulty model — "adaptive from mastery" uses existing mastery signal; cold-start = mixed.
Rejected alternatives¶
- Keep picker, prefill, one confirm tap. Still an extra screen on every start; competitors skip it. Rejected for the derived-params path.
- Remember last choices and replay. Honors explicit prefs but is less strategic than mastery-adaptive; kept as a possible later refinement, not v1.
- Keep onboarding, just make it skippable. Relies on the user to dismiss every time; not honest one-time. Rejected for the persisted once-flag.
Implementation notes¶
- Entry: Study Plan chapter CTA already builds
/learn/practice?subject=X&chapter=Y(buildDrillHref, on the Study Plan M1 branch). The AITutorPage flow must respect those params + derived defaults and skip the picker. - Flow lives in
apps/web/src/pages/shared/AITutorPage(ChatEngine, IntentPickers/PracticePicker, wizardSteps). - Once-flag: prefer a durable per-user flag; if backend work is needed, scope it; localStorage is a fallback only if a durable store is unavailable.
Changelog¶
- 2026-07-01: Doc created with gate answers; decisions locked (one-tap derived params; onboarding once-then-never).