Projects · Study project · 2026
System Design Practice
A Go + HTMX app for interview practice: a question bank with answer frameworks, flashcards and quizzes, a progress tracker and timed mock interviews with self-rating. Server-rendered, no JS build step.
Go · chi · PostgreSQL · Redis · HTMX
SourceProblem
Reading theory does not stick; practising with a timer and a rubric does. I wanted a personal tool for that without paying for a course.
What I built
A single-user web app: 15 practice problems with framework hints, 12 flashcard/quiz topics, a topic checklist and a timed mock mode. Content is original YAML loaded into Postgres at startup; pages are Go templates enhanced with HTMX.
Architecture
- cmd/serverentrypoint and route wiring with chi
- internal/storePostgres queries, Redis cache, embedded SQL migrations
- internal/seedYAML curriculum loaded on startup, so adding content needs no code change
- internal/webembedded templates and static assets
- docker composePostgres, Redis and the app for local runs
Decisions and trade-offs
01
Server-rendered HTML with HTMX instead of a SPA
The interaction model is forms and partial updates, so HTMX keeps the whole app in Go with one deploy artefact and no frontend build. The trade-off is less client-side richness, which this tool does not need.
02
Single-user auth, by design
One admin account from env variables. Multi-tenancy would add accounts, authorisation and data isolation for a tool that only I use; leaving it out keeps the surface small and honest about its scope.
03
Cache the read-heavy list, not everything
The curriculum/problem list is read on every page and rarely changes, so it is cached in Redis. Per-user progress is written often and read once, so it stays in Postgres.
Evidence
- Runs with `docker compose up --build`; migrations are embedded and applied on start.
- README describes the 6-step answer structure and the rubric used in mock mode.
Status · Working; content grows via YAML