Been shipping with App Router for about 18 months now on a data dashboard product. Here's what's actually working.
Server Components + Streaming. I stopped fighting this. Yes, it's different. But rendering 50MB of PostgreSQL results server-side and streaming chunks is way faster than the old fetch-on-client pattern. Client gets data within 200ms instead of a full page load.
Route Groups for Layout Isolation. Using (auth) and (dashboard) folders to keep layouts separate was the right call. Beats having one bloated root layout that manages every possible state.
Route Handlers for API Routes. They're just functions now. Dead simple compared to Pages Router's exported functions. Built a few /api/data/[id]/route.ts endpoints that talk directly to Postgres with connection pooling. No middleware headaches.
The gotcha: server component imports from client libraries fail silently sometimes. Had recharts break a component until I added 'use client'. Watch for that.
Middleware for auth checks on protected routes works fine. Basic JWT verification on every request.
Not perfect. Documentation still has gaps around streaming edge cases. But I'm not going back to Pages Router. App Router's model just feels more natural for data-heavy apps.
No responses yet.