← All projects

Web · Mobile · API · UI/UX

VetRota

An offline-first field management platform for traveling vets in rural areas.

VetRota home page
Role
Solo build: backend, web, mobile, UI/UX, brand
Field
Veterinary
Type
Web panel + mobile app
Code
github.com/mevocan/vetRota ↗
Site
vetrota.com.tr ↗

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.

Technologies

  • Laravel 13
  • PostgreSQL
  • Nuxt 4
  • Flutter
  • Drift
  • Docker
↑