An aquaculture monitoring system built on one REST API. Farmers log activity from a pond-side app, managers watch it on a dashboard, and the lab gets clean data to work from. I built the API and the dashboard in the middle.
Overview
Smartfish is how the fishery got off paper. It tracks what happens across the farm so farmers, managers, and the lab are all looking at the same thing. Feeding, water conditions, fish health. Before this, all the information lived in notebooks.
I worked on solving this. I gathered requirements from the maintenance team and the lab team on what they needed, then built the REST API that serves both the mobile app and the web dashboard, so every side of the farm reads from the same data.
The journey
A farmer records something at the pond: a feeding, a water reading, something they noticed.
The mobile app turns that quick note into structured data.
Everything reads and writes through the same data layer, so nothing drifts.
Managers see the raw activity as a readable view of the whole farm.
The lab gets it clean and structured, ready for fish-health calls.
One API, three audiences
Farmers
A small mobile app for logging activity without downing tools. It has to work fast while you're standing over a pond, not sitting at a desk.
Management
A dashboard that turns the stream of pond activity into a clear read on conditions, so checking in doesn't mean chasing people for updates.
Labs
Data handed over in a shape they can actually use, so nobody re-types it and nobody guesses. Their health calls rest on something solid.
Architecture
The system serves three very different consumers that grow at different speeds. Farmers log all day, managers check dashboards, and the lab pulls data on its own schedule. Splitting it into services meant each part could change and scale without breaking the others, and a failure in analytics could never stop a farmer from logging a feeding. Passing events over a shared bus keeps the services decoupled, so adding a new consumer, like the lab export, never meant touching the core.
Engineering decisions
Separate backends for the dashboard and the mobile app would have been the fast path. I built one REST API instead, so both read and write the same records. A farmer's entry at the pond is exactly what a manager sees. No sync jobs, no drift.
The lab can't analyze free-text notes. Every log is captured as structured fields the moment it enters the app, so data reaches the lab ready for analysis instead of being cleaned up and re-typed at the end.
Logging happens standing over a pond, not at a desk. With the mobile developers I cut every entry down to a few taps, because a flow that takes a minute is a flow farmers will skip.
Outcome
The notebooks stopped being the system of record. Once logging took a few taps at the pond, the data started flowing on its own, and everyone downstream stopped chasing it.
Next project
Real estate · 2023