Thinking, in public
Field notes on design, engineering and growth — written by the people who ship the work. No thought leadership, just lessons with receipts.
End-to-end type safety from CMS to component
How we generate TypeScript types from headless CMS schemas, validate content at the boundary, and write content models that never cause the 6pm rename incident.
Brand colour beyond default blue
How to choose brand colour with intent: category colour maps, distinctiveness vs convention, accessibility as a brief, and testing colour in the wild.
Rebrand announcement day: theatre, then receipts
Launch day for a rebrand is a narrative event and an operational stress test. How to script the reveal, survive the hot takes, and when the case study actually lands.
Locale switchers without the flag clipart
Language switchers are small UI with big politics. Where the control lives, name-in-own-language rules, hreflang interplay, script support, and when to skip it.
Naming across borders: the checks that save you later
A name that sings in Sydney can stink in Singapore. Linguistic screens, trademark classes, domain realities and the false friends that kill product names.
Deliverability: the email growth lever nobody watches
SPF, DKIM and DMARC in plain English, list hygiene, domain warming, engagement-based sending, and how to diagnose why you landed in the promotions tab.
Running a design critique people actually want to attend
Our Thursday critique format, a decade in the tuning: framed questions, a silent read, kind-specific-necessary filters, and stopping senior voices anchoring.
Customer stories that rank and convert
Customer stories are a growth program, not a trophy shelf: interviews that surface quotable numbers, structure for skimmers, SEO packaging and tidy permissions.
Data tables for people who live in them
Ops and finance users live inside your tables all day. Density modes, sticky decisions, column management, honest exports and keyboard speed runs.
Timeouts, autosave and recovery: designing for interruption
Autosave contracts, session timeouts that warn without punishing, crash recovery and 'unsaved changes' guards that don't cry wolf: interruption-proof UX, end to end.
Editorial grids on the web: rhythm without rigidity
Bringing print's editorial rhythm to responsive layouts: columns that collapse gracefully, spacing that survives the box model, breaking the grid on purpose.
Voice charts: making tone teachable
Adjective lists don't teach tone; charts do. How we build voice guidelines that survive handover: axis sliders, rewrite tables, error-state voice and real-copy audits.