Organization slugs, synchronous page shells and Suspense islands.
Tenant routes live under app/[locale]/(app)/[orgSlug]/. There is no current-organization cookie and no organization header. Pass orgSlug from route params into Suspense islands with params.then(...), and resolve access with requireOrganizationAccess({ orgSlug, permission }).
Pages and layouts do not await data or import feature queries. Put <Suspense> around async feature components and export each skeleton beside the component it stands in for. Do not register orgSlug in next/root-params; only locale uses root params.
Next.js 16 differs from older examples. Read the relevant guide in node_modules/next/dist/docs/ before changing caching, prefetching, or routing behavior.
The proxy is the authentication boundary. Adding an in-app redirect to /login when a request context has no session can create a refresh loop.
Last updated on