RRSTEKONE VBK-SAR-01
VIBOK AIR S.R.L. REV 2026-09-09 TECHNICAL RECORD
Connecting Asking the measurement API what it holds.

Measured now · Copernicus Marine / CLS · observed · · ·

The last · · · km to the sand is below the resolution of every public ocean model.

The masses are measured. The drift is modelled. Between the last modelled grid cell and the beach there is a strip of sea that no public model resolves, and it is the only strip that decides whether a crew is called out. That strip is what the daily drone flight measures instead of predicting.

01
· · · m/s median  ·  · · · m/s max

The surface field the patches are pushed through, over · · · provider samples. basis · · ·
· · ·

02
· · · km — closest approach to Bávaro

The nearest any measured patch gets to the Bávaro sand over the whole · · · h horizon, reached at t+· · · h. It is still closing when the horizon ends — the model runs out of time, not out of sargassum. modelled

03
· · · of · · · segments reached

Segments where a patch comes inside the · · · km capture radius within the horizon. The capture radius is a number we chose. assumed

04
· · · trajectories stopped on a NaN field

Plus · · · patches refused at release, of · · · given: the model has no field at their own coordinate. GLO12 is 1/12°, about 9 km at this latitude, and its land mask swallows the cells nearest a coast — so the nearer a trajectory gets to the beach, the more likely it is to end against nothing at all. modelled

The last · · · km is a single model cell wide.

The ocean model cell is about 9 km across. The nearest measured sargassum sits · · · km off the sand. The entire approach that matters to a hotel is therefore one grid cell — there is no public model, ours included, that can resolve it, and no amount of tuning makes a 9 km cell answer a 300 m question.

That is the argument for flying the beach. The drone measures the last leg at centimetre ground sample, three flights a day, instead of predicting it. The satellite says the sargassum is coming; the drone says it arrived, where, and how much.

Reported so it can be checked, not so it reads well: · · ·. There is no arrival probability on this page — see the layer table below.

L1

Measured now

Floating mass flagged by the validated third-party product, read straight from our own store. The two approach boxes are the ingest windows in sargazo/cmems.py, not corridors drawn for this page.

· · ·km²
Flagged mass, basin scale
Measured · · · · masses · OLCI 278 m · /detections?source=cmems-olci
· · ·km²
In the Bávaro approach
Measured · box 18.580–18.860 N, 68.441–67.600 W · · · · masses
· · ·km²
In the La Romana approach
Measured · box 18.100–18.460 N, 68.900–67.600 W · · · · masses
· · ·h
Age of the measurement
Now minus the satellite’s observation time — not our ingest clock, which is · · ·

The same water at 20 m

The 20 m MSI product over the same window reports · · · km² across · · · masses, observed · · ·.

The two are not comparable as tonnage. Both report flagged-cell area, and a 278 m cell flags a whole cell for a raft that fills a fraction of it. Read the OLCI figure as extent and the MSI figure as detail on the same water, never as two estimates of one quantity. measured

What the store holds · /health

· · ·

Last run per source, straight from the API. A source that has stopped running shows its real age here rather than disappearing.

L2

The horizon is not the warning

OLCI is a daily product. By the time an observation is in our store it is most of two days old, and the model horizon is measured from when the satellite looked — not from now. Quoting the horizon alone overstates the warning by the age of the data.

Consumed by the age of the measurement · · · · h Warning actually remaining · · · · h Model horizon · · · · h from t0 · · ·
· · · h
Measurement age. Computed in the browser from the observation timestamp, so it keeps counting while the run is cached. measured
· · · h
Warning left inside the horizon. Never show the horizon without it. modelled
L3

The two sites, right now

Per-segment arrival for the coastline under management, from /arrivals. Segment geometry is measured; arrival is a single-particle advection and is not calibrated against any observed landfall.

The La Romana box is an inference of ours: VBK-SAR-01 gives no coordinates for “sector La Romana”. Segment identifiers are frozen — renumbering them would invalidate every observation already recorded against them.

L4

What each layer actually is

The figures above mix four different kinds of thing. Mixing them is fine; not saying which is which is not. Every row below names its basis at the point it is read.

Basis key measured modelled assumed synthetic does not exist

The full method, the validation ledger and every failed control are in the . Nothing in the live view is a summary of a figure that is not printed there.

