freezmo/components
Martin Dvorak 6036238bf0 Teach it back: the AI becomes the curious student
A new mode where the user explains a topic in their own words and the AI
plays a curious classmate: short reactions, exactly one follow-up question
at a time, never "correct"/"wrong", never lecturing, and everything it knows
comes from the user's own decks and notes.

- Entry points: a sidebar row next to Exam mode and a "Teach it back" action
  in every deck's menu (which prefills the topic and scope).
- Start screen: deck or typed topic, friendly/skeptical student, the same
  context and model chips as Chat (/teach?deck=<id> pre-selects the deck).
- Session: the student prompt is a mode of the existing /api/chat route, so
  model resolution, allowlists, rate limits and the streaming client are the
  same code; the personality lives in lib/prompts.ts (TEACH_*). The deck's
  cards travel as a numbered checklist and the student is told to ask about
  the ideas that were skipped; it must say so rather than guess when the
  notes cover nothing. One constant (TEACH_MAX_EXCHANGES = 10) ends the
  session, or the Finish button does.
- Recap: a teach_summary call (JSON, one repair retry) yields well / gaps
  with card references / next steps; each gap links to the card it means.
  "Add missed cards to review" schedules those activities due now; "Turn
  gaps into cards" generates one flashcard per gap from the deck's notes and
  shows an editable review list before saving.
- Sessions are chat conversations with a mode:"teach" marker + session
  record: same IndexedDB history, backup and sync, filtered out of the Chat
  screens; the recent list reopens a recap or continues a session.
- Reused pieces: MessageRow, Composer (now optional attach/scope chips and a
  mic), Markdown/KaTeX, AiDisclaimer, ContextPicker/ModelPicker, plus a
  shared useChatModels hook and useKeyboardInset extracted from Chat.
- Dictation: Web Speech API recognition (lib/speech-input.ts); the mic only
  renders where the browser supports it, and dictated phrases land in the
  draft.
- All strings in en + cs. teach-test: 44 checks (API prompts and guards,
  both entry points, the session, recap actions, history, exchange limit,
  360/390px layouts, mic on/off). Version 0.8.1, SW v103.
