AetherFlood Copilot: Emergency Satellite & Infrastructure SITREP Engine

Devpost / Hackathon Submission Story
"Satellites can see the valleys where ground sensors were swept away."


Inspiration

On August 26, 2026, torrential cloudbursts struck the high-altitude border region between Tibet and Nepal, triggering a violent flash flood that surged down the Bhote Koshi and Trishuli river corridors. Within the first fifteen minutes of the disaster, physical hydrological telemetry stations, river gauges, and cellular towers along the riverbanks were completely destroyed.

When emergency rescue units and district disaster management committees assembled, they were operating in a total information blackout:

  • Where did the floodwaters actually breach the riverbanks?
  • Which bridges along the Pasang Lhamu Highway were washed away, and which building clusters were crushed by debris flows?
  • Which mountain settlements were completely cut off from road access to the nearest hospital?

Traditional disaster response relies on ground sensors or aerial reconnaissance flights. But in the Himalayas, ground sensors are the first assets to be swept away, and monsoon cloud decks prevent helicopters and drones from taking off.

We were inspired by a singular, powerful realization: Satellites can see the valleys where ground sensors were swept away.

Synthetic Aperture Radar (SAR) orbiting hundreds of kilometers above the Earth can pierce through thick monsoon storm clouds, torrential rain, and nighttime darkness. However, raw satellite imagery is trapped behind complex scientific archives, massive multi-gigabyte rasters, and severe mountain geometric distortions. Emergency coordinators on the ground do not have hours to calibrate radar backscatter or run complex GIS scripts—they need grounded, factual, bilingual situation reports in seconds.

We built AetherFlood Copilot to bridge this gap: an open-source emergency intelligence engine that takes an area of interest and a flood date, automatically interrogates satellite radar and optical constellations, overlays pre-disaster infrastructure graphs, calculates road network isolation, and delivers zero-hallucination bilingual situation reports in English and Nepali.


What It Does: Answering the Three Critical Rescue Questions

AetherFlood is engineered around answering the three life-or-death questions faced by disaster coordinators:

1. Where did the flood hit?

  • All-Weather Radar & Optical Fusion: Leverages Sentinel-1 C-SAR (Synthetic Aperture Radar) to see through monsoon cloud decks and identify water inundation via surface backscatter drop. When clear skies emerge, it incorporates Sentinel-2 MSI multispectral optical imagery for 10 m true-color confirmation and debris deposition analysis.
  • Physics-Guided Mountain Filtering: Enforces strict identical relative orbit tracks (Track 121) to eliminate catastrophic mountain layover false alarms, and applies a Copernicus DEM slope mask to eliminate radar shadows on steep mountain faces ($>18^\circ$).

2. What was damaged?

  • Pre-Event OpenStreetMap Infrastructure Extraction: Queries pre-disaster vector data via the ohsome API using a strict snapshot cutoff ($\le \text{2026-07-27}$) to ensure baseline infrastructure is preserved without post-disaster data contamination.
  • Spatial Exposure & Impact Analysis: Calculates the exact spatial intersection of flood and debris vectors with building footprints, highway centerlines, and critical river bridges.

3. Who is cut off?

  • Topological Road Network Graph: Builds an endpoint-snapped graph $G = (V, E)$ of pre-event road infrastructure using NetworkX.
  • Shortest-Path Isolation Analysis: Runs Dijkstra shortest-path calculations from every populated settlement to the nearest district hospital or hub town. When intervening road segments are severed by floodwaters or debris fans, the settlement is automatically flagged as ISOLATED / CUT OFF, allowing search-and-rescue teams to prioritize helicopter airlifts and emergency airdrops.

AI Component: Grounded Situation-Report Copilot

  • A zero-hallucination, fact-pinned crisis assistant that answers operational queries and generates structured 1-page Situation Reports (SITREPs) in English (UN OCHA standard) and Nepali / नेपाली (NDRRMA standard).
  • Every single number, coordinate, road distance, and bridge status is deterministically retrieved from system maps and verified incident records—never invented or hallucinated by the language model.
  • Integrated with Sarvam AI (sarvam-105b) for fluent Devanagari translation with automated translation coverage guards, alongside local offline Ollama support.

