Writing.
Notes on shipping, design engineering, and the dev tooling I love. Roughly twice a month.
Designing for the unstyled web — and why your CSS shouldn't be load-bearing.
The browsers we're shipping to are weirder than ever. Here's how to build interfaces that survive a missing stylesheet.
Read article →
2026·04·22Designing for the unstyled web How to ship interfaces that survive a missing stylesheet — and why you should.7 min read2026·03·30Nuxt server components, two months in Performance, gotchas, and patterns I keep coming back to.5 min read2026·03·14Why I stopped writing barrel files Tree-shaking, IDE perf, and the hidden cost of `import * from`.4 min read2026·02·28A monorepo without the tooling tax pnpm + turbo + a tiny script. Skip the heavy frameworks.6 min read2026·02·11Animating with the View Transitions API Subtle motion that survives navigation — no library required.9 min read2026·01·24On reading the source code The most underrated skill in our trade. A field guide.3 min read2026·01·09CSS cascade layers, one year in How `@layer` quietly fixed every specificity war I used to lose.6 min read2025·12·18TypeScript strict mode, every time Yes it's painful at first. Yes it pays back tenfold.8 min read2025·12·03Shipping fast without burning out The rituals I keep that keep me shipping for the long haul.5 min read2025·11·20Design tokens in 2026 The format wars are over. Here's what to standardize on.7 min read