Skip to main content

The notebook

Notes on design,
and shipping solo.

Things I’ve learned building accessible public services and characterful products — from accessibility and design systems to the details of shipping. Written for people who build.

Latest thinking

Most recent first
Engineering

Running Next.js 16 on Cloudflare Workers: what actually breaks

OpenNext gets you 90% of the way. The last 10% — patch scripts, Node APIs, and edge quirks — is where the real work lives.

7 min read
Engineering

Circuit breakers, graceful degradation, and UIs that stay calm

When TMDB goes down, Horrorometer doesn’t. The resilience patterns that keep an external-API-dependent product from melting.

6 min read
Accessibility

Accessible by default: how I bake it in from the first sketch

Accessibility isn’t a checklist at the end — it’s a posture. Here’s how I keep it present from wireframe through to production code.

6 min read
Engineering

The OAuth device flow is a state machine, not a form

Implementing RFC 8628 taught me more about race conditions than any CRUD app ever did. Here’s where the concurrent states bite.

8 min read
Game Design

A vine, not a tree: how Stay With Me: Deep Sea stays shippable

Branching stories die of unsustainability. The design rules — from Lifeline’s creators — that keep a 30,000-word real-time narrative buildable.

7 min read
UX

What local government taught me about design

Public services can’t assume a willing user. Eight years of designing for people who have to be there changed how I build everything.

6 min read
Product

Shipping solo: what I learned building three live products

Horrorometer, Kanaboards, and SENDadvisor all started as itches I wanted to scratch. Some patterns held across all three — and a few surprised me.

8 min read
Product

A directory is a pipeline with a UI on the front

11,000+ SENDadvisor listings, four pipeline stages, and a state machine that keeps half-finished data off the public site.

7 min read
AI

My AI coding stack, honestly

OpenCode, Codex, and Claude as teammates — not toys. What I hand to agents, what I never do, and what changed about how I plan work.

6 min read
UX

Designing for stressful systems: lessons from SENDadvisor

Families navigating SEND services are already overwhelmed. How do you design a directory that feels calm, trustworthy, and genuinely useful?

7 min read
Design

Every decision in this site, and why

A self-review: the design and build choices behind this portfolio — the ones that worked, the ones I’d change, and the reasoning.

6 min read
Design

Design tokens that enforce contrast so you never audit again

A colour system where 4.5:1 is a property of the token, not a review step. How to build one, and how it fails.

5 min read
AI

Agents on the board: planning with coding agents as teammates

Kanaboards started with a question: what if AI coding agents could read and update the same planning surface as the humans? Here’s what that looks like.

5 min read
UX

Prototype with real users or don’t call it testing

Rapid prototyping in local government: what I test, what I deliberately leave broken, and how a week of paper beats a month of opinions.

5 min read
Product

153 local authorities, one calm page each

The Local Offer pages were supposed to be a small feature. They became one of the most-used parts of SENDadvisor — here’s why.

5 min read
Product

One number can’t describe a scare

Why Horrorometer rates films on Creepy, Gory, and Jumpy instead of five stars — and what a week of rating-system design taught me about taste.

5 min read
Engineering

What two security audits taught me to fix first

31 audit cards, two formal reviews, and the checklist I now run before shipping anything with an auth flow.

7 min read
Design

Design systems that survive other teams

A component library is code. A design system is an agreement. What makes one hold up when five teams pull it in different directions.

6 min read
Product

Operations for one: running three products without a team

Backups with restore drills, cron hygiene, and the Saturday-morning checklist that keeps three live products from keeping me up.

6 min read
Game Design

Designing dread: the UX of a horror game

Horrorometer and Stay With Me: Deep Sea both design fear, from opposite directions — what dread teaches a product designer about attention and time.

5 min read
Accessibility

prefers-reduced-motion is not an accessibility tax

Motion design that respects reduced motion from the start — and ends up calmer, faster, and better for every user.

4 min read