Uses
Everything that actually runs this site.
Not an aspirational stack - the real contents of the three repositories delivering this page. You can check every line of it against the site you are reading it on.
Server and deploy
- Hetzner VPS
- Ubuntu 24.04, amd64 - one machine, everything on it
- Docker Compose
- Five services on one machine: site, admin, API, database, proxy
- Caddy
- Reverse proxy and Let’s Encrypt certificates, automatically
- GitHub Actions → GHCR
- Every push builds an image, runs the tests and ships over SSH
Backend
- Go
- The REST API - one compiled binary, no runtime dependencies
- chi
- A small router; no framework underneath it
- PostgreSQL 16 + pgx
- The single source of truth; never exposed to the internet
- sqlc
- Generates Go from SQL - not an ORM, I write the queries
Frontend
- Next.js 15 (App Router)
- With ISR: content comes from the database, pages stay static
- React 19 + TypeScript
- Server components first
- Tailwind CSS 4
- Design tokens as CSS variables
- next-intl
- uz and en, paired through hreflang and a translation key
- MDX + Shiki
- Post bodies are MDX in the database, highlighted on the server
Quality and observability
- Vitest
- Front-end unit tests; they run in CI before the build
- go test
- Unit and integration tests against a real PostgreSQL
- Umami
- Self-hosted analytics; no third-party scripts
- Telegram bot
- An ops bot in its own container - status, notifications, alerts
When the list changes, this page changes first.