Pescapp
A mobile app that tracks fishing trips even without coverage, and a dashboard that lets the dock follow every boat's route.
- Studio
- M.L Cats Consultancy
- Year
- 2025
- Stack
- Flutter, Firebase, SQLite, Google Maps, OpenWeather, Streamlit

The goal
Build an app that's easy to navigate and lets fishermen see where they are in real time, while the dock keeps a record of every trip. Out at sea there's often no coverage, so the app couldn't depend on a connection to track where a boat goes.
That meant delivering three things together:
- An interface that's easy to use on a phone, on a boat
- A system for recording and storing each boat's position
- A platform for viewing routes from the dock
The app

Pescapp is built in Flutter, so one codebase covers Android, iOS, and the web. Fishermen sign in with Firebase Auth, and the home screen shows the day's weather for their area next to a table with each boat's latest status.

A dedicated weather view, powered by OpenWeather forecasts, breaks down temperature, rain, and wind, since those decide whether it's safe to go out.

The map, built on Google Maps, shows where the boat is, with filters for docks and fishing spots. From there the fisherman starts and ends a trip with one button. The app also includes a catalog of the fish found in the region.

Tracking without coverage
The app works offline first:
- While a trip is active, the app records the boat's position every two minutes, along with speed, altitude, and accuracy. It runs as an Android foreground service, so tracking keeps going with the screen off.
- Every point is saved first to a local SQLite database on the phone, so nothing is lost when the boat is out of coverage.
- Every minute, a sync job checks for a connection and uploads any pending trips and points to Firestore, then cleans up old synced data.
The dashboard
On land, a Streamlit dashboard reads the same Firestore collections. You pick a trip by date, and it draws the route on a Folium map, with a marker for every recorded point connected by a line.
Working with the client
Before writing any code, we put together a proposal with the client that laid out the goal, the scope, the interface, and the architecture. Then we split the work into three sprints:
- Mobile app: the Flutter app, with weather, the map, and trip tracking.
- Cloud and dashboard: Firebase and the Streamlit dashboard.
- Testing and support: stress tests, functional validation, and the start of support.