Writing on building fast web apps and excellent user experience.

Deep dives into Next.js performance, React architecture, how users see your app, and the decisions that shape great developer experience.

Migrating to Cache Components

Part 4 of the series: A practical guide to migrating from the previous Next.js caching model to Cache Components. What changes, what breaks, and how Date.now() cost us several days on a real project.

How Revalidation Works with "use cache"

Part 3 of the series: The difference between revalidateTag, updateTag, and revalidatePath in Next.js Cache Components. When to use which, how to design cache tags, and how to integrate CMS webhooks for on-demand revalidation.

Data-Level vs. UI-Level Caching in Next.js

Part 2 of the series: Where to place the "use cache" directive in your Next.js application: on data functions, on components, or not at all. How data-level caching, UI-level caching, and Suspense streaming work together in Partial Prerendering.

Cache Components in Next.js

Part 1 of the series: How Next.js caching evolved from path-based ISR revalidation to explicit, opt-in Cache Components. The three cache directives, Partial Prerendering, and why caching in Next.js is no longer implicit.

The Case for JavaScript Directives

Why "use cache", "use workflow", and "use step" are the right approach to infrastructure boundaries in JavaScript. The case for directives over wrapper functions, and why different infrastructure should mean different syntax.

How to Measure Core Web Vitals in Next.js

Next.js has built-in support for reporting Core Web Vitals from real user sessions. How to set up the useReportWebVitals hook and send metrics to your analytics endpoint or Google Analytics.

I Stopped Self-Managing Infrastructure

How a Black Friday flash sale handled 3.2 million requests at 900/sec with a 0% error rate for $18 on Vercel. Why self-managed Kubernetes costs more than the invoice shows, and what actually absorbed the traffic.

Image Optimization in Next.js

How next/image handles format conversion, responsive sizing, lazy loading, and preloading. Why the sizes prop matters more than most teams think, and how browser primitives have changed image optimization.

Building E-Commerce Storefronts with Next.js

What seven years of building enterprise e-commerce storefronts with Next.js taught me about static generation, caching, images, and the patterns that actually matter for performance and revenue.

Core Web Vitals Explained

Core Web Vitals measure real-world user experience: loading speed, interactivity, and visual stability. What each metric means, what the thresholds are, and why TTFB matters too.