The ingest side of a sovereign language platform
How an Elder’s whiteboard video becomes a searchable Anishinaabemowin lesson, on infrastructure the community owns end to end.
AI slop and the content treadmill every developer is on
Why I automated my own content pipeline, what it costs, and how developers can share their work without adding to the AI slop.
One URL, two readers: serving HTML to people and Markdown to agents
How Waaseyaa serves the same content as a web page for people and clean Markdown for AI agents from a single URL, using HTTP content negotiation.
Agent-friendly JSON output for PHP CI tools
How the waaseyaa/agent-output package shrinks PHPUnit, PHPStan, and bin/check-* output to compact NDJSON envelopes so AI agents do not drown their context window in CI noise.
Spot the AI: can you tell which passage Claude wrote?
A small web game that shows you two short passages — one human, one Claude — and asks you to pick which one is the AI.
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.
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.
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.
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.
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.