Developer, musician, committed geek. Writing about all three since 2007.
Twenty-odd years building things on the web — currently CPTO at Think Digital Group / Asset TV, half of PolyOrbit, and the one-person team behind Dotvault. Most of what I do has a thread of considerate AI running through it these days — at work, and on side projects that probably wouldn't otherwise exist. This is where the rest of it lives: code notes, music posts, half-finished ideas, and the occasional strong opinion.
I kept losing my best ideas, so I built Edmund
The thought never turns up when you are sat at the right screen. So I built the app I wanted — one place to catch it, on-device AI to file it. Edmund is now in private beta.
Passwords are a liability. Laravel finally has first-party passkeys.
Laravel now ships a first-party passkeys package that plugs into Fortify. Wiring up the WebAuthn ceremony is the easy part — the interesting work is what passwordless does to the rest of your auth.
Stop your agents fighting over one test database
Run several coding agents in parallel git worktrees and they all hammer the same test database. Here is the small shim that gives each one its own.
Ten years off, five hours back on
This site sat untouched from 2016 to 2026. Why I nearly closed it three times, why I didn't, and what it took to drag it back in five working hours — with help.
Your secrets stay on your machine — here's how I keep it that way ↗
How Dotvault sends anonymous telemetry and crash reports without ever touching your `.env` files.
Nine minutes of Dotvault, no fluff ↗
Nine minutes of Dotvault on screen — editor, version history, Laravel encrypted env support, and how the trial works.
Why I built Dotvault ↗
Every developer I know has a `.env` problem. I got tired of it, so I built the tool I wanted to use.
Security Updates to Mojo Under Construction Plugin
I've posted a long overdue update to my Under Construction fork. This fixed a couple of potential security issues with direct file access and escaping output....