All projects

Side project · 2026 – present

Fishub

A social network for anglers — and behind it, an environment simulation that predicts where fish should be, anywhere in the world, from satellite imagery and river flow data rather than from anyone having fished there before.

Role
Co-developer — built the habitat prediction simulation
Context
Independent side project, with two collaborators
Timeline
2026 – present · in development
Stack
  • iOS
  • Geospatial data
  • Satellite imagery
  • Hydrological data

fishub.org

The product

Fishub is a social platform for anglers: log catches, map spots, follow other anglers, and track your own season against challenges and a leaderboard. The social layer is the obvious half of the product — a feed, a map, a profile, and statistics that make a season's fishing legible to the person who fished it.

The part I built: habitat simulation

The interesting problem sits underneath the social product. Fishing apps generally answer "where should I fish?" with crowd data — other people's logged catches. That works where the app already has users and fails completely everywhere else, which is most of the world. It also rewards spots that are popular rather than spots that are good.

I wanted the prediction to be independent of location — to say something useful about a stretch of water nobody has ever logged a catch on, by reasoning about the environment itself instead of about the crowd.

So the simulation models habitat suitability from physical inputs rather than social ones. It pulls environmental data for an arbitrary area — satellite and Earth observation imagery, river flow and water level information, and the surrounding terrain and hydrology — and scores the water within it for how likely it is to hold fish.

The output is a scored overlay rather than a single answer: an area is divided into tiles, each tile simulated, and the resulting suitability scores rendered across the waterways inside it. Running it over a region produces a heat map of where the environment favours fish and where it does not, at a resolution fine enough to distinguish one stretch of a canal from another a few hundred metres away.

A map of the area around Delft in the Netherlands with a simulated tile overlaid. Within the tile, waterways are marked with coloured points and numeric suitability scores running from green through orange to red.
A simulated 3×3 km tile near Delft. Each point carries a habitat suitability score; colour runs from favourable to unfavourable along the waterways inside the tile.

Why this is hard

  • The inputs are heterogeneous. Satellite imagery, hydrological gauge readings and terrain data arrive at completely different resolutions, projections and update frequencies, and have to be reconciled onto one spatial grid before anything can be scored.
  • Coverage is uneven. River flow data is dense in some countries and absent in others. A model that requires every input to be present is a model that only works in the Netherlands.
  • Ground truth is scarce. Unlike a supervised vision problem, there is no labelled dataset of "fish were here". Validation has to lean on known-good water and angler knowledge rather than a held-out test set.
  • It has to be cheap enough to run repeatedly. Habitat changes with season, flow and weather, so a prediction is only useful if it can be recomputed, not computed once.

Where it stands

In active development, heading for App Store release. Shipping a real application with three people is as much about scoping, review requirements and release process as it is about code — which is a large part of why the project is worth doing alongside research work.

Want the detail?

Happy to talk through the simulation or where the product is going.

hendrikjoel21@gmail.com