Web · Mobile · API · UI/UX
VetRota
An offline-first field management platform for traveling vets in rural areas.
Project
VetRota is a field management platform I built for traveling vets who visit 10-15 villages a day. It works without internet in the village; when a connection returns, data syncs with the server.
Problem
There is no internet in barns and mountain villages. Vets write down which animal got what in a notebook and re-enter it at the computer in the evening; cloud-based clinic software is useless in the field.
Architecture decisions
- Offline-first: on mobile every write goes to the local database (Drift) first, then lands in the sync queue. IDs are generated on the client.
- I designed sync as a separate push/pull protocol: cursor-based delta pull, single-transaction push, idempotency.
- On conflicts the client wins (last-write-wins); ledger tables like stock and payments are never overwritten, their movements are summed.
- Route: the day's appointments are ordered on the device with nearest-neighbor and Haversine distance. For 10-15 stops a full TSP solver or a maps API would be needless complexity; since the computation runs on the device, it works offline too.
- Three surfaces, one API: the Flutter mobile app, the Nuxt clinic panel and a passwordless farmer portal opened from an SMS link.
Result and limits
A working platform built with Laravel, Nuxt and Flutter: appointments, examinations, photos, stock and debt/payments sync between device and server. Honest notes: SMS is simulated with a log driver for now, the route uses straight-line distance rather than the road network, and the scenario where two devices edit the same record offline has not been tested on a device yet. All of it is in the repo and its README.