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.
- `headless=true` renders local listings/cards only, skipping provider embeds and the section title, for embedding inside a custom layout.
- `petVariant="placement"` switches card styling/copy for placement (vs adoptable) listings; default is `"adoptable"`.
- `showExpiredListings`/`defaultExpiryMonths` mirror the placement pattern: expired local listings are hidden by default (3-month window) unless `showExpiredListings=true`.
- `externalRegistries` adds Petfinder/Adopt-a-Pet profile links alongside local cards without switching provider mode.
- `labels` overrides section copy (empty-state text, feed names) for i18n/site customization.
Reference
- Live example: Adoptable pets example page
- Component: `template/src/components/patterns/AdoptablePetsSection.tsx`