Sargassum arrival forecasting · Dominican Republic east coast

Sargassum landfall,
resolved to a 300-metre beach segment.

Public products report the Atlantic belt at basin scale. VBK-SAR resolves the arrival to the individual segment of sand a hotel actually cleans — 44 of them, cut from surveyed coastline, at Bahía Príncipe Bávaro and sector La Romana.

0
Coastal segments
Measured · cut from OSM coastline, data/tramos.geojson
0m
Median segment length
Measured · 295.8–313.6 m across 44 segments
0km
Coastline under management
Measured · 3.614 km Bávaro + 9.533 km La Romana
0×
Known-positive contrast
Measured 2026-09-09 · validated satellite source vs clean gyre
State key Measured / verified Operational Planned / not built Failed or defect, open

Every quantity on this page carries one of those four marks. Nothing is unlabelled. Where our own work failed a control, the failure is printed with the number that shows it.

01

The resolution argument

Four orders of magnitude, drawn to scale. Each frame contains the next one. Two of the three nestings are smaller than a pixel at this print size — that is the point, and the pixel arithmetic is printed rather than fudged.

Live overlay needs JavaScript. The frames below are the printed record.
Field of view of each frame above, on a base-10 metre axis. Span from the basin frame to the drone ground sample: 2 × 107 : 1.

What competitors resolve

Basin and regional bulletins answer “is there sargassum off this coast this week.” That is the correct answer to a shipping question and the wrong answer to an operations question. A resort does not clean a coast; it schedules crews and closes loungers on a named stretch of sand.

The distinction that matters, stated precisely

The moat is the resolution of the answer, not of the pixel. The finest validated cell in our chain is 20 m (Sentinel-2 MSI) — already finer than a segment. What no public product delivers is a per-segment landfall statement with a time, an amount and an auditable provenance chain behind it. Building that unit is the work; the pixel is an input to it.

02

The stack, stage by stage

Five stages. Two are operational today, three are not. The three that are not are marked as such here, in the console, and in the repository’s own documentation.

  1. S1

    Satellite detection

    Operational · third-party validated

    Copernicus Marine MULTIOBS_GLO_BGC_SURFACE_NRT_015_016, “Floating Sargassum algae detection index from satellite observations”, produced by CLS. Two datasets are read: MSI/Sentinel-2 Caribbean at 20 m and OLCI/Sentinel-3 at 278 m, one file per day each.

    Access route measured today: direct HTTP range reads against the public Copernicus object store answered 206 Partial Content with no account. Credentialed ARCO access is the documented fallback for OLCI; MSI publishes no ARCO store at all, so range reads are also the cheapest route.

  2. S2

    Drift and stranding

    Planned · does not exist

    OpenDrift particle transport, VBK-SAR-01 §4/§5. Not built. The module present in the repository is single-trajectory advection with a constant 1 % windage on a current that already carries Stokes drift: no stranding, no ensemble — therefore no arrival probability.

    Consequence, and the reason this is stated rather than hidden: the API serves /forecast as an observation (basis:"observed", eta_hours:null) instead of dressing a measurement as a prediction. Until S2 exists, no verification metric of VBK-SAR-01 §6 — Brier, ROC-AUC, ETA error — can be evaluated, so none is quoted.

  3. S3

    Segment landfall

    Geometry operational · probability planned

    44 segments of 200–500 m exist and are addressable today, with length, orientation, centroid and a measured shore-normal depth profile. The value they will carry — arrival probability and time per segment — depends entirely on S2 and is not populated.

    Segment identifiers are treated as permanent. Renumbering or reshaping a segment invalidates every observation ever filed against it, so the La Romana extent question (§05) is escalated rather than silently corrected.

  4. S4

    Drone verification

    Planned · one synthetic flight on record

    Four flights per day over the 44 segments, closing the loop between a forecast and the sand. The ingest path, observation schema and scoring regression exist; the flights do not. The only flight in the repository is synthetic (DJI / FC-TEST) and is labelled so everywhere it appears.

    The current segmenter is an explainable colour index, BROWN = (R − B) / (R + B) with a per-image Otsu threshold. It measures a brown-object class, not a trained sargassum class — it will also fire on wet dark rock, palm shadow and non-sargassum weed. Its purpose is consistent numbers and a labelled training set. A trained segmentation net replaces it behind the same interface.

  5. S5

    On-premise advisory

    Planned

    A 24–32 B model running on the customer’s own hardware: the daily bulletin, operator question-answering over the PostGIS record, and reporting. No data leaves the property.

    Explicitly out of scope for this component: it does not predict drift and must never be sold as doing so. Physical transport is S2’s job. The imagery work is a small segmentation network, not the language model.

