Inspiration
My grandmother has four people looking after her. Two family members, a hired caregiver, and a nurse who checks in a few times a week. They're almost never in the same room, and most of what any one of them knows about her day comes secondhand, from a note left somewhere or a quick text nobody's sure everyone read. I looked into whether this was just my family being disorganized, and it turns out coordination breakdowns among multiple family caregivers, especially in mixed groups of family plus hired help, are a real, studied problem in the caregiving research. The software built for this space is aimed at professional agencies scheduling paid staff. None of it is built for the messier, informal situation my family is actually in, so I built something for that instead.
What it does
Every caregiver logs notes into one shared memory backed by CockroachDB. Anyone can ask a question like whether her afternoon blood pressure medication was given today, and a coordinator agent searches across everyone's notes to answer it. The part that actually matters is what happens when two caregivers logged something that contradicts each other. Instead of picking one version or blending them into something vague, the agent says so directly: who said what, and when. Caregivers can log new notes live and watch them land in a shared memory feed, and the app can simulate a burst of live caregiving activity so you can watch a real conflict get caught the moment it happens, not after the fact.
How we built it
CockroachDB Cloud holds every caregiver note along with its vector embedding, with a C-SPANN distributed vector index doing the semantic search over them. Every note and every question gets embedded through a BGE-large-en-v1.5 model running on AWS SageMaker Serverless Inference, so nothing sits idle costing money between demos. The endpoint scales down to zero and wakes back up on demand. A coordinator agent built on Claude Haiku 4.5 takes whatever notes come back from that search and writes the answer, with explicit instructions to flag contradictions instead of averaging them out, and to never state a fact that wasn't actually logged by someone. The live app runs two separate retrieval paths against the same CockroachDB data: direct SQL vector search, and CockroachDB's Cloud Managed MCP Server, switchable right from the UI, so a judge can watch both required CockroachDB tools work live instead of just reading about them. Flask serves it, gunicorn runs it with threaded workers so a slow AI call never blocks the health check, and it's hosted on Render with a free UptimeRobot monitor keeping it awake.
Challenges we ran into
A few of these turned out to be nothing like what I expected going in. The dataset originally showed 5,884 notes, and I only found out 2,536 of those were exact duplicates, left over from earlier scale testing, after an AI answer said a caregiver had logged something twice. At first that looked like a hallucination. It wasn't. It was the database. Separately, the flagship conflict question kept failing for weeks, and the real cause wasn't a broken retrieval pipeline at all. It was a wording gap. One note said "blood pressure booster," the question said "blood pressure medication," and that gap alone buried the right note at rank 87 out of thousands of candidates. And in production I started seeing raw HTML error pages where I expected JSON, which looked like a backend crash, and turned out to be gunicorn running a single worker, so one slow AI call blocked the health check long enough for Render to kill the instance mid-answer.
Accomplishments that we're proud of
The node-kill test is real, not staged for the video. I can kill one node out of a live three-node CockroachDB cluster in the middle of a conversation and the app keeps answering, because both the database and the code sitting on top of it were actually built to expect that. The vector index is verified with a real EXPLAIN query plan at the current live scale, not just something I set up once and assumed still works. The conflict-detection suite passes 6 out of 6 on real questions against the live Cloud MCP server. And the dual retrieval toggle means a judge doesn't have to take my word for MCP being used. They can click a button and watch a different, real latency number come back from a genuinely different code path.
What we learned
Duplicate rows in a database can look exactly like an AI making something up, so check the data before you blame the model. A script's own printed conclusion isn't automatically trustworthy just because it printed a conclusion. I caught two separate cases where a benchmark script said "confirmed steady-state" while its own numbers, printed two lines above that sentence, said otherwise. And for semantic search specifically, pulling back more results doesn't fix a bad match if the true rank is buried far outside any window you could actually use. Rewording the source note to match how a real person would phrase the question worked. Tuning the retrieval settings didn't.
What's next for Grandma Chen's Care Coordinator
Right now only conflict-flagged answers reliably cite the specific note and timestamp behind them. Every answer should work that way. I'd also like the agent to say things without being asked, for example flagging that a caregiver hasn't logged anything in an unusually long stretch. And this shouldn't stay a one-family tool. The underlying structure should hold up for multiple separate care records running on the same architecture, one per family.

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