Inspiration
As a student who also tutors high schoolers, I was tired of rewriting messy lecture notes into something studyable — and my students didn't want to burn their limited study time doing it either. That time should go to learning, not formatting.
What it does
Paste in raw, unordered notes and StudyCanvas cleans them, explains the concepts with real source citations, fact-checks itself, and quizzes you — right inside an editable notebook. Get something wrong and it tutors you through it instead of just showing the answer, and it remembers what you're weak on over time.
How we built it
Agents never touch the editor directly — each one emits a typed event (concept.created, quiz.completed, mastery.updated, etc.) from a fixed TypeScript union, and one frontend hook translates those events into BlockNote document mutations. That's the whole architecture in one sentence: events in, UI updates out, nothing in between. The generation side runs through a task-dependency engine I wrote — Ingestion chunks the raw text, Curriculum builds a topic hierarchy from it, Concept Agent writes explanations grounded in that hierarchy and cites the exact source chunk, and Verification Agent checks each one against that cited text before it's allowed to show "verified" instead of "needs review." Quiz generation is dependency-gated behind verification passing, not just ordered by convention. Grading is split deliberately: MCQ/numerical are checked with plain comparisons (no reason to spend a model call on 3 === 3), short-answer goes through an LLM because that genuinely needs judgment. Wrong answers get a Tutor Agent response — misconception, guiding question, hint, explanation, fresh practice question — revealed progressively, never dumped at once. Mastery scoring is an exponential moving average I run in code, deliberately not an LLM call, because a score you can't explain isn't trustworthy. Stack: Next.js + TypeScript, BlockNote, Genkit + Gemini, and a persistence layer that auto-detects Cloud Run and switches to Firestore with zero config, falling back to a local file for dev.
Challenges we ran into
Grounding Verification Agent in the actual source text (not just a topic label) took real rework, and making the no-API-key fallback fully honest — not just a stub — meant every agent needed real, tested placeholder behavior.
Accomplishments that we're proud of
Every event type from the spec is real and wired up, nothing's stubbed. Mastery genuinely persists across requests and survives a redeploy.
What we learned
Not every agent needs to be an LLM — deterministic logic is often more trustworthy. And a multi-agent system only holds together if agents can't reach into the UI directly.
What's next for StudyCanvas
A dashboard and knowledge graph, spaced-repetition scheduling, multi-student accounts
Built With
- firestore
- gemini
- genkit
- nextjs15
- typescript
Log in or sign up for Devpost to join the conversation.