Notes from shipping.
Short, opinionated essays about front-end engineering, working solo, building tools that actually get used, and the boring discipline of finishing what you start.
The craft of shipping is mostly the craft of stopping
Most front-end projects don't fail because of bad code. They fail because nobody knew when to call it done. Here's the rubric I use, project after project, to ship before the polish phase eats the budget.
Wallet UX in eight unforgivable mistakes
What I learned shipping five Web3 apps. Almost every wallet flow gets the same eight things wrong.
Three years of Next.js: what I'd start with today
The exact stack I'd reach for if I were starting a new SaaS product on a Monday. Trade-offs, not religion.
How I quote a freelance project in 48 hours
The intake form, the back-of-the-envelope math, and the boring email template that closes more clients than my portfolio does.
Designing AI chat UIs that don't lie about what's happening
Streaming, retries, partial failures, 'the model is thinking' — every honest pattern I've shipped.
The case for boring tests in Cypress
I write Cypress tests like I write checklists. Slow, dumb, hard to argue with. Here's why that ends up being faster.
Why I built StartupRoastAI in a weekend (and shipped it on Monday)
Notes from launching a side project that's now paying for its own infrastructure.
SEO for builders who hate marketing
How Morocco ROI hit 10k impressions in 28 days with zero paid traffic and an embarrassingly small content budget.
New essays, when they're worth reading.
Roughly one per month. No newsletter spam.
