The stack I reach for, and why.
A running list of the languages, tools, and services I actually use day to day — the ones that survived contact with production, not the ones I tried once and wrote a blog post about.
Languages & frameworks
Laravel (PHP 8.x)
My home ground, and my default for anything that needs to ship. The ecosystem is deep enough that most problems already have a well-worn answer, and Octane closes a lot of the performance gap people still assume is there.
NestJS and TypeScript
What I’m writing most of at work right now, on an ERP rewrite. The module system and dependency injection give a large codebase real structure, and a contract-first approach keeps a big API honest while it’s still moving.
Java and Spring Boot
Where I end up when the work involves long-running business processes and BPMN workflow engines. Verbose, and worth it for the tooling around it.
Livewire and Blade
Two tiers of frontend depending on how much interactivity a page actually earns. Most pages need far less JavaScript than we give them.
Side project stack
Go
Not something I’ve been paid to write — it’s what I reach for on my own projects, where I want a service that’s small, fast, and boring to operate. FileLens and the backends behind my content pipelines are Go for exactly that reason.
Python
The glue for anything that talks to an API and produces a report. My YouTube monitoring runs on a Python script and a cron entry, and it has never needed to be more than that.
Data
PostgreSQL
The database I keep coming back to. EXPLAIN ANALYZE is the single most useful debugging tool I know, and the indexing options — partial, BRIN, GIN — solve problems people usually try to solve with more servers.
MySQL
Still what a lot of existing projects run on, so still worth knowing well rather than complaining about.
Redis
Cache, queue, lock, rate limiter. It does four jobs well enough that adding a fifth piece of infrastructure usually turns out to be unnecessary.
Infrastructure
Docker Compose
How I keep local environments honest. Prodify grew out of being tired of setting the same stack up from scratch on every new machine.
nginx
Unglamorous and completely dependable. It has never once been the interesting part of an outage.
K3s
Kubernetes for people who want the scheduling model without the operational tax of a full cluster.
AI-assisted development
Claude Code and Codex CLI
I’m increasingly convinced the interesting shift isn’t code completion but delegating whole tasks and reviewing the result. Working out where that helps and where it quietly costs you is most of what I’m learning right now.
A multi-model gateway
Routing work to different models depending on the task, and getting a second opinion from a different model family before trusting an answer.