Skip to main content

Engineering the open web.

Long-form writing on Drupal, PHP frameworks, AI tooling, automated testing and everything else in a working programmer's stack — shipped from production, not theory.

Stop sending email from your VPS — I checked my own DNS and even I got it wrong
engineering

Stop sending email from your VPS — I checked my own DNS and even I got it wrong

Gmail and Outlook now hard-bounce unauthenticated mail instead of junking it. Sending straight from a VPS is a reputation treadmill you lose. The fix is to relay but keep your own SPF/DKIM/DMARC — which is exactly where I found my own footgun: a live 'v=spf1 -all' with no relay include, my newsletter surviving on DKIM alone. Here's what each record does and how to not do what I did.

2026-07-27 / 05 min
My VPS bill jumped and OVH isn't the villain — your next gaming PC is
engineering

My VPS bill jumped and OVH isn't the villain — your next gaming PC is

My OVH renewal came in ~45% higher, and for once the host isn't being greedy: the world's affordable RAM is being fed to AI accelerators. Why DRAM contract prices nearly doubled, why 'just switch to Hetzner' doesn't help, why it won't ease before 2027 — and the actual tuning that made my 4GB box need less memory instead.

2026-07-27 / 04 min
The flat-rate era of AI coding is ending. Here's what my stack costs now.
ai

The flat-rate era of AI coding is ending. Here's what my stack costs now.

GitHub Copilot went token-metered on 1 June, Cursor split its usage pools, and Sonnet 5's intro API price expires 31 August. The flat monthly plan for AI coding is quietly over. Why it broke, what it does to a working dev's bill, and the one rule I now budget by.

2026-07-24 / 05 min
Pi: the coding agent that fits in your head
ai

Pi: the coding agent that fits in your head

Pi is Mario Zechner's minimal coding agent: four tools, a system prompt under 1,000 tokens, and skills that load only when needed. I ran it on this blog's Drupal repo. It's the clearest look at the machinery I've had in a while, and it has no seatbelts, on purpose.

2026-07-24 / 04 min
hook_ is dying (slowly) and I started rewriting my .module files anyway
drupal

hook_ is dying (slowly) and I started rewriting my .module files anyway

Attribute hooks have been stable since Drupal 11.1, so I converted this blog's SEO module from a procedural .module file to a #[Hook] class. The catch nobody mentions: procedural hooks aren't actually deprecated yet and won't be removed before Drupal 13, around 2028. What's worth doing now, what isn't, and the LegacyHook trap that quietly fires your hook twice.

2026-07-24 / 05 min
I pointed Claude Code at my Coolify box. Deploying by sentence is a bit too easy.
ai

I pointed Claude Code at my Coolify box. Deploying by sentence is a bit too easy.

Coolify shipped a first-party MCP server in v4.1.0, so I wired Claude Code to the VPS that runs this blog and deployed by asking. It works, which is the worrying part. What the tools actually do (no rollback), the thin confirmation model, and how I scope tokens so an agent can't restart prod off a misread sentence.

2026-07-24 / 04 min
Subscribe to Home
One email a week. No noise.
Every new article, plus the tools and patches I’m watching.