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.

Craft is becoming a Laravel app — a Drupal dev watches a CMS change engines mid-flight
craft cms

Craft is becoming a Laravel app — a Drupal dev watches a CMS change engines mid-flight

Craft 6 (alpha since May 2026) is a ground-up port from Yii onto Laravel, and can embed in an existing Laravel app. I lived Drupal's Symfony 'get off the island' in Drupal 8, so I have a haunted perspective: the framework swap is the right long-term bet and a short-term ecosystem earthquake. The questions that decide it aren't about Laravel — they're about the plugins.

2026-09-02 / 04 min
Gin isn't replacing Claro — it's merging with it, and it's messier than the headline
drupal

Gin isn't replacing Claro — it's merging with it, and it's messier than the headline

The tidy story is 'Gin replaces Claro as Drupal's admin theme.' The reality that landed in core is a merge, not a swap: a new experimental 'Admin' theme (Gin was built on Claro, so the codebases had to be reconciled), shipped ~3 months late and alpha, with Claro still the default. What it means for gin_toolbar, and why 'default in Drupal 12' is likely-not-guaranteed.

2026-09-02 / 03 min
Proxmox went ARM — and it made me defend my boring x86 VPS
tooling

Proxmox went ARM — and it made me defend my boring x86 VPS

Proxmox VE 9.2 shipped official ARM64 support (Aug 2026, first-ever second architecture — but Grace/Vera servers, not Raspberry Pis). The homelab crowd cheered; I looked at my one x86 VPS running Docker on the host and defended it. Why a hypervisor is overhead you don't need on a single-tenant box — and the exact moment it would be worth it.

2026-09-02 / 04 min
RAG cost per query is a lie — the real bill is the re-index you haven't done yet
ai

RAG cost per query is a lie — the real bill is the re-index you haven't done yet

Everyone budgets RAG by the per-query LLM call, then gets blindsided three sprints in when they change chunking or swap embedding models and have to re-embed the whole corpus. Real numbers, why an embedding model is a lock-in decision disguised as a benchmark score (incompatible vector spaces), and how to budget for the re-index — plus when it genuinely doesn't matter.

2026-09-02 / 04 min
The open-weight coding gap closed — so why are your agents still worse?
ai

The open-weight coding gap closed — so why are your agents still worse?

GLM-5 (MIT), Kimi K2.6, DeepSeek V4 and Qwen3.6 all caught up to the frontier this year. I swapped my agent to a top open-weight model expecting better diffs and got the same occasional failures — because the model was never the bottleneck. The harness is (tools, context assembly, retries, verification). Plus the self-hosting asterisk: 'open weights' ≠ 'runs on your box'.

2026-08-24 / 04 min
An honest OTel diet for a one-box blog
tooling

An honest OTel diet for a one-box blog

Observability tooling sells the full logs+metrics+traces meal, but my blog is one PHP process and one DB. Distributed tracing on a single-service box is air-traffic control for a paper plane. What actually earns its place: centralized log search + RED metrics from the access log. No always-on OpenTelemetry, no Tempo. The complement to my Beszel setup.

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