Next.js 16 Migration: Full App Router Conversion Retrospective
Everything I hit while converting from Pages Router to App Router — migration strategy, Server Component gotchas, data fetching rewrites, and honest before/after performance numbers.

Writing about development and technology.
Everything I hit while converting from Pages Router to App Router — migration strategy, Server Component gotchas, data fetching rewrites, and honest before/after performance numbers.

Monorepos eventually hit a build time wall. Here's how Turborepo's task graph and caching solve the problem, shown through a real Next.js monorepo setup.

How do you find where requests slow down in a microservices system? Learn how OpenTelemetry ties logs, metrics, and traces together to pinpoint bottlenecks with real code examples.

A practical guide to building streaming AI chat in Next.js with the Vercel AI SDK. Covers useChat, Server Actions, switching providers, tool integration, and handling loading and error states with real code.

Integrating Stripe for my SaaS was nerve-wracking. Code that handles money feels different. From Checkout Sessions to Webhooks—lessons from the trenches.

I was running a service with zero insight into user behavior. Setting up PostHog changed how I make product decisions—from guessing to knowing.

I needed to send signup confirmation emails but HTML email development is hell. React Email lets you build emails like components, and Resend handles delivery.

Explore how Zod schema validation and tRPC solve the pain of REST APIs with manual types. Covers router setup, client-side type inference, error handling with Zod, migrating from REST, and when tRPC is and isn't the right tool.

I built a service and nobody came. How I implemented technical SEO in Next.js to drive organic traffic without a marketing budget.

I've wasted hours with direct fetch mocks or vi.mock() on axios, only to find the mock drifted from the real API. MSW intercepts at the network level and eliminates that problem. Here's everything from setup to Vitest and Storybook integration.

My Kanban board built with HTML5 Drag and Drop worked everywhere except Naver Whale. Browser gestures hijack native drag events. dnd-kit's Pointer Events architecture bypasses this entirely.

Tried to contribute to an open source project but gave up because there was no README. That's when I realized the true value of good docs.

Setting up a new Mac took 2 days. With dotfiles and automation scripts, it now takes 30 minutes to get a fully configured dev environment.

Regex looked like alien language until I learned 20 practical patterns. Now text processing that took 50 lines fits in one.

Writing form validation from scratch led to edge case hell. React Hook Form + Zod is the optimal combination for type-safe forms.

Switched from Redux to Zustand and cut boilerplate by 90%. But using it properly requires understanding some key patterns.

SSR pages showed blank screens for 3 seconds during data loading. Streaming SSR sends ready parts first, dramatically improving perceived speed.

Creating API routes, fetch calls, loading states... Too much code for one form. Server Actions dramatically simplified form handling.

Passing a function as props from a Server Component broke everything. Understanding the serialization boundary revealed RSC's true patterns.

Images were 80% of my page weight. Format conversion to WebP/AVIF and responsive images dramatically improved loading speed.
