Stack
What I actually use
Not a list of everything I have touched. Every entry has one line on why it beat the obvious alternative, because a tool with no reason next to it is a tool nobody evaluated.
01 — Language and runtime
Language and runtime
One language across the stack. The context switch is a real cost and I would rather not pay it.
- TypeScriptEverything
Strict mode, no implicit any. The type system is a design tool before it is a safety net.
- NodeServer runtime
Boring, universally supported, and the version I run in production is the one I run locally.
Fast enough to change how often I write throwaway scripts. Not yet what I deploy.
02 — Frontend
Frontend
The layer I am strictest about, because every kilobyte here is paid for by someone on a bad connection.
- Next.jsFramework
Server components let me keep data access on the server without building an API tier for it.
- ReactUI
The composition model is still the best one available and the ecosystem is unmatched.
- CSS ModulesStyling
Scoped, zero runtime, and my design tokens are plain custom properties any future tool can read.
- Radix PrimitivesAccessible behaviour
For menus, dialogs and comboboxes. The keyboard and ARIA work is genuinely hard to get right by hand.
03 — Data
Data
Postgres until Postgres stops working. It has not stopped working yet.
- PostgreSQLPrimary database
JSON, full-text search, queues and geospatial in one system I already have to operate.
- DrizzleQuery builder
Generated SQL I can read and review. Migrations are plain files, not an opaque engine.
- RedisCache, presence, rate limits
For things that are allowed to disappear. The moment data must survive a restart it belongs in Postgres.
- ZodRuntime validation
Every boundary — forms, API input, environment variables — parses before it is trusted.
04 — Ship and operate
Ship and operate
The goal is that a deploy is boring and a rollback is one click.
- VercelHosting
Preview deploys per pull request removed an entire category of "works on my machine" argument.
- GitHub ActionsCI
Typecheck, lint, build and a Lighthouse budget on every PR. The budget is the part that lasts.
- SentryError tracking
Production minifies errors into digests. Without a reporter you are debugging hashes.
- PlaywrightEnd-to-end tests
A handful of tests over the paths that make money. I do not chase coverage numbers here.
05 — Desk and daily
Desk and daily
Unglamorous and used every single day, which makes it worth being picky about.
- VS CodeEditor
Vim keybindings, a theme with real contrast, very few extensions.
- Fish + StarshipShell
Autosuggestions from history are the feature. Everything else is decoration.
- RaycastLauncher
Clipboard history and window management. The snippet expander earns its place daily.
- ObsidianNotes
Plain markdown in a folder I own. Every note here eventually becomes a tip or a lesson.
- FigmaDesign
I design in the browser mostly, but layout exploration is faster on a canvas.
Resources
Worth your time
Deliberately short. A list of two hundred links helps nobody — these are the ones I actually reopen.
Free online. The chapter on TCP and latency changes how you think about every network call.
The best explanation of database indexes that exists, and it is free.
Paste a plan, get a readable tree. Makes the slow node obvious at a glance.
- web.dev — Core Web VitalsReference
The reference for what the metrics mean and, more usefully, what actually moves them.
- The WHATWG HTML specReference
Genuinely readable once you get used to it, and it settles arguments permanently.
- OWASP Cheat Sheet SeriesReference
Read the session management and authentication sheets before you write either.