Inspiration
Rescue coordinators spend up to 30 minutes per application manually reviewing potential adopters — often relying on intuition rather than data. Dogs with special medical or behavioral needs wait months longer to find homes. We wanted to build an AI system that learns from past adoption successes, understands behavioral context, and helps rescues make faster, more confident matches.
What it does
PawBondAI is an AI-powered adoption matching platform that uses semantic search, pattern recognition, and explainable AI to help dog rescue organizations match dogs and adopters intelligently.
It can:
Match adopters and dogs instantly using Elasticsearch hybrid search Analyze historical adoption data to find patterns of success Predict the likelihood of successful placements Provide natural language interaction through a Gemini-powered conversational AI Explain why each match is recommended — not just show a score
Example:
“Find experienced adopters with large yards who can care for anxious dogs.” → Instantly returns top adopters ranked by motivation and structured filters (has_yard=true, experience_level=high).
How I built it
Backend: FastAPI + Python
Search Engine: Elasticsearch 8.x with hybrid (semantic + BM25) search
Inference: Google Vertex AI text-embedding-005 via Elastic Inference API
AI Agent: Gemini Pro for intent detection, structured extraction, and natural-language reasoning
Frontend: React 18 + TypeScript + Tailwind + Recharts
Three main indices power the system:
dog
| Feature | Status | Notes |
|---|---|---|
| Schema/mappings | ✅ Implemented | Using elasticsearch-dsl AsyncDocument |
| CRUD operations | ✅ Implemented | All 4 operations with async support |
| Semantic search | ✅ Implemented | Using ES inference endpoint |
| Medical events timeline | ✅ Implemented | Nested medical events with structured data |
| Medical documents linking | ✅ Implemented | Via medical_document_ids and dog_id |
| Bulk upload | ✅ Implemented | CSV bulk upload with AI extraction (lines 634-768) |
| Language field | ✅ Implemented | language field for multilingual support |
applications
| Feature | Status | Notes |
|---|---|---|
| Schema/mappings | ✅ Implemented | FLAT structure as designed |
| CRUD operations | ✅ Implemented | All 4 operations with async |
| Housing filters | ✅ Implemented | has_yard, yard_size, housing_type |
| Experience filters | ✅ Implemented | experience_level multi-select |
| Semantic search | ✅ Implemented | On motivation field with embeddings |
| Hybrid search | ✅ Implemented | Semantic + structured filters |
| Language support | ✅ Implemented | Auto-detection with 'language' field |
| CSV bulk upload | ✅ Implemented | 3-step validation → preview → upload (lines 225-442) |
| Multilingual | ✅ Implemented | Batch translation to English for LLM |
medical_documents
| Feature | Status | Notes |
|---|---|---|
| Schema/mappings | ✅ Implemented | All fields defined |
| CRUD operations | ✅ Implemented | Create, read (list/by-id), delete |
| OCR processing | ✅ Implemented | PyPDF2 for PDF + Document AI configured |
| Translation services | ✅ Implemented | Vertex AI Gemini batch translation |
| Language detection | ✅ Implemented | For Korean, Spanish, Chinese, Japanese, French |
| Semantic embeddings | ⚠️ Partially | Ready but "find similar" not yet exposed |
| Dog-ID linking | ✅ Implemented | Bidirectional relationship |
rescue_adoption_outcomes
| Feature | Status | Notes |
|---|---|---|
| Schema/mappings | ✅ Implemented | All fields defined |
| CRUD operations | ✅ Implemented | Create, read (all variants), no explicit delete |
| Success tracking | ✅ Implemented | Stats endpoint, success_rate calculation |
| Links (dog+app+outcome) | ✅ Implemented | Three-way referencing |
| ML pattern learning | ✅ Implemented | Semantic search on success/failure factors |
| Success prediction | ✅ Implemented | Via similarity matching to historical data |
| Semantic search | ✅ Implemented | /POST /outcomes/search for pattern matching |
| CSV bulk upload | ✅ Implemented | /POST /outcomes/csv/upload (lines 415-521) |
| Language support | ✅ Implemented | language field for multilingual tracking |
Challenges I ran into
Integrating Vertex AI embeddings with the Elasticsearch Inference API
Building hybrid search queries that balance structured filters and semantic similarity
Managing complex data relationships between dogs, adopters, and outcomes
Providing explainable recommendations coordinators can trust
Achieving real-time search performance on thousands of records
Accomplishments that I'm proud of
Reduced matching time from 30 minutes → 142 ms Achieved 89% accuracy in adoption success prediction tests
What I learned
Hybrid search combining semantic and structured data dramatically improves adoption matching quality AI-assisted workflows can transform slow manual tasks into instant, data-driven insights
What's next for PawBondAI
Add behavior-based clustering for better matching of anxious or senior dogs
Expand analytics dashboard for rescue coordinators
User authentication (signup, login, and role-based access control) is planned for the next version, including secure JWT tokens, password hashing, and organization-level permissions.
Built With
- elasticsearch
- fastapi
- gcp
- gemini
- python
- react
- typescript
Log in or sign up for Devpost to join the conversation.