โ† projects

Turning satellites into usable data.

production React ยท Python ยท PostGIS ยท AWS

This is my day-to-day work: building the pipelines and interfaces that turn raw satellite imagery and geospatial records into clean, queryable products that teams use every day. It's a full-stack job in the truest sense โ€” from batch data processing deep in the backend all the way to the interactive map a user actually clicks on.

STAC
imagery catalogs
Python
data pipelines
PostGIS
spatial store
React
map dashboards
Details here are kept general โ€” the shape and patterns of the work, not any specific dataset or client.

What the platform does

At heart, it answers spatial questions over an enormous, constantly-growing pile of earth-observation data. A user wants to know what's happening inside a particular boundary โ€” an administrative region, a plot of land, an area of interest โ€” and how it's changing over time. Behind that simple question sits terabytes of satellite scenes that can't all be read on demand. My work is the machinery that makes the answer feel instant.

Ingest โ€” cataloguing the imagery

Satellite imagery arrives as huge scenes tagged with time, ground footprint, and spectral-band metadata. Rather than manage files by hand, I index them with STAC (the SpatioTemporal Asset Catalog standard) so scenes become searchable by area of interest and time window. That indexing step is what lets everything downstream ask for exactly the few scenes it needs and ignore the thousands it doesn't โ€” filtering by footprint, date, and cloud cover before anything heavy runs.

Process โ€” batch geospatial pipelines

Once the right scenes are found, they're processed region by region: reprojected to a common coordinate system, clipped to the exact boundary, and reduced to the values that matter downstream. The important design decisions here are about surviving scale rather than clever algorithms:

I wrote up the thinking behind this part in more depth in the Lab: Processing a country's worth of raster โ†’

Serve โ€” APIs over a spatial database

Processed results land in PostgreSQL / PostGIS, exposed through Python service APIs. Spatial indexes make area and point lookups fast, and the APIs return GeoJSON that a map can render directly โ€” so a front end can ask "what's inside this boundary?" or "what changed over time?" without ever touching raw imagery again. The whole thing runs on AWS.

Visualise โ€” React dashboards on top

The last mile is making heavy data feel light. Interactive map front-ends in React render the geospatial layers the APIs serve, with filtering and drill-down by region and time so people explore the data instead of just staring at it. That span โ€” owning a feature from the batch job that produces the numbers to the pixel that displays them โ€” is the part of this work I like most.

PythonSTACrasterio GeoPandasshapelyPostGIS PostgreSQLREST / GeoJSONReactAWS
โ† back to projects