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.

Entry types, Matrix, and why Craft 5 quietly out-designed Paragraphs
craft cms

Entry types, Matrix, and why Craft 5 quietly out-designed Paragraphs

Drupal taught me to juggle nodes, paragraphs, blocks and media — four entity types with four APIs. Craft 5 collapsed almost all of it into one primitive: everything is an entry, and Matrix blocks are just nested entries. The conceptual economy is real. What a Drupal dev gains (nesting that just works) and gives up (Views, SQL-shaped reporting).

2026-09-02 / 04 min
Craft's project.yaml, from someone who's been burned by Drupal config sync
craft cms

Craft's project.yaml, from someone who's been burned by Drupal config sync

Picking up a Craft CMS backend as a Drupal veteran, the first thing I looked for was config management. Craft's project config solves the same problem with a gentler philosophy — the database stays the runtime source of truth and you can rebuild the YAML from it. Gentler is mostly good, and a drift trap if you skip allowAdminChanges=false. A working comparison.

2026-09-02 / 04 min
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
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
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
Subscribe to Home
One email a week. No noise.
Every new article, plus the tools and patches I’m watching.