Mullet
A job runner that plans a coding job, runs it unattended in a sandboxed clone, and marks each step done only when its own checks pass.
More on: Mullet (all writing about it)
Apps, libraries and tools I’ve built.
A job runner that plans a coding job, runs it unattended in a sandboxed clone, and marks each step done only when its own checks pass.
More on: Mullet (all writing about it)
A calendar of 13 identical 28-day months, with each year starting on the first Monday on or after the spring equinox.
Rank cities around the world by what you’d keep after tax, what a month costs, which visas you can get and how each place fits the way you live.
A PHP client for publishing articles to Apple News, with a document builder for the whole Apple News Format.
A command-line tool for looking after a lot of GitHub repositories at once, with reports on their health, on who has access and on what each developer did.
Notes on how I build things.
A hardening pass on Mullet: a local server that a web page could not be stopped from calling, tools that fetched any address, and cheap models with more tools than they needed. What each guard checks and where to change it.
More on: Mullet (all writing about it)
A Claude Code hook opens each session by asking how much to spend and how much to delegate to cheaper models, then makes Mullet’s jobs follow the answer.
More on: Mullet (all writing about it)
Mullet’s licence used to say one developer, one running instance. It now allows free production use for any purpose, including inside a company, with one exclusion: offering Mullet to others as a service.
More on: Mullet (all writing about it)
The projects I have worked on most recently, from their code on GitHub.
Twenty years on the web, the last eleven at Bright Sites, which makes publishing software.
Senior Development Consultant
Senior Developer
Web Developer
Lead Developer
For work, a question about one of the projects, or anything else, send me a message and I will reply by email.