This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend.
What I Built
My brother is preparing for GATE, a big engineering exam in India (think of it as the entrance exam for a master's at the IITs). The computer science paper covers pretty much everything from college, from discrete maths to operating systems to networks.
Studying for it alone is hard. Not because any one topic is impossible, but because nobody is around to tell you "hey, you're getting better". So I built him inkwand, a free study notebook that tries to be that little bit of encouragement :)
It looks and feels like a school notebook, the grid paper kind we all had as kids. Here's what's inside:
- The whole syllabus as a bookshelf. 13 subjects and 86 chapters, straight from the official syllabus. Click a book and it slides off the shelf and opens.
- Notes for every chapter, written like a friendly senior's notes: the idea in simple words, one worked example, common traps, and one line to remember. Key terms get pink, green and yellow highlighter, traps get orange.
- A practice paper for every chapter. Five exam-style questions. Get one right and you get a sticker: a gold star, a medal, a crown or a "Very good!". Get one wrong and you get a gentle cross and an explanation. Full marks gets you a trophy.
- Flashcards you tap to flip.
- Green ticks. Read the notes, finish the paper, flip every card, and the chapter gets ticked off. Each book shows how far along you are.
- A study calendar. Every day you study gets a tick, there's a streak, and hovering over a day shows what you did.
- Ask about anything. If something's missing, type it in and Gemma writes fresh notes, a paper or flashcards right there.
- No login, no accounts. Everything stays in your own browser.
The stickers and ticks sound silly, I know. But when you study alone, nobody says "well done". Now at least a gold star does :)
Demo
Live: https://inkwand.onrender.com
Opening a book
Practice paper with stickers
Flashcards, then the chapter gets its green tick
The study calendar
The classroom at the bottom of the page
If you've got two minutes: open Operating Systems, pick Deadlock, read the notes, try the practice paper (go collect a sticker), and flip through the flashcards. Then head back to the shelf and hover over today on the calendar. And scroll all the way down, there's a little classroom waiting at the bottom :)
It runs on an always-on Render instance, so it should open right away :)
Code
GitHub: https://github.com/pyarchana/inkwand (MIT licensed)
How I Built It
Nothing fancy, and that's on purpose. I wanted it to load fast and stay light:
- Python and FastAPI on the backend.
- Plain HTML, CSS and JavaScript on the front. No framework, no build step. Every icon, sticker and drawing is inline SVG, so there are no image files to download.
-
Gemma 4, Google's open-weight model, through the Gemini API. The main model is
gemma-4-26b-a4b-it, withgemma-4-31b-itas a backup. -
Render for hosting, set up from a
render.yamlblueprint.
The part that changed my whole plan
My first version asked Gemma to write the notes whenever someone opened a page. It worked! It was also painfully slow. Gemma 4 thinks before it answers, and on the free tier that took anywhere from 45 to 90 seconds. Once it thought so hard that it used up its entire token budget and replied with... nothing.
Nobody wants to wait 90 seconds for a page of notes. So I flipped it around. A small script asks Gemma to write the whole library up front: notes, a practice paper and flashcards for all 86 chapters, 258 pieces in total. It runs 8 requests at a time, retries when the free tier hiccups, and picks up where it left off if you stop it. Everything ends up as about 744 KB of JSON in the repo.
Now chapters open instantly, cost nothing, and still work even if the API key goes missing. Gemma only gets called live for the "ask about anything" box and the "write me a fresh paper" button, and the page is upfront that those take about a minute.
Keeping Gemma honest
Practice papers and flashcards have to come back as proper JSON: exactly four options, one correct answer, and an explanation. The server checks every reply with Pydantic. If something's off, it asks once more with a stricter prompt, and if that fails too, you get a friendly message instead of a broken page.
Free tier things
While writing the library, Google's API threw 74 temporary server errors at me. Then on deploy day, the 26B model failed every single request while the 31B one was totally fine. So now if one Gemma model is having a bad moment, inkwand quietly asks the other one. Swapping models is one setting, which is a big part of why an open model works so well here.
Making it feel like a notebook
I wanted it to feel like sitting at your desk, not opening yet another app. So there's grid paper in the background, headings in pen, and highlighters in the notes. At the very bottom is an empty classroom: a blackboard with chalk in white, pink and yellow, rows of benches, a clock, and a window where the sun glows and clouds drift by. It works on phones too, and it respects reduced motion settings.
Why Open Matters Here
- It's free. Good study material shouldn't be stuck behind a paywall. Gemma's free tier and Render's hackathon credits mean inkwand costs my brother, and anyone else who finds it, nothing at all.
- The content is open too. Coaching notes are usually locked away. inkwand's whole library is plain JSON in a public, MIT-licensed repo. Spot a wrong answer? Open a pull request and it's fixed for everyone.
- No lock-in. When one model broke on deploy day, switching took one setting. If the hosted API ever changes, the same Gemma weights can run somewhere else.
- It can go fully offline. My 8 GB laptop can't run Gemma locally (sad, I know), but the weights are public. A college lab with better hardware could run the whole thing with no internet and no API key.
A closed model might have been faster. But free, forkable and fixable by anyone matters more to me here than a few seconds.
Handing It Over
My brother is not a talker. When I sent him the link, I got no "thanks", no "nice", not even an emoji. Honestly, I saw that coming :)
But everything inkwand remembers lives in his own browser: the stickers, the green ticks, and the calendar that marks every day you study. So a little later, I peeked over his shoulder.
The calendar wasn't empty anymore. There were green ticks on it and stickers on his sheet, and hovering over the ticked days showed what he'd been studying.
He still hasn't said a word about it. 👀
In our house, that's a review.
Prize Categories
- Best Use of Gemma: Gemma 4 wrote all 258 pieces of the library, and it writes fresh notes, papers and flashcards on request, with a second Gemma model as a backup.
- Best Use of Render: inkwand runs on Render, deployed from a render.yaml blueprint with a health check, auto-deploys on every push, and an always-on Starter instance so it never sleeps.





Top comments (2)
So cool!
thank you!!! :)