Next.js
Next.js 15 App Router - Real-World Lessons
Three production apps on App Router later, here are the opinions I have formed. Hot takes on Server Components, Suspense, Metadata API and caching.
After shipping three production apps on Next.js 15 App Router this year, I have a list of opinions - some hot, some lukewarm. Here they are.
Server Components are great. Until they aren't.
Default to server components, but be honest about the moment your tree needs interactivity. Lifting state high in a server tree is painful. Just mark the boundary "use client" and move on.
Streaming + Suspense actually delivers
Wrap slow data with Suspense boundaries. The perceived performance gain is enormous - your above-the-fold renders instantly while the heavy stuff streams in.
The metadata API is criminally underused
Per-page generateMetadata with dynamic OG images is one of the highest-ROI features in the framework. Set it up once and reap SEO benefits forever.
Caching is the hardest part
Next 15 simplified things, but you still need to understand fetch caching, route segment config and revalidation. Read the docs twice.