Real-time messaging with Mercure SSE in PHP

How to build a real-time messaging system with Mercure server-sent events, covering threads, user blocking, and email digests.

March 28, 2026 · 4 min · Russell

Entity lifecycle hooks and batch operations in Waaseyaa

How to use preSave, postSave, preDelete, and postDelete hooks in Waaseyaa, with automatic pre-save validation and saveMany/deleteMany batch operations.

March 27, 2026 · 4 min · Russell

Publishing a PHP monorepo to Packagist with splitsh-lite

How waaseyaa went from a monorepo with 43 path-repository subpackages to individually installable Composer packages on Packagist using splitsh-lite.

March 25, 2026 · 6 min · Russell

AI-native PHP: the waaseyaa AI packages

What ai-schema, ai-agent, ai-pipeline, and ai-vector enable in a PHP framework designed for AI from the ground up, and an honest look at what’s built versus what’s planned.

March 24, 2026 · 8 min · Russell

From scaffold to live site in 11 minutes

How a Waaseyaa site goes from composer create-project to production HTTPS in 11 minutes — and the deployment patterns shared across all Waaseyaa applications.

March 23, 2026 · 6 min · Russell

Testing a 48-package monorepo at scale

How in-memory implementations, a layered test strategy, and AI-assisted test generation keep a 48-package PHP monorepo testable.

March 22, 2026 · 6 min · Russell

i18n for a cultural platform

How waaseyaa’s i18n package handles language negotiation and multilingual entities — built for an indigenous cultural platform where language isn’t a feature, it’s the point.

March 21, 2026 · 6 min · Russell

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

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