Inspiration
We kept hearing the same story: someone adopts a dog based on its photo, and a few months later it's back at the shelter because a high energy dog ended up in a tiny apartment, or a first time owner underestimated how much training a breed actually needs. We wanted to help people fall in love with a dog that also fits their actual life.
What it does
CanineMatch asks about your size, age, and sex preferences, then has you set sliders across nine lifestyle traits like energy level, noise tolerance, and apartment suitability. It filters real shelter dogs by your preferences and scores each one against your lifestyle using cosine similarity, returning a ranked list with a match percentage.
How we built it
The backend is a FastAPI service built on real Austin Animal Center shelter records cross referenced with AKC breed data. We engineered a nine dimensional trait vector for each dog using Pandas and NumPy, then used Scikit Learn's cosine similarity to compare a user's preferences against every dog in the filtered pool. The frontend is plain HTML, CSS, and JavaScript, calling the API and rendering results as match cards.
Challenges we ran into
The biggest challenge was finding descriptive, realistic dog traits to score against. Breed standards describe ideal temperaments in vague terms, and shelter records rarely match cleanly to a single breed. We had to build logic that could parse mixed breed names, average traits across matches, and fall back to sensible defaults when nothing matched, all while trying to keep the resulting numbers meaningful rather than arbitrary.
Accomplishments that we're proud of
This isn't running on made up data. It's built on tens of thousands of real shelter outcome records, and the scoring is genuine math, not a random number dressed up as a percentage. We got a full pipeline working end to end, from raw CSVs to a live, queryable web app.
What we learned
How much work goes into turning something qualitative, like "good with kids," into a number that's actually useful for comparison. We also learned how far a straightforward similarity metric can go when the underlying data is solid.
What's next for CanineMatch
We want to build out real user accounts so people can save favorites and come back to their matches later. We're also hoping to reach out to real shelters directly, both to get permission to link to live listings and to bring in actual photos of each dog rather than relying on breed stock images. Eventually we'd like to expand past Austin to shelters nationwide.
Built With
- css3
- fastapi
- html5
- javascript
- numpy
- pandas
- pydantic
- python
- scikit-learn
- uvicorn
Log in or sign up for Devpost to join the conversation.