Full-page FAQ document component that composes `PageShell`, `PageLayout`, and `FaqSection` into a single drop-in page, mirroring the `LegalDocumentPage` / `DevSectionPage` pattern so host pages need only pass config and SSR-resolved data. ## Key Components ### `FaqDocumentPage` The primary export. Renders a complete `/faqs` page with: - **`PageLayout` `TitleBlock`** — owns the `

` (title + subtitle), keeping `FaqSection` headings at `

`/`

` for correct SEO outline - **`PageShell`** — optional standalone `
` container (disable via `shell={false}` when the host layout already provides one) - **`FaqSection`** — receives SSR-hydrated `initialFaqs` to skip its client self-fetch, or omit for self-fetching embed mode - **Back button** — follows the same `{ label, href } | false` pattern as `LegalDocumentPage` / `DevSectionPage` ### `FaqDocumentPageProps` | Prop | Type | Default | Description | |---|---|---|---| | `title` | `string` | `'Frequently Asked Questions'` | Page `

` text | | `subtitle` | `string` | — | Subtitle beneath the title | | `backButton` | `{ label?, href? } \| false` | `{ label: 'Back to home', href: '/' }` | Back nav; `false` hides it | | `shell` | `boolean` | `true` | Wrap with `PageShell`; set `false` when host owns `
` | | `initialFaqs` | `Faq[]` | — | SSR-resolved FAQs; omit for client self-fetch | | `emitJsonLd` | `boolean` | `false` | Emit `FAQPage` schema.org JSON-LD | | `jsonLd` | `FaqSchemaOptions` | — | JSON-LD name/description/url overrides | | `apiBaseUrl` | `string` | — | Base URL for `/api/faqs` (reverse-proxy embedders) | | `entityType` / `entityId` | `string / number` | — | Optional entity scoping | | `minResults` | `number` | — | Minimum FAQ count before rendering | ## Usage Example **Standalone page (SSR, shell on):** ```typescript // app/faqs/page.tsx import { FaqDocumentPage } from '@openframe-oss-lib/components/faq'; import { fetchFaqs } from '@/lib/api'; export default async function FaqsPage() { const initialFaqs = await fetchFaqs({ platform: 'acme' }); return ( ); } ``` **Embedded inside host layout (shell off, no back button):** ```typescript ``` ## Source [`faq-document-page.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/faq-document-page.tsx)