We rewrote a large e-commerce to Next.js 15 with App Router. Here's an honest account - what works great, what hurts, and what we regret.
Six months ago we decided to rewrite the frontend of a large e-commerce (120k products, 50k daily users) from Next.js 12 Pages Router to Next.js 15 with App Router and Server Components. Here's brutal honesty about how it went.
Why did we rewrite at all?
Pages Router worked, but the list of problems was growing:
- Frontend bundle size exceeded 400KB gzipped
- Hydration errors with dynamic components
- SEO required more and more workarounds
- Team complained about DX - too much boilerplate
Server Components promised to solve most of these problems. We bought the vision.
What went well
1. Performance - the difference is real
Product pages load instantly now. Server Components render on the server and stream to the browser - users see content almost immediately.
2. Data fetching became simple
No more useEffect + useState + loading states for every fetch. Async/await directly in component is a game changer.
3. SEO out of the box
The Metadata API in App Router is brilliant. Dynamic meta tags, Open Graph, Twitter Cards - everything works without additional libraries.
What hurt (and still hurts)
1. Team learning curve
Thinking in Server vs Client Components requires remodeling habits. For the first month, half of PRs came back with comments "this should be a Server Component" or "you need 'use client' here".
2. Cache invalidation is hell
Next.js caches aggressively. Too aggressively. We spent two weeks debugging a case where product updates wouldn't show for an hour despite revalidatePath().
3. Third-party libraries
Half our favorite libraries weren't ready for Server Components. Formik? Client only. React Query? Requires provider in client component.
Was it worth it?
Yes. Despite the pain - yes. Performance gains are real and translated to better business results. The team after passing the learning curve is more productive. Code is cleaner.
Planning a migration to Next.js 15?
We've been through it. We can help plan a staged migration and avoid our mistakes.