This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
What I Built
Gemma Atlas
An adaptive, private study architect and self-paced curriculum engine powered by Google's open Gemma 9B and 2B models.
My younger siblings are homeschooled, and our mother is an English teacher. She designs their entire curriculum and teaches every class herself. But she also works at other institutions, which means my siblings are by themselves when she's not home to teach them.
Even when my mother give them topics and chapters to research and to learn, my siblings struggled to find contents because:
- they don't know where to start,
- they hesitate about what video or websites or document to trust and exploit for learning.
Having lived through the exact same struggle myself, I built Gemma Atlas to give them what I wish I'd had.
Gemma Atlas takes a topic name or any document — slides, lecture notes, PDFs, code files — and turns it into a complete, adaptive mastery roadmap powered by Gemma.
The system provides:
- Autonomous curriculum deconstruction: Gemma analyzes the scope of the subject and generates a structured roadmap with chapters, sub-chapters, key notions, governing formulas, and exam traps.
- Universal document treatment: Any file format (.pdf, .docx, .pptx, .txt, .md, code files) is parsed client-side and indexed into an in-memory TF-IDF vector store for grounded, source-anchored generation.
- Student-profile-friendly content adaptation: Each session is personalized to the student's academic level, learning style (Visual, Auditory, Kinesthetic, Reading, Writing, Fast-Paced like ADHD), cognitive conditions, free time, and exam deadline.
- 5-Box Leitner spaced repetition: Auto-generated flashcard decks with review intervals of 1, 3, 7, 14, and 30 days. Cards advance or reset based on recall, countering the forgetting curve.
- Crash Test exam arena: Scenario-based multiple-choice quizzes that explain not only the right answer, but also the traps.
- Dual-engine inference: Runs with Cloud Gemma 9B endpoints via an Express backend, or fully offline in-browser with Gemma 2-2B loaded via WebGPU and WebLLM. Every information about the users are stored on their phone, so no one can access those information except themselves.
In short, Gemma Atlas resolves the uncertainty of "where to start to learn this topic?" my siblings
Demo
https://drive.google.com/file/d/1n3mnPZX5-dKbbW8FCN-4aqKNBlsQW7kv/view?usp=drive_link
Code
Here is the GitHub link of the Gemma Atlas Project
https://github.com/RoxyMaxy/Gemma-Atlas/
How I Built It
Stack: React 19, TypeScript, Vite, Tailwind CSS, Lucide Icons, Recharts — with an Express +
tsxbackend serving the/api/sessionand/api/chatroutes.AI inference runs through
@google/genai, cycling through a prioritized list of Gemma/Gemini Flash endpoints until one responds.
The/api/sessionroute generates the structured study session (roadmap, concepts, flashcards, and quiz) as a single validated JSON payload.
The/api/chatroute handles follow-up Q&A in streaming SSE mode.
When the client requests local mode, the backend short-circuits and defers to@mlc-ai/web-llm, which loadsgemma-2-2b-it-q4f16_1-MLCweights directly into the browser's GPU memory via WebGPU.Document parsing is ran client-side.
Plain text and code files are read as UTF-8 streams.
PDFs are scanned with binary regex patterns to extract BT...ET text objects.Office formats are unzipped and traversed for XML text nodes (
<w:t>,<a:t>).
Unrecognized format falls back to printable UTF-8 character extraction, so no file is ever rejected.
Extracted content is chunked using 128-dimensional FNV-1a hash embeddings with cosine similarity retrieval, which grounds the Gemma prompt in the student's source material.The Leitner scheduler lives in
StorageServiceand advances cards through five boxes based on recall. State is persisted inlocalStorage.For The design, I used the MLH's website style, because I found it original and unique, and because I really enjoyed my path through this challenge, including the programming, the debugging and the solution seeking.
I used the DevRelay on Antigravity, using Gemini 3.8 medium, and Google AI Studio for troubleshooting.
Antigravity created the skeleton code and architecture. I coded the style layout myself, but it resulted in numerous bugs.
Therefore, I used Google AI Studio to polish the syntaxes, correct my own codes, and compile the final result.
Challenges
My first tiny bug through this challenge was the prompt: usually, I would define every single detail myself, and since I have researched and prepared before constructing this project, I knew almost everything about this product. Therefore, I already knew how I would want it to look like and how it would work. But having to study at the same time and lead my team in our college projects, I kind of just typed the overall features for the constraints, even though I explained the role, the context and the task well. Outputs were already explained in detail for the project parts.
The second problem was the syntaxes: I knew how to code the layouts, but I forgot some details and overlooked them (especially about the syntaxes and the animation) and it resulted on multiple bugs. I had to check all my errors myself, and when I didn't see any more, I finally used the Google AI Studio to check it out.
Getting Gemma to reliably produce large JSON payloads (for the roadmap stages, flashcards, quizzes) without malformed output required strict schema enforcement in the prompt.
A silent fallback bug was returning generic stage names whenever the primary endpoint was slow; fixing it meant rebuilding the
/api/sessionroute with a proper model cascade rather than a static fallback.
Running Gemma 2-2B in-browser via WebGPU required careful GPU adapter detection and graceful degradation for devices without hardware acceleration support.
Why Open Innovation Matters
To me, young students shouldn't have their learning notes, cognitive profiles, and personal study habits uploaded to proprietary platforms: for security and policies, mostly, but also for the token limits and paid plans.
Open-weight models running locally mean private inference with zero subscription cost.
For students with unreliable internet or families who can't afford private tutoring, open innovation represents a huge advantage for access. A closed API would leave people with limited, incomplete content, or lots of hallucinations.
Open innovation matters for my project, because it helps people widen their horizon and improve themselves by accessing to the most complete and detailed content possible. It represents a way for people to enjoy learning, access quality content with a more accurate, hallucination-reduced content. Hence, it helps people in their personal development.
What I Learned
On the AI side, I learned that prompt architecture is its own discipline. Getting Gemma to autonomously size a curriculum rather than filling a fixed template required understanding how temperature, schema constraints, and instruction phrasing interact. For example, too much freedom gets the output generic, but if it's too rigid, it feels canned and kind of boring, hostile, even, for some people. Finding that balance through my own experiences taught me more about how language models actually behave than any theoretical reading had.
On the engineering side, building client-side binary parsers for PDFs and Office XML gave me a real understanding of how those formats work. This knowledge is something I wouldn't have touched in a normal university project unless asked to. The same goes for implementing the vector index from scratch: writing FNV-1a hash embeddings and cosine similarity retrieval in plain TypeScript, rather than dropping in a library, forced me to actually understand what semantic search is doing.
Learning about people's struggles and challenges in learning taught me about the diversity of people, different ways on how our brain works, and how science has managed to design and tailor different ways for everyone to learn at their pace but not to fall behind. and designing for short attention spans taught me that information architecture matters as much as content.
Building Gemma Atlas also taught me to pay more attention to details and be careful with my actions (like typing correct syntaxes).
And on a personal level, I learned that having a real motivation to build something for people you actually care about changes how you solve problems. I wouldn't have really thought about every detail of this project about this learning topic if I did not have a clear overview of my siblings' situation, even if I have experienced the same problems.
Prize Categories
I entered in the Best Use of Gemma, because I was curious about this AI. I've heard of it frequently, but never used it, and this challenge brang me to research and explore it's potential.
Gemma is the core AI in my project.
My Agent Session
Final Note
I built Gemma Atlas for my siblings and my mother. She works hard enough, but when she's not home, they deserve something that meets them where they are, helps them move forward and ease the teachers' work.

Top comments (0)