Bonus Feature: Downstream DEM Valley Flow Routing

  • Given any user-selected upstream coordinate (such as a glacial lake moraine breach or cloudburst epicenter), the system traces the downstream surge path using D8 steepest-descent flow direction routing over public AWS Terrarium elevation tiles.
  • Computes downstream distance (km), elevation drop (m), valley gradient %, and lists vulnerable settlements directly in the path of the flood wave.

How We Built It: Technical Architecture & Mathematical Foundations

                                      USER BROWSER / RESCUE OFFICER
                                 ┌──────────────────────────────────────┐
                                 │ React 18 SPA (Vite + Leaflet)        │
                                 │ - Interactive Leaflet Map Dashboard  │
                                 │ - Bilingual Copilot Q&A (EN/NE)      │
                                 │ - 1-Page SITREP Exporter             │
                                 │ - Satellite Before/After Slider      │
                                 └──────────────────┬───────────────────┘
                                                    │ REST API
                                                    ▼
                                    FASTAPI BACKEND (Vercel Serverless)
       ┌────────────────────────────────────────────┼────────────────────────────────────────────┐
       │                                            │                                            │
       ▼                                            ▼                                            ▼
┌───────────────────────────────┐   ┌───────────────────────────────┐   ┌───────────────────────────────┐
│ GEOSPATIAL & TERRAIN ENGINE   │   │ GROUNDED COPILOT ENGINE       │   │ ML CHANGE DETECTION PIPELINE  │
├───────────────────────────────┤   ├───────────────────────────────┤   ├───────────────────────────────┤
│ • D8 Elevation Downstream     │   │ • Deterministic Fact Retriever│   │ • Sentinel-1 Orbit Validator  │
│   Tracer (AWS Terrarium tiles)│   │ • Zero-Hallucination Formatter│   │ • Siamese-UNet / ChangeFormer │
│ • Pre-event OSM ohsome parser │   │ • Sarvam AI Translator        │   │ • Physics Slope Masking (DEM) │
│ • NetworkX Road Routing Graph │   │   (Devanagari model: 105b)    │   │ • Sen1Floods11 / Kuro Siwo    │
│ • CDSE OData Catalogue Search │   │ • Local Ollama fallback path  │   │   dataset compatibility       │
└───────────────────────────────┘   └───────────────────────────────┘   └───────────────────────────────┘

1. Radar Physics & Radiometric Calibration

Calm surface water acts as a specular reflector for radar pulses, scattering energy away from the sensor and appearing as dark zero-signal patches. Radar backscatter is converted from linear intensity to decibels ($\text{dB}$):

$$\sigma^0_{\text{dB}} = 10 \cdot \log_{10}(\sigma^0_{\text{linear}})$$

In standard Sentinel-1 C-band ($5.405\text{ GHz}$), calm floodwater drops below $-18\text{ dB}$ in VV polarization and $-24\text{ dB}$ in VH polarization. We implement Refined Lee speckle filtering to suppress multiplicative radar noise while preserving edge gradients along riverbanks and shorelines.

2. Mountain SAR Geometry & Same-Orbit Physics Guard

In high-relief terrain like the Himalayas, side-looking radar encounters severe geometric distortions: foreshortening, layover, and radar shadowing.

Let $\theta$ be the satellite incidence angle and $\alpha$ be the local terrain slope.

  • Foreshortening occurs when the slope tilts toward the radar ($0 < \alpha < \theta$), compressing the ground area into fewer range cells.
  • Layover occurs when the mountain slope exceeds the incidence angle ($\alpha \ge \theta$), causing the mountain summit to be imaged before the mountain base.
  • Radar Shadow occurs on slopes facing away from the radar when $\alpha \ge 90^\circ - \theta$, leaving zero backscatter signal.

If an ascending orbit pass (satellite flying North, looking East, $\theta_{\text{look}} \approx 78^\circ$) is compared against a descending pass (satellite flying South, looking West, $\theta_{\text{look}} \approx 282^\circ$), opposite valley walls flip between extreme layover and deep shadow. This creates false anomalies:

$$\Delta \sigma^0_{\text{mismatch}} = |\sigma^0_{\text{post}} - \sigma^0_{\text{pre}}| > 10\text{ dB}$$

These false anomalies completely drown out actual flood signals.

AetherFlood mathematically enforces an identical relative orbit track rule: $$\Delta \theta_{\text{look}} = |\theta_{\text{post}} - \theta_{\text{pre}}| \approx 0 \implies \Delta \sigma^0_{\text{geometry}} \approx 0$$

