Writing
- I Let an AI Coding Agent Write My Terraform. It Broke My State File. Here's the Post-Mortem.
A renamed resource block, a plan I skimmed instead of read, and a database that came within one apply of being destroyed and recreated. What actually went wrong, and the two guardrails that would have caught it.
- Your CRM Doesn't Fit Your Business: Why I Built My Own Instead of Buying Salesforce
Spreadsheets and WhatsApp weren't the real problem — the workflow they were badly approximating was. Notes on mapping a business's actual process before writing a single line of schema.
- Idempotency Is the Thing AI-Generated Infrastructure Code Keeps Getting Wrong
AI agents write infra scripts that work perfectly the first time and misbehave the second. A concrete check for the one property that matters most and is checked least.
- What Nobody Tells You About Migrating a Blog Off Ghost to Astro and Cloudflare Pages
Rebuilding this site from a self-hosted Ghost blog into a static Astro site on Cloudflare Pages — the phased build, the conversion script, and the redirect map that kept old links working.
- Why I Stopped Paying for Managed Infra and Self-Hosted Everything Instead
An audit of every managed-service line item on my monthly bill, what each one was actually buying me, and what replaced it once I stopped assuming 'managed' meant 'necessary.'
- Tailscale, Coolify, and Cloudflare Tunnel: The Stack That Replaced My Managed Cloud Bill
The architecture behind a four-node self-hosted setup: a private mesh network, a control plane for deploys, and public ingress without opening a single inbound port.
- The Terraform Gap Nobody Talks About: Managing AWS Resources the Provider Doesn't Support
AWS ships a feature before the Terraform provider catches up more often than the docs let on. Here's the terraform_data plus boto3 pattern I use to keep state and idempotency instead of reaching for a null_resource hack.
- Vibe Coding vs. Owning the System: What AI Assistants Still Get Wrong About Infrastructure
A working rule for when to let an AI agent drive and when to take the wheel yourself, based on reversibility and blast radius rather than a blanket policy of trust or distrust.
- Freelance Engineering in the AI Era: Why Clients Still Pay for Judgment, Not Code
The question I get most often now is some version of 'can't AI just build this.' Usually, yes, most of it. Here's what a client is actually paying for once you separate that out.
- How I Debug Any System, and Why the Same Process Works in the Kitchen
Reading the whole recipe before touching a pan, the same way you'd read a full diff before running it. Notes on a debugging process that turned out not to be specific to code at all.