Java Todo App
A full-stack todo app built to teach the backend cleanly — a Quarkus REST API over PostgreSQL via Hibernate Panache, with a vanilla-JS frontend served from the same origin.
Java Todo App is a small full-stack todo list, but the point of it was the backend. I wanted a clean, honest example of the three-boxes shape every web app really is — browser, backend, database — with each layer doing exactly one job and nothing leaking across the boundaries.
The core#
The backend is Java on Quarkus. It exposes a REST API under /api/todos with
the verbs mapped to what they actually mean: GET to list, POST to create,
PUT to toggle a todo complete, PATCH to edit its text, and DELETE to
remove it. Persistence is PostgreSQL 16 through Hibernate ORM with Panache,
using the Active Record style so the todo entity carries its own query methods
and the resource layer stays thin — it takes the request, calls the entity, and
returns a result, without SQL or persistence details bleeding into the HTTP
layer.
Architecture#
The browser never touches the database; it always goes through the backend, and
the backend is the only thing that talks to Postgres. The frontend is
deliberately plain — HTML, CSS and vanilla JavaScript — and it's served from the
same origin as the API, which sidesteps CORS entirely and keeps the whole thing
one deployable unit. The database runs in Docker Compose, so docker compose up
plus ./mvnw quarkus:dev is the entire setup, and Quarkus's live-reload dev
mode means backend changes show up without a manual restart.
Why I built it#
This was a learning project with a teaching goal: the repo ships a beginner-friendly README that traces a single todo from click to saved row and back, so the codebase doubles as an explanation. Keeping the design clean — clear layers, standard REST semantics, a real relational database rather than an in-memory shortcut — was the whole exercise. It's the small, focused version of the same backend discipline I carry into larger Quarkus projects.
Next, have a look at

PolicyFlow
Swiss insurance broker platform — a KVG premium calculator with offer and policy management.
PHP-native Real-time Backend
A Socket.IO alternative that runs on plain PHP + MySQL — authoritative shared state, delta sync and presence with no Node process or WebSocket daemon.