Inspiration
Vietnam is one of the countries most exposed to flooding, from typhoon rains in the centre to the Mekong and Red River deltas. NASA maps floods from satellites every day and publishes them within hours, but only as raw GeoTIFF tiles that take GIS skills to use. We built DisTrack to turn that data into something a responder can read at a glance.
What it does
DisTrack is a live flood dashboard for Vietnam at distrack.tech.
- Near-real-time flood map. As soon as NASA publishes a complete day of its MODIS flood product, DisTrack stitches together the five satellite tiles that cover Vietnam, clips them to the border and draws the flooded areas on the map.
- Flood metrics. Shows the flooded area in km², measured from each pixel's real size on the ground.
- History and trends. Every processed day is saved, so you can go back through past days and see how flooding is changing.
- Inspect any place. Click the map, pick a city or search for an address. DisTrack shows what the satellite detected there, which province it's in and how much flooding is nearby.
- Response tools. A response board tracks saved locations by severity and status (open → verified → dispatched → resolved). A hotspot list shows the provinces with the most incidents.
- Telegram alerts. Anyone can subscribe by messaging our bot, and one click sends an inspected location to every subscriber.
How we built it
- Frontend: React, TypeScript and Vite. The map is plain SVG, with no map library.
- Backend: Python and FastAPI. Rasterio, GeoPandas, Shapely, pyproj and NumPy download, stitch and clip the satellite tiles, and Pillow draws the flood overlay.
- Data and services: the NASA LANCE MODIS flood product (
MCDWD_L3_F2_NRT), Google Geocoding for addresses, and the Telegram Bot API for alerts. - Storage and hosting: Postgres on Tiger Data stores the daily history, incidents and Telegram subscribers, and the app runs on Render.
Challenges and lessons
- Meaningful NASA tiles data One of our biggest challenges was turning raw satellite data into something useful on a local map. NASA provides large raster tiles, so we had to identify the tiles covering Vietnam, combine them, clip them to the country’s boundary, and translate pixel classes into clear flood summaries.
- Near-real-time data is messy. NASA publishes each day gradually and reprocesses tiles as new satellite passes arrive. Our pipeline waits for a complete day and re-downloads only the tiles that changed.
- One listener per bot. Telegram lets only one program receive a bot's messages at a time, so the deployed app takes them through a webhook and local copies step aside.
- Connection troubleshooing. We also had to troubleshoot the connection between the separately hosted frontend and backend. DNS, certificates, CORS, and relative image URLs each caused failures at different stages. A working health endpoint didn’t guarantee that map data or overlays were reachable, so we traced individual requests through browser tools and server logs.
- Cached past data. Finally, supporting flood history meant ensuring that inspection used the selected date’s data. We now save the original GeoTIFF with each history record so an inspection of a past date checks that archived raster, rather than accidentally reporting the latest observation
We learned how to process raster data, how much hidden cost a convenient library can carry, and how to explain clearly what satellite data can and can't tell you.
What's next
- Province alerts: subscribe to a province and get notified automatically when flooding there rises.
- Community reports: let people on the ground confirm or correct what the satellite sees.
- An AI assistant: answer questions about flood trends. We're exploring Snowflake Cortex Agents for this.
- Beyond Vietnam: the pipeline already chooses satellite tiles from whatever country outline it's given.
DisTrack is a situational-awareness prototype. It shows satellite observations, not ground truth, and does not replace official emergency alerts.
Github code: https://github.com/Tmhduc/stormhack26-natural-disasters.git
Log in or sign up for Devpost to join the conversation.