CrisisOps -


Inspiration

In December 2023, a 7.0 magnitude earthquake hit Gansu Province, China. Rescue teams arrived within hours, but citizen reports from the affected area took over 14 hours to reach coordination centers because cell towers had collapsed. That gap between "something happened" and "help is coming" is where people die.

We kept coming back to a simple question: Why does reporting an emergency still depend on having a cell signal?

Every major disaster follows the same pattern. Infrastructure fails. Communication collapses. Authorities operate on incomplete information. Citizens have no way to signal for help. The technology to solve this exists. It just hasn't been assembled with the right priorities.

CrisisOps was born from the conviction that the ability to call for help should never depend on whether a cell tower survived.


What it does

CrisisOps is a mission-critical emergency response platform built as two interconnected applications:

For Citizens (PWA - Mobile-First):

  • Report hazards through a guided multi-step form capturing severity, precise GPS location, and media evidence, all without needing internet connectivity
  • Access a survival library covering 9 hazard categories (flood, fire, earthquake, building collapse, etc.) with actionable "Do Now" and "Do Not" checklists
  • Download region-specific Hazard Packs containing local emergency numbers, nearby shelter locations with capacity data, and safety notes, all cached for offline use
  • One-tap emergency calling with pre-call safety scripts so you say the right things under pressure

For Authorities (Admin Command Center):

  • Real-time geospatial dashboard plotting incidents on an interactive map with severity-coded markers and cluster rendering for dense urban areas
  • 6-tier Role-Based Access Control (Responder through Super Admin) with multi-tenant isolation across organizations (Police, Fire, Medical, NGOs)
  • Blockchain-inspired verifiable audit trail where every action is SHA-256 hash-chained. If a single record is tampered with, the chain breaks and alerts fire immediately
  • Resource allocation tracking for shelters, hazard packs, and responder dispatch

The core value proposition: A citizen trapped in a flooded neighborhood with zero signal opens CrisisOps, files a report with GPS coordinates, and the moment their phone catches a sliver of connectivity, that report syncs to the command center automatically. No manual retry. No data loss.


How We built it

Architecture: Three-pillar distributed system designed around the assumption that connectivity is unreliable.

Citizen PWA:

  • React 19 + TypeScript on Vite 7 for the fastest possible cold start on low-end devices
  • Tailwind CSS 4 for a mobile-first design system optimized for outdoor readability (high contrast, large tap targets, safe-area support)
  • idb library wrapping IndexedDB for structured offline storage of reports, guides, and hazard packs
  • vite-plugin-pwa + Workbox service workers handling asset caching and Background Sync API registration
  • React Router v7 for client-side routing with offline fallback support

Admin Command Center:

  • High-performance React 19 dashboard handling thousands of concurrent incidents
  • Leaflet.js for lightweight map rendering with marker clustering at scale
  • Haversine formula implemented directly in the query layer for radius-based responder proximity filtering without GIS database overhead

Backend:

  • Express 5.0 with native async/await error handling
  • RS256 (asymmetric) JWT authentication. Even if the server is compromised, tokens cannot be forged without the private key
  • BullMQ + Redis for decoupling report ingestion from heavy tasks (media processing, geocoding enrichment, mass notification dispatch)
  • SHA-256 hash-chained audit logs for tamper-evident record keeping

Key Design Decision: We went offline-first, not offline-capable. Every feature was designed to work without connectivity as the default state, with sync as a bonus when a connection appears.


Challenges We ran into

Conflict resolution during sync. When a phone has been offline for hours and finally reconnects, you can end up with duplicate submissions, stale timestamps, and ordering conflicts. We solved this with client-side UUIDs and timestamp-based deduplication, but getting the edge cases right (e.g., partial sync failures, interrupted connections mid-upload) took significant iteration.

Offline GPS accuracy. GPS works without internet, but the accuracy degrades significantly without A-GPS (Assisted GPS) data. In dense urban environments or indoors, we sometimes get 100m+ radius estimates. We had to build the UI to communicate location confidence honestly to users rather than showing a precise pin that lies.

Service Worker lifecycle management. Debugging service worker updates, cache invalidation, and Background Sync across different browsers and OS versions was one of the most frustrating engineering challenges. Chrome, Firefox, and Safari all handle the Sync API differently, and some mobile browsers throttle background tasks aggressively.

Balancing security with offline usability. The verifiable audit trail requires hash chaining, which means sequential writes. But offline-first means reports queue up independently on potentially hundreds of devices. Reconciling these two requirements, deterministic audit chains and massively parallel offline ingestion, forced us to rethink the chaining strategy to operate per-source rather than globally.


Accomplishments that We are am proud of

  • True offline-first architecture. Not a degraded experience. Full reporting, survival guides, emergency calling, and hazard pack access, all without a single byte of connectivity.
  • The verifiable audit trail. A blockchain-inspired integrity mechanism in a web app that actually serves a real purpose: ensuring that in a crisis, no one can quietly alter records of what happened and when.
  • Sub-second report queueing. A citizen under stress gets immediate "Report Queued" feedback. No spinners, no "waiting for network." The app never blocks on connectivity.
  • 9 complete survival guides with contextual "Do Now" checklists, "Do Not" warnings, and pre-written emergency call scripts that tell you exactly what to say to a dispatcher.
  • The entire citizen PWA is installable and feels native. Dark/light theme support, animated splash screen, bottom navigation, safe-area insets. It does not feel like a website.

What We learned

  • Offline-first is a fundamentally different mental model from "add a cache layer." Every state management decision, every API call, every user feedback pattern has to be rethought when "no network" is the expected state, not an error state.
  • IndexedDB is powerful but unforgiving. Schema migrations, transaction scoping, and the lack of a query language make it essential to build a clean abstraction layer early. The idb library saved us significant pain.
  • PWA capabilities vary wildly across browsers. Background Sync is well-supported on Chrome/Android but essentially absent on Safari/iOS. Building resilient fallbacks without degrading the experience taught us a lot about progressive enhancement in practice.
  • Emergency UX is its own discipline. Large buttons, high contrast, minimal cognitive load, zero ambiguity. Designing for someone whose hands are shaking and who has 30 seconds of attention is very different from designing a SaaS dashboard.

What's next for CrisisOps

  • AI-Powered Severity Classification: Computer vision models to automatically assess incident severity from uploaded photos, reducing triage time for dispatchers
  • Satellite Communication Failover: Integrating low-bandwidth satellite protocols (e.g., via Starlink or Iridium Short Burst Data) for environments where even eventual cellular connectivity is impossible
  • Community Verification ("Trust Scores"): A system where nearby citizens can corroborate reports, giving authorities confidence scores on incoming incidents before dispatching resources
  • Multi-language Support: Disaster does not respect language barriers. Localized interfaces and survival guides for the regions most vulnerable to natural hazards
  • Mesh Networking via WebRTC: Device-to-device report relay, so a phone with no signal can pass its report to a nearby device that does have connectivity

Try It Live

Application URL
Citizen PWA (Mobile-First) crisisops.vercel.app
Admin Command Center crisisops-admin.vercel.app

Admin Demo Credentials

To explore the full administrative dashboard, use these demo credentials:

Field Value
Email admin@crisisops.com
Password Password123@

These credentials are for demonstration and judging purposes only.


Built With

Share this project:

Updates