Inspiration
My neighbor Sunita aunty spent six hours in the emergency room last year.
Her smartwatch had flagged a heart rate spike at 2am. The ER doctors ran every test. ECG, blood work, chest X-ray. Everything came back normal. Six hours. Four thousand rupees in bills. Two days of missed work at the factory.
When she finally got home, she called her family doctor. He looked at her phone, looked at her prescription, and said: "Aunty, you started that new blood pressure medicine three days ago. This is a known side effect. It passes in a week."
Three systems had all the information needed to know this was not an emergency — her wearable, her hospital records, her pharmacy. None of them talked to each other. None of them had the full picture.
She is not a rare case. She is every patient in India — and everywhere in the world — navigating a healthcare system where data is siloed, AI is context-blind, and the gap between those silos costs people money, time, and sometimes their lives.
According to the World Health Organization, medical errors — many caused by incomplete patient information — are among the leading causes of death and disability globally. In low and middle-income countries, the harm from poor quality care causes more deaths than the conditions themselves.
The problem is not that we lack data. We have more health data today than any point in human history — wearables, electronic records, lab systems, pharmacy databases. The problem is that the data lives in silos. It never talks. And AI systems trained to help only see one piece at a time.
I built Nadi because Sunita aunty deserved better. And so do the millions of patients whose stories are never heard because no system is listening to the full picture.
What It Does
Nadi - the ancient word for pulse, and in traditional medicine, the complete story a body tells — is a Universal Health Context Engine.
It does one thing that no existing tool does: it reads all three streams of a patient's health data simultaneously and reasons over them together.
Stream 1 - What your body is doing right now.
Wearable data: heart rate, heart rate variability, sleep quality, blood oxygen. Updated daily.
Stream 2 — What has happened to you medically.
Clinical history from FHIR-standard health records: diagnoses, lab results, past conditions. The baseline of who you are medically.
Stream 3 — What you are putting into your body.
Medication logs: what drugs, what dose, when they started, what symptoms were reported.
Alone, each stream tells an incomplete story. Together, they tell the truth.
When Nadi detects that a patient's heart rate has risen 29.8% above their personal 28-day baseline — while their HRV has dropped 31.3% and their sleep quality has fallen 22% — it does not say "possible cardiac event." It looks at all three streams. It sees the Metformin that was started 48 hours ago. It sees the Type 2 Diabetes diagnosis. It sees the elevated cortisol from last month's labs.
And it says: "This is a medication adjustment period. Monitor for 5 days. This is not an emergency."
That is the difference between a tool and a context engine. That is what I built.
The Problem It Solves — And For Whom
For patients like Sunita aunty:
No more unnecessary ER visits because a doctor had incomplete information. No more anxiety because an app flagged something alarming without any context. No more choosing between "ignore it and hope" or "go to the hospital and spend money you don't have."
For doctors in under-resourced settings:
A physician in a rural clinic or a busy government hospital sees 80 patients a day. They cannot spend 20 minutes reviewing fragmented records for each one. Nadi generates a pre-appointment brief — a clinical summary of what changed, why it likely changed, and what to discuss — before the doctor even opens the patient's file.
For the healthcare system:
Every unnecessary ER visit is a bed occupied, a doctor's time consumed, a family's savings depleted. Context-aware AI does not replace doctors. It gives them back the time and information they need to actually practice medicine.
This is SDG 3: Good Health and Well-Being — specifically the target of universal health coverage and access to quality essential healthcare services. The bottleneck to that target is not doctors. It is information. And information, today, is the one thing we actually have enough of — we just haven't connected it.
How I Built It
The data foundation:
I used Synthea — a clinical-grade synthetic patient generator built by MITRE Corporation — to create realistic FHIR R4 patient records without any privacy concerns. Wearable data is generated with controlled physiological drift profiles that mirror real-world responses to medication initiation, validated against published remote patient monitoring literature.
The intelligence:
Patient history is embedded and stored in Pinecone, a vector database. This means Nadi doesn't just look at today's data — it searches for similar patterns from the patient's own history. When a drift is detected, it retrieves relevant past events, builds a complete medical context, and reasons over everything with a language model.
The system runs on FastAPI, with a Next.js + TypeScript frontend. Every AI output includes an evidence chain — each claim traced back to its specific data source, with the exact value and date. No black box. Every finding is sourced.
The physician layer:
The doctor panel shows a patient roster sorted automatically by severity — most critical patients at the top. Clicking any patient shows a pre-appointment brief generated from their unified health context.
The report:
One button generates a clinical PDF summary — conditions, medications, wearable baseline vs current, AI assessment, and specific recommended actions — that a doctor can print, file, or share.
The Challenges That Almost Broke Me
The hardest part was not the AI.
It was making three completely incompatible data systems speak one language. FHIR bundles contain dozens of resource types — Patient, Condition, Observation, MedicationRequest, Encounter — and parsing them faithfully while extracting only what matters took longer than everything else combined.
The second hardest was earning the right to say "this is not an emergency." Getting a language model to give clinically specific, contextually grounded, consistently accurate assessments — at low temperature, with sourced evidence, tested 50+ times — is a different problem from getting it to answer questions. The difference between "monitor vital signs" and "contact prescriber if resting HR exceeds 95 bpm on consecutive days post-Metformin initiation" is the difference between a toy and a tool.
I learned that building for people — not for demos — requires that specificity.
What I Am Proud Of
The first time Nadi correctly said "this is a medication side effect, not a cardiac emergency" — automatically, from three data sources it had assembled and reasoned over by itself — I sat with that for a moment.
That is the moment Sunita aunty should have had at 2am instead of an ambulance ride.
I am proud that the evidence chain is honest. Every AI recommendation names a specific drug, a specific threshold, a specific lab test. I am proud that the physician dashboard sorts patients by severity automatically — because a doctor with 80 patients needs to know who to call first, not scroll through a list. I am proud that the system works across multiple patients with different profiles, different drift severities, and different clinical contexts.
Most of all I am proud that this is not a dashboard. It is a reasoning engine. It does not show data. It understands it.
What I Learned
I learned that the hardest problem in health AI is not intelligence. It is memory.
A model that can reason beautifully over a single moment in time is not clinically useful. A model that can see the last 30 days, the last diagnosis, the last medication change — and reason over all of it together — is the beginning of something that could actually matter.
I learned that explainability is not a feature you add at the end. It is the foundation you build first — because healthcare workers will never trust a system that cannot show its work. Nor should they.
I learned that "AI for Good" is not about using more AI. It is about using AI where the human alternative is failing — and here, the human alternative is a patient sitting in an ER at 2am while three systems that all have relevant information sit silently in their silos.
What's Next
The prototype is built with synthetic patients. The architecture is designed for real ones.
The immediate next step is connecting to Epic's FHIR API — which is now federally mandated to be open in the United States and increasingly adopted globally — to serve real patient data. The wearable layer follows the Terra API schema, meaning Fitbit, Apple Watch, Garmin, and Oura Ring are all one integration away.
Three things I would build next with support from this community:
Patient-reported symptoms.
The most important data type in medicine is still the one patients tell their doctors in plain language. Adding a structured symptom log — nausea, dizziness, fatigue, reported in natural language, interpreted in clinical context — closes the loop between what a patient feels and what a system sees.
Community health worker integration.
In rural India and across the Global South, the frontline of healthcare is not a hospital — it is an ASHA worker or community health volunteer with a phone. Nadi's physician interface is designed to run in a browser. That means it runs on any device, anywhere, for anyone with access to a patient's records.
Multilingual AI output.
The clinical brief and patient recommendations are currently in English. For a tool that exists to serve patients like Sunita aunty, they need to be in Hindi, Marathi, Tamil, and every language a patient actually speaks to their doctor.
The infrastructure is real. The problem is real. The people who need this are real.
Nadi is the beginning of giving them the contextual care they have always deserved.
Built With
- chart-js
- fastapi
- fhir
- framer-motion
- next-js
- numpy
- openai
- pandas
- pinecone
- python
- rag
- reportlab
- retrieval-augmented-generation
- synthea
- tailwind-css
- typescript
- vector-database


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