Writing

Essays on TypeScript, the browser, and the craft of building interfaces.

2026

Next.js 16 Has Four Caches. Here's Which One Broke Your Page. Your Agent Reads Too Much Your `CLAUDE.md` Is a Tax You Pay on Every Token Your `+ 's'` Only Speaks English — Pluralize with Intl.PluralRules Why `.length` Is Wrong for Strings in JavaScript — and How Intl.Segmenter Fixes It Why Zustand Breaks in Next.js — And What the Fix Actually Is Most Startup Ideas Are Backwards — I Search for Products People Already Resent Stop Writing try/catch — Your TypeScript Errors Deserve Types Stop Using Booleans Everywhere — Use Union Types Instead Render Props Are Not Dead — React Hooks Didn't Replace What Actually Matters Why I Stopped Using Enums in TypeScript (I Use `as const` Instead) You Don't Need Zustand: useSyncExternalStore Is All You Need Why I Stopped Building My JavaScript Framework After 1,500 Lines of Spec 3/3 I Built a Reactive Compiler for JavaScript — Here's Where It Broke 2/3 I Designed a Web Framework That Replaces React Hooks With Two Imports 1/3