2026-10-16 23:05:24 +00:00
..
activities The scene stops heating the MacBook 2026-10-15 19:42:29 +02:00
chat Teach it back: the AI becomes the curious student 2026-10-16 23:05:24 +00:00
exam Report question: skip a broken card and tell the server 2026-10-12 07:12:55 +00:00
homework The scene stops heating the MacBook 2026-10-15 19:42:29 +02:00
podcast Aero music: the button works on the podcast player 2026-10-16 21:04:39 +00:00
teach Teach it back: the AI becomes the curious student 2026-10-16 23:05:24 +00:00
AeroMusic.tsx Aero music: the button works on the podcast player 2026-10-16 21:04:39 +00:00
AiDisclaimer.tsx Chat chrome: one gutter, one radius scale, one even glass recipe 2026-10-14 21:32:50 +00:00
ApiKeyGate.tsx Key fields: keep the browser's password UI away, fix the keyboard layout 2026-10-16 10:12:20 +00:00
AppHeader.tsx One-pill study chrome, toggling chat pickers, readable homework steps 2026-10-12 14:21:11 +00:00
CookieConsent.tsx Aero goes underwater with rising bubbles; floating cookie notice; Czech title 2026-10-13 05:46:53 +00:00
DataSection.tsx Podcast mode: notes read aloud with a lyric-style word highlight 2026-10-16 11:42:15 +00:00
DeckCard.tsx Teach it back: the AI becomes the curious student 2026-10-16 23:05:24 +00:00
FolderBar.tsx Codebase audit: fix bugs, performance issues, dead code, and edge cases 2026-10-14 19:00:17 +00:00
HomeworkCard.tsx Codebase audit: fix bugs, performance issues, dead code, and edge cases 2026-10-14 19:00:17 +00:00
IceBackdrop.tsx The scene stops heating the MacBook 2026-10-15 19:42:29 +02:00
icons.tsx Teach it back: the AI becomes the curious student 2026-10-16 23:05:24 +00:00
InstallSheet.tsx The scene stops heating the MacBook 2026-10-15 19:42:29 +02:00
LearningSection.tsx Accessibility pass, report control for homework exercises, clearer rail actions 2026-10-12 21:15:56 +00:00
LegalPage.tsx Privacy policy, terms of service, cookie policy + a cookie notice 2026-10-12 21:26:55 +00:00
LibraryScreen.tsx Podcast mode: notes read aloud with a lyric-style word highlight 2026-10-16 11:42:15 +00:00
LinkLoadingScreen.tsx Link loading overlay escapes the glass card (portal to body) 2026-10-12 19:04:38 +00:00
LoadingState.tsx The scene stops heating the MacBook 2026-10-15 19:42:29 +02:00
ModelErrorActions.tsx Phase 1: backup, encrypted sync and monthly-usage handling 2026-10-10 13:43:42 +00:00
MotionPreference.tsx Design pass (all themes + chat UI), model picker, reduce-motion toggle 2026-10-14 05:06:02 +00:00
NotFoundScreen.tsx Custom Frutiger Aero 404 2026-10-14 15:27:47 +00:00
OfflineBanner.tsx Native-feel pass: PWA integration, system back, offline, haptics, undo 2026-10-10 12:16:03 +00:00
ProvidersSection.tsx Key fields: keep the browser's password UI away, fix the keyboard layout 2026-10-16 10:12:20 +00:00
ReportQuestionButton.tsx Accessibility pass, report control for homework exercises, clearer rail actions 2026-10-12 21:15:56 +00:00
ResultsScreen.tsx The scene stops heating the MacBook 2026-10-15 19:42:29 +02:00
ReviewClient.tsx Smart review: name the source deck on every card, break the counts down 2026-10-15 19:27:04 +00:00
RouteLoading.tsx One loading screen everywhere (the deck wizard's) 2026-10-12 18:43:53 +00:00
RouteTransition.tsx Codebase audit: fix bugs, performance issues, dead code, and edge cases 2026-10-14 19:00:17 +00:00
SegmentedPill.tsx Aero button glass + homework report control; reduced-motion sheet glitch 2026-10-14 09:19:54 +00:00
ServiceWorkerRegistrar.tsx Infra: split dev and production (releases, services, deploy script) 2026-10-11 19:25:29 +00:00
SessionFeed.tsx Smart review: name the source deck on every card, break the counts down 2026-10-15 19:27:04 +00:00
SettingsDialog.tsx Key fields: keep the browser's password UI away, fix the keyboard layout 2026-10-16 10:12:20 +00:00
ShareChooser.tsx Phase 1: backup, encrypted sync and monthly-usage handling 2026-10-10 13:43:42 +00:00
Sidebar.tsx Teach it back: the AI becomes the curious student 2026-10-16 23:05:24 +00:00
SpeakButton.tsx Study cards: from-your-notes, read aloud, timed runs 2026-10-15 05:53:47 +00:00
StatsScreen.tsx Phase 2: learning engine — history, SRS review, mistakes, stats, exam, reminders 2026-10-10 14:15:21 +00:00
StudyFeed.tsx Skipping a card is not a mistake 2026-10-15 13:59:55 +00:00
SyncSection.tsx Phase 1: backup, encrypted sync and monthly-usage handling 2026-10-10 13:43:42 +00:00
TabBar.tsx Teach it back: the AI becomes the curious student 2026-10-16 23:05:24 +00:00
ThemeSection.tsx New Aero background (Gemini-made), old credit removed 2026-10-13 08:10:05 +00:00
ThemeToggle.tsx Chat chrome: one gutter, one radius scale, one even glass recipe 2026-10-14 21:32:50 +00:00
Toaster.tsx Native-feel pass: PWA integration, system back, offline, haptics, undo 2026-10-10 12:16:03 +00:00
ui.tsx Design pass (all themes + chat UI), model picker, reduce-motion toggle 2026-10-14 05:06:02 +00:00
UploadScreen.tsx The scene stops heating the MacBook 2026-10-15 19:42:29 +02:00
WizardActionBar.tsx Aero button glass + homework report control; reduced-motion sheet glitch 2026-10-14 09:19:54 +00:00
WizardModeSwitch.tsx Podcast mode: notes read aloud with a lyric-style word highlight 2026-10-16 11:42:15 +00:00