Inspiration
We were inspired by our own experience studying for the SAT: our whole team struggled to find test prep that felt personal. Off-the-shelf books and generic courses didn’t match how each of us learned or the topics we actually needed to work on. We wanted something that could adapt to our level, focus on our weak spots, and feel more like a tutor than a one-size-fits-all course—so we decided to build it.
What we learned
We learned how to turn that frustration into a system: using Gemini to mine and structure real exam content from official sources, generating whiteboard-style lesson videos with AI (scripting, Manim, TTS), and wiring that into a voice tutor so study could be conversational instead of passive. We also learned how to keep the app safe to share—auditing env vars, using .env.example, and never committing secrets—so others can run and extend the project.
How we built it
We split the work into three main pieces: Web app (gemstone-prep) — React + Vite + shadcn/ui for login, exam choice, a “mining” flow for curriculum discovery, a curriculum browser, and video lessons with an insights sidebar. We used React Router and TanStack Query to keep navigation and data flow clear. Backend & video pipeline (GemPrepScraperBackend) — A Node/Express API that uses Gemini to generate exam topics and topic details from authoritative sources. A Python pipeline then takes that structured content. It produces whiteboard videos (Gemini for scripts and planning, Manim for animation, Gemini TTS for narration), so each lesson is generated rather than hand-made. Voice tutor (tavus) — A LiveKit-based voice assistant (Next.js frontend + Python agent) that lets students talk through concepts, get flashcards, and take quizzes by voice—making prep feel more like a personalized tutoring session. Math and logic are central to SAT prep, so we made sure the stack could support clear explanations
Challenges we faced
Sourcing and structuring curriculum: Turning messy syllabi and official docs into a clean, navigable topic tree required careful prompting and validation (e.g. with Zod) so Gemini’s output was consistent and usable by the rest of the app. End-to-end video generation: Coordinating Gemini (planning + scripts), Manim (scene code), TTS, and ffmpeg was tricky; we had to handle failures, retries, and making sure generated Manim code was safe to run. Keeping the repo submission-ready: We audited every env var, added .env.example files, and made sure no API keys or secrets were committed so the project could be shared and run by others without leaking credentials. Integrating multiple subsystems: Keeping the React app, Node API, Python pipeline, and LiveKit voice stack aligned (APIs, env config, and docs) took careful coordination so the “personalized test prep” experience felt coherent from login to lesson to voice tutor.
Built With
- manim
- python
- typescript
Log in or sign up for Devpost to join the conversation.