Docs
Adoptable pets pattern
Use one module for local listings and provider adapters (`petfinder`, `adopt_a_pet`, `getbuddy`).
Standard
- Use `AdoptablePetsSection` as the single public adoptable-pets shell.
- Supported modes: `local`, `petfinder`, `adopt_a_pet`, `getbuddy`, and `hybrid`.
- Keep provider configuration in adapter props, not page-local embed logic.
- Always provide provider fallbacks (links/cards) so content is usable without JS.
- Keep provider fallback text in the adapter component only (no page-level duplicates).
- Standard helper line is part of provider adapters (`Or view all pets on ...`).
- For local listings, prefer `birthDate` over static age text so age can update automatically.
- Local age rendering supports dynamic puppy/young-dog labels from `birthDate` (weeks for very young pets, then months/years).
- Local listings sort alphabetically by default (`localSort="none"` to preserve input order).
- Local card images default to full-photo display (`object-contain`); use `localImageFit`/`imageFit` to override.
- Local cards support optional aliases (`name (aka alias)`) and multi-photo galleries (`images` array).
- Use `gender` in local/adaptable pet metadata (do not use `sex`).
- Use `loadLocalAdoptablePets` + `mapLocalAdoptableManifest` for local JSON manifests shaped like Petfinder scrape output.
- Keep conversion actions at section level (`ctas` + `footerCta`) instead of per-card apply buttons.
Reference
- Live example: Adoptable pets example page
- Component: `template/src/components/patterns/AdoptablePetsSection.tsx`