-
A first visit that feels like the tenth: two people, one shared song.
-
One click fills every open schedule. Each match shows the shared taste behind it.
-
Dolores, 84, and Maria, 23. Qloo finds Luis Miguel, Marco Antonio Solís and Gentefied.
-
A call-out covered live: hard constraints, Qloo ranking, drafted offers, human approval.
-
The Bridge Kit on the caregiver's phone: openers, a shared playlist, one thing to do together.
-
Visit notes become early warnings, with a better-matched caregiver suggested.
-
A fairness audit every cycle. Matching never sees protected traits.
-
Bonded: matching caregivers and clients on what they both love.
Inspiration
Home care has a turnover problem. Median caregiver turnover runs at about 65% a year (HHCN, HCAOA).
For the client, that number has a face. Dolores is 84. This year a new aide came to her door four times. None of them knew she loves Pedro Infante. Every first visit started from zero, and every awkward first visit is a reason to cancel.
Agencies match on zip code, hours and skills. Nobody matches on the one question the client cares about: will I like spending four hours a week with this person?
We built Bonded to answer that question.
What it does
Bonded is an AI agent for home care agencies. It matches caregivers to clients by what they both love, and it runs the daily work around that match.
For the scheduler
- Fill every open schedule. One click. Bonded checks every hard constraint, then solves the best assignment across all open schedules. Each proposal shows the shared tastes behind it. The scheduler approves.
- Cover a call-out. Rosa can't make Dolores's 9 am visit. The agent finds the shift, filters 40 caregivers down to 5 who qualify, scores them with Qloo, drafts three offers and holds the best one for approval. You watch every step live.
- Catch a relationship before it breaks. Visit notes and family ratings turn into early warnings. Bonded suggests a better-matched caregiver before the client cancels.
- Prove it is fair. Matching never sees race, ethnicity, religion or national origin. A built-in audit tests offer rates across self-reported groups, with a permutation test and the four-fifths rule.
For the caregiver and the client
- A Bridge Kit before the first visit. Maria, 23, gets three conversation openers, a shared playlist and one thing to do together. Every item comes from taste both people share.
- Real common ground across 61 years. Dolores loves Pedro Infante. Maria loves Bad Bunny. Qloo finds what connects them: Luis Miguel, Marco Antonio Solís and Gentefied. Each bridge shows how much both people like it.
Anyone can try it: type three favourites and meet your best match among 60 clients.
How we built it
Qloo, end to end. Every intake favourite goes through /search to a Qloo entity. 179 of 180 resolve. Then one /v2/insights call per domain builds a top-50 taste profile for each person: music, TV, film, local places and books.
The score. A weighted Jaccard overlap per domain, Σ min(a, b) / Σ max(a, b), so a shared interest only counts as much as the weaker side loves it. Weights renormalise over the domains both people have. The result is calibrated to 0–100.
Bridges. We rank shared entities by min(affinity_client, affinity_caregiver). A bridge must matter to both people, not just one.
Matching. Hard constraints first: availability, travel under 45 minutes, skills, languages, pets, smoke, personal-care preference and weekly hours. Then rank by 60% taste, 25% continuity, 15% travel. Auto-match solves a min-cost assignment with the Hungarian algorithm.
The agent. A Gemini function-calling loop with seven tools, streamed to the UI over Server-Sent Events. If Gemini is busy, a deterministic runner with the same tools finishes the job. A call-out is always covered.
Guardrails in code, not in the prompt. The agent can only name entities that are in the pair's Qloo bridge list. send_offer refuses to run without a human approval, and the agent's tool schema cannot set that flag. The build fails if matching code imports demographic data.
Stack. Next.js 14, TypeScript, Qloo, Gemini, Tailwind, Recharts, Vitest, Vercel.
Why it only works with Qloo
An LLM can guess that two people "might both like music." Qloo computes the overlap, across domains and across generations, from a graph of 250M+ entities.
We tested this. On 20 hand-labelled pairs, Bonded separates compatible from incompatible pairs at 94% (ROC AUC) on live Qloo data. Every bridge carries a Qloo entity ID and both people's affinity, so a scheduler can check it. An LLM's guesses carry no evidence.
Without Qloo, matching falls back to age or ethnicity. That is bad matching, and in hiring it is illegal. Taste is the signal an agency can defend.
The business
Buyer. The owner or operations lead of a non-medical home care agency.
Why they pay. Every caregiver who quits costs the agency recruiting, training and lost hours. Every client who cancels is lost revenue. Bonded goes after both at the moment they start: the first visit and the substitute shift.
Model. SaaS, priced per active client per month, so cost grows with the agency.
Wedge. Call-out coverage. It is the most painful daily job for a scheduler, and it shows value on day one. Taste matching for new clients and the health review follow.
| Today | With Bonded | |
|---|---|---|
| Matching signal | zip code, hours, skills | the same hard constraints plus shared taste |
| Call-out | phone calls down a list | ranked, drafted, waiting for approval |
| First visit | strangers | three openers and a shared playlist |
| Relationship risk | found when the client cancels | flagged early, with a better match |
| Fairness | not measured | audited every cycle |
Challenges we ran into
- 2,400 pairs, one rate limit. Scoring every pair could mean thousands of Qloo calls. We built a three-tier cache (memory, deploy bundle, disk) and request coalescing. 80 identical concurrent searches now make one Qloo call.
- Places that are not the place. A search for a Phoenix steakhouse returned one in Riyadh. We added an 80 km radius check. Names that do not resolve are reported, never guessed.
- An agent that makes things up. We closed the set. Gemini can only mention entities from the pair's bridge list. If it names anything else, Bonded regenerates the kit.
- Taste can stand in for culture. So taste only ranks people who already qualify. It never excludes anyone. A rotating offer slot goes to the caregiver with the fewest offers, and the audit watches the rest.
Accomplishments that we're proud of
- 94% separation on the gold set, from live Qloo data
- 2,400 caregiver–client pairs scored across five taste domains
- 0 server errors across 36 hostile requests and concurrent load
- WCAG 2 AA: 0 serious or critical issues on 9 pages, light and dark
- 67 unit tests; lint, typecheck and a production build on every push
What we learned
Taste is a better matching signal than demographics, and it is a fairer one. An agent becomes useful when its claims can be checked. A scheduler approves in one click only when every reason has evidence behind it.
What's next for Bonded
- Scheduling integrations. Sync shifts with the platforms agencies already run on.
- Learning from every visit. Feed visit ratings back into the domain weights for each agency.
- A family view. Families add favourites and follow how the relationship goes.
- Food and dining. Qloo's dining data for meal-time visits.
Every caregiver bonded, for real.
Built With
- gemini
- next.js
- node.js
- qloo
- react
- recharts
- tailwind
- typescript
- vercel
- vitest
Log in or sign up for Devpost to join the conversation.