Standards

    Detailed Impact pattern

    A dated, taggable impact record. Tag one real-world write-up with the impact categories it touched, and let those tags drive your lifetime stat tiles and per-category detail pages automatically — no hand-maintained numbers.

    Combined timeline

    Every update we've shared, newest first. A single entry can tag several categories at once.

    1. June 2 – June 3, 2026

      A Routine Route Turns Into Much More

      A routine feeding route turned into more once volunteers noticed a few dogs needed flea and tick treatment — handled on the spot with a partner rescue's support.

      Read the full story
    2. May 14, 2026

      A Full Day at the Clinic

      Partnered with a local low-cost clinic for a single-day spay/neuter event.

    3. April 18, 2026

      New Faces, Fuller Shelves

      A new-volunteer orientation, paired with a community supply drive the same weekend.

    A single category's page

    The same entries, pre-filtered to one category (getEntriesForCategory), with a running total computed from the same data (setting totalForCategoryId).

    Updates Shared So Far

    2Food & Supplies Distributed

    1. June 2 – June 3, 2026

      A Routine Route Turns Into Much More

      Delivered food along the regular feeding route.

      Read the full story
    2. April 18, 2026

      New Faces, Fuller Shelves

      150 lbs of food and supplies collected.

    Deriving Impact Stats tiles

    getImpactLifetimeStats() counts how many entries touched each category into Impact Stats-ready tiles, each linking to its category's page. A category with nothing shared yet is omitted, never shown as a placeholder zero.

    Each number counts how many updates we've shared for that category — not pounds, dollars, or head count.

    Standard

    - One entry can tag several categories at once — contributions is an array. This is the pattern's whole point: a single real-world write-up (a feeding route that also became a vet-care stop and a rescue) shouldn't need to be shared three separate times.

    - An entry's title is freeform narrative, not a restatement of its tagged categories — the badges already show which categories and amounts were touched, so the title is free to read like a real headline ("New Faces, Fuller Shelves") instead of "Volunteer Orientation + Supply Drive."

    - A Detailed Impact entry links out to its full narrative via relatedHref rather than embedding it — it's a short structured "what changed and why," composed with Blog/News rather than replacing either.

    - Unlike stat tiles, a site's category-navigation cards should always render regardless of count — they're navigation into a filtered page, not a numeric claim. An empty category still needs a findable "no updates shared yet" page.

    - Every number this pattern shows — the stat tiles and the category-page running total — counts how many entries touched that category. It never sums the optional amount field, because two entries touching the same category can measure it in completely different ways (a bag of food dropped off vs. treats handed out vs. an actual scale weight). amount/unit are just descriptive detail on that one entry's own card.

    - date/endDate are both plain YYYY-MM-DD, for a narrative day or span — not a scheduled appointment. Set endDate only when real-world work actually spanned more than one day.

    - Treat category ids as effectively permanent once any real entry references them. A typo'd id fails silently — the entry simply stops contributing to any stat or page — so prefer adding a new category over renaming an existing one.

    - Component: template/src/components/patterns/DetailedImpactSection.tsx