Inspiration
We highlight books, save articles, and export notes to Obsidian, and a month later most of it means nothing to us. Reading feels like progress while it happens. For Build Week we wanted an app that separates recognizing a concept from being able to explain its mechanism, and does it while the text is still open in front of you.
What it does
Mastery is a question-first learning environment. You import a text, select whatever confuses you, and ask. Each answer streams in from Luna and adds a node to your concept map. A concept counts as explored when you meet it, proven after you pass a transfer check, and taught after you teach it back to Milo, an AI student whose separate evaluator checks for mechanism-level evidence. Gaps from the teach-back show up as dashed ghost nodes on the map, and you can export any concept to Obsidian with its full evidence history and wiki-links that mirror the graph.
How we built it
Everything runs on one model, gpt-5.6-luna, over the Responses API. It streams the tutor explanations, maps concepts, generates the transfer checks, plays Milo the student, grades the teach-backs, and picks two expert questions the learner never thought to ask. The evaluator gets medium reasoning effort while the rest run at low, and all structured output is validated server-side.
Codex did most of the building. It verified current GPT-5.6 guidance, scaffolded the app, and implemented the state model, streaming route, teach-back flow, PDF import, and export layer. After every change it reran the tests end to end, from the state-transition unit tests to a live Luna run of the golden path and a browser test that reloads the app and checks the lesson survives.
Challenges we ran into and what we learned
Our main constraint was time. We could only give this project a few hours here and there, so every session had to end with something working, and anything that didn't serve the core loop had to go. That is how the pivot happened. The first version was growing into a branching reader, and at some point we admitted that reading, however pleasant, was not the product. Studying without checking yourself leaves almost nothing behind. So the reader view went, and transfer checks with teach-backs moved to the center.
The deeper conviction behind that cut is personal. Answering questions about a text helps, but what actually makes an idea stick is formulating it in your own words. That is why the teach-back is the heart of Mastery rather than a bonus feature, and why the evaluator refuses to accept a fluent paraphrase. We rewrote its rubric until restating the text stopped passing, because that is exactly the kind of self-deception the app exists to catch.
The second half of that conviction is that what you learn should accumulate somewhere you own. Everything you study in Mastery lands in a structured knowledge base, each concept with its source, its evidence history, and the explanation you wrote in your own words. From there it exports to Obsidian as linked notes that mirror your concept map, so the work of proving a concept keeps serving you long after you close the app.
Codex made the time constraint survivable. It carried most of the implementation and reran the tests end to end after every change, so short sessions stayed safe and the pivot never broke an earlier flow.
Built With
- betterstack
- codex
- gpt
- openai
- postgresql
- react
- supabase
- typescript
- vite
Log in or sign up for Devpost to join the conversation.