A · LIVE IN THE BROWSER Blue Nile · Riyadh Urban Heat
B · PRECOMPUTE ONCE GeoAI Crop Monitoring, Al Jouf
C · TRAINED MODELS Train offline, infer in browser NEXT
PUBLIC DATA
Planetary Computer S1, S2, Landsat, WorldCover · keyless
Sentinel Hub / CDSE Process API with the visitor's own token
Terrain tiles AWS Terrarium, MapTiler Terrain-RGB
Weather APIs Open-Meteo, NASA POWER
OpenStreetMap Overpass + bundled snapshot fallback
1 Band math on tile server dB, °C and NDVI upstream, sent as byte-encoded PNGs
2 Exact decode createImageBitmap with no colour or alpha changes
3 Tile grid = analysis grid Web Mercator typed arrays, 1.2–1.6 million cells
4 Analysis on the device distance transforms, blurs, k-means, TensorFlow.js GPU
1 STAC + Rasterio reads only the Al Jouf window, never the whole scene
2 NumPy: indices & series NDVI, EVI, masks, composite, bincount per field
3 OpenCV: find the fields Hough circles for pivots, contours for block fields
4 Static JSON + live tiles fields.geojson + timeseries + live tiles for any date
1 Train offline U-Net and LightGBM on open and hand-labelled data
2 Export to ONNX quantised to a few MB (int8 or fp16)
3 Model as a static file served like any other asset from shared hosting
4 Inference in the browser ONNX Runtime Web, WebGPU with a WebAssembly fallback
Static hosting Next.js static export on shared hosting: HTML, JS, JSON, snapshots and ONNX models. No VPS, no database, no tile server.
The visitor's browser MapLibre GL, Chart.js, MUI. Results are painted to a canvas and overlaid on the map, aligned to the grid.
Live and running Planned: Route CClick any box for details
How to read this
Two routes live, one on the way Every box is clickable. Pick a project above to light up the path its data takes, turn on the data flow, or press Walk me through for a guided tour.
Route A computes everything in the visitor's browser. Route B precomputes once offline and streams imagery live. Route C (next) trains models offline and runs them in the browser.
No VPS No database No Python at runtime
Rule of thumb: if it depends on the visitor's settings, compute it in the browser. If it is the same for everyone, compute it once and ship it as a file.