SafeNest
One platform, one report form, three outcomes: reunited, rescued, or rehomed.
Inspiration
Losing a pet is chaotic — owners post on five different Facebook groups, shelters run their own siloed intake systems, and "found" reports rarely reach the person searching for that exact animal. SafeNest was built to collapse that fragmentation into a single flow: one report form that routes lost pets to their owners, strays to shelters, and everyone to a live map of what's happening nearby.
What it does
SafeNest lets anyone report a pet as lost, **found, or **stray through a single form. Behind the scenes, a matching engine automatically scores lost and found reports against each other using location proximity, attribute similarity, and how close together in time they were posted — surfacing likely matches with a High/Medium/Low confidence badge. Users can browse a live map of reports color-coded by type, claim a match with a "This might be mine" button that reveals contact info, and mark a pet as reunited once it's resolved. Stray reports flow into a separate shelter dashboard, where shelters see incoming strays in real time and claim them for intake.
How we built it
- Frontend: React, with a Header/Dashboard/Footer routing structure
- Auth: Firebase Authentication (email/password + Google sign-in)
- Database: Firestore, with users, pets, matches, applicants, and shelters collections
- Storage: Firebase Storage for pet photos
- Matching engine: a custom scoring function combining distance (Haversine formula), attribute similarity, and date proximity — weighted 40/35/25 — to generate a confidence score between lost and found reports
- Map: a custom component with pins color-coded by report type (lost/found/stray)
- Real-time updates: Firestore onSnapshot listeners power the live shelter dashboard
Challenges we ran into
Building and hardening a real-time matching system solo, on a fixed deadline, meant being disciplined about scope — Tier 1 (the core lost/found/matching/claim loop) had to work flawlessly before any shelter-side features were touched. Keeping Firestore field names consistent across the auth, profile, and dashboard components was an early and recurring source of bugs.
Accomplishments that we're proud of
A working end-to-end loop: a pet gets reported, the matching engine finds it, the map shows it, and a claim reveals contact info and closes the loop as "reunited" — all backed by real-time Firestore data rather than a static demo.
What we learned
Solo-building a real-time, multi-role app (reporters vs. shelters) sharpened our sense of what "must have" really means under a deadline — and that a flawless core flow beats a half-built feature set every time.
What's next for SafeNest
- Self-service shelter sign-up (currently hardcoded for the demo)
- An adoption feed for unclaimed strays
- A map picker for more precise location capture, beyond browser geolocation
Built with
React · Firebase Auth · Firestore · Firebase Storage · JavaScript

Log in or sign up for Devpost to join the conversation.