Why I Made the Switch
The Pages Router served me well for years. Fast builds, familiar patterns, predictable behavior. But as client projects grew in complexity, I kept running into the same walls: waterfall data fetching, client-side loading states everywhere, and bundle sizes that stubbornly refused to shrink.
The App Router promised a fundamentally different model — server-first rendering with granular client boundaries. After reading through the RFC and watching the community battle-test it for six months, I decided to migrate.
The App Router Basics
The biggest conceptual shift is the folder-based routing system. Every folder inside app/ with a page.tsx becomes a route. Layouts wrap route segments and persist across navigations.
Server Components render on the server by default — zero JS sent to client
Client Components opt in with 'use client' at the top of the file
Nested layouts eliminate repeated re-renders of shared UI
Start migration by converting leaf components (those with no children) first. They carry no risk and teach you the Server/Client boundary quickly.
useEffect and useState are not available in Server Components. You must add 'use client' to any component using React hooks, browser APIs, or event listeners.
Final Verdict
Is the App Router worth it? For every new project I start today, the answer is unambiguously yes. The performance wins alone justify the learning curve, and the architectural clarity of server-first rendering makes codebases significantly easier to maintain.
Written by
Mohsen Nazemi
Founder of WebtiMax · Full-Stack Software Engineer