The stack
What everything here is built with, and why. Each one lists the work it was used on, so the argument comes with the evidence rather than instead of it.
- Next.js5 projectsApp Router and server components. One framework for the marketing site, the app and the admin.
- React5 projectsThe interactive parts only. Most of what I ship never reaches the client.
- Flask7 projectsThe directory engine. Small, boring, and still running businesses years later.
- FastAPIAsync Python with typed request models, where a service is an API rather than a site.
- Textual1 projectA terminal UI that runs over SSH on anything, including an e-ink tablet. Atlas is built on it.
- Lit1 projectWeb components for the embeddable booking widget. It has to run inside someone else's site without a framework.
- Tailwind CSS4 projectsDesign tokens in one file, no stylesheet to drift. This site has no config file at all.
- TipTap1 projectThe editor behind every admin here. Stores structured JSON, not HTML, so nothing renders unsanitised.
- PostgreSQL12 projectsThe default answer. Not just the data but the queues, the search and the rate limiting stay in Postgres too, until they prove they cannot. Most never do.
- Drizzle ORM5 projectsTyped SQL with real migration files I can read. The schema is TypeScript; the migration is checked in.
- SQLAlchemy2 projectsThe Python side of the same idea, with Alembic for migrations.
- SQLite3 projectsFor anything single-writer and local. Atlas keeps a fleet’s history in one file.
- RedisQueue broker and cache. Added only where Postgres genuinely was not enough.
- Docker7 projectsOne container per app, one image built on the box. No orchestrator I have to operate.
- nginx4 projectsThe only public listener on every server I run. Containers bind to loopback and nothing else.
- Hetzner3 projectsPlain VPSs. Several products share one box, and the bill is a rounding error next to managed hosting.
- Cloudflare4 projectsDNS, proxy and origin certificates. It hides the server and absorbs the traffic I do not want.
- Tailscale1 projectThe whole fleet deploys over the tailnet. Every server, Atlas, SSH. The public internet only ever sees nginx.
- pnpm3 projectsFast installs and a lockfile that actually pins. Workspaces where a repo has more than one app.
- Playwright2 projectsReal browsers against the real app. It catches the failures that are invisible from inside the code.
- Vitest2 projectsUnit tests for the parts where being wrong is silent: dates, slugs, contrast ratios.
- CeleryScheduled and background work in Python services.
- BullMQ2 projectsThe same job, on the Node side, when a queue has to survive a restart.