Inspiration

Most flashcard apps are smart about when you'll see a card next, but they do almost nothing about how the card is written. You can understand the science and still get stuck on dense wording, a step that's out of order, or an explanation that's too abstract. That gap is what we built Prometheus around: the spaced-repetition algorithm decides when you review, and you decide what kind of explanation helps the idea click.

What it does

Prometheus is a flashcard app for students around ages 12-15 studying concept-heavy science. You study one card at a time: read the question, try to recall the answer, reveal it, and rate yourself Again, Hard, Good, or Easy. If you rated a card Again or Hard, Prometheus first saves that rating, then offers three kinds of help: simpler words, a step-by-step breakdown, or a concrete example. No diagnosis questions, no labels. You just say what's in your way.

The AI rewrite has to keep the same answer and stay grounded in the card's source material. It changes the path to the idea, never the idea itself. You preview the adapted version and decide whether to use it next time. Your review schedule doesn't change, the adapted card is clearly labeled, and one tap on "Use original" undoes it.

Prometheus also builds decks straight from your class materials. Paste your notes or upload a reading, and it drafts flashcards where every card carries a learning target and a verbatim excerpt from your source as evidence. You review the drafts, edit the wording, drop the weak ones, and approve the set. Nothing is saved to your deck until you say so.

How we built it

The frontend is React 19, TypeScript, Tailwind CSS, and Vite. Convex handles storage, due-card queries, and transactional review writes, and scheduling runs on FSRS-6 via ts-fsrs, with optimistic concurrency checks and a full review log, so every rating is recorded exactly once.

The AI features run server-side in Convex actions calling the OpenAI Responses API with strict Structured Outputs and response storage turned off. Card generation is grounded: every drafted card must quote a real excerpt from the supplied material, and drafts that fail that check are thrown out. Adaptation is deliberately narrow: keep the learning target, stay inside the card's source material, never use diagnostic language. In both flows, candidates live in memory until the learner actually accepts them, so an abandoned preview never leaves junk in the database.

We also built a fully offline demo mode with deterministic variants, so the whole adaptation loop works even with no backend or model available.

Challenges

The hardest part was keeping help separate from assessment. If the AI rewrites a card before you try to recall it, the rating stops meaning anything and the spaced-repetition signal degrades. So adaptation strictly happens after the rating is saved. From there the tricky details piled up: one canonical card identity that an accepted adaptation "rides along" with in later reviews, a review log that records which version you actually saw, ownership checks on every path, and making "keep original" cost zero writes.

What we learned

Adaptive learning works better when the learner is the one steering. A few explicit, reversible supports turned out to be easier to trust than a big invisible personalization system trying to guess what you need. We also learned that reliability is a design feature: deterministic scheduling, transactional reviews, structured model output, and an offline path meant the demo behaves the same way every single time.

What's next

A "Study Passport" for preferences like session length and read-aloud, and looking at review grades and response times by support type to see which supports actually help. Most importantly: more structured sessions with neurodivergent learners, using their feedback to change the product.

Built With

Share this project:

Updates

Submission history