Skip to main content
← back

Lead & Platform Architect · ~1 year · small team

Architecting an Oil-Spill Detection Platform on Satellite SAR

As lead and platform architect, I took an oil-spill detection platform from a promising detection model to a system whose alerts analysts could trust — owning the architecture and technical direction, and leading a small team, including the data scientist behind the models, on a Next.js, NestJS and PostGIS stack.

A detected oil slick outlined on the ocean at dusk, overlaid with a coordinate grid and a readout confirming the spill's area and location.
Sentinel-1
SAR radar imagery
AI
detection over every pass
PostGIS
spatial source of truth
Real-time
spatial analytics
Lead
architecture & direction
~1 yr
from Dec 2024

Context

The platform detects, monitors and analyzes oil spills across marine environments from satellite radar. It ingests Sentinel-1 SAR scenes — each a wide swath of ocean at ten-metre resolution — runs AI detection over every pass, and layers the results onto PostGIS spatial analytics, putting a trustworthy slick on an analyst's live map soon after the satellite crosses.

The challenge

Oil versus look-alikes in radar imagery

On synthetic-aperture radar, oil dampens surface waves and reads as a dark patch — but so do low-wind cells, biogenic slicks, rain and ship wakes. The dark smear is the easy part; deciding whether it is oil is the whole problem. Real spills are rare, so even a small false-positive rate buries analysts in alerts they stop trusting.

From a detection model to a live platform

A model that finds oil in a research notebook is a long way from a service that runs on every satellite pass, holds up under bursts of gigabyte-scale scenes, and puts a result on a map while there is still time to act. Closing that gap — reliability, latency and spatial context — was the platform problem to solve, and it is where my work lived.

My approach

Architected a clean pixels/geometry boundary

I drew a hard line through the system: Python and GDAL workers own the pixels — SAR calibration, inference, vectorization — while NestJS owns geometry-as-data and business logic, wired through a job queue rather than direct calls, with PostGIS as the single source of truth. It let the data scientist iterate on models freely while the platform stayed stable, and made clear which service owned any failure.

Directed detection strategy for trust, not just accuracy

I set the technical direction with my data scientist: treat false alarms as the primary enemy and model the look-alikes explicitly rather than hunt only for oil, then harden each detection with platform context — correlating candidates against AIS ship tracks and checking persistence across repeat passes in PostGIS — so context, not a raw model score alone, decided what became an alert.

Owned the bigger picture and the delivery

I owned the roadmap and the architecture, kept the platform pointed at what analysts actually needed, and led a small team — including the data scientist behind the detection — from prototype toward an operational service.

Outcome

  • A research-grade detector grew into a platform that runs on live satellite passes.
  • Modeling look-alikes and layering spatial context turned raw detections into alerts worth trusting.
  • A small team delivered a hard Earth-observation problem end-to-end, from satellite pixels to a decision-ready map.

Gallery

The platform's map view showing detected oil slicks along the Qatari coast near Doha, with a detail panel reading 95.1% confidence, a 2.3 km² area, and the detection time and coordinates.
Detections on the live map — each slick carries its confidence, area and coordinates.
A slick detail view: confidence, area and prediction duration next to the Sentinel-1 SAR radar scene the detection was made from, with the slick outlined over the Doha coastline.
Each slick traces back to the Sentinel-1 SAR scene it was detected in.

Stack

  • Next.js
  • NestJS
  • PostGIS

Need an engineer who can lead a build like this end-to-end?

Get in touch →