Inspiration
I watched a plane roar over my head that later crashed in Carlisle, PA after 9/11, lived through the Madrid bombings, and then COVID. Those moments made one conviction permanent: everyone deserves a fair chance to survive—even when the grid, cell towers, or cloud go dark. OFF-LINET (Offline Emergency Network Toolkit) grew from that conviction: build technology that just works, without permission, bandwidth, or luck.
What it does
Offline-first emergency toolkit: preloads critical resources—vector maps, triage/CPR guides, ICS forms/checklists, shelter/clinic locations, and contact rosters—all usable in airplane mode.
Role-based packs: responder, coordinator, community leader, family—each with the right docs and tools by default.
Peer-to-peer sharing: field devices exchange updates via QR, WebRTC/WebTorrent, or local Wi-Fi—no internet required.
Secure by default: on-device encryption-at-rest for sensitive lists/notes; delayed, signed sync when networks return.
Accessible & multilingual: large-type templates, high-contrast themes, offline TTS prompts, and language packs.
Automation-ready: Make.com flows ingest public guidance and publish versioned content bundles.
How we built it
Architecture
PWA (Next.js + TypeScript) with Service Worker caching, installable on mobile/desktop.
Local data: IndexedDB (Dexie) + optional SQLite-WASM for fast, structured queries.
Offline maps: MapLibre GL reading packaged PMTiles/MBTiles (vector tiles) for regions.
Knowledge packs: ZIM archives (via Kiwix-JS) keep docs compact, searchable, and linkable.
On-device search: MiniSearch / Tantivy-WASM indices for sub-second lookups.
Security: WebCrypto (AES-GCM), signed manifests for tamper detection.
Cloud (optional): Supabase for manifests, reports, and post-event sync with RLS.
Automation: Make.com pipelines to fetch/sanitize content, build packs, and publish.
Service worker excerpt
const CACHE = 'offlinet-v1'; const ASSETS = [ '/', '/index.html', '/styles.css', '/app.js', '/packs/first-aid.zim', '/maps/region.pmtiles' ];
self.addEventListener('install', e => { e.waitUntil(caches.open(CACHE).then(c => c.addAll(ASSETS))); self.skipWaiting(); });
self.addEventListener('fetch', e => { e.respondWith(caches.match(e.request).then(r => r || fetch(e.request))); });
Challenges we ran into
Storage quotas (esp. iOS PWAs): balancing maps, docs, and indexes within strict budgets.
Background updates on mobile: designing visible, user-driven update rituals that never strand users.
Provenance & licensing: curating public guidance with correct attribution and versioning.
P2P bootstrapping without internet: pairing flows (QR, local Wi-Fi) and resilience to flaky radios.
Stress-state UX: interfaces that remain legible, tappable, and unambiguous under duress and low light.
Localization at scale: keeping language packs small while preserving clarity and medical accuracy.
Accomplishments that we’re proud of
True offline usability: maps, first-aid checklists, and contacts work end-to-end in airplane mode.
Packaged knowledge: ZIM + PMTiles drastically reduce size while keeping search fast.
Role-based design: different users see what they need immediately—no hunting.
Security with empathy: encrypted local notes + delayed sync preserve privacy in chaotic conditions.
Smooth install: PWA installs in seconds; first-run guide teaches the “no-internet” mental model.
What we learned
Local-first > cloud-first for disaster tech: apps must be useful before the first sync.
Packaging matters: choosing ZIM and PMTiles/MBTiles unlocks huge wins in storage and latency.
Availability is partly math, mostly design. With mean time between failures (MTBF) and mean time to repair (MTTR):
Thiskeepsregionalpackspracticalforsharedcommunitydevices.
What’s next for OFF-LINET
Mesh & proximity: BLE / Wi-Fi Direct relays; portable “go-bag” hotspots for pop-up hubs.
Voice & guidance: fully offline TTS/ASR for hands-free triage and navigation.
Dynamic pack builder: choose regions, roles, and languages; compile right-sized bundles.
Municipal rollouts: pre-positioned devices for shelters, schools, and transit hubs.
Standards & compliance: ICS/NIMS templates, audit trails on post-event sync, medical review board.
Open ecosystem: publish pack specs and tooling so communities can create and share their own bundles.
Built With
- edge-functions)-design:-figma
- high-contrast/dark-mode
- languages-&-frameworks:-typescript
- minisearch/tantivy-wasm-maps:-maplibre-gl
- next.js-(pwa)
- pmtiles/mbtiles-(prepackaged)-content-packaging:-kiwix-js-&-zim-archives-security:-webcrypto-(aes-gcm)
- signed-manifests-automation-&-cloud-(optional):-make.com
- sqlite-wasm-(sql.js/absurd-sql)
- supabase-(rls
- theming;
- tokenized
- webassembly-data-&-search:-indexeddb-(dexie)
Log in or sign up for Devpost to join the conversation.