The tools I actually reach for.
One laptop, a short list of software, and the models I lean on most. No aspirational gear — just what’s open on a normal day.
Workstation
MacBook Air, M4, 24GB RAM
The whole setup — no desktop, no external display, no second machine. The 24GB is the part that earns its place: containers, an editor and a browser full of dashboards all resident at once, on a machine with no fan to complain about it.
Development tools
Zed
The editor I write in. It opens a large file without making that a decision, and it keeps AI editing in the same window instead of a separate app — which matters when you switch between the two every few minutes.
iTerm2
The terminal everything else runs inside — Claude Code, Docker, deploys. Split panes and saved profiles carry most of the day, and I have never needed it to do more than that.
cmux
Where parallel work happens. I usually have several streams going inside a single project — a fix in one, a feature in another — and cmux keeps each in its own session instead of me juggling tabs and losing track of which is which.
DevOps
Docker
So a thing that runs on the laptop runs the same way on the server. It is also how Postgres and an API stay isolated per project — no global installs, nothing to unpick when a project ends.
GitHub Actions
CI and deploys, triggered on push. Tests and build run before anything ships, which is the difference between deploying and then checking, and deploying because you already know.
AWS
Where deployed things live. Mostly the unglamorous parts done properly — compute, storage, and the IAM policy you write once and hope never to open again.
RunPod, Replicate and Fal
The three serverless GPU providers the video pipeline calls out to. Each has its own cold-start behaviour and pricing, which is exactly why benchmarking across them is ongoing work rather than a decision made once.
AI tools
Claude Code
The coding agent I work with in the terminal. It reads the repo before it edits, which is what makes it useful inside an existing codebase rather than only for scaffolding something new.
OpenRouter
One API in front of many models. Trying a different model becomes changing a string rather than wiring up another provider — which is the only reason comparing them properly is practical.
DeepSeek Chat
For the questions that happen away from the editor — thinking out loud, working out an approach before any of it becomes code. Cheap enough that I do not ration it.
Models I reach for
Claude Fable
The default when the work needs care. Long refactors, anything touching production, anything where being subtly wrong costs more than being slow.
Claude Sonnet
The everyday one. Fast enough to stay in flow, and good enough that I only reach past it when the problem has earned it.
DeepSeek
Strong reasoning at a price that changes how you use it. When a model is cheap enough to think out loud with, you stop budgeting prompts and start actually exploring the problem.
Kimi
In the rotation when I want a second read on something. The long context is the draw — when a problem needs the whole file in view rather than the interesting part of it, it goes here.
Productivity
Alfred
Launcher, clipboard history, and a handful of workflows on top. The clipboard history alone justifies it — most of what I paste, I copied twenty minutes ago and have already forgotten.
Notion
Planning and anything that wants structure — project docs, benchmark tables, the things that are really a database pretending to be a page.
Obsidian
Local markdown notes that stay mine. Plain files in a folder, so nothing I write depends on a company still existing in five years.