Building a River Navigation Map
A few days ago I took the boat out on the river. After launching, we didn't get far before the lower unit found a sandbar.
View ProjectThe Problem
I knew the river was low. I didn't think it was that low. I stepped out of the boat and stood in the middle of the Drava with water below my knees. Turns out there's a reason they call people who really know this river “Dravski Vukovi (Drava Wolfs)” and I've got a few more seasons to go before I earn that title.
After getting back to shore with my ego more bruised than the lower unit, I started thinking about how I actually check conditions before going out.
I use three sources:
Water levels – mvodostaji.voda.hr. Current level, trend, daily chart. Data comes from Državni hidrometeorološki zavod.
Temperature – meteo.hr, same source. No sensor on the Drava itself, just readings for Donji Miholjac and Vukovar, so I average the two.
Navigation notices – Lučka kapetanija Osijek publishes PDFs on mmpi.gov.hr every few days. Inside, buoy positions by river kilometer and more importantly, depths at those buoys.
All useful. All on different websites.
The Idea
So I thought, put it all on one page, with a map.
Water level, trend, temperature up top. Below that a 24-hour chart so you can see which way the river is moving, not just where it is right now. Historical high and low for reference. And then the map, buoys at their actual positions, with depths from the latest notices.

Basically, open it up before you leave the house and you'll know if it's worth going.

For now it covers the Drava near Osijek. Maybe I expand it later, maybe not, we'll see.
How It's Built
The backend is Flask with SQLite. Three scrapers run on a schedule in the background, one checks mvodostaji.voda.hr every 20 minutes for water levels, one pulls temperature from meteo.hr, and the third watches mmpi.gov.hr for new PDFs from Lučka kapetanija Osijek.
The map was the annoying part. Buoy positions in the notices are written as river kilometer markers, not coordinates. There's no API for that conversion, so I sat down and mapped them manually against satellite imagery. Tedious, but it's a one-time job… At least that's what I'm telling myself.
The PDFs are a mess to parse programmatically, so I'm using Claude Vision to pull the data out. Send the PDF as an image, ask for JSON back.
Who It's For
Primarily built for myself, someone has to protect the sandbars from me.
If you're a fisherman on the Drava, you take the boat out occasionally, or just want to know if the river is passable, give it a look.
I'd genuinely like to hear if this is useful or if something feels off.