Stack

Every app I build starts from the same blueprint. Each choice below gets its own post in The Boring Stack.

Area Choice Why
Language Go One static binary, a standard library that covers HTTP, and code that still reads the same in five years
Routing net/http The standard router handles methods and path parameters, so a framework adds nothing
Frontend templ, htmx, Tailwind Server-rendered HTML with type-checked templates; interactivity without a second app in JavaScript
Database SQLite One file, no server, fast enough for almost everything a small team builds
Data access sqlx and hand-written SQL The SQL you read is the SQL that runs
Migrations goose, embedded The binary migrates its own database on startup
Tests Real in-memory SQLite, no mocks Tests that hit a real database catch the bugs mocks hide
Dev loop Docker only A new machine needs Docker and nothing else
Hosting One VPS, Caddy Cheap and fast; a single box is easy to reason about
Websites Hugo Static files, no runtime, nothing to patch. This site runs on it