Offline-first P2P alert mesh for civilians during internet blackouts. No internet. No server. No central point of failure.
Built for 418 Hackathon 2026 — Web Development Track.
- Share emergency, medical, food/water, safe-route, and missing-person alerts with people nearby — with zero internet.
- Alerts propagate hop-by-hop across devices and physical locations.
- Each message is cryptographically signed with an ephemeral Ed25519 key.
- Alerts expire automatically (TTL). One-tap panic wipe destroys all local data.
| Transport | When it works | Range |
|---|---|---|
| BroadcastChannel | Same device — multiple browser tabs | Instant |
| WebRTC + hotspot | Nearby devices on shared LAN | ~50 m |
| QR handoff | Physical scan — fully air-gapped | 1 m |
The system degrades gracefully. If WebRTC fails, QR still works. If there is no hotspot, three tabs on one laptop still demonstrate full A→B→C propagation with real hop counting.
- Local alert creation with 6 categories
- QR share — animated multi-frame for large payloads (pako compressed)
- QR scan — import alerts from any device
- WebRTC gossip mesh — SYNC_HASHES → diff → SYNC_ALERTS → SYNC_DONE
- BroadcastChannel mesh — zero-setup multi-tab sync
- Community chat over WebRTC data channel (persisted to IndexedDB)
- Local news broadcast screen
- Village Board poster — printable QR for physical notice boards
- Ed25519 signing — alerts signed with ephemeral per-device keypair
- TTL expiry with fresh/aging/expiring/expired visual states
- Hop badge — 📡 N visible on every relayed alert
- Panic wipe — one tap deletes all local data
- Shake to wipe — physical gesture triggers panic wipe
- PWA — installs offline, service worker caches all assets
- Hindi (हिंदी) and Telugu (తెలుగు) language support
npm install
npm run dev
# Opens https://localhost:5173
# Accept the self-signed cert warning on every demo device- Open
https://localhost:5173in three browser tabs - In Tab A: Create an Emergency alert
- Watch Tab B receive it with
📡 1 - Watch Tab C receive it with
📡 2
No hotspot. No QR. No setup. BroadcastChannel connects the tabs instantly.
- Phone 1 enables mobile hotspot (no SIM data needed)
- Phones 2 & 3 join the hotspot and open
https://PHONE1_IP:5173 - Accept the cert warning on each phone
- Phone 1 →
#connect→ choose Share (A) → QR appears - Phone 2 →
#connect→ choose Receive (B) → scan QR → sync - Phone 2 → repeat as Share (A) with Phone 3 as Receive (B)
- Phone 3 shows the original alert with
📡 2
- No account. No login. Ephemeral Ed25519 keypair generated per device,
stored only in
localStorage. Fingerprint shown asXXXX-XXXX. - Each alert carries a detached Ed25519 signature and the sender's public key.
- Loss of one device exposes only the alerts stored on that device — not the full network.
- Panic wipe: Settings → Clear All Data. Deletes IndexedDB + localStorage.
Vite · vite-plugin-pwa · idb · pako · tweetnacl ·
qrcode · html5-qrcode · Vanilla JS (no framework)