Articles
Notes on design, side projects and life in between.
The CSS that only breaks on someone else's machine
Twice this year a layout on this site worked perfectly for me and was broken for everyone else, both times for the same reason. A note on clever values, and why the failure is always invisible from where you are standing.
Holding space for a picture you have not taken
I shipped empty image frames to a live site on purpose. What that solves, why they are written as captions rather than as to-dos, and the question that decides everything else about them.
From idea to product
Four steps, in the order they actually happen, and what a client is left holding at the end of each one. Including the two that most process diagrams get wrong: where a project starts, and where it stops.
Four sizes inside four pixels
A type scale can be correct on paper and flat on a phone. What that feels like, why it happens to almost every fluid scale, and the two wrong turns I took fixing my own.
Twelve Dashboards, No Opinions
A model can generate a hundred product screens in the time it takes to read this sentence, all competent, none of them wrong. Picking the right one was never the part AI could do for you, and it still isn't.
The Standards I Give My Coding Agents
A cross-project memory system for AI coding agents: decisions, feedback, changelog, and a skill layer that knows this isn't a Tailwind project.
The Judgment Layer
AI can produce almost anything that looks finished. It cannot tell you whether it's right. Where a designer's judgment has to sit in that gap.
Performance is a design decision
Speed is treated as an engineering concern, so designers hand over work that cannot be fast. Most of what makes a page feel slow was decided in the design file.
Motion that survives a second look
The test of an animation is not whether it impresses once. It is whether it still feels right the fortieth time, which is a different problem entirely.
Form validation is a design problem
Validation is the moment a product tells someone they are wrong. Almost every rule about it comes down to when you say it, and whether you say what to do next.
Designing payment flows people actually finish
Checkout is where a product finds out what it is really worth. What a decade of payment design taught me about drop-off, trust, and the small decisions that quietly decide whether someone pays.
Design tokens that survive a rebrand
Most token systems are a colour palette wearing a costume. What separates the ones that survive a rebrand from the ones that get rewritten by hand, one component at a time.
The handoff is not a document
Design handoff is treated as a packaging problem, so teams keep making better packages. The gap it is meant to close is not made of missing specs, and no file has ever closed it.
Design sprints that actually ship
A design sprint is easy to run and hard to make count. What separates the weeks that change a roadmap from the ones that produce a lovely prototype nobody builds.
Why most design systems quietly fail
Most design systems die not from lack of components, but from lack of trust, and the death is always quiet: no meeting, no announcement, just one more team quietly forking a button.