Journal
Occasional writing on web development, AWS, open source, and building products.
Recently Played: bringing back my Last.fm component
I had a Last.fm widget on my site in 2010. Fifteen years later, I brought it back as an Eleventy WebC component with SSR, live polling, and localStorage caching.
Read article →
WireGuard for safe browsing on kids' devices
Kids' devices leave the home network. WireGuard tunnels their DNS back through home filtering — everywhere, automatically.
Read article →
Running AdGuard Home and Unbound on a home server
AdGuard Home handles the filtering, Unbound handles the resolving. Together they give you private, ad-free DNS for your whole network.
Read article →
Building a tiny Intel N100 home server
I built a silent, tiny home server for £250 using an Intel N100. It runs 24/7 on about 8 watts.
Read article →
Remove trailing slashes with CloudFront and 11ty
Trailing slashes and 11ty's folder structure caused redirect loops. A simple CloudFront function fixed it.
Read article →
Enhance CSRF package - now supports multipart form data
My Enhance CSRF plugin now supports multipart form data - meaning file uploads work with the csrf-form component out of the box.
Read article →
DynamoDB Streams locally with arc.codes & Enhance
DynamoDB Streams don't work locally with Dynalite. I built an arc plugin that fixes that with DynamoDB Local and a polling middleware.
Read article →
A mistake the internet won't forget easily
A hungover deploy, a misconfigured cache header, and browsers that refused to forget. A cautionary tale about cache-control.
Read article →
Eleventy 2.0 & WebC
I rebuilt two production sites with Eleventy 2.0 and WebC. Here's what I learned about HTML-first components and the gotchas to watch for.
Read article →
Sharing Enhance elements between projects
Sharing components across Enhance projects wasn't straightforward - so I built an arc plugin to handle it.
Read article →