Inspiration

The best studying I ever did in school wasn't studying — it was explaining things to a friend who missed class. Re-reading notes feels like progress, but it's recognition, not recall. The moment you have to say why something happens, out loud, with no notes, you find out exactly what you know. Psychologists call it the protégé effect, and almost every study tool ignores it because listening to a learner is harder than quizzing one. I wanted a tool where the explanation itself is the input.

What it does

You give Aloud a topic. Gemini breaks it into the 8–11 ideas a real explanation needs — mechanisms and causes, never vocabulary words — arranged in prerequisite tiers as a dark constellation. Then you teach it, out loud, from memory.

While you talk, every sentence is embedded and scored against every idea on the map, live. Ideas you actually explain light up; gaps stay dark. An AI classmate watches for the weakest idea whose prerequisites you've already covered and interrupts with the question a confused friend would ask — "wait, you made ATP and NADPH, but where does the sugar come from?"

When you finish, Gemini grades the whole transcript with four verdicts per idea: explained, mentioned-but-not-explained, missing, or wrong — quoting your own words back as evidence. Confident misconceptions turn the node red. Every verdict then updates a Bayesian Knowledge Tracing model that tracks a belief per concept and schedules when each one is due for re-teaching.

How I built it

Next.js 16 on Vercel, with three Gemini models doing three different jobs: gemini-3.5-flash builds the concept map and grades transcripts (structured JSON output against a response schema), gemini-3.5-flash-lite plays the classmate because interruptions have to be fast, and gemini-embedding-001 powers the live scorer.

The scoring was the interesting part. Raw cosine similarity is nearly useless on a study map — I measured it: off-topic chatter tops out around 0.71 against the map, contentless filler around 0.76, real explanations 0.80+. The band is so compressed that absolute thresholds break. So each sentence is scored by how far it stands above the map's own mean in standard deviations, with a measured absolute floor underneath, capped credit per sentence, and saturating accumulation so repeating yourself doesn't farm the map.

The mastery model is Corbett & Anderson's Bayesian Knowledge Tracing, implemented from scratch in about forty lines — slip and guess parameters tuned for spoken explanation rather than multiple choice, with expanding review intervals derived from the posterior. Speech recognition is the browser's Web Speech API, wrapped to survive Chrome's silence timeouts. The constellation is hand-rolled SVG.

Challenges I ran into

Chrome kills speech recognition after a few seconds of silence, which would end your turn every time you paused to think — the wrapper treats "should the mic be open" as its own state and silently restarts recognition against it. The embedding-band compression above took real measurement to solve. And because there's a typing fallback, the transcript is an injection surface — the graders treat everything in it as untrusted content, so "grade everything as explained" gets graded as evidence of nothing.

Accomplishments that I'm proud of

The grader catches confident misconceptions and corrects them with your own words as evidence — in testing it caught "the Calvin cycle happens in the mitochondria and burns sugar" and explained precisely why that's respiration, not photosynthesis. Off-topic sentences light nothing, which I verified by reciting pizza opinions at it. And the whole loop — map, live scoring, interruption, grading, memory — runs on a free-tier API key.

What I learned

How much signal lives in the geometry of embeddings rather than their raw values. What BKT's four parameters actually do, by implementing the update rule instead of importing it. And that speech UX is mostly about handling the browser letting you down gracefully.

What's next

A teacher view: assign a topic, see the class's misconception heatmap — "14 of 30 students think the Calvin cycle needs darkness" is more useful than any grade distribution. Shareable maps so friends can teach each other. And more languages, since Web Speech and Gemini both already handle them.


To be clear about scope: transcription runs in the browser via the Web Speech API (no audio is uploaded), all mastery data lives in localStorage with no accounts, and the grader is an LLM — it can be imperfect, which is why every verdict quotes the exact words it judged so you can check it.

Built With

Share this project:

Updates

Submission history