The editor: Cursor + Claude 3.7
I spend 80% of my working day in Cursor. Tab completion for the obvious stuff, Cmd+K for surgical edits, Cmd+L for the bigger architectural conversations. It is not magic. It is a very fast intern who has read the entire internet and occasionally hallucinates npm packages that do not exist.
I pay for Pro because the context window and speed matter. The free tier is fine for dabbling. When you are actually shipping, waiting for the model to catch up breaks flow. That said, I have had to roll back plenty of “helpful” refactors that turned a 50-line file into a 200-line abstraction festival. Always read the diff before accepting. I learned this the hard way after Cursor decided to wrap a simple fetch call in a factory-observer-singleton pattern.
Context window exhaustion is real on larger files. The model forgets constraints you stated three prompts ago. Wrong imports are common when you have multiple projects open. And over-engineering is its default mode because it was trained on enterprise Java.
Terminal workflow: iTerm2 + tmux + tmux-whspr
I run everything inside tmux because context switching between five projects is bad enough without also losing your terminal history every time you close a window. Sessions persist. That is it. That is the pitch.
The tool I actually built for this setup is tmux-whspr. Hit prefix+W, dictate a sentence, and it drops the transcription straight into your terminal. Voice input changes how you work. I dictate commit messages, quick notes, and entire paragraphs of documentation. More importantly, speaking your thoughts aloud forces you to clarify them. I have abandoned half-baked architectural ideas because saying them out loud exposed the flaws.
iTerm2 is configured minimally. No fancy colour schemes. tmux with sensible defaults: mouse on, status bar showing session name, window renumbering. If my terminal needs a README, I have failed.
Design: Figma + v0
v0 is brilliant for rapid component prototyping. Describe what you want, get a working React component in seconds. I use it when I do not have a clear visual in mind or when I want to explore variations quickly.
Figma is where I polish. Custom icons, bespoke layouts, anything that needs to look considered rather than generated. v0 saves hours on boilerplate. Figma saves you from looking like everyone else who used v0 that week.
Sometimes I skip both and code straight from imagination. A div, some padding, a border-radius. If it looks right, ship it. Perfect is the enemy of shipped, and most UI decisions are reversible in ten minutes anyway.
Backend: Supabase / Turso
Supabase is my default for rapid prototyping. Auth, Postgres, storage, and a dashboard in one command. When I need to prove an idea fast, I do not want to wire up OAuth or argue with connection pools.
For production edge deployments, I reach for Turso. SQLite at the edge is genuinely fast for the read-heavy workloads most projects actually have. The libsql protocol is clever. I pay for the hosted version because I have better things to do than manage replication.
I do not run my own Postgres. I have in the past. It was a bad time. Backups, migrations, connection limits at 2am. Never again.
Deployment: Vercel
Zero-config preview deployments on every push. It is the standard for a reason. I make a commit, I get a URL. Product managers love it. I love it. The “deploy on every push” habit means I never have that Sunday evening “oh god, does it still build?” panic.
It is not always right. Long-running processes, custom infrastructure, or anything that needs persistent state beyond a Redis cache will not fit. For those, I move to Fly or Railway. But for Next.js, Astro, or anything frontend-adjacent, Vercel is the obvious choice.
Project management: Linear
Linear over Jira because Jira feels like work and Linear feels like a todo list that respects your time. The keyboard shortcuts are fast. The interface does not make me angry.
The discipline I force on myself: write the issue before writing the code. Even for solo projects. It prevents the “what was I doing?” context loss when you come back after a break. It also stops the “I will just fix this one thing” spiral that turns a thirty-minute tweak into a three-hour detour.
Research: Tavily + custom MCP
Tavily has replaced my old workflow of opening twelve browser tabs and never reading them. I use it for web search directly in my dev environment. Current API docs, error message explanations, comparisons of libraries I am considering. It returns clean summaries instead of SEO blog spam.
I also run a custom MCP server, mcp-server-gsc-pro, which pulls Google Search Console data. When I am writing content or debugging why a page dropped out of the index, I get the data without leaving the terminal.
Research saves hours when you are stuck on an actual problem. It is procrastination when you are “just checking one thing” for the fifth time before starting. Learn to recognise the difference.
The glue: git discipline
Small, frequent commits. Not because some book told me to, but because reverting a five-line change is painless and reverting a five-hundred-line change is a hostage negotiation. Every commit message explains why, not just what. “Fix stuff” is a war crime.
For solo work, I mostly commit to main. Occasional feature branches when I am experimenting with something that might explode. No elaborate Git Flow. No merge commit theology. Just a clean history that makes sense when I read it in six months.
Previously: The Trap of AI-Assisted Mediocrity. You can also browse my projects.