Inspiration I grew up in Bihar, India — a place that lives on the edge of disaster every single year. Monsoon floods swallow villages along the Kosi and Ganga. Heatwaves turn April and May into survival mode. And the region sits in one of the most earthquake-prone zones on Earth — the 1934 Bihar–Nepal earthquake alone killed over 10,000 people.
Here's the injustice that bothered me: the raw data to warn people already exists, and it's free. USGS streams every earthquake. GDACS tracks floods, cyclones and volcanoes worldwide. But turning that data into something a village, a school, or a small NGO can actually use requires tools that need paid APIs, GPUs, and constant connectivity — the exact things vulnerable communities don't have.
So I asked: what if anyone could run their own early-warning AI on a cheap computer, offline, with zero API keys? AEGIS is my answer.
What it does AEGIS fuses live open hazard feeds (USGS earthquakes + GDACS multi-hazard events) into a single real-time crisis-intelligence platform:
Live crisis map with heatmap and 24-hour time-replay Explainable impact scoring — every event gets a 0–100 score whose every point is itemised (magnitude, depth, tsunami risk, official alert, population exposure), blended with a classifier trained on real USGS data Statistical seismology — Omori-law aftershock forecasts and a live Gutenberg–Richter b-value Standards-compliant alerts — CAP v1.2 XML + Atom/GeoRSS feed that plug into real emergency systems Auto-generated situation reports with live weather, population exposure and recommended actions Bilingual AI assistant (English + हिंदी) that answers with citations, fully on-device Free REST API + embeddable widget so any NGO, newsroom or local government can build on it How we built it The stack is deliberately boring-to-deploy: Python + FastAPI backend, vanilla JavaScript + Leaflet frontend, and every piece of "AI" runs on-device via ONNX Runtime — no GPU, no API keys, no telemetry.
The intelligence layer has four parts:
Fusion — USGS + GDACS polled with retries, normalised to UTC, cached, with an offline fallback snapshot so the platform never goes dark.
Impact engine — a transparent physical risk model blended with a HistGradientBoostingClassifier trained on labelled USGS events, plus a bundled gazetteer of ~12,000 cities for offline population exposure.
Seismology — real models, not hype:
Omori aftershock decay (Reasenberg–Jones, 1989): $$ \lambda(t) = K,(t+c)^{-p}, \qquad K = 10^{,a + b,(M - M_0)} $$
Gutenberg–Richter law fitted with Aki's maximum-likelihood estimator: $$ \log_{10} N(M) = a - bM, \qquad b = \frac{\log_{10} e}{\bar{M} - M_c} $$
Assistant — intent routing → semantic retrieval with all-MiniLM-L6-v2 (ONNX, CPU) over a curated English + Hindi knowledge base → grounded answers with citations. Hindi uses Devanagari lexical routing.
Challenges we ran into Making AI run on nothing. My build environment had no GPU and limited RAM, so every "use a cloud LLM" instinct went out the window. Solution: run a real transformer (MiniLM) through ONNX on CPU. It turned a constraint into a feature — the platform now runs anywhere and costs nothing.
The b-value came out wrong. My first Gutenberg–Richter fit returned b ≈ 0.34, which is physically absurd for a healthy crust (should be ≈ 1.0). Root cause: the global earthquake catalogue is incomplete below ~M4.5 in remote areas. Fixing the magnitude-of-completeness floor to 4.5 gave b = 1.11 ± 0.04 — a textbook match, and a lesson in trusting physics over naive statistics.
My classifier overfit on the first attempt — 100% training accuracy, which is a red flag, not a win. I added a proper train/test split and regularisation to get an honest 95% test accuracy on held-out events.
Timezone chaos. USGS timestamps are UTC; GDACS are timezone-naive. Subtracting them crashed the timeline endpoint. Normalising every timestamp to UTC at the fusion layer fixed it — and taught me that data plumbing is half of data science.
Accomplishments that we're proud of A live b-value of 1.107 ± 0.044 computed from a 30-day catalogue of 2,200+ real earthquakes — matching the textbook ~1.0 for healthy crust CAP v1.2 + Atom/GeoRSS output, so Aegis alerts plug into real government warning infrastructure A bilingual (EN + हिंदी) assistant that answers on-device with citations — no data ever leaves the machine Offline-first PWA + a 14-test suite + graceful degradation to a cached snapshot when feeds fail Zero API keys, zero GPU, zero cost — the entire system runs on a laptop What we learned Honest ML beats flashy ML. A small model with real data and an explainable output wins more trust than a big model nobody can audit. The science is what makes AI believable. Adding real seismology (Omori, Gutenberg–Richter) changed Aegis from "a dashboard with a score" into something an expert can verify. Resilience is a feature. Retries, offline fallbacks and a PWA matter more than any single algorithm when the power and network are down. Constraints create the product. "No GPU, no API keys" stopped being a limitation and became the entire pitch. What's next for AEGIS — Crisis Intelligence OS NASA FIRMS wildfire hotspots and river-gauge flood feeds for even earlier warning Multilingual semantic search (Hindi, Bengali, Spanish) via a cross-lingual embedding model — already supported in the code Push alerts (SMS, email, webhooks) triggered by impact-score thresholds Historical archives + trend analytics to help communities plan for a changing climate
Built With
- css3
- disaster-response
- fastapi
- gdacs-api
- geonames
- geospatial
- github
- html5
- javascript
- leaflet.js
- machine-learning
- natural-language-processing
- numpy
- onnx-runtime
- open-meteo
- playwright
- progressive-web-app
- pytest
- python
- rest-api
- scikit-learn
- seismology
- sentence-transformers
- tokenizers
- usgs-api
Log in or sign up for Devpost to join the conversation.