CaspianPulse GIS
Satellite oil-spill detection on the Caspian Sea using Sentinel-1 radar, with drift forecast and inspection-ready reports.

- Built with
- TypeScript, MapLibre, Earth Engine, Sentinel-1
- Year
- 2026
- Status
- Live
Built for the Caspian Hackathon in Aktau. The person I had in mind is the duty operator at the Mangystau ecology department: a dark patch shows up on a radar image, and they have to decide whether it's oil and then produce a document somebody can actually act on. The tool covers that whole distance — from a satellite scene to a signed act.
The detection runs in Google Earth Engine over Sentinel-1 VV backscatter: a median filter to knock down speckle, a sea mask, an Otsu threshold to separate dark objects from open water, then vectorise everything above a minimum area and measure it. The dashboard itself is a static React and MapLibre app with no backend, so it keeps working on a laptop in a room with bad wifi.
I refused to call the classifier something it isn't. It's a weighted score over contrast, shape complexity, homogeneity and edge gradient, not a trained model, and the interface says so on three different screens. What makes it defensible is the wind gate: radar can't see slicks in wind below about 3 m/s or above 13, so confidence is multiplied down outside that band. Every feature's contribution is shown, so the operator can look at the number and disagree with it.
The part I'm happiest with is the drift forecast — a 24-hour Lagrangian particle model, 500 particles, wind plus current plus a random-walk diffusion term, running in a Web Worker so the map never freezes. It's seeded from a hash of the incident id, which matters more than it sounds: a forecast printed inside an official-looking document cannot quietly change between two clicks. A test asserts two runs come out bit for bit identical.
The output is a literal A4 sheet at /report/:id that prints straight to PDF — parameters, weather, the drift result with the model's own parameters and seed printed next to it, a map, the method, a signature line. It was a hackathon, and it was a day of work: the demo runs on a synthetic dataset built to the same shape the Earth Engine scripts export, and the app says so — a DEMO DATA badge on every screen and a stamp on the act itself. The pipeline is written for real scenes; it hasn't been pointed at one yet.
