Next.js 15 App Router conventions — RSC by default, streaming, CWV budget, error/loading/empty states everywhere.
"use client" only when you need: state, effects, browser APIs, third-party client libs, event handlers."use client" to leaves, not to root layouts.fetch (cached by default) or server actions.<Suspense fallback={...}>. Ship fast HTML first.error.tsx and not-found.tsx in every route segment that does data fetching.app/
(marketing)/page.tsx # grouped, no URL segment
extract/page.tsx # the demo UI
extract/loading.tsx
extract/error.tsx
history/[id]/page.tsx
api/ # only for webhooks; prefer FastAPI for real API
layout.tsx
globals.css
useActionState for pending/error UI.onChange.next/image everywhere. Never <img>.next/font for self-hosted fonts. No CLS.export const metadata; dynamic via generateMetadata.nuqs or native useSearchParams + router.replace for URL-driven state.useEffect.next build fails if largePageDataBytes threshold exceeded.next-themes respects prefers-color-scheme.prefers-reduced-motion.getServerSideProps / getStaticProps (Pages Router — we use App Router only).useEffect for data fetching.any in component props.