Learner Guided UX¶
A Brainly-style guided home for learners that replaces the blank chat-first front door. B2C learners go through a short onboarding wizard on first signup; B2B learners inherit institution context. Both then land on /learn, a task-shaped home where every action primes the chat with subject and topic context before the message bar opens.
Naming note: this doc says "learner", but the code still uses the legacy
studentidentifiers:KWILO_STUDENT_MODES,StudentHomePage,pages/student/,education_stage. Match the code identifiers when implementing; the rename is a separate cleanup.
How it works¶
The chat is never the front door. Every learner-initiated chat session has subject and (sometimes) topic context primed by the intent the learner picked. Mode chips are gone from the learner chat: the intent is the mode.
Learner logs in
│
▼
B2C without onboarding? ─yes─▶ /onboarding (3-step wizard)
│ no │
▼ ▼
/learn home complete or skip
│
├── Continue learning row (renders only with data) ──▶ /lessons/:id
│
├── 2×2 intent grid:
│ ├── Get help with a problem ─┐
│ ├── Understand a topic │ micro-pickers (subject + topic)
│ ├── Practice for a test │ ──▶ /ai-tutor (chat) or quiz
│ └── Revise weak topics ─┘
│
└── secondary nav: My courses · Assignments · Achievements
Onboarding wizard (B2C only). Runs once at /onboarding, gated by onboarding_completed_at IS NULL. Three steps: education stage, subjects, optional goal. Mandatory but every step has "Skip for now". B2B learners skip the wizard entirely; their context comes from institution enrollment.
The /learn home. A greeting, an optional Continue-learning row (hidden when there's no in-progress data), a 2×2 grid of five intents, and a secondary nav row to courses, assignments, and achievements. Four intents are chat-bound and open a micro-picker (subject chip → topic chip → input) that gathers context before chat opens. The fifth, Continue learning, is navigation-only and routes to the last lesson.
Post-answer chips. After every AI response, up to four chips: Simplify, Explain more, Show example, Try a question. Tapping a chip sends a structured follow-up. Short responses show only Explain more; the rest hide when not applicable.
Solu, the brand guide. A small floating-spirit mascot carries contextual hints. Two surfaces: an inline Solu beside page content with a speech bubble (/onboarding, /learn), and a floating SoluCompanion fixed bottom-right and persistent across the app. Pages register hints via <SoluTip>{copy}</SoluTip> (latest mounted wins; hidden on auth routes and pages already showing an inline Solu). The companion is dismissible via a "Hide Solu" button backed by a zustand+persist store (kwilo:solu-companion). Tip copy lives in common.solu.tips.* i18n keys.
Visual language is lean: wizard pills are text-only, intent tiles carry one Heroicon outline glyph each, and /learn has no XP, streak, or achievement chrome.
Edge cases¶
- B2C user skips the wizard. Lands on
/learnwith a persistent banner ("Finish setting up your profile so we can personalize your home") linking to the first incomplete step. The four intents still work with neutral defaults. - No in-progress course. Continue-learning row is hidden; no placeholder.
- No mastery data. The Revise intent shows "Take a 5-question diagnostic to find your weak spots" and routes to the Understand picker (the diagnostic generation is deferred).
home-contextAPI error. Continue-learning row hidden; quiet inline retry pill at top. The four intents still work.- Quota exhausted (B2C freemium). Picker opens; Send is disabled with an inline message linking to
/pricing. Reuses the existinguseCapabilityhook. - Returning B2C user who signed up pre-wizard. Redirected once from
/learnto/onboardingon next login.
Where it lives¶
Routes: /learn (StudentHomePage), /onboarding (B2COnboardingWizard, B2C only), /ai-tutor (chat, demoted from the post-login default).
API: POST /api/v1/onboarding/profile (save wizard data to UserLearningProfile), GET /api/v1/learner/home-context (one call powers the home), GET /api/v1/curriculum/topics?subject_id=X (topic chips).
Key files: apps/web/src/pages/learner/StudentHomePage/, apps/web/src/pages/b2c/OnboardingWizard/, packages/ui/src/surfaces/IntentTile.tsx, packages/ui/src/brand/Solu.tsx and SoluCompanion.tsx.