Posts
All the articles I've posted.

Colour palettes for interfaces
Nine colour palettes for dashboards, apps and sites, each previewed in dark and light where it has both.

Who Owns the State? Putting My IR Fans Behind Home Assistant Matter Hub
My ceiling fans, their lights, the bedroom TV and the aircon are all controlled by infrared, so none of them can say what state they're in. I had them in Google Home through the Broadlink app and in Home Assistant directly, and the two kept disagreeing. Here is how I made Home Assistant the only owner of that state and gave Google Home a Matter bridge to talk to it. Voice control now picks the right room's light without being told which.

A Smart Mirror from a Spare Pi 3, and the Browser I Ended Up Deleting
My ten-year-old bathroom mirror is dying, so I'm replacing it with two-way glass, a spare 22 inch monitor and a Raspberry Pi 3. It shows the time, the weather and what's playing, wakes when I walk up, and plays radio and YouTube Music. Making that smooth on a Pi 3 took me from Chromium to Cog to a native Qt app with no browser at all. Here is where it stands and how I got there.

A Touchscreen Remote for Home Assistant, and I Didn't Write a Line of It
Updated:In my last post I wrote off an ESP32 touchscreen remote. Then a ready-made Waveshare ESP32-C6 AMOLED board turned up, minus the battery it was supposed to include. Claude Code built the firmware and the Home Assistant side from my prompts, and by 7pm on the day it arrived it was working. Here is what it does, how it fits together, and where it went wrong.

The TV Remote I Needed Was an Air Mouse
Updated:The Home Assistant pages replaced my Harmony, but not the feel of a hardware remote. I searched for a TV remote and found Zigbee buttons, ESP32 touchscreens and e-ink. What worked was a 2.4GHz air mouse that Home Assistant sees as a keyboard. Here is the search, the wrinkles, and why the TV's own on-screen toasts made it usable.

Humanising Claude's Writing: What I Actually Use
A copy-and-paste 'humanise this text' prompt went past me, and I compared it with the voice-hygiene rules my Claude Code writing skill already has. The skill checks sentence shapes, not just banned words. Here is what it does, what it gets wrong on a technical post, and what I'd steal from the prompt.

Replacing My Harmony Remote: HDMI-CEC, Home Assistant and Claude Code
A Logitech Harmony only knows what it last told each device to do, never what's actually happening. Over two days, Claude Code and I built something that listens to the HDMI-CEC bus and each device's own API instead, then wrapped it in a phone remote in Home Assistant, with no IR at all. Here is what we built, why, and every wrong turn on the way.

How Claude Code Ended My Out-of-Hours Waiting Game
Updated:Deploying to sites on the other side of the globe meant staying up out of hours, waiting for a late engineer and an unpredictable Cloudflare tunnel before I could rerun a playbook. Claude Code's first answer was a working cron job. It took two more rounds of pushback before the answer actually fit the problem.

Two Claude Code Tools Worth Keeping: Serena and Ponytail
Most of my days now are spent reviewing code an AI wrote rather than writing it. Two tools have changed how I do that: Serena, which navigates code by symbol rather than by file, and Ponytail, which pushes toward the smallest correct change. I audited whether each one earned its place, and what I found.

Fixing the Lights on My Wisper 806 eBike (and Bypassing a Blown Controller)
A non-waterproof connector finally gave up on my folding eBike's front light, and fixing it properly turned into a much bigger job: a blown controller, a bypass switch wired into a tight compartment, and a rear light with the wrong connector gender. Three bad design decisions, one afternoon of soldering.