Skip to content

Posts

Notes and tutorials on Laravel, PHP, electronics and whatever I'm building.

Some posts are meant to be read in order: browse the series.

Every agent run is a sample

Run a coding agent twenty times on the same task and you get several different outcomes. Reliability lives in the shape of that distribution, and specs, hooks and retries reshape it. A way to read the shape, a lens on what interventions do to it, and 400 runs of Claude Code on a small Laravel app.

Where should this rule live? Claude Code hooks in a Laravel app

A line in CLAUDE.md is advice that Claude follows most of the time. A hook is a script that runs every time. Five hooks for a Laravel app (Pint, migrations, destructive Artisan commands, Pest, session context), written partly as Artisan commands, and for each one the other places the same rule could live.

Rebuilding a €300 backlit oak shelf from one pine panel

A wall shelf with a hidden LED backlight and a wooden touch tile that switches it on. The original is solid oak and costs about €300; I rebuilt it from a single pine panel and two AliExpress parts for less than €50. Measurements, cutting layout, how the light is hidden, and the one problem I have not solved yet.

Five reasons to write a test, with Pest 5

TDD, regression, characterization, acceptance and smoke tests can look identical in a Pest file. What separates them is the reason they were written, and that reason decides how you read them, name them, and whether you can delete them. A field guide with one running example in Pest 5.

Less telepathic codebases: getting started with Laravel Necromancer

Laravel Necromancer scans a running Laravel application into a manifest of its routes, models, jobs, policies and tests, each with the file and line it came from, and turns it into context for coding agents, a readability score and impact analysis that needs no LLM.

Without evals, every change is a guess

Why an AI agent needs evals before its next prompt or model change, what makes an agent harder to evaluate than a single LLM call, and the task, run and grade loop every eval is built on.