
3D Modelling with OpenSCAD
Replacing broken toy parts and household bits by describing them as parametric OpenSCAD code — plus the GitHub Actions pipeline, in-browser customiser, and coding-agent workflow built around it.
Writing about home labs, Kubernetes, DevOps, and the things I build.

Replacing broken toy parts and household bits by describing them as parametric OpenSCAD code — plus the GitHub Actions pipeline, in-browser customiser, and coding-agent workflow built around it.
I replaced OpenClaw with a custom automation system that refines GitHub issues, implements features, fixes CI, investigates production bugs, and turns voice notes into shipped code — all tailored for a single developer.
A look at the infrastructure behind this blog — static site generation with Astro 5, CI/CD with GitHub Actions, PR preview deployments, and Bluesky-powered comments.
Managing 30+ home lab services with GitOps.
Setting up automated wildcard HTTPS certificates for 30+ home lab services behind NAT using cert-manager, DNS-01 challenges, and Let's Encrypt.
The most-downloaded public-domain books on Project Gutenberg that also exist as free LibriVox audiobooks — sorted by popularity so you can find titles you actually recognize.
Interactive chessboards: the Knight's Move Calculator (minimum knight moves between any two squares) and a Bishop's Agility map showing how many squares a bishop can reach from each square.
A macOS menu bar app that shows how many days have passed since your last Jira Tempo worklog submission. Color-coded status (green within your threshold, orange one day over, red beyond that), a configurable warning threshold, and hourly auto-refresh via the Tempo REST API.
A browser-based tuner for standard GCEA ukulele tuning. Uses your microphone to detect pitch in real time and shows how many cents flat or sharp each string is. Click a peg or string on the ukulele graphic to lock the tuner to it. Audio never leaves your device.