Evermore
An AI platform for nonprofit animal shelters, measured against one outcome: days to adoption.
Problem
Nonprofit shelters run on skeleton crews and volunteers, and their data lives in a patchwork: a commercial shelter management system for some, a bespoke in-house app for others, plain PDF or Word exports for the rest. Software that absorbs the data entry and the publishing leaves staff time for the work an algorithm cannot do: temperament assessments, matching conversations, adopter follow-up.
The highest-leverage artifact is the kennel card. A volunteer writes it, the management system publishes it to the public adoption-listing sites, and that text becomes the animal's listing on the sites adopters search. The words come straight from the kennel card. Writing them well, at volume, is exactly the kind of work that gets shortchanged when staff are stretched.
Evermore is built with Backchain; the initial design partner is a nonprofit shelter served pro bono. It is a work in progress, developed in the open.
Architecture
Evermore does not replace the management system a shelter already runs. It is an intelligence layer that rides on top of it, meets the data wherever it lives, and exposes its modules through one authenticated portal. Four modules compose a single pipeline.
PORTAL
[Stacker @ Cloudflare Pages] single sign-on, subscription gating, module registry
DATA PLANE GENERATION PLANE
[Sources] ─▶ [PetData] ─▶ [Package] ─▶ [BioWriter] ─▶ [Export]
Animal Record seam Composition
[Retriever] RAG over shelter docs + an index of the research corpus
that BioWriter cites
[Supabase: Postgres + pgvector] [Cloudflare AI Gateway ─▶ LLMs + embeddings]
PetData is the data plane: per-source connectors normalize whatever the shelter has into a canonical Animal Record, and a human (later the model) curates the generation-ready subset into a versioned Package. BioWriter is the generation plane: it turns a Package plus a template into a Composition (a kennel card, a social post, an ad), scores a draft against the research rubric live in the editor, and renders an Export. Retriever serves end-user Q&A over shelter docs and, internally, indexes the research corpus so BioWriter can cite the study a recommendation came from. Stacker is the portal: shelters see only the modules they subscribe to.
Services are FastAPI on Cloud Run; Stacker is SvelteKit on Cloudflare Pages; state is Supabase Postgres with pgvector and row-level security; every model call routes through Cloudflare AI Gateway. Provenance lives in the Package and the Composition: each generated unit links back to the source item and the research rule it satisfies, and that link drops only at Export.
Outcome and grounding
Every module is measured against one outcome: healthy, safe, permanent adoptions. The working proxy is time-online, the days an animal waits before placement, which is the primary outcome variable in the adoption-advertising research and the natural trigger for outcome-based pricing.
Generation is not freehand. The kennel-card backbone is grounded in a research corpus held in two tiers: primary peer-reviewed studies, indexable by Retriever for citation, and distilled rules, templates, and rubrics that drive generation directly. The corpus draws on large-scale analysis of adoption listings (Markowitz's 2020 study of 184,805 Petfinder profiles among them), so a generated line can be traced to the evidence behind it rather than asserted.
Three learnings
- 1. Ride on top, do not replace. Shelters already run a system of record, and a migration would never get adopted by a volunteer crew. The win is an intelligence layer that meets the data where it lives, whether that is an export API or a folder of PDFs. The integration surface is deliberately wide so the platform never depends on the shelter changing its tools.
- 2. The Package is the seam. Putting a versioned, human-curated Package between the canonical Animal Record and generation decouples the two planes: data connectors and the kennel-card writer evolve independently, and provenance attaches per item, so every generated line traces back to a source document and the research rule it satisfies.
- 3. Pick the artifact that the outcome flows through. Kennel-card text becomes the animal's public listing, published nationally, so grounding generation in the adoption research and scoring drafts against that rubric in the editor is where time-online actually moves.
Links
- • github.com/backchainai/evermore. The monorepo: portal, services, architecture docs, and research corpus. A tagged release is pending.
- • Retriever. The RAG module, covered in depth.
- • Back to projects