Serverless WordPress
WordPress’s editor without a WordPress server. The editor runs in your browser with WordPress Playground, and Cloudflare stores the content and rebuilds the static site.

WordPress’s editor without a WordPress server. The editor runs in your browser with WordPress Playground, and Cloudflare stores the content and rebuilds the static site.
Spam-protected website forms without a form service. A Cloudflare Worker checks Cloudflare Turnstile and emails each submission, and Vue composables handle the form.
A web app that tracks the TV shows I watch, emails me when a show is renewed or cancelled, and adds new episodes to my calendar. I first built it in 2020, then rebuilt it with Nuxt on Cloudflare.
Earlier this year I bought a 2007 Mitsubishi Delica D:5. The D:5 has been sold in Japan since 2007 but was never officially sold in the UK. Mine is a Japanese import, which means that while it is perfectly legal and registered with the DVLA, getting insurance for it can be a little more complicated […]
I moved this site’s builds, hosting, forms and images from Netlify to Cloudflare Workers, and upgraded it to Nuxt 4 and TypeScript along the way. Here’s what moved where, and what caught me out.
Our reporting went from stale database syncs, to MySQL views, to a BI tool that copied everything and choked on our biggest table. Querying the database directly with Grafana cut dashboard updates from two hours to near-instant.
Our ECS services scaled on CPU and memory, which meant traffic spikes took the platform down before a new container ever started. Scaling on busy PHP-FPM workers fixed the outages and let us run 3 containers instead of 8.
Our PHPUnit suite was split across a 40-job matrix of GitHub-hosted runners. Moving it onto a single self-hosted EC2 runner simplified the pipeline and saves us over $200 a month.
I’ve worked on quite a few JavaScript and Vue projects over the years, and one thing that started to annoy me was maintaining the same linting configuration across all of them. Every project had its own ESLint and Stylelint configuration. Most of the rules were identical, but whenever I wanted to change something, I had […]