InspirationInspiration: Every year, floods, heatwaves, and cyclones hit India — and in the critical first hours, coordination collapses. Citizens can't reach officials, volunteers don't know where they're needed, and alerts go out in languages people don't read. We built the coordination layer that's missing.
What it does: A citizen uploads a photo of rising floodwater with a short description → the AI engine estimates severity (1–5) with a one-line rationale and geotags it → the SOS lands on a live triage queue → volunteers are dispatched with status tracking (reported → verified → help on the way → resolved) → district officials watch it all on a live command dashboard → multilingual alerts broadcast to everyone at risk. Demoed through a seeded "Monsoon flood in Patna district" scenario; every synthetic data point labeled DEMO DATA.
How we built it: Next.js 14 (App Router + Tailwind) frontend as an offline-first PWA — app shell caches via service worker, SOS reports queue locally and sync on reconnect. FastAPI backend with websockets for live board + dashboard. Leaflet maps with severity heatmaps, SOS pins, shelter markers. Provider-agnostic AI engine (GLM/Zhipu default, OpenAI-compatible fallback, no keys in the repo): vision severity estimation, SOS triage classification, district risk scoring. Seeded with 3,000 multilingual SOS reports and a 2,000-scenario simulation engine — demo runs with zero API keys.
Challenges: Building offline-first while keeping the triage board live; Hindi-first UI usable across 10 languages; keeping AI outputs honest — severity scores ship with rationales, seed data labeled DEMO DATA.
Accomplishments: Working end-to-end loop — photo → severity → triage → dispatch → alerts → dashboard — live, no keys needed.
What's next: Real volunteer skill + distance matching, SMS-gateway alerts, district pilots with real anonymized data.
Here you go — paste each under its header:
What it does Sahayta is a disaster-response OS. A citizen uploads a photo of rising floodwater with a short description → the AI engine estimates severity (1–5) with a one-line rationale and geotags it → the SOS lands on a live triage queue → volunteers are dispatched with status tracking (reported → verified → help on the way → resolved) → district officials watch it all on a live command dashboard → multilingual alerts broadcast to everyone at risk. The full loop is demoed through a seeded "Monsoon flood in Patna district" scenario, and every synthetic data point is clearly labeled DEMO DATA.
How we built it Next.js 14 (App Router + Tailwind) frontend as an offline-first PWA — the app shell caches via service worker, SOS reports queue locally and sync on reconnect. FastAPI (Python) backend with websockets for the live SOS board and dashboard updates. Leaflet maps with severity heatmaps, SOS pins, and shelter markers. The AI engine is provider-agnostic (GLM/Zhipu default, OpenAI-compatible fallback, model id from env vars — no keys in the repo): vision severity estimation, SOS triage classification (medical / rescue / food / shelter / infrastructure), and district risk scoring. Seeded with 3,000 multilingual SOS reports and a 2,000-scenario simulation engine, so the demo runs with zero API keys.
Challenges we ran into Building for low-bandwidth, offline-first conditions while keeping the triage board live; making a Hindi-first UI that stays usable across 10 languages; keeping every AI output honest — severity scores always ship with a one-line rationale, and all seed data is labeled DEMO DATA so nobody mistakes a drill for a disaster.
Accomplishments that we're proud of A working end-to-end loop — photo upload → severity estimate → triage queue → volunteer dispatch → alert broadcast → command dashboard — live at the demo link, no API keys needed to try it.
What we learned Synthetic-data discipline: labeling every seeded record DEMO DATA from day one kept us from ever presenting a drill as real. Offline-first isn't a feature, it's the product — networks die in disasters, so queue-and-sync shaped the whole architecture. And AI outputs need receipts: a severity number without a reason is unusable in an emergency, so every score carries its rationale.
What's next for Sahayta Real volunteer skill + distance matching, SMS-gateway alert delivery, and district-level partnerships to pilot with real (anonymized) data.
Built With
- fastapi
- leaflet.js
- next.js
- python
- tailwind-css
- typescript
- websockets
Log in or sign up for Devpost to join the conversation.