Only pre/post scenes sharing identical relative orbit tracks (Track 121, 12-day repeat cycle), identical flight direction (ASCENDING), and identical look geometry are permitted for pixel-level change detection. Mismatched tracks are strictly rejected with an explicit HTTP 400 error.

Furthermore, water does not pool on steep mountain faces. We compute local terrain gradient from digital elevation models and apply a physics-guided slope mask: $$\text{Slope} = \arctan\left(\sqrt{\left(\frac{\partial z}{\partial x}\right)^2 + \left(\frac{\partial z}{\partial y}\right)^2}\right)$$ Any pixel where $\text{Slope} > 18^\circ$ is masked out, eliminating false flood detections in mountain shadow pockets.

3. Siamese Bi-Temporal Semantic Change Network

Located at backend/ml/change_detection_pipeline.py, the system implements a modern Siamese neural architecture:

  • A shared-weight encoder $f_\theta$ extracts multi-scale feature pyramids from co-registered pre-event $I_{\text{pre}}$ and post-event $I_{\text{post}}$ SAR scenes: $$F_{\text{pre}} = f_\theta(I_{\text{pre}}), \quad F_{\text{post}} = f_\theta(I_{\text{post}})$$
  • Bi-temporal differential interaction modules compute feature difference, magnitude, ratio, and spatial cross-attention: $$\Delta F = |F_{\text{post}} - F_{\text{pre}}|, \quad R = \frac{F_{\text{post}} + \epsilon}{F_{\text{pre}} + \epsilon}$$
  • The fused decoder outputs a multi-class segmentation tensor: $$\hat{Y} \in {0: \text{Unchanged Terrain}, 1: \text{Inundated Flood Water}, 2: \text{Landslide Debris / Mudflow}}$$
  • Compatible with the Sen1Floods11 and Kuro Siwo multi-modal flood training datasets.

4. Road Network Topology & Isolation Routing

Using pre-event OpenStreetMap geometries, we construct an undirected graph $G = (V, E)$, where vertices $V$ represent road intersections and settlement coordinates, and edges $E$ represent road segments.

Edge weights $w(e)$ are calculated using the Haversine formula over the spherical Earth radius ($R \approx 6371\text{ km}$): $$w(e) = 2 R \arcsin\left(\sqrt{\sin^2\left(\frac{\Delta \phi}{2}\right) + \cos \phi_1 \cos \phi_2 \sin^2\left(\frac{\Delta \lambda}{2}\right)}\right)$$

Let $\mathcal{H} \subset V$ be the set of district hospitals and healthcare centers, and let $s \in V$ be a populated settlement. The baseline accessibility is determined by Dijkstra's shortest path: $$\mathcal{D}(s, \mathcal{H}) = \min_{h \in \mathcal{H}} \left( \min_{p \in \mathcal{P}{s \to h}} \sum{e \in p} w(e) \right)$$

When satellite-derived flood or debris polygons $\mathcal{F}$ intersect road edge $e$, the edge is marked impassable ($w(e) \to \infty$). If: $$\mathcal{D}_{\text{post}}(s, \mathcal{H}) = \infty \quad (\text{NetworkXNoPath})$$ the settlement is flagged as CUT OFF, triggering urgent helicopter airlift alerts on the dashboard.

5. D8 Elevation Downstream Flow Path Routing

To implement the bonus challenge (backend/services/dem_trace.py), we ingest public AWS Terrarium elevation tiles. Terrarium encodes elevation into 24-bit RGB channels: $$z(r, c) = (R \cdot 256 + G + B / 256) - 32768$$

For any user-selected upstream origin $(r_0, c_0)$, the algorithm evaluates the 8 adjacent neighbor cells $(r + \Delta r_i, c + \Delta c_i)$ where $\Delta r_i, \Delta c_i \in {-1, 0, 1} \setminus {(0, 0)}$.

Given local grid cell dimensions in meters ($\Delta x, \Delta y$), the topographic slope toward neighbor $i$ is: $$S_i = \frac{z(r, c) - z(r + \Delta r_i, c + \Delta c_i)}{\sqrt{(\Delta r_i \cdot \Delta y)^2 + (\Delta c_i \cdot \Delta x)^2}}$$

The flood path advances along the steepest descent direction: $$i^* = \arg\max_i S_i$$ Descent terminates when $S_{i^*} < 0.05\%$ (river flat / lake) or the boundary of the digital elevation model is reached. The algorithm logs the full coordinate sequence, calculates total downstream run length $L = \sum \Delta d_k$, total drop $\Delta z = z_{\text{start}} - z_{\text{end}}$, and computes the overall valley gradient: $$\text{Gradient } \% = \frac{\Delta z}{L \cdot 1000} \times 100$$ The path coordinates are then spatially matched against settlement nodes to generate the downstream impact warning list.

6. Zero-Hallucination Bilingual Copilot Engine

Large language models are notorious for inventing plausible-sounding casualty numbers, severed bridge names, and coordinates. In disaster response, an invented number can divert helicopters to the wrong valley.

We solved this through a strict deterministic retrieval architecture (backend/services/copilot_engine.py):

  1. Fact Isolation: When an operator asks a question, the query is parsed and matched against structured incident records in SQLite.
  2. Template Grounding: The LLM is never given a blank canvas. It is provided with verified facts, confirmed bridge statuses, and measured coordinates.
  3. Explicit Data Gaps: If the operator asks about an unverified metric, the engine is programmatically constrained to output an explicit data-gap disclosure: > "No validated flood analysis or confirmed casualty count is connected for this incident."
  4. Devanagari Language Pipeline: English situation reports are translated to Nepali via Sarvam AI (sarvam-105b). The translation response is analyzed by an automated coverage guard (backend/services/sarvam_translate.py): if the Devanagari script ratio falls below the threshold or Markdown tables are corrupted, the engine falls back to verified static templates rather than displaying broken or hallucinated text.

Challenges We Faced

1. The Mountain SAR False-Positive Trap

Early in development, when we ran standard bi-temporal amplitude thresholding on Himalayan scenes, our maps turned into a sea of red false alarms. Steep mountain ridges showed dramatic backscatter drops simply because one image was taken looking East (ascending pass) and the other looking West (descending pass). Mountain shadows also produced identical low-backscatter signatures to water bodies.

How we solved it: We introduced the Sentinel-1 Same-Orbit Filter, forcing strict Track 121 matching, and combined it with a Copernicus DEM slope mask that removes all steep mountain slopes ($>18^\circ$) from consideration.

2. Preventing Hallucinations in Disaster SITREPs

Standard generative LLM prompts frequently produced fabricated numbers (e.g. claiming "14.82 km² of flooded land" or inventing hospital names in Gorkha). In life-or-death coordination, an AI hallucination is dangerous.

How we solved it: We abandoned free-form prompt generation. We built a deterministic evidence composer that formats verified structured facts into UN OCHA and NDRRMA standard templates. The AI translates and formats verified facts, but can never generate standalone statistics.

3. High-Altitude DEM Voids and Sinks in D8 Routing

Tracing steep mountain rivers using D8 steepest descent caused flow lines to get trapped in local terrain dips, artificial dam depressions, or wide, flat braided riverbanks along the Trishuli River.

How we solved it: We implemented tile-stitching across bounding boxes, calibrated dynamic cell dimensions ($\Delta x, \Delta y$) adjusted for latitude cosine scaling, and established a minimum descent threshold ($\text{MIN_SLOPE} = 0.0005$) with boundary edge detection.

4. Strict Competition Data Governance (Track B Compliance)

A critical requirement of the competition was strict data compliance:

  • Operational inputs had to be strictly limited to Sentinel-1, Sentinel-2, pre-event OSM, and public elevation data.
  • Copernicus EMS activation EMSR927, UNOSAT damage maps, and post-event OSM edits could only be referenced post-hoc for validation, never as operational inputs.
  • Incident A (Historical Nepal-Tibet flood, 26 Aug) and Incident B (Developing Budhi Gandaki flood, 11 Oct) had to remain strictly isolated so August satellite imagery was never misattributed to October events.

How we solved it: We built programmatic input validators (backend/services/analysis.py) that reject any OSM snapshot timestamp after 2026-07-27T00:00:00Z and enforce database-level incident partitioning.

5. Serverless Cloud Architecture on Vercel

Deploying complex geospatial Python packages (scipy, numpy, networkx, Pillow) and a multi-view React SPA to Vercel required strict handling of bundle sizes, cold start latencies, and ephemeral filesystems.

How we solved it: We engineered a root vercel.json rewrite architecture routing /api/(.*) to backend/index.py and static routes to the Vite SPA bundle, keeping the backend lightweight and stateless.


What We Learned

  1. Physical Remote Sensing Constraints Must Precede AI Models: You cannot train a neural network to fix fundamentally incompatible radar viewing geometries. Enforcing physical orbital mechanics and radiometric principles at the data ingestion layer is ten times more effective than adding complexity to machine learning architectures.
  2. Honesty and Data-Gap Transparency Save Lives: In standard software, an empty state or error message feels like a failure. In emergency disaster response, explicitly stating "Satellite passes obscured by monsoon clouds; damage measurement currently unavailable" is a vital, trustworthy data point that prevents rescue teams from acting on bad assumptions.
  3. Multilingual Crisis AI is an Equity Imperative: Disaster response software developed in Silicon Valley is overwhelmingly English-only. But when a disaster strikes the Rasuwa or Gorkha districts of Nepal, local municipal ward officers, Nepal Army responders, and local volunteer networks communicate in Nepali. Integrating high-quality Devanagari translation with NDRRMA disaster terminology bridges the gap between global satellite constellations and community first responders.
  4. Topological Graph Theory Complements Remote Sensing: Satellites show where the water is; graph theory shows who is suffering. Combining remote sensing polygons with NetworkX road network graphs transformed raw satellite rasters into actionable human impact metrics.

Accomplishments That We're Proud Of

  • 100% Pass Rate Across All 29 Unit & Integration Tests: Built four comprehensive offline test suites (test_analysis.py, test_sarvam.py, test_api.py, test_translation_coverage.py) that verify bounding box validation, same-orbit pairing, D8 terrain descent, road summarization, and copilot grounding.
  • Sub-Second Downstream DEM Flow Path Tracing: Designed and implemented real D8 flow direction routing using public AWS Terrarium elevation tiles that computes total drop, valley gradient %, and downstream settlement vulnerability in under 800 milliseconds.
  • Zero-Hallucination Bilingual Copilot: Successfully deployed a bilingual crisis copilot that answers rescuer questions in English and Nepali while maintaining 100% mathematical and factual grounding in verified incident maps.
  • Apple HIG-Inspired Emergency UX: Built an interactive Leaflet dashboard featuring smooth multi-layer toggles, before/after satellite swipe comparisons, and high-contrast circular status markers optimized for high-stress disaster command centers.
  • Production Deployment: Successfully configured full decoupling with the backend running serverless on Vercel and the frontend SPA hosted on Firebase Hosting.

What's Next for AetherFlood

  • High Mountain Asia Glacier Monitoring: Connect with ICIMOD's regional glacier lake database to track expanding moraine-dammed glacial lakes and alert authorities when lake surface area expands rapidly during pre-monsoon melt.
  • InSAR Coherence Loss for Landslide Early Warning: Integrate Sentinel-1 repeat-pass interferometry (InSAR) coherence tracking. A loss of radar interferometric coherence on steep hillsides during monsoon rains can signal slow ground creep weeks before a catastrophic slope failure.
  • Offline PWA & LoRa Mesh Network Dispatch: Package the frontend as an offline-first Progressive Web App (PWA) with cached vector map tiles. In areas where cellular towers are down, short emergency SITREPs can be packetized and transmitted over long-range, low-power LoRa mesh radios directly to handheld rescue devices.
  • Automated CDSE Scene Ingestion: Integrate authenticated Copernicus Data Space Ecosystem (CDSE) download pipelines with GPU-accelerated cloud nodes to automatically download and process Sentinel-1 GRD scenes within hours of satellite overpass.

Team Contributions & Roles

  • Member 1 (Remote Sensing, ML & DEM Lead): Authored the Sentinel-1 Orbit Geometry Filter, Siamese neural change detection pipeline, D8 downstream DEM elevation flow tracer, and Firebase frontend deployment.
  • Member 2 (Backend, Copilot & DevOps Lead): Engineered the FastAPI REST API, pre-event OSM ohsome extraction, NetworkX road network isolation engine, Sarvam AI zero-hallucination Copilot, and Vercel serverless deployment.
  • Member 3 (Frontend UI/UX & Map Dashboard Lead): Developed the interactive Leaflet geospatial dashboard, satellite before/after swipe viewer, bilingual localization engine, and Apple HIG emergency pin system.

Built With

Share this project:

Updates

Submission history