Inspiration
Every day, 1 million community health workers make life-or-death triage decisions alone. No doctor nearby. No clinical support. No guidance. When a child arrives with fever and yellow eyes — they have to decide right now.
\( 75\% \) of preventable deaths in low-resource settings happen not because medicine doesn't exist — but because the right decision didn't reach the right person in time.
That gap is what inspired VitaVoice. I built it for Amara — a composite of the 1 million CHWs who wake up every morning and walk into their communities carrying the weight of decisions no one trained them to make alone.
What it does
VitaVoice is a WHO-protocol-grounded AI clinical triage assistant built specifically for community health workers (CHWs) in low-resource settings. A CHW inputs a patient's symptoms — by typing or by voice — and receives a structured triage response in seconds, in their own language.
Every response follows real WHO clinical frameworks:
- WHO IMCI — colour-coded RED / YELLOW / GREEN triage classification
- WHO/UNICEF iCCM — CHW-specific treatments with weight-based drug dosing
- WHO AI Ethics & Governance for LMMs (2024) — confidence scoring, uncertainty flagging, no patient data stored
- WHO CHW Programme Guidelines — supervisor escalation flags, 2-day follow-up scheduling
- UN SDG 3 (Targets 3.2, 3.4, 3.8) — the direct mandate this tool was built to serve
SDG Alignment:
| SDG Target | Goal | How VitaVoice Addresses It |
|---|---|---|
| 3.2 | End preventable deaths in children under 5 | IMCI + iCCM protocols target the top 3 killers: pneumonia, diarrhoea, malaria |
| 3.4 | Reduce premature mortality | Early correct first-response prevents death before escalation |
| 3.8 | Universal health coverage | Extends clinical decision support to communities with zero health infrastructure |
The triage flow:
$$\text{CHW inputs symptoms} \rightarrow \text{Gemini applies WHO IMCI + iCCM} \rightarrow \text{RED / YELLOW / GREEN} \rightarrow \text{PDF report}$$
The triage logic follows the exact WHO IMCI assessment order:
- General danger signs first — any one = automatic RED, no further questions
- Cough / breathing — breathing rate vs WHO thresholds \( (\geq 50 \text{ /min under 12mo},\ \geq 40 \text{ /min under 5yr}) \)
- Diarrhoea — dehydration via sunken eyes, skin pinch, drinking ability
- Fever — malaria risk zone, stiff neck check, rash assessment
- Ear problems — mastoiditis detection (4th WHO IMCI mandatory complaint)
- Nutritional status — wasting, oedema, pallor for all children
Drug doses are calculated from patient weight using iCCM weight-based dosing:
$$\text{Amoxicillin (mg)} = 40 \times W_{kg} \div 2 \ \text{doses} \times 5 \ \text{days}$$
$$\text{Zinc} = 20\ \text{mg/day} \times 10\ \text{days} \quad \left(10\ \text{mg if age} < 6\ \text{months}\right)$$
Features built:
- Symptom-triggered conditional form — sub-questions appear only when the relevant symptom is selected
- Instant RED trigger — danger sign checkbox fires RED alert before the form is submitted
- Multilingual output — 11 languages; response, medicine guide, and PDF all in the CHW's language
- Live voice input — browser SpeechRecognition API with auto-restart on pause, no API cost
- WHO IMCI colour triage — RED / YELLOW / GREEN with exact WHO classification name
- Weight-based medicine dosing — calculated dose in mg from \( W_{kg} \), not age-band estimates
- PDF clinical report — WHO header, patient summary, medicine dosing table, follow-up date, QR code
- Offline fallback — rule-based iCCM logic fires when Gemini is unreachable
How we built it
| Layer | Technology | Why |
|---|---|---|
| Frontend | React + TypeScript + Tailwind CSS | Type-safe, rapid UI, responsive |
| AI Engine | Google Gemini 2.0 Flash | Multilingual, medically trained, fast |
| Voice Input | Web Speech Recognition API | Built into Chrome, zero cost, 11 languages |
| jsPDF + html2canvas | Full clinical report generated in-browser | |
| QR Code | qrcode.js | VitaVoice URL embedded in PDF footer |
| Hosting | Vercel | One-click deploy, global CDN, free tier |
| Offline | Vanilla JS rule engine | iCCM fallback, zero network dependency |
The architecture is intentionally zero-infrastructure: one URL, no backend server, no database, no installation required. The Gemini API is called directly from the browser.
The Gemini system prompt encodes the full WHO IMCI clinical logic. Every JSON output field maps to a specific WHO protocol requirement:
$${\ \texttt{imci_colour},\ \texttt{medicine_guide},\ \texttt{refer_urgency},\ \texttt{follow_up_days},\ \texttt{confidence}\ }$$
Challenges we ran into
Consistent JSON across 11 languages — Gemini would occasionally wrap responses in markdown or add explanation text before the JSON, breaking JSON.parse(). Solution: strict prompt engineering with a try/catch that activates the offline fallback rather than showing an error to the CHW.
The pregnancy flag — Every iCCM treatment (amoxicillin, zinc, ACT) has pregnancy caveats. Built a conditional UI warning on the medicine guide card that appears only when \( \texttt{pregnancy_flag} = \texttt{true} \).
WHO IMCI form order vs natural form flow — IMCI requires danger signs first, then symptom-triggered sub-questions. Solution: conditional rendering where breathing rate only appears when cough is selected, dehydration signs only when diarrhoea is selected.
Voice input dropping on every pause — Browser SpeechRecognition fires onend after every silence. Fixed with a React.useRef tracking listen state that silently restarts recognition when onend fires while still meant to be listening.
Accomplishments that we're proud of
- Embedded 5 real WHO and UN protocols into a single Gemini prompt as clinical logic, not decoration
- Weight-based drug dosing calculating actual \( \text{mg} \) from \( W_{kg} \), matching iCCM clinical standard
- Genuinely functional multilingual output — full response in the CHW's language from a single prompt instruction
- Offline fallback giving structured iCCM triage with zero internet — a feature no existing health chatbot offers
- Designed for Amara's actual phone, actual literacy level, actual time pressure
What we learned
I went into this thinking VitaVoice was an AI problem. I came out understanding it was a clinical workflow problem.
Reading the actual WHO IMCI Chart Booklet changed everything. The breathing rate thresholds are exact numbers:
$$\text{Fast breathing}: \begin{cases} \geq 60\ \text{/min} & \text{age} < 2\ \text{months} \ \geq 50\ \text{/min} & \text{2 to 12 months} \ \geq 40\ \text{/min} & \text{12 to 59 months} \end{cases}$$
Drug dosing is weight-based, not age-based. Chest indrawing and stiff neck are binary signs that override all other assessment. The form order is a clinical requirement, not a design preference.
I also learned that responsible AI in health is not a disclaimer at the bottom. WHO's 2024 AI Ethics guidance for LMMs shaped the confidence scoring system:
$$\texttt{confidence} \in {\ \texttt{HIGH},\ \texttt{MODERATE},\ \texttt{LOW}\ } \quad \Rightarrow \quad \texttt{LOW} \mapsto \texttt{RED}\ \text{(fail safe)}$$
Every low-confidence output defaults to refer. The system fails safe, not silent.
What's next for VitaVoice
- Regional disease profiles — localising the Gemini prompt for endemic conditions by country
- NGO coordinator dashboard — anonymised aggregate triage patterns across a region, no patient data stored
- GNEC subsidiary deployment — piloting with 3 to 5 subsidiaries to gather real CHW feedback
- Expanded language support — Bengali, Hausa, Amharic, Tigrinya for broader Africa coverage
- WHO partnership for prompt validation — submitting the clinical logic for review by WHO IMCI technical advisors
$$\boxed{\text{Somewhere right now, a health worker is making this decision alone.}\ \textit{VitaVoice means they don't have to.}}$$
Built With
- api
- html2canvas
- js2pdf
- tailwind
- vercel
- vite
Log in or sign up for Devpost to join the conversation.