Inspiration: The Intake Bottleneck
Imagine a patient in rural India who simply feels unwell. Right now, that patient's reality is a bus ride, lost wages, and a full day of travel just for a ten-minute consultation. Care should begin with a conversation, not a bus ride. We looked at rural India and realized that the healthcare system doesn't just break at the diagnosis but it breaks at the intake. For hundreds of millions of people, a ten-minute consult costs a full day of travel and lost wages, so care is deferred until it becomes an emergency. Existing text-first apps exclude low-literacy users, and when patients finally see a doctor, their story gets lost in translation. We were inspired to build a system that patiently listens to a frightened person's rambling account and translates it into a structured, clinician-ready format.
What it does: The Continuous Care Loop
Nirog is a comprehensive rural tele-health ecosystem that connects patients, doctors, and pharmacies in one continuous, seamless loop.
- The Intake: It starts with ARIA, a live, 3D AI nurse who talks to patients in their native language using voice recognition.
- The Handover: ARIA distills the conversation into a 30-second SBAR (Situation, Background, Assessment, Recommendation) document for the doctor.
- The Consult: Using an atomic "pool-and-claim" queue, the system connects the patient to an on-call doctor for a video, audio, or chat consultation.
- The Fulfilment: Prescriptions are geographically routed to a verified partner pharmacy for local delivery, and the entire encounter is auto-filed to the family’s unified ABHA health vault.
How we built it: A Serverless, Secure Chassis
We managed this product end-to-end with a focus on a thin client backed by a heavy, secure data infrastructure.
- Frontend: The web platform is built on Next.js 16 and React 19, utilizing the App Router. The mobile reference is built natively on Expo SDK 54, utilizing 14 real Expo modules for audio, blur, and location.
- AI Backend: We used a stateless AWS Lambda architecture utilizing Amazon Bedrock (gpt-oss-120b) for reasoning and Voxtral for speech-to-text.
- The Retriever: To diagnose accurately, we built a custom Hybrid RAG search over 13,144 conditions using a 512-d Titan V2 vector index.
- Database & Security: The entire core runs on Supabase (Auth, Postgres, Storage, Realtime). We implemented rigorous PostgreSQL Row-Level Security (RLS) to ensure patient data is consent-gated and strictly isolated.
Challenges we ran into: The Zebra Problem & Edge Resilience
- The "Zebra Problem" in Vector Search: When we first used pure cosine similarity for our AI, it failed wildly. Because rare diseases share similar descriptive words with common ones, the AI ranked rare OMIM syndromes above a common migraine. We had to engineer a custom scoring algorithm blending BM25 (weighted 0.6) and cosine (weighted 0.4), multiplied by a prevalence prior to ensure base clinical rates were respected.
- Voice Capture on Android: Getting a live transcript while the user was still speaking was brutal. Android's MediaRecorder creates incomplete containers that can't be decoded mid-sentence. We solved this by moving the microphone into a WebView using getUserMedia to stream continuous PCM audio directly to our backend.
- WebRTC on Flaky Networks: Building peer-to-peer video for rural networks resulted in "connected but no media" errors. We had to build a custom /api/ice route to inject STUN/TURN configurations and buffer ICE candidates over Supabase Realtime to ensure the media connected properly.
Accomplishments that we're proud of: True Product Execution
We are incredibly proud that this is a shipped, functional architecture, not just a chatbot wrapper.
- Real-time 3D on Budget Devices: We successfully optimized ARIA's real-time lip-sync to run dynamically inside a WebView on a standard ₹10k Android phone.
- Zero-Signal Resilience: We bundled a highly compressed (0.57 MB) offline directory of 10,700+ verified Indian facilities. Using a local haversine scan, the app can instantly route patients to the nearest hospital even with zero network bars.
- Strict Privacy Boundaries: We successfully engineered the pharmacy console so that dispensers only receive the medication lines and a delivery snapshot, they are entirely blocked from accessing the patient's clinical chart or AI intake notes.
What we learned: Data Intelligence & Clinical Honesty
We learned that raw data analytics and massive LLMs are not enough for healthcare; context is everything. We realized that a model that only reports what it found is dangerous; an AI that explicitly reports what it failed to establish is actually useful to a doctor. We learned to hardcode our emergency escalation (using 40 regex rules) before the LLM even sees the text, because AI should not be making life-or-death triage decisions. Finally, we learned that user experience dictates trust hiding 2 to 8 seconds of server latency behind ARIA murmuring "mm-hm" made the difference between a robotic delay and a humane conversation.
What's next for Nirog: The Path to Production
Nirog is currently a highly robust architectural demo, and our next steps are entirely focused on clinical governance and production readiness.
- Clinical Validation: We will integrate the AI pipeline with strict human-in-the-loop safeguards and undergo formal medical review.
- Infrastructure Hardening: We plan to deploy managed, self-hosted TURN servers for bulletproof rural video calling and implement Supabase Realtime channel authorization to lock down call rooms.
- Pharmacy Operations: We will transition the pharmacy onboarding from "auto-verify" to a dedicated admin console for human verification of drug licenses and pharmacist certificates.
Built With
- asyncstorage
- eas
- expo-audio
- expo-blur
- expo-file-system
- expo-font
- expo-linear-gradient
- expo-location
- expo-speech
- expo-updates
- expo-video
- expo.io
- glb/gltf
- go
- react
- react-native-gesture-handler
- react-native-reanimated
- react-native-screens
- react-native-svg
- react-native-webview
- react-native-worklets
- router
- sdk
- three.js
- typescript
Log in or sign up for Devpost to join the conversation.