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)
Share this project:

Updates