---
title: A Physics Practice App for the Hungarian Érettségi
description: A static jQuery site I built in high school to drill past exam questions. 682 questions, twenty years of past papers, still online and still used.
date: 2026-05-28
period: '2017-2018'
thumbnail:
  src: ./_assets/fizika.jpg
  alt: Screenshot of the Fizika practice app showing topic-selection buttons over a light textured background.
links:
  - label: Live
    url: https://fizika.schmelczer.dev
  - label: Source
    url: https://home.schmelczer.dev/git/andras/fizika
article:
  tags: ['web', 'tools']
  role: Question database, frontend, backend
  stack: ['jQuery', 'vanilla HTML/CSS', 'Node/Express', 'JSON', 'localStorage']
  outcome: A free practice app real students still find when they search for past érettségi physics papers
  audience: general
project:
  title: Fizika
  description: 'I needed it for my own physics érettségi: 682 past-paper questions, jQuery, localStorage, no accounts. Eight years on, students still find it.'
  technologies: ['jQuery', 'HTML/CSS', 'Node/Express', 'JSON', 'localStorage']
  thumbnail:
    alt: Screenshot of the Fizika practice app showing topic-selection buttons.
---

I needed it. In my last year of high school I was about to sit the advanced-level (_emelt szintű_) physics érettségi, and the practice material I could find online was either paywalled or scattered across PDFs that wouldn't tell you whether your answer was right. So one evening in 2017 I started typing past exam questions into a JSON file.

That file is the real project. It has grown to 682 questions covering twenty years of past papers, 2005 through 2025, alongside 247 diagrams scanned from the original exam sheets. Each question knows its source down to the task number (`"2016/m1/1"`), which is what lets you either drill a whole topic or sit a specific year's paper. The topics run from five flavours of mechanics down to a handful of astronomy questions, fifteen codes in all. Everything else (the site, the backend, the admin page) is a wrapper around those weeks of typing.

The wrapper is intentionally small. A static frontend on jQuery, four CSS files, the JSON blob, the scans. Pick a topic or a year, get a randomised quiz, answer, and the page colours each row green or red and writes your percentage into `localStorage`. No accounts, ever: the audience was high schoolers, and account-less was the privacy answer.

The plumbing underneath has been rebuilt twice without the product changing at all. It started fully static, spent a few years on Firebase, and now sits on a small Express server whose entire storage layer is the JSON file and an image folder, which means I can edit questions through a little admin page instead of raw JSON. The admin routes themselves don't authenticate anyone; that job belongs to the reverse proxy in front, where nginx demands basic auth before anything reaches the app. A reasonable arrangement for a one-person CMS, and terrible advice for anything with more than one editor.

What I'd change if I were starting now:

- **Astro instead of jQuery plus a Node server.** The whole thing could be one static site that re-renders on push. No backend, no Docker, nothing to keep alive.
- **Markdown source, not hand-edited JSON.** Editing questions in JSON is fine until you drop a comma at 1am and the site stops loading.
- **A licence note on the question text.** The papers are public exam material, but the page should say so.

It's been online in some form for eight years. Every spring a few emails arrive from students asking whether I'll add the latest year's paper, and I usually do, eventually; that's how a database typed up for my own exam in 2017 now ends at 2025. The thing I made for myself is still doing its job for someone else's last year of high school, and that's the only metric on it I care about.