03

Validation ledger

Every data layer in the system with its source, licence, resolution, cadence, state — and the specific measurement that earns that state. Failures and open defects are rows in the same table, not an appendix.

The known-positive control

A detector that cannot find the Great Atlantic Sargassum Belt is not a detector. Both the CLS product and our own index were run over the same two windows on OLCI, 2026-09-08, with no credentials.

Atlantic belt · 8–14 N, 50–40 W
0.5298 %
Clean gyre · 26–29 N, 55–45 W
0.0022 %
Contrast
241 ×
Land (Hispaniola, Puerto Rico)
0 observed px · 0 algae
Our own FAI detector, same control
0 detections in the belt

Percentages are of observed pixels, i.e. after cloud and land are removed by the producer’s own flag. Reproducible with python -m sargazo.cmems --selftest.

LayerSource · licenceResolutionCadenceState

Satellite sargassum index

Copernicus Marine MULTIOBS_GLO_BGC_SURFACE_NRT_015_016, produced by CLS · Copernicus Marine licence
MSI 20 m
OLCI 278 m
Daily
Validatedthird-party

Measurement Known-positive control, OLCI 2026-09-08, no credentials: Atlantic belt 0.5298 % of observed pixels flagged algae against clean gyre 0.0022 % — a 241× contrast. Land returns 0 observed pixels. Grid definitions read from the files themselves: MSI 175 001 × 111 112 at 0.00018° (20.0 m N–S, 19.3 m E–W at 18.5 N); OLCI 45 201 × 14 001 at 0.0025°.

Our own FAI detector

RRSTEKONE · sargazo/detect.py, sargazo/goes_nodd.py · ours
S2 60 m
GOES 2 km
—
Faileddisabled as source

Measurement Failed the same known-positive control outright: zero detections in the Great Atlantic Sargassum Belt, with detections appearing only where a coast was nearby. Four rounds of fixes produced four distinct artefact populations rather than a working instrument — land mask rasterised in the wrong CRS, NDVI computed on wrongly-offset reflectance, haze and sun glint, and shallow-water seabed reflectance. A fixed FAI cut fires on anything lifting NIR against a red/SWIR baseline; that is the wrong instrument, not an untuned threshold. It is retained only as a cross-check and is never the answer.

Product flag semantics

Resolved against the data files, not taken from the metadata
per-pixel
per file
Verifiedre-derived each run

Measurement flag_nfai publishes its meanings against values that include 32767, which is also the array’s _FillValue — a pairing that must not be trusted on sight. Read twice on the 2026-09-01 MSI file: flag=1 → 86 882 605 px, index at fill (no observation / cloud / land); flag=0 → 12 298 467 px carrying the −0.5 algae-free sentinel; flag=32767 → 39 365 px with index 0.0015–0.5795, i.e. algae — of which 12 501 px were themselves fill and are dropped. The reader re-derives and re-checks this on every file it opens and skips the window loudly if a control fails, because a silently reordered pairing would report the entire ocean as sargassum.

Nearshore bathymetry

GMRT, Lamont-Doherty Earth Observatory · public GridServer
~58 m
Static
Measured36 of 44 segments

Measurement Shore-normal profiles at 200–1 000 m for every segment, reproduced 2026-09-09. Depth 1 km offshore: Bávaro 7.3–12.2 m, median 11.1 m, 0 of 11 segments reach 30 m; La Romana 6.7–42.6 m, median 22.1 m, 5 of 25 reach 30 m. Eight segments are refused rather than estimated — the routine will not answer finer than its grid cell.

Bathymetry cross-check

GEBCO 2020 via NOAA CoastWatch ERDDAP · public
~463 m
Static
Rejectedat segment scale

Measurement Along the BPB-002 shore normal at 100 m steps, 100–1400 m, GEBCO reads 5, 5, 5, 5, 21, 21, 21, 21, 35, 35, 35, 35, 35, 8 m — four identical readings, a step, four more, then a 27 m drop while still heading offshore. A sea floor does not do that; the profile is an artefact of a cell wider than the question. Arbitrated independently by the imagery: green (560 nm) bottom reflectance on S2B_19QEA_20251230 stays 2–4× background out to ~900 m, which through GEBCO’s claimed 35 m would be attenuated to ~0.7 % and is impossible — consistent with GMRT. The two grids nonetheless correlate at r = 0.9975 across the EEZ window and disagree about the 30 m isobath on only 1.7 % of points, so the basin-scale mask does not depend on which is used.

Coastline & segment geometry

OpenStreetMap · ODbL 1.0 · cut by scripts/build_tramos.py
vertex
Static
Operational44 segments

Measurement 44 segments, 13 146.9 m total. Bávaro: 12 × 301.2 m = 3 614.4 m, normals bearing 26.4°–81.5°. La Romana: 32 segments 295.8–313.6 m = 9 532.5 m, normals 90.5°–246.3°. Every length and bearing is computed from the geometry, not asserted.

Beach catalogue

OpenStreetMap · ODbL 1.0 · scripts/build_catalogue.py
point
Static
Operational136 beaches

Measurement 136 Dominican beaches. Every field is an OSM tag, a count of OSM features within 400 m, or a point-in-polygon result — nothing is written from knowledge. Coverage is therefore uneven and is published as such: province 100 %, surface 43 %, parking 32 %, access type 18 %, lifeguard 4 %, entrance fee 1 %. Fields that do not exist in OSM — activities, wildlife, water conditions, best season — are left empty rather than reconstructed, because writing them would mean publishing 136 unsurveyed claims.

Site observation coverage

Measured against CLS MSI + OLCI, 2026-08-30 → 2026-09-08
per box
Daily
Defectopen · gap 425

Measurement Over ten days the Bávaro box was observed on 1 of 10 MSI days and 0 of 10 OLCI days; the La Romana box on 0 of 10 and 0 of 10. Worse, the La Romana box as specified (18.396–18.410 N, −68.944–−68.900 W) is 100 % land in the producer’s own mask: along −68.92 W the water CLS will report stops at 18.361 N, roughly 4 km south of the box. That box can only ever return 0 km², and 0 km² on a map reads as a clean beach. The boxes are not silently moved — the La Romana extent is an assumption inherited from the specification, and renumbering a segment invalidates every observation filed against it. The ingest logs an error naming each unobserved box instead.

Coastline positional slop

Natural Earth 10 m land polygon, used as detector land mask
1:10 000 000
Static
Defectopen

Measurement 147 of 393 detections in one stored run, and 96 of 293 in another, sat at positive elevation on both DEMs. They are not scattered inland: every one is within 1.1 km of the Natural Earth coastline, median 0.0 km, p90 0.32 km. A 1:10 000 000 coastline carries roughly a kilometre of positional slop — about 17 Sentinel-2 pixels at 60 m — so surf, wet sand and shoreline vegetation stay inside the water class. A depth cut removes them as a side effect; the underlying fault is the coastline dataset and is recorded as its own defect rather than absorbed.

Area comparability

MSI vs OLCI over identical corridors, 2026-09-08
20 m vs 278 m
Daily
Caveatcarried in the schema

Measurement The same corridors on the same day returned 3.91 km² (MSI) and 556 km² (OLCI) — a factor of about 40, all of it resolution. Reported area is flagged-cell area, not raft area: at 278 m a single 50 m windrow flags a whole 0.077 km² cell. Runs are stored per source so one cannot displace the other, and the legacy risk bands (0.3 / 3 / 12 km²), tuned on 60 m Sentinel-2 patches, are not applied to OLCI.

Drift model & forecast skill

OpenDrift 1.14.11 · VBK-SAR-01 §4/§5 · built, not in service
12 members/patch
on demand
Model builtskill unmeasured

Status The particle model now exists. An OpenDrift ensemble with GSHHS stranding and windage sampled across 1–3 % runs 4 800 particles over a 72 h horizon in under 20 s, and it passes a known-positive control: 400 particles released at 17–20 N, 58–55 W travel −96 km east in 72 h, 100 % westward at 0.375 m/s — the North Equatorial current, out of measured forcing. So prob_llegada is computable, and /arrivals?engine=opendrift returns it. It is not what this page serves. The default engine is unchanged, because a probability that exists is not a probability that is right: no arrival from either engine has been checked against an observed landfall, so calibrated stays false and the acceptance criteria of VBK-SAR-01 §6 — Brier, ROC-AUC, ETA error — remain unevaluated. That needs the drone, which has not flown.

Drone ground truth

RRSTEKONE · drone/segment.py colour index
cm-scale
4 flights/day (planned)
Plannedindex, not a classifier

Status The measurement today is an explainable colour index with a per-image Otsu threshold, and what it emits is coverage of a brown-object class. It is not a trained sargassum classifier and is described that way to the customer. The only flight on record is synthetic. Four flights per day over the 44 segments is the plan that turns this row into a measurement, and it has not started.

04

Why generic open-ocean detection cannot serve this coast

This is the engineering fact underneath the commercial one. It is measured, and it is the reason a beach-scale product is a separate instrument rather than a zoom level on an existing one.

Every index built for floating algae has the same failure mode inshore: seagrass and reef macroalgae on the sea floor carry the same red-edge signature as sargassum on the surface. Spectrally there is nothing to separate, so the only discriminator left is geometry — sargassum floats on water deep enough that nothing grows on the bottom of it. Turbidity is the same problem twice over: wave-stirred sediment lifts NIR and not SWIR, exactly the signature a haze gate is built to accept. Both processes are confined to the shelf.

The standard remedy is a depth cut. Ours sits at 30 m, and three independent arguments land there: direct seabed reflectance is long gone (bottom contribution falls as e−2Kdz; red 665 nm is below 1 % by ~6 m); dense Caribbean benthic vegetation is confined to the photic bottom above roughly 30 m; and wave base for typical Caribbean swell at T ≈ 7 s is about 25 m, below which the column is not stirred from beneath.

Applied to a beach-scale product that cut deletes the arrivals the customer is paying to be warned about. The measurement, over the 36 segments whose shore normal is reliable:

0/11
Bávaro segments reaching 30 m within 1 km
5/25
La Romana segments reaching 30 m within 1 km

Measured from GMRT ~58 m tiles, reproduced 2026-09-09. At Bávaro not one segment reaches 30 m of water within a kilometre of the beach, so the mask that makes open-ocean detection trustworthy removes essentially the entire operating band. Depth is therefore carried as an attribute and surfaced to the consumer, never used to silently drop nearshore patches and call the result cleaner.

Shore-normal depth profile · 36 segments · GMRT ~58 m

Bávaro · 11 La Romana · 25 30 m cut
Water depth, positive down, along each segment’s offshore normal. Bearings are verified against the geometry: a normal that runs aground is flipped, and a profile the grid cannot resolve is refused rather than estimated — 8 of 44 are refused here for that reason. Measured.

Why the source grid matters · BPB-002 normal, same transect

GMRT ~58 m GEBCO ~463 m
The same offshore line read from two public grids, both measured 2026-09-09. GEBCO’s cell is wider than the question being asked of it and answers anyway — four identical readings, a step, four more, then 35 → 8 m while still heading offshore. GMRT is monotonic: lagoon, reef crest, fore-reef slope. Measured, both series.
05

Coverage

Two sites, real geometry, cut from surveyed coastline. Drawn to scale from data/tramos.geojson — this is the deliverable unit, not an illustration of one.

Open item carried to the investor, not buried

“Sector La Romana” carries no coordinates in VBK-SAR-01. The frontage used here — Playa Minitas / Casa de Campo — is inferred, and the specified bounding box is 100 % land in the satellite producer’s own mask. Both facts are recorded against the project as open gaps. Confirming the extent is a customer decision with a hard constraint attached: segment identifiers are permanent, and renumbering them invalidates every observation ever filed against them.

What a segment carries today

  • tramo_idmeasured
  • geometry · LineStringmeasured
  • longitud_mmeasured
  • orientacion_degmeasured
  • centro_lat / centro_lonmeasured
  • prof_200 / 500 / 1000 mmeasured · 36/44
  • prob_llegadaplanned
  • eta_horasplanned
  • severidadplanned
  • verificacion · droneplanned