ML · Full-stack · 2026
Daycare Dog Identification
A web app for dog daycares. Staff take a photo of a dog at check-in, the system finds the face, compares it to all the dogs the facility knows, and tells them which one it is. Confident matches are tagged automatically; uncertain ones go to a review queue.
What it is
Dog daycares run on knowing exactly which dog is which — for medication, dietary needs, behavioural notes, and just not letting a dog go home with the wrong owner. Right now most facilities do that with collar tags and good memory, both of which fail at scale.
The app does it from a photo. Staff upload a check-in picture, the system identifies the dog from the facility's known pack, and either auto-tags it or puts it in a queue for a human to confirm. Every confirmation becomes a new reference photo for that dog, so it gets better over time.
How it works
A React + TypeScript frontend on top of Supabase (auth, Postgres with row-level security, and object storage). A separate Dockerised ONNX inference service runs on Fly.io. Each upload follows the same path: YOLO crops the dog face from the photo, keypoints align it onto a canonical axis, the ONNX DogFaceNet model produces a 128-dimensional embedding, and pgvector cosine-matches that embedding against the facility's pack.
- Above the confidence threshold: the dog is auto-tagged.
- Below it: the upload lands in a review queue. Staff confirm or correct, and the confirmation feeds back as a new reference embedding.
What actually took the time wasn't the model — it was the scaffolding. Role-based auth so a groomer can't delete a pack record. Storage policies. Idempotent batch upload so a flaky connection doesn't double-commit. A review-queue UX that surfaces the uncertain cases without making every dog feel like a puzzle. Edge Functions for webhooks and email alerts.
Where it's at
Working prototype, deployed, used by one pilot facility. The active-learning loop — confirmations feeding back as references — is wired up but under-tuned, so the system gets steadily better with use as long as staff actually work the queue. Open-set behaviour (when a brand-new dog shows up without a reference) depends on that habit; it's the next thing to harden.