Standards
FAQ Accordion pattern
Canonical FAQ content schema, i18n data-location rule, and required derived structured data.
Example — sectioned
Group items under FaqAccordionSection when the FAQ spans multiple topics (adoption, fostering, donations, etc.).
Adoption
How do I start the adoption process?
What does the adoption fee cover?
Fostering
What does fostering involve?
Donations
Is my donation tax-deductible?
Standard
- Import `FaqAccordionItem`/`FaqAccordionSection` from `@/components/patterns/FaqAccordion` — never hand-declare an equivalent local shape.
- i18n sites: FAQ text lives in `src/locales/{lang}/faq.json`; `src/data/faq.tsx` exports a `getFaqSections(t)` adapter that resolves it into canonical types (see a bilingual site's `data/faq.tsx` for the reference implementation, including embedded `<Trans>` links).
- Non-i18n sites: `src/data/faq.ts` exports `faqSections: FaqAccordionSection[]` (or `faqItems: FaqAccordionItem[]` for a single flat list) directly, as this page's own `src/data/faq.ts` does.
- `FAQPage` JSON-LD must be computed from the same sections the page renders, via `buildFaqJsonLd()` in `src/lib/faq-json-ld.ts` — never hand-typed as a second, separately-maintained array.
- Never attach `FAQPage` JSON-LD to a page that doesn't actually render the corresponding Q&A content.
- Full contract: `internal-tools/4leggedit-websites/docs/governance/faq-module-wiring-contract.md`.
- This is distinct from the no-JS/accessibility standard at `/standards/faq-disclosure` — both apply to a live FAQ page, neither substitutes for the other.
- Component: `template/src/components/patterns/FaqAccordion.tsx`
Template