When to Use React Hooks (and the Times I Really Shouldn’t Have)
Six years of React, written from the bruises. When each hook actually earns its keep, and the times I reached for one and made things…
Six years of React, written from the bruises. When each hook actually earns its keep, and the times I reached for one and made things…
I rewrote our admin panel in htmx and kept our dashboard in React. Here's how the two compare in 2026, with code, gotchas, and when…
Valibot's bundle size win is real, but switching from Zod cost me more than I expected. Here's what I migrated, what I didn't, and why…
I deleted tailwind.config.js six months ago and moved every theme variable into CSS. Here's what changed about my workflow, and where the new approach still…
Six Next.js server actions mistakes I shipped to production: trusting the client, missing revalidatePath, throwing errors wrong. With code fixes for each.
I shipped a refund bug that branded types would have caught. Here is how I use TypeScript branded types for IDs, money, and validated input,…
Six months after React 19 went stable, here are the features I actually use day to day, the ones I forget exist, and the ones…
The Tailwind v4 dark mode setup I actually ship: the two-line CSS variant, a flicker-free toggle, the prose gotcha, and a five-minute pre-ship audit.
The Next.js App Router and Pages Router aren't just different file structures — they're different mental models. Here's what changes and what trips you up…
Laravel 12 shipped with new starter kits, a cleaner skeleton, and PHP 8.2 minimum. Here's what actually changed and why the slim release is a…