How spearo.app reads the sea
Last updated: 2026-07-24
spearo.app sometimes gets described as “a weather app for spearfishing”. It isn't. Weather models are one input of several: we build our own seabed maps from Sentinel-2 satellite imagery, measure water clarity from orbit, mirror wave-buoy archives from eight national networks, and use those buoys to catch the forecast models overshooting. This page lays out how the engine actually works — with real numbers, including the unflattering ones.
As far as we know, this stack is unique in the niche: no other spearfishing or freediving forecast runs its own satellite bathymetry, its own clarity model and its own mirrored buoy archive. The big marine-weather platforms serve sailors and surfers; spearo is built around one question — will you actually see anything down there today.
Coverage today: 26 countries, 1,100+ coastal towns, 9 languages — and one honest verdict per dive window: go or no-go.
A seabed map we build ourselves (Sentinel-2 SDB)
The depth windows and reef-score pins on the map come from satellite-derived bathymetry (SDB) we compute in-house: stacks of cloud-free Sentinel-2 passes run through our own optical-depth pipeline, built and hardened in production across 17 countries. The exact recipe stays in-house — what we publish is how we prove it right.
Every region is calibrated against NASA ICESat-2 ATL24: individual laser photons that measured the actual seabed. Typical calibration error is 0.9–2 m RMSE; our best region, Akumal in Mexico, sits at 0.94 m. The same calibration sets an honest applicability window (say, 0–15 m): outside it the map shows nothing rather than a guess. Where the physics genuinely fails — the turbid Humboldt upwelling in Chile, the surf-hammered east coast of Siargao — we publish “no coverage”, not a pretty fake.
Where governments run open coastal LiDAR or survey programmes we use those at 1–5 m resolution instead: Portugal, France (SHOM Litto3D), the United States (NOAA), Australia, New Zealand (LINZ), the Basque coast, Argentina's naval-survey isobaths. The reef-score layer is live in 17 countries with roughly 6,600 rated pins, and every build passes an automated QA gate: an on-land audit, a marine-reserve cut and a maritime-border audit, so a pin never lands on dry land, inside a no-take reserve or in a neighbour's territorial waters.
Water clarity measured from orbit, not guessed
Visibility is the whole game in spearfishing, so we refuse to model it from wind alone. The clarity reading on city pages is a measurement: Secchi-disk depth (ZSD, in metres) from Copernicus Marine ocean colour — a ~1 km Atlantic product read freshest-first, with a gap-free ~4 km global product underneath. Daily composites, roughly a day of latency.
On top of the measurement we built and validated our own hybrid clarity model, trained on a 29-year ocean-colour history (1997 to today, ~93,000 observations on our home coast) and tested walk-forward across all four seasons. Its honest verdict: the freshest satellite pass is the strongest single signal, and weather features add skill only around it — hybrid MAE 2.25 m versus 2.27 m for pure satellite persistence. That finding shapes the product: the satellite read leads, and wind, swell and river-discharge modelling fill the hours between clear passes. Coefficients are refit per region — a Cascais fit is never silently applied to the Aegean, because transfer without a local refit degrades to 9–16 m errors. So we don't do it.
Our own shelf of wave buoys
A model forecast is an opinion; a buoy is a fact. We run collectors that continuously mirror wave-buoy data from eight networks into our own archive: Instituto Hidrográfico (Portugal — official data access), NOAA NDBC (United States — over 2,000 station-years, back to 1990), Puertos del Estado (Spain), SOCIB (Balearics), AODN (Australia — the Sydney record starts in 1992), ISPRA RON (Italy), POSEIDON (Greece, via Copernicus Marine in-situ) and SiMCosta (Brazil). Some mirrors reach back decades; others accumulate from live feeds we poll around the clock.
Live buoy readings appear on city pages under hard honesty gates: a reading older than 3 hours is hidden, wave data only shows from a station within ~130 km, and if no station is in range there is simply no chip. We never substitute a model value where a measurement is promised.
Buoys keep the models honest
Because we hold both the forecast and the measurement, we can score the models. The first ledger from the Portuguese buoys — forecast versus measured significant wave height — reads: Sines +0.06 m (correlation 0.83), Leixões +0.01 m, Faro +0.22 m, and Caniçal on Madeira's sheltered side +0.42 m. The pattern is systematic: raw wave models overshoot on lee shores. That bias signal is exactly what feeds our per-coast calibration — and it's why a sheltered coast can read differently on spearo than in a generic forecast app.
One verdict, six models
The go/no-go for each dive window is read from a consensus of three wave models (EWAM, GWAM, Météo-France WAM) and three wind models (ECMWF IFS, GFS, ICON). Agreement raises confidence. Disagreement never upgrades a verdict — it degrades green to yellow, and far-out windows that carry real model disagreement are marked provisional. The goal is stability: a verdict that silently flips overnight is worse than a cautious one.
Cadence and the honesty rules
- Coastal verdicts are re-read every hour; a spot forecast is cached for 10 minutes; buoy chips refresh in 15-minute buckets; satellite clarity is a daily composite checked every 6 hours; official sea warnings (IPMA and peers) ride along live.
- No data ≠ bad conditions. A cell without measurements says “no data” — never a fake low score.
- Every layer carries its provenance and precision: hydrographic survey vs coastal LiDAR vs Sentinel-2 SDB vs model estimate, labelled in the UI.
- No-take zones are digitised from primary legal texts — decrees and park regulations, not third-party summaries — and the engine fails closed: if we can't verify, no pin goes there.
- Nothing on spearo.app is for navigation.
The data we stand on
- Copernicus — Sentinel-2 imagery; Copernicus Marine ocean colour and in-situ data.
- NASA ICESat-2 ATL24 bathymetric photons (calibration ground truth).
- Wave-buoy networks: NOAA NDBC · Instituto Hidrográfico (PT) · Puertos del Estado (ES) · SOCIB · AODN (AU) · ISPRA RON (IT) · POSEIDON/HCMR (GR) · SiMCosta (BR).
- National coastal LiDAR & survey programmes: SHOM (FR), NOAA (US), LINZ (NZ), Australian state agencies, DGT/Instituto Hidrográfico (PT), b5m (ES), SHN (AR) and others — each credited on the map layer it powers.
- Open-Meteo and national met services (IPMA and peers) for model fields and warnings.
Everything above is inspectable on the live map: depth windows, clarity, buoys, no-take zones — each layer with its own source label.