Web design
Type, grids, motion and the thousand small decisions that make a page feel inevitable — written by the designers who sweat them.
The highest-traffic UI nobody designs: forms
Forms are the most-used, least-designed UI on the web. A practitioner's guide to labels, validation timing, error copy, autofill and mobile keyboards.
Careers pages that filter people in, not out
A careers page is a self-selection device, not a résumé bucket. Real work, honest salary bands, humane application flows — and no ping-pong clichés.
Pricing pages that convert quietly
A pricing page is a sales conversation at maximum scepticism. How anchoring, plan naming, honest toggles and well-placed proof sell without shouting.
A photography style without a photoshoot
No budget for a shoot? Crops, duotones, grain and a treatment matrix make any source image look on-brand. How we art-direct cheap photography.
Tables on phones: responsive table design that respects the data
A table is a set of relationships, and a 375px screen doesn't change that. Priority columns, honest card transposition, scroll affordances, and what to omit.
Drag handles, sliders and the affordance problem
Draggable UI fails quietly: nobody drags, keyboards can't, layouts forget themselves. How to build handles and sliders that people actually find, use and keep.
Perceived performance is a design material
Perceived performance is designed, not just engineered: skeletons, optimistic UI, progressive images, zero layout shift and the choreography of waiting states.
404 pages with personality (that still get people home)
A 404 has three jobs: orient, recover, charm — in that order. The anatomy of an error page that rescues sessions, and how to measure whether yours works.
Dark mode is a second design system
Treating dark mode as a CSS inversion is how you ship a grey smear. Design dark themes as a second, deliberate system — tokens, elevation, contrast, CI tests.
Fluid type scales in practice: from ratio to tokens
How we build fluid type scales that behave from 375px to 1440px: ratios, clamp() mechanics, optical correction, and type tokens that stay readable a year later.
Print stylesheets: the forgotten design surface
Most web teams ship print CSS by accident. Here's @media print done properly: receipts, itineraries, tickets, page breaks, link URLs, and testing without a printer.
The true cost of video heroes
Video heroes feel premium and invoice like it. A cost-benefit ledger in megabytes, milliseconds and attention — plus the poster-frame discipline that makes one worth shipping.