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`