Writing
The Blog
Practical articles on the decisions behind building production software — architecture, DevOps, and the patterns that hold up after 50+ client projects.
Self-Hosting Text-to-Speech: What 400 MB of Kokoro Replaced
Replacing cloud text-to-speech with a self-hosted Kokoro-82M model across four sites: a ~400 MB CPU-only footprint, why the obvious install pulls 3 GB of unusable CUDA libraries, and the two places we deliberately kept the cloud engine.
Your Stock Photos Are Lying: Auditing 1,708 Food Images With a Vision LLM
My food encyclopedia had 1,708 stock images and the osso buco page showed a London power station. One vision model, three DB columns and a resumable artisan command later, every image is audited and visitors can upload photos that are verified and published in seconds with zero human moderation.
How I Refactor With AI Tools Without Breaking Production: Playwright + Branch Comparison
Pin current behavior with golden-master tests, generate a Playwright smoke net over every route, let the AI refactor one concern per branch, then interrogate both branches with the identical suite before anything merges.
Monitoring and Observability for Production Web Apps
Shipping code is half the job. Knowing what that code does once users are hitting it — and getting paged before they file a support ticket — is the other half. A practical guide to the three pillars of observability and how to wire them into a real production system.
New articles, straight to your inbox
Occasional writing on architecture, DevOps, and the decisions behind shipping production software. No spam, unsubscribe any time.