Bumping a PHP monorepo to 8.5: the mechanics

Sixty-seven packages, one CI matrix, one PHPStan target. What it takes to actually move the floor.

May 11, 2026 · 4 min · Russell

PHP 8.5 restraint: features we did not adopt

An upgrade is also a decision about what not to use. Property hooks, the pipe operator, and an array_find pass we mostly rejected.

May 11, 2026 · 6 min · Russell

Spec Kitty mission lifecycle: a domain modeling pass through Giiken

What a full Spec Kitty mission actually looks like end to end: spec, plan, tasks, implement, review, merge.

May 11, 2026 · 3 min · Russell

The PHP 8.5 deprecation sweep: from 34 warnings to zero

Three deprecation categories. Twenty-nine call sites. A test corpus that surfaces them all.

May 11, 2026 · 4 min · Russell

Hugo blog shortcodes: adding a visual component system to PaperMod

Six Hugo shortcodes that give your PaperMod blog callouts, steps, pull quotes, stats, before/after comparisons, and CTAs — built in one vibe coding session.

April 8, 2026 · 5 min · Russell

Day One of the Content Pipeline: What Broke and What I Fixed

First-run lessons from an automated content pipeline. Noise, human-only merges, and a backwards production step surfaced in 24 hours.

April 6, 2026 · 5 min · Russell

Remember when server-side rendering was just rendering?

How Waaseyaa’s SSR package renders HTML the way PHP always has, with Twig templates, field formatters, and a theme chain loader, no JavaScript runtime required.

April 6, 2026 · 6 min · Russell

Automate your content pipeline with GitHub Actions and Issues

Build a daily content mining pipeline that scans your repos and queues post ideas as GitHub issues.

April 5, 2026 · 4 min · Russell

Build a free links page with GitHub Pages

How to turn your GitHub profile into a links page you own, with zero dependencies and no monthly fee.

April 5, 2026 · 5 min · Russell

Domain routing in Waaseyaa: replacing a giant dispatcher with small routers

How Waaseyaa splits a monolithic controller dispatcher into domain-specific routers using a two-method interface.

April 5, 2026 · 5 min · Russell