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 Markdown editor that exports print-quality PDF, Word and PowerPoint files, with a small PDF service that runs on your own computer.
More on: PrintMD (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.
PrintMD’s PDF service turns Markdown into a PDF with one request, and it refuses to be hosted. Why that’s on purpose, and how it stays locked down even on your own computer.
More on: PrintMD (all writing about it)
Not every PDF is an A4 page. PrintMD’s page options cover a custom size, one continuous page, scaling wide tables to fit and your own margin, and each has an edge case worth knowing.
More on: PrintMD (all writing about it)
A browser can print any page to PDF, but a document you send someone needs more. How PrintMD gets fonts, page breaks and images right, and what its tests check.
More on: PrintMD (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.