htmx in 2026: Where I Use It, and Where I Still Reach for React
Where htmx earns its place, where I still reach for React, what htmx 4 changes with fetch and explicit inheritance, and the costs the demos…
Where htmx earns its place, where I still reach for React, what htmx 4 changes with fetch and explicit inheritance, and the costs the demos…
Partial prerendering is now the App Router default via cacheComponents. Why my dashboard got slower after the upgrade, and the mental model that had to…
React 19's useOptimistic hook replaced my hand-rolled optimistic update code. The before and after, the rollback I deleted, and the two gotchas that bit me.
React 19 and the compiler quietly killed half the hooks advice I used to give. Here's what I dropped, what I kept, and the code…
I deleted about 200 lines of loading state using React 19 Suspense and use(). What worked, the caching bug I hit, and where to put…
React Compiler went stable in late 2025. Here is what changed after I deleted most of my useMemo and useCallback calls, and the two places…
Server Actions in Next.js 16 queue one at a time, and revalidateTag no longer means what it used to. The two rules that cost me…
React 19's useActionState and useFormStatus let me delete the loading flags, error state, and controlled inputs I hand-wrote in every form. Before and after code.
Tailwind v4 dark mode: why your theme flashes white on load, the blocking script that fixes it, and the color-scheme line that saves your scrollbars.
I finally moved a production app from the Next.js Pages Router to the App Router. The real data-fetching and layout rewrite, plus what annoyed me.