WEB DEVELOPMENT · 25 DEC 2025 · READ TIME: 7 MIN
Next.js App Router migration notes from a real project
Migrating a mid-sized marketing site from Pages Router to App Router is mechanically well-documented: the routing conventions, the data-fetching changes, the layout nesting. What the guides underplay is how much of the timeline is spent on decisions the framework doesn't make for you.
The first real decision is where the client/server boundary actually sits: App Router defaults everything to a Server Component, which is correct, but every interactive island (a form, an accordion, anything with state) needs an explicit "use client" boundary drawn deliberately, not sprinkled reflexively at the top of every file that touches interactivity.
The second is data fetching patterns: the old getServerSideProps mental model doesn't map cleanly onto fetching inside Server Components with React's request memoization, and teams that don't budget time to actually understand the caching model end up with either stale data bugs or accidentally re-fetching on every render.
The migration itself took a third of the estimated time. Deciding, component by component, what belonged on the server took the other two-thirds, and that's the part worth budgeting for honestly, not the part the official docs walk you through.
Nikunj Chugh
Growth systems architect: AI automation, media buying, web & SEO.