Tap the map again to profile another line. The waterline moves with the time slider — a bar that's dry at low water shows up here.
30 m Harmonized Landsat–Sentinel imagery, fresh every 2–3 days when skies allow. On this river you can see the fishing: brown sediment plumes out of the basin mouths, the sharp colour line where salt meets fresh, mud stirred along the lee bank. Step ◀ back to the last cloud-free day. Imagery has gaps and clouds — that's the nature of it; switch to VIIRS for a coarse but daily picture.
The survey grid is Rijkswaterstaat's measured riverbed — mainly the fairways they maintain. The city basins (Rijnhaven, Maashaven, Sint-Jobshaven, Parkhaven…) are Port of Rotterdam water and fall outside it: nothing is drawn there, but "depth here" still answers from the app's numeric basin model and honestly says model.
build v6.7 · ddapi20 + measured salt/turbidity/waves + NASA satellite · feed test: ocean-proxy.php?selftest=1 · code search: ?ddlfind=rotter
The basin model, spot logic, sun maths and your log work with no signal. Live layers (survey chart, level, current, temperature, wind, streets) need internet; last values are kept and marked CACHED. OSM tiles are never cached — their policy forbids it.
Water temp, level, tide, measured/predicted current, wind, cloud, pressure, sun height and depth at this moment are saved with the mark.
Everything here is measured data, official forecasts, or published research. Whatever is modelled or heuristic says so — on the layer and here.
The depth layer is Rijkswaterstaat's Bathymetrie Nederland — binnenwateren: the real 1-metre multibeam survey of the riverbed in m NAP (open data, CC-0), streamed from geo.rijkswaterstaat.nl. It covers the fairways RWS maintains; the city basins are Port of Rotterdam water and outside it, so there the app falls back to its embedded basin model and says "model". "Depth here" queries the survey grid under your position and subtracts it from the live water level, so it breathes with the tide. Survey or model: never navigate on this app.
The tide here is a wave that travels upstream: high water at Hoek van Holland reaches the city over an hour later. The app fetches the RWS level series at both ends of the river (Hoek van Holland and Rotterdam) and derives the wave's actual travel speed by cross-correlating the two — no lookup tables, the water calibrates itself. Every kilometre of river then gets its own level, its own HW/LW times and its own current phase, with the ~40-minute lag of real slack behind the level turn. That is why the arrows on the map turn progressively: on the young flood the sea end runs upstream while the city still ebbs, exactly as the inland-shipping current tables describe (flood Hoek–Vlaardingen roughly −2 h to +2 h around HW Hoek; upstream the flood arrives later and the ebb stretches long under the Rhine's push).
Where Rijkswaterstaat has a current meter on this stretch (Geulhaven first) the arrows near it show that measurement in m/s, marked MEASURED. Everywhere and everywhen else, the simulation's strength is scaled by today's meter-to-model ratio and marked PREDICTED; with no meter at all it is a plain PROXY index.
Where zout meets zoet is where the bait — and the hunters — concentrate. The front's mean position is set by the Rhine at Lobith (drought pulls it to the city bridges; big discharge pushes it past Maassluis) and it rides several kilometres up on every flood and falls back on the ebb, further on springtij. The dashed teal line on the map is that modelled front, moving with the time slider. Where Rijkswaterstaat's AQUALARM chemistry network reports live chloride at Lekhaven (or conductivity in the Botlek), the app inverts its salinity curve and the front becomes a measurement — the map label and the Now card say MEASURED, and beyond the measured window the model runs calibrated to the last reading, exactly like the current. Live turbidity (TROEBHD) replaces the discharge guess that drives the snoekbaars day-bite, and measured wave height at the mouth feeds the Landtong zeebaars surf factor. With no chemistry station answering it all falls back to the labelled model.
Tap 🥽 on the bank and hold the phone up: your 30/60/90 m casting bands are drawn on the camera view of the actual river, each labelled with the live depth in the direction you're pointing (RWS survey at this tide, ≈ for model). The top-5 spot chips float over the real water at their true bearings — tap one to open its sheet. The optics need one thing from you: your eye height above the water — pick "stones" on the rip-rap, "high quay" on a wall; it moves the bands a lot. And with 👁 x-ray on, you see through the water: every patch of surface in view is tinted by the depth beneath it — the channel as a dark trench, bars as sand — and where the bed drops sharply an amber contour is drawn on the water: that line is the edge you want to cast to. The relief comes from the depth model (survey values sharpen the centre of your view as they load; the band labels stay survey-first), so treat it as a picture of the shape, not centimetres. Compass and tilt come from the phone (allow motion access on iPhone); hold it upright — phone compasses wander a few degrees near steel quays, and without a compass the x-ray simply looks straight out over the river.
Set your position and three dashed rings show your 30/60/90 m casting reach, each with the depth on your natural line out (RWS survey at this tide; ≈ marks the model while the survey loads). The 📏 transect goes further: tap the button, then tap where your cast lands, and the bed between your feet and that point is profiled — model instantly (dashed), real survey samples streaming in over it (solid), with the deepest point and the steepest edge marked. That edge is the channel drop-off: the single most valuable metre of water within casting range, and now you know exactly how far out it is.
Hold the phone up to the river (⌖) and the model floats on the water: the live top-5 spot chips at their real bearings with score and distance, the nearby named stretches, the current as an arrow with its measured or predicted speed, the zout↔zoet front when it's within sight — and straight ahead, wherever you point, depth ticks at 30/60/90 m so you can sweep the phone across the water and read the bottom. Camera plus compass, no special hardware; grant motion & camera access when asked (iPhone asks for the compass explicitly). No camera or compass? You get a virtual horizon and drag-to-look. The compass is a compass — a figure-8 wave recalibrates it, and bearings are honest to a few degrees, not centimetres.
The imagery layer is NASA GIBS serving Harmonized Landsat–Sentinel 30-metre true colour — the combined Landsat 8/9 and Sentinel-2 record, gridded to one product, new scenes every 2–3 days over Rotterdam when clouds allow (keyless open data). Ten pixels across this river is enough to see what the model can only estimate: the turbidity plumes, the mixing fronts, where the ebb drags the mud. Use it as evidence, alongside the measured chloride front — when the visible colour line and the dashed model line agree, trust the spot.
Open-Meteo (open data, no key), fetched directly by the browser: one detailed series for your position and a small grid across the river for the wind-field overlay. Arrows point where the wind blows to.
Rijkswaterstaat's official WaterWebservices (ddapi20) — the same API behind waterinfo.rws.nl, called exactly as RWS's own published client library calls it. Water level measurements plus the official verwachting at Rotterdam and Hoek van Holland (HW/LW are found in that series on the device); water temperature from the nearest reporting station (named on its badge); Rhine discharge at Lobith, which drives flow strength, turbidity and how far the salt — and the zeebaars — push upstream. The little server proxy speaks the API's POST protocol and hands the app plain time series.
The model works in tide phase, not just level: every hour is placed relative to the nearest high water in the official RWS forecast, and the current is assumed to keep running ~40 minutes past the level turn before real slack — the lag every tidal river shows. Spring and neap are read straight off the measured range (springtij runs a day or two after full/new moon): a big range stirs more food and boosts the current-feeders; doodtij calms everything down. In the harbours, which only breathe through their mouths, the bite windows are the first hours of the falling tide, the last of the flood, and the turn itself — in the open river any decent run will do. This split comes from published Nieuwe Waterweg angling practice and it is why the same hour can colour a basin mouth hot and the Boompjes cold. Because every spot sits at its own kilometre of the wave, every spot gets its own HW/LW times and current phase — tap one and read them.
Snoekbaars — negatively phototactic; dark and dusk, or daylight when the river runs turbid; loves a moderate run over hard structure. Benedenrivieren tracking showed them far more mobile than the old home-water studies suggested — 30 km moves following the food — so the app moves them too: in winter the score shifts into the deep basins (the whitefish refuge), in a drought it pulls them upstream ahead of the advancing salt, and at slack it marks them down because they scatter from their ambush lies when the current stops delivering. Zeebaars — a tidal-current feeder, 13–19 °C, rides the salt wedge upstream in dry spells; in the harbours it bites on the tide windows above; onshore chop helps. Baars — visual dawn/dusk hunter tight to walls and pontoons. Snoek — ambush sight-hunter of the quiet corners and basin edges; hates hard current, likes cool water; strictly protected in spring. Meerval — nocturnal thermophile, wakes above ~17 °C, falling pressure helps; always released. Roofblei — daylight surface hunter of the seams. Harder — a summer grazer, not a hunter: schools mow algae off quay walls around the high water, June–September, shy of wind and heavy boots; bread, not lures. Bot — rides the flood up to feed on the sand pockets (the tidal-transport trick every flatfish here uses), strongest in the western half, thins out in winter to spawn at sea. Brasem — the still basin corners at dawn, dusk and dark, over groundbait. Winde — a daylight current-seam feeder, best autumn through spring, protected 1 Apr–31 May. Paling — full-dark, warm nights, the darker the moon the better; every one goes straight back (take ban). Spots are no longer fixed pins: the app samples the banks every ~350 m, and every point inherits local knowledge from the researched stretches (Boompjes, the basin mouths, the Landtong…) fading with distance, plus a per-species depth preference checked first against the depth model and then against the real RWS survey, fetched live for the top candidates. Each score multiplies light × temperature × flow × tide phase × season × structure × depth, plus salt, wind, pressure, spring-range and moon where the species cares. A heuristic, not a forecast of fish — the catch log exists to test it against your water.
East of the red dashed Maassluis line: binnenwater — VISpas, exact bank in the VISplanner, free nachtvistoestemming for the night, max two rods. West of it: kustwater, free, RecFishing registration for sea anglers 14+. Snoekbaars min 42 cm, max 2/day, only 42–70 cm; baars min 22 cm, max 3/day, max 45 cm; zeebaars min 42 cm, max 3/day, catch & release only 1 Feb–31 Mar; snoek release; meerval and paling: always release. Closed seasons: snoek 1 March – last Saturday of May; snoekbaars & baars 1 April – last Saturday of May; winde 1 April – 31 May; the lure/dead-bait ban runs 1 April – last Saturday of May — closed species' segments go grey with ✕. Eat nothing from this river: the Rotterdam district is a designated polluted area (dioxins, PFAS); the eel take ban is absolute and the advisory covers the rest. Operational terminals, locks and ferry landings are off-limits; part of Eiland van Brienenoord is a nature reserve.
The river spine behind the arrows, spots and depth model is surveyed from fixed real-world anchors (the Maeslantkering, the bridges, the tunnels); station positions and the kustwater boundary are derived from it, not typed in. A fishing aid, not a navigation tool. This is a working port: ship wash is the number-one danger — never stand at the waterline on the stones, never turn your back on the river. Emergency: 112.
Pick a fish below and the app scans the banks around you: hundreds of points scored on tide phase at that kilometre, current, salt front, depth, season and known structure — the top five appear as live score chips that move with the time slider and sharpen as real survey depths stream in. Tap anywhere on the water for that exact point's full story: its own HW/LW, current, depth, salinity, wind, the factor bars behind the score — and switch species inside the sheet.
The arrows are the simulated current turning progressively along the river; the dashed teal line is the salt front riding the tide. ⚡ jumps to the next low-light window; ⛶ hides everything but the map.
Not for navigation, and eat nothing from this river. East of Maassluis you need the VISpas.