Replacing a homegrown database layer with DBAL

How waaseyaa migrated from a homegrown PdoDatabase to Doctrine DBAL across 67 commits — and how all three applications upgraded without breaking.

March 20, 2026 · 6 min · Russell

I Migrated a Laravel App to a Custom PHP Framework in One Claude Code Session

How Claude Code built 3 framework packages, scaffolded a full application, and got 12 pages rendering — all in a single session.

March 19, 2026 · 5 min · Russell

JSON:API from Framework to SPA: Waaseyaa's API Layer

How waaseyaa’s JSON:API layer works — ResourceSerializer, SchemaPresenter, and how Tier 3 specs let a new session pick up mid-feature without re-explaining the whole contract.

March 19, 2026 · 6 min · Russell

Deny-unless-granted: access control in waaseyaa

How waaseyaa’s AccessPolicyInterface implements deny-unless-granted semantics with field-level access control — and how GitHub milestones kept it from scope-creeping.

March 18, 2026 · 5 min · Russell

The entity system at the heart of Waaseyaa

How waaseyaa’s EntityInterface, ContentEntityBase, and field system work — and how the entity-system specialist skill made cross-session development possible.

March 16, 2026 · 5 min · Russell

Three skills for governing multi-repo co-development with Claude Code

A skill set that governs framework-app co-development across three repos: enforcing patterns, auditing divergence, and extracting shared code.

March 15, 2026 · 7 min · Russell

Waaseyaa: building a Drupal-inspired PHP CMS with AI

What waaseyaa is, why it exists, and how planning with GitHub issues before coding changes the dynamic of building complex software with AI.

March 14, 2026 · 6 min · Russell