Tailwind v3 to v4 Migration: What Actually Broke in My Projects
My real Tailwind v3 to v4 migration notes: the utility renames, the CSS-first config, the PostCSS pipeline change, and every place my styles quietly broke.
My real Tailwind v3 to v4 migration notes: the utility renames, the CSS-first config, the PostCSS pipeline change, and every place my styles quietly broke.
The Go concurrency patterns I actually reach for in 2026: errgroup instead of sync.WaitGroup, context cancellation everywhere, worker pools without cargo cult.
Two years, three runtimes, one grumpy migration weekend. Here is the Rust async runtime I ship with in 2026, and the cancellation trap that cost…
I ran Cypress for years, then moved my e2e suite to Playwright. Here's what actually broke, what improved, and how I'd do the migration again.
REST API design rules I still lean on in 2026: versioning, naming, pagination, errors, idempotency. Real Go code, plus the rituals I quietly skip.
I ran Bun in production for a year alongside Node. Here is where it actually replaced Node at runtime, where I switched back, and the…
Go 1.23's range-over-func and the iter package killed a pile of iterator boilerplate I'd been writing for years. Here's what actually changed for me.
How I stopped writing Next.js API routes for mutations, what Server Actions actually replaced, the bugs they caused me, and where I still keep API…
PHP 8.4 added array_find, array_find_key, array_any, and array_all. Here's where they actually replace a foreach in real code, and where they don't.
Tailwind v4 ships container queries as first-class utilities. Here's the @container pattern I now reach for, with before-and-after code from real components.