diff --git a/src/app/intake/layout.tsx b/src/app/intake/layout.tsx new file mode 100644 index 0000000..ed39e63 --- /dev/null +++ b/src/app/intake/layout.tsx @@ -0,0 +1,30 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Submit a request", + description: "Send a request to the developer without signing in.", +}; + +/** + * The intake route's own layout, separate from src/app/layout.tsx. + * + * The public route must not ship the full client-board app shell, its fonts, + * its theme machinery or its analytics — those belong on a signed-in page. A + * service worker can cache a smaller payload faster, and offline, and there is + * no sidebar to render for an anonymous visitor anyway. + * + * Deviation from the spec: this layout does NOT render its own /. + * The root layout owns those exclusively in Next.js App Router; a nested + * layout that tries to redefine them is a build error. The intent is preserved + * anyway — this layout pulls in no ThemeScript, no ThemeSync, no Inter font, + * no globals.css — so the public route ships without the signed-in app shell. + * + * Plan 8b adds the manifest link and the iOS-specific meta tags. They live + * here, not in src/app/layout.tsx, for the same reason — the public route + * is its own thing. + */ +export default function IntakeLayout({ + children, +}: Readonly<{ children: React.ReactNode }>) { + return <>{children}; +}