← back to work

Pro bonoIn development

TailTracker

Full shelter management for a local non-profit no-kill shelter. Built pro bono.

The problem

Shelters run on memory and whiteboards.

Enterprise shelter software like PetPoint exists, but it was built for data entry clerks at a desk — not for kennel workers standing in front of a dog with a hose in one hand and twenty animals left to check. Care logging is slow, inconsistent, and often skipped entirely. There's no reliable way to know, at 6am, what actually happened overnight.

The result: animals fall through the gaps. Feedings get missed. Medication timing drifts. The morning shift inherits chaos instead of context.

The solution

Make the right thing the fast thing.

TailTracker is a full shelter management system built around one constraint: the person logging care is standing in a kennel, probably wearing gloves, and has fifteen seconds. QR code on the kennel. Scan. One tap to log fed, medicated, cleaned, or flagged. Done. Move on.

Everything else — vet triage, AI briefings, adoption compliance, cruelty case tracking, grant pipeline — is built on top of that core loop. The system serves 17 distinct roles, from kennel staff to executive director, each with a tailored view of exactly what they need to know right now.

Role-specific AI briefings fire three times a day so every shift — morning, afternoon, evening — can start informed instead of guessing. The vet hub ranks animals by medical urgency. The lost & found module uses AI to match incoming strays against open reports. The social tool generates adoption bios from a photo.

Anatomy

See how it actually works.

System diagrams trace the fifteen-second care loop, the role-scoped briefing engine, and the six AI touchpoints — where deterministic code runs the shelter and where AI assists — drawn in one visual language.

Under the hood

What's actually running.

Core data model

68 tables. 20+ controllers. No framework, no ORM — plain PHP 8 with a PDO singleton and a handful of static helpers. Every query is parameterized. The audit log is append-only with no UPDATE or DELETE path in the codebase. Adoption records are void-only — Texas Health & Safety Ch. 828 compliance is baked in, not bolted on.

AI integration

Six distinct AI touchpoints, all using Claude: role-specific briefings (generated 3× daily via cron), clinical care summaries for shift handoffs, voice-to-care-log (Web Speech API → Claude → structured form pre-fill), social caption generation from animal photos, lost & found stray matching, and an exceptions report that ranks open issues by urgency on demand. Every model call goes through one Ai::call() chokepoint — provider-pluggable, mockable in demo mode — and the voice parser is held to a scored eval harness with a fixed answer key, so a model upgrade can't silently regress it. The deterministic work — length-of-stay math, hold-release prediction, vet triage ranking — is deliberately kept off the model.

Authentication & access

17 roles with granular guards — requireAuth(), requireAdmin(), requireManagement(), and role-specific checks on every protected route. Full WebAuthn/passkey implementation: conditional UI, biometric mode toggled via localStorage, 5-failure auto-fallback to password, rpId = tailtrackers.org (eTLD+1). Cache-Control: no-store on all authenticated responses — back-button after logout goes nowhere.

Push & offline

VAPID-based web push with role-specific alert routing via a pending_alerts table. Service worker with offline banner. Installable as a PWA on iOS and Android. The install-to-homescreen banner fires contextually — not on first visit.

Cron & automation

Only genuinely periodic work runs on a clock — because a shelter runs on shifts. Triage (04:00) and role-scoped briefings (06:00 / 12:00 / 18:00) fire from one token-protected endpoint; a kennel worker and the executive director get different narratives from the same underlying data. Everything else happens on request. Bobby G., the simulation engine, runs during development to keep the data realistic.

Test coverage

84 / 84 PHPUnit integration tests ✓
28 / 28 Playwright E2E tests ✓
42 / 43 OWASP security probes ✓
Lighthouse 100/100/100/100 ✓
Load: 177ms avg @ 50 concurrent ✓
Voice→care-log AI eval: 100% ✓
Multi-agent sim: 2,580 ops, 0 fails ✓

Stack

PHP 8 · MySQL · PDO · Apache
Claude API (Anthropic)
Web Speech API
WebAuthn · VAPID push
Service Worker · PWA
Chart.js · qrcode.min.js
SMTP relay (internal)

Modules (17 roles, 20+ hubs)

Dashboard · Scan / care log · Animal intake & edit · Zones · QR generation · Adoptions · Foster · Lost & Found · Vet hub · HR hub · Social caption tool · Maintenance · Purchasing · Development / donors · Grants pipeline · Cruelty investigations · Legal & audit log · Reports (11 types) · Admin panel · Public adoption portal · Public API

Validation

Stress-tested by a fleet of AI agents.

To test the system the way a real shelter would stress it, I generated a full year of operations — 14,634 intakes, nearly 4 million care logs, 12,508 adoptions, and a stocked supply room — then turned a fleet of nine AI agents loose on the live application, blind to each other, each playing a role: kennel and ranch workers logging care, vets dispensing medication and clearing cases, counselors processing adoptions, intake staff admitting strays, social media drafting captions, purchasing restocking shelves. Across 30 cycles of concurrent operation they ran 2,580 real actions through the genuine endpoints — with zero failures, every write provably isolated from production. The run also drove the full supply economy — food, veterinary meds and vaccines, and ranch feed — through its whole cycle: consumption depleted stock, the low-stock alert fired, and purchasing replenished it. A second fleet of role-specific QA agents then audited every domain, passing 45 of 50 checks — the rest flagging deliberately-deferred features, not defects.

Status

Built with the shelter.

TailTracker was built from the start in close collaboration with shelter leadership — every workflow, every role, every constraint came from conversations with the people who will actually use it. The core care-logging loop and role-based system are in place; next steps, rollout cadence, and what to refine are being worked through in upcoming partner reviews. If you'd like to see it in action, reach out directly.