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 |