Puppy Program OS logo

Puppy Program OS

Prototype

Automated foster management platform for a national guide dog organization. Daily logging, behavioral alerts, and contextual content — replacing email chains and PDF manuals.

Demo access code: ZURI-LION-2026

At a Glance

Role
Product builder · systems designer
Status
Prototype — pilot-ready, Lions Foundation engagement (March 2026)
Domain
Animal welfare operations · nonprofit workflow SaaS
Stack
React · TypeScript · Supabase · PostgreSQL RLS · Vercel
What I did
Discovery interviews → operational mapping → workflow design → interactive prototype → pilot readiness
Links
Prototype (Demo access code: ZURI-LION-2026) · GitHub source

The Problem

A national guide dog organization in Canada runs a foster program where volunteer families raise puppies for 12–18 months before the dogs enter formal training. Coordinators manage dozens of foster families simultaneously, tracking puppy development, behavioral patterns, health events, and socialization milestones — mostly through email chains, PDF manuals, and manual check-ins.

The coordination overhead is significant. Fosters forget to report issues. Staff spend hours chasing updates. Behavioral problems go undetected for weeks because there's no structured data flowing from foster homes back to the organization. By the time a pattern surfaces, the intervention window has narrowed.

The brief: replace the static manual and email workflow with a structured digital system — daily logging, automated behavioral alerts, contextual learning content, and a staff dashboard that surfaces what needs attention without anyone having to ask.


System Design

Foster App (mobile-first)

Volunteer families log daily observations — potty training, feeding, behavior, health, socialization — through a chip-based input interface designed to complete in under 90 seconds. No typing, no forms. Content modules unlock progressively based on the puppy's age, replacing the static PDF manual.

Staff App (desktop-first)

Coordinators open their day to an auto-populated dashboard showing which puppies need attention, ranked by urgency. Alert badges, support queue counters, and foster compliance indicators are all live. Staff never need to ask “how is the puppy doing” — the data tells them before the foster does.

Core Loop

Foster saves daily log → Postgres triggers evaluate behavioral rules → alerts auto-generate if patterns match → staff see alerts on dashboard → staff intervene with protocol checklists → foster acknowledges and acts.


Design Artifacts

Interactive mockups generated during product planning.

Product Overview

Cover page, design system, UI components, alert rules, and data model.

Interactive UI Mockup

Tabbed prototype showing both Foster and Staff app screens. Click through to explore each role.


Alert Engine

Four behavioral rules run as Postgres triggers — not in application code. Deduplication via partial unique index guarantees one open alert per puppy per rule type.

RuleConditionSeverity
Missing socializationNo socialization logged for 8+ consecutive days (weeks 8–20)Medium → High at 14 days
Jumping patternJumping on 3 of last 5 log daysMedium
Potty regression2+ accidents/day for 3 consecutive days (age >18 weeks)Medium
Health flagVomiting or diarrhea on 2 consecutive daysHigh (immediate)

Architecture Decisions

DecisionWhatWhy
Alert engine in PostgresTriggers, not Edge FunctionsCan’t be bypassed by frontend bugs, executes atomically with log save, deduplication via partial unique index
Append-only audit trailINSERT-only on alert_eventsFull history for every intervention — no UPDATE, no DELETE from app layer
Magic link authNo passwordsFoster population is non-technical — password management would generate support tickets
Multi-tenant from day oneorg_id on every tableSecond organization can onboard without schema changes
RLS enforced at DBRow-Level Security on all 18 tablesOrganizations can never see each other’s data, even if frontend has bugs
Rule-based content46 modules with unlock conditionsFosters see content when relevant, not a wall of PDFs. Staff add modules without a developer

What Makes This Interesting

The 90-second constraint shaped everything

If the daily log takes longer than 90 seconds, foster compliance drops and the alert engine starves for data. The entire input design — chip-based taps instead of text fields, six sections with sensible defaults, one-thumb mobile layout — exists to protect that completion time. UX decisions are data pipeline decisions.

Domain knowledge mattered

I raised a puppy (Zuri) through the organization's foster program. That firsthand experience shaped the daily log structure, the alert thresholds, and the content unlock timing in ways that pure product research wouldn't have surfaced. Knowing that fosters check the app while holding a leash with one hand informed the 90-second, one-thumb design constraint.

Security in a non-profit context

PIPEDA-compliant data minimization: no medical records, no SIN, no financial data. React Query cache keys include orgId to prevent cross-org data bleed in shared browser sessions. Cache cleared on sign-out.


Tech Stack

FrontendReact + TypeScript + Tailwind + shadcn/ui
BackendSupabase (PostgreSQL + RLS + Triggers + Auth)
DeployVercel (auto-deploy from main)
AuthSupabase magic link (no passwords)
Alert EnginePostgres triggers (fn_evaluate_all_rules)

Data Model

organizations
    ↓
profiles (foster / staff / vet / org_admin)
    ↓
puppies → daily_logs → fn_evaluate_all_rules (trigger)
    ↓                         ↓
content_modules           alerts → alert_events (append-only)
(46 seeded, rule-based     ↓
 unlock by age/stage)   support_tickets
    ↓
foster_stats + foster_achievements

Current Status

The prototype is live and was presented to program coordinators at the partner organization. The system was designed for a structured 1–2 month pilot with real foster workflows. 18 tables, 4 roles, RLS-enforced multi-tenancy, and a Postgres-native alert engine.