This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
Everytime exams come up, my friend Subhadip and the entire class panics. They hop into their WhatsApp group (our holy repository) and browse through PDFs of previous year questions (PYQs).
There's a huge collection of question papers, but no idea about what to study.
Which chapters are the most important ones?
What are the maximum-marking questions?
Are these questions repeated?
We usually take a guess, or randomly refer to a curated list of important questions that some random higher year student has given us.
When Subhadip had an exam, and my friends continued to pull the same stunt, I thought, why don't we make something that can do this for us?
So, I built PYQed for Subhadip and others, taking the syllabus and previous year question papers and converting them into a question bank organised by topic and marks.
Features
- Your syllabus becomes subjects automatically. Import the syllabus PDF and PYQed creates a folder for each subject, with its units and topics. One can edit freely, and you can even create subjects manually.
- It reads scanned papers. Most PYQs are images exported as PDF. Gemma 4 reads each page, extracts each question with its number, marks, and type, and you can review them beside the original page before saving.
- Each question is filed under its syllabus topic, marked as the number of marks and sorted by how often they have appeared before. "Asked 3× (2019, 2021, 2024)" appears on the card.
- Units are prioritized based on actual weight, such as average marks per paper, so that one knows where to begin.
- Practice mode shows questions from topics chosen and those marked "Revise" appear more frequently.
- One imports, all benefit. A subject exports as a tiny JSON file you can WhatsApp. Anyone who opens it obtains the complete analysis without needing an account or key.
Subhadip's Reaction
I sent Subhadip the APK and a DSA JSON file I'd already analyzed. A few minutes later, he called me and said
Wait, this question has come up three years in a row and nobody told us? And Unit 3 is worth more than the other two put together?
After that he tried and app by himself, and used the practice mode. His verdict was
Bro where were you all this time? Share it to the rest ASAP!!
Demo
Install and try the app here
YouTube Video: https://youtu.be/vQk791GQyJ8
Screenshots
| Home | Syllabus review | Paper review |
|---|---|---|
![]() |
![]() |
![]() |
| Topic view | All questions | Practice |
|---|---|---|
![]() |
![]() |
![]() |
Code
PYQed
Turn your university syllabus and past year question papers (PYQs) into a topic-wise question bank you can sort, filter and practise.
Powered by Gemma 4, an open-weight model from Google DeepMind.
Built for the DEV.to Hacktoberfest Weekend Challenge 2026, theme "Build for a Friend". Built on a 4 GB RAM laptop with no GPU, no server and no budget.
Download
Get the Android APK from the latest GitHub Release. On iPhone, run it through Expo Go (see Setup).
Screenshots
The problem
Before exams, students skim years of PYQs trying to guess what matters, or trust unverified "suggestions" from seniors. PYQed answers it with data: which units carry the most marks, and which questions keep coming back.
It works for any university's syllabus and paper format. Nothing is hard-coded to one university.
What it does
- Create subjects…
How I Built It
No server at all
PYQed has no backend. The app speaks directly to Gemma 4 using the user's own free Google AI Studio key, kept secure on the phone. Getting one only needs a Google login and one button. The app can also use OpenRouter or any OpenAI-compatible endpoint, set in Settings. Everything else is on the phone, like reading PDFs with pdf.js in a hidden WebView, storing subjects, ranking, sorting, and practice. It works offline once imported. It's built with Expo (React Native + TypeScript), tested live in Expo Go, and compiled into an APK in the cloud with EAS, because my laptop (4 GB of RAM, a Pentium, no GPU) can't run Android Studio, let alone a model.
A rule: AI reads and labels, code counts
In an early test, Gemma 4 invented a heading that wasn't on the page. That influenced this whole app. Gemma has three jobs and each returns JSON that my code validates:
- Read the syllabus into subjects, units, and topics.
- Transcribe each paper page into questions, copying text exactly, never solving or rephrasing. If marks aren't printed, it's required to return null , not a guess.
- Label each question with a topic ID from the syllabus. Everything else is code: marks per unit, times asked, priority, sort order, and even finding repeats (same wording in at least two different years). No number in PYQed comes from an AI; repeats used to be an AI call, but that cost extra requests in a free quota, and could only match wording anyway, so it's done for free in code. Since no model is perfect, the app never fails silently either: unreadable marks show as "? marks", numbering gaps get flagged, and every question is reviewed next to the original scanned page before it's saved.
What went wrong
- A finished answer was thrown away. A table-heavy syllabus took 4‒7 minutes, then failed when "request took too long" while AI Studio's usage page showed the tokens had been generated. My 5-minute timeout had cut Gemma off mid-thought. Now the response is streamed and the app only gives up after 90 seconds of silence.
- Gemma got stuck in a loop. The streamed thinking showed it repeating a "Final Check" that topic details were copied exactly. My prompt said to copy exactly plus a ~15 word limit, which can't both be true. The prompt fixed the loop.
- Google stopped answers halfway. Its copy filter ( RECITATION ) cut off syllabus answers at the same spot twice, and I was throwing away the good part and starting again. Now the complete part is kept, and only the rest is asked for.
- Everything was "Unassigned". The review screen marked any edited question as user-edited, and the topic labeller skipped those, so reviewed papers never got labelled. Failures were also silent. Now the real error is shown.
- PDF imports hung forever because the importer held an old handle that still thought the PDF reader wasn't ready.
- You can't steer a model's thinking with a prompt. My first attempt at telling Gemma how to think made it dump its outline into the answer. "Think briefly, decide once," plus a few tie-breaker rules, worked better.
I built the first structure with Antigravity CLI from a spec I wrote, and used Claude Code to find and fix bugs like the ones above. Every design decision, and every test on a real phone, was mine.
Why Does Open Innovation Matter?
- Because the whole thing runs for ₹0 and without a server. I've no budget and a 4GB laptop. Gemma 4's free tier is the reason a student can build this at all, and why Subhadip and the class can use it without paying anyone. My first hosting plans died on paywalls; an open model with a free key never hit one.
- Because I can swap the model without rewriting the app. PYQed defaults to gemma-4-26b-a4b-it (faster) and lets you switch to gemma-4-31b-it (larger), OpenRouter, or any OpenAI- compatible server. If Google changes its free tier tomorrow, classmates change one setting. Someone with a spare PC can point the app at their own LM Studio or vLLM and keep their papers off other people's servers entirely.
- Because students' papers and syllabi stay theirs. There's no PYQed server and no account. Pages go to the chosen provider only during import. Subjects, practice progress, and shared files live on the phone, and an exported file never contains an API key.
- Because open models are moving toward the device. Today PYQed uses a hosted model to read papers, but nothing in its design depends on that. As phones and open models meet in the middle, the reading step can move onto the phone without rewriting the app.
What's next?
- A shared library of analysed subjects per university, so most students never import anything.
- Practice variants with changed numbers, and checking photographed solutions, both of which need much more careful verification than a weekend allows.
- Reading papers fully on-device as small models improve.
Prize Categories
- Best Use of Gemma: Gemma 4 is PYQed's default AI. It reads syllabi and scanned papers and labels topics, all under the "AI reads and labels, code counts" rule.












Top comments (0)