-
-
Free vs Premium: one lifetime search against unlimited, and no ads.
-
Set the target species and a search radius before scanning.
-
AI Spot Scan result: a real place, scored 90, with the reason attached — river mouth, matching shore type, channel.
-
The paywall a free user meets on their second scan. The first scan is free for life.
-
The scan reads seabed depth, detects shore features and matches the species to its habitat.
-
Bathymetry and depth contours over a satellite base map.
-
Fish Activity planner: hourly activity score, best bite windows, pressure, tide and moon.
-
Species guide with photo fish ID for 156 species.
-
App icon, 1024 x 1024, uncropped.
Inspiration
Shore fishing has one question that decides the day: where do I cast? Boat anglers have sonar. Shore anglers have habit, a friend's tip, or a guess from the road.
The data that could answer the question already exists in public datasets — seabed depth, shoreline type, currents, wind, season, and what each species actually wants from a piece of coast. Nobody had put it in a fisherman's pocket.
What it does
DipRota scores every spot you can walk to, from 0 to 100, for the species you are after.
- AI Spot Scan — pick a target species and a radius. The app reads the seabed, detects shore features, matches the species to its habitat and ranks what it finds. You get a real place with the reason attached: river mouth, matching shore type, channel, foam line.
- Map layers — bathymetry, depth contours, seabed type, seamarks, wind flow, rain radar.
- Fish Activity planner — hourly activity score, best bite windows, pressure, tide and moon.
- Species guide and photo fish ID for 156 species.
- Offline regions, saved spots, wind and wave alerts.
Live on the App Store and Google Play in 13 languages.
How we built it
Flutter on the client (Riverpod, go_router, flutter_map), PHP and MySQL on the server.
The scoring engine combines OpenStreetMap/Overpass shoreline and structure data, EMODnet bathymetry, Copernicus Marine currents and multi-model weather (GFS, ECMWF, ICON), then ranks candidates against per-species habitat rules. A scan is expensive, so results are cached per grid cell and a cron-driven warm queue pre-computes busy areas.
RevenueCat carries the entitlements, the regional price bands across our locales and the 7-day trial. Mixpanel for the funnel, AdMob for the ad tier, Firebase for push.
The monetization design
One rule: let people feel the value before the wall.
- The first spot scan is free for life. No ad, no signup, no account.
- The moment the results land, a soft paywall shows what Premium unlocks.
- Every scan after that hits a hard wall with one way out: subscribe.
We used to offer a rewarded-ad escape at that gate. Our own 30-day funnel said the ad was mostly a way to postpone the decision — the ad gate converted at 6.8% over 117 impressions, the paywall-only wall at 18.5% over 108. Small samples, but the direction was consistent, so we removed the ad escape everywhere except Turkey, where ad revenue per user still beats subscription revenue. Rewarded ads stayed on the fish-ID and aquarium gates, where they do not compete with a purchase decision.
Challenges we ran into
Knowing when to stop giving things away. Our first design gave a free scan every 24 hours. People used the app for months and never saw a paywall. Moving to one free scan for life felt brutal until we saw that users who hit the wall after seeing results converted three times better than users who hit a wall before.
Species names. Our data model only stored Turkish and English common names, so a Greek user got a fully Greek result card with "Brown wrasse, Red porgy" in the middle of it. We now let users pick a target species so the English name reads as a deliberate label rather than a translation gap — a proper per-locale name table is next.
A bug we found while filming this video. An entitlement provider was modifying another provider during its initialization. In debug builds that made the Spot Finder silently do nothing for non-premium users — no error, no crash, just a dead button. One-line fix, but it is exactly the kind of thing you only see when you test the app as a free user instead of as yourself.
Accomplishments
Live on both stores in 13 languages, with 3,675 monthly actives and around 431,000 organic short-video views in the last 30 days. That short-video channel is our only acquisition channel so far — no paid spend.
What we learned
We analysed 56 of our own short videos. The split that mattered was not humour versus product; it was teaching versus advertising. Teaching content had a median of 12,513 views and brought 494 new active users per 100k views. Advertising content had a median of 2,127 views and brought almost nobody. We rebuilt the whole content system around that one finding.
What's next
Per-locale species names, coverage beyond the Mediterranean and Black Sea basins, and a first paid push into Greece, Spain and the US.
Log in or sign up for Devpost to join the conversation.