A Physics Practice App for the Hungarian Érettségi

How I learnt what good software actually means.

Screenshot of the Fizika practice app showing topic-selection buttons over a light textured background.

Producing value is the ultimate test of software. Users don’t care about the cool tech or the clever architecture; most often, they don’t even care about half the features. Users have a problem they wish your software could solve for them.

The problem

My problem, and my classmates’, was the Hungarian physics érettségi, a university entrance exam. We were advised to start preparing two years ahead by solving questions from past exams1. But the questions are randomly sampled from the whole curriculum. That makes it tedious to practise a single topic, and hard to tell whether a question you can’t answer is simply material you haven’t learnt yet.

The evolution of the solution

The solution was to manually extract the questions (and their diagrams) from twenty years of exam PDFs, a perfect way to procrastinate on studying. Then, together with the project’s main stakeholder (my physics teacher), I went through every question and categorised it by topic. Finally, I built a small interface over this database, and the site still runs at fizika.schmelczer.dev2: it makes the questions searchable and generates mock exams drawn only from the topics a student should already have mastered.

It’s one of my earliest projects, built with a rudimentary understanding of full-stack application development, yet for years it was my most popular app by both active users and time spent per user. It has stood the test of time, too: more than nine years on, it’s still moderately popular, and generations of students at my old school (PTE Babits Mihály Gyakorló Gimnázium) have used it to prepare for the same exam.

Plausible analytics dashboard showing 273 unique visitors in a 60-day window

The app has gone through a few iterations. It started as the most spaghetti PHP one could imagine, coupled with a real (and absolutely unnecessary) MySQL database. But it worked. I got a really good score on the exam and left the site running for future students.

Eventually, hosting a full-blown database became too expensive to justify, so I migrated everything to a static site served through Firebase. Then, year after year, students would write in asking how to add the latest questions, and walking each of them through the GitHub workflow got tiresome. So this year, I vibecoded a small CRUD admin interface that edits a JSON file on disk. The file is under version control, so nothing is lost should an edit go wrong. We’re back to running a backend server, but self-hosting compounds3: I already had an established self-hosting setup, so the marginal cost was negligible. Happy users, happy maintainer.

Conclusion

There are two takeaways here. First, data can be vastly more important than the app wrapping it: Fizika’s wrapper has been replaced twice without changing the core value it provides. Second, there’s building software for the thrill of the engineering challenge, and there’s building it to create value at little cost. This project taught me both.

  1. past exams: https://www.oktatas.hu/kozneveles/erettsegi/feladatsorok
  2. https://fizika.schmelczer.dev/
  3. self-hosting compounds: https://schmelczer.dev/articles/frame-eink-photo-display/