Web · Mobil · API · UI/UX
VetRota
Kırsalda çalışan gezici veterinerler için offline-first saha yönetim platformu.
Proje
VetRota, gün içinde 10-15 köyü dolaşan gezici veterinerler için geliştirdiğim bir saha yönetim platformu. Köyde internet olmasa da çalışır; bağlantı gelince veriler sunucuyla senkronize olur.
Sorun
Ahırlarda ve dağ köylerinde internet çekmiyor. Veterinerler hangi hayvana ne verdiğini deftere yazıp akşam bilgisayara geçiriyor; bulut tabanlı klinik yazılımları sahada işe yaramıyor.
Mimari kararlar
- Offline-first: mobilde her yazma önce yerel veritabanına (Drift) gider, sonra senkron kuyruğuna düşer. ID'ler istemcide üretilir.
- Senkronizasyonu ayrı bir push/pull protokolü olarak tasarladım: cursor tabanlı delta pull, tek transaction'lı push, idempotency.
- Çakışmada client kazanır (last-write-wins); stok ve ödeme gibi ledger tabloları ezilmez, hareketler toplanır.
- Rota: günün randevuları cihazda nearest-neighbor ve Haversine mesafesiyle sıralanıyor. 10-15 durak için tam TSP çözücü ya da harita API'si gereksiz karmaşıklık olurdu; hesap cihazda yapıldığı için internetsiz de çalışıyor.
- Üç yüzey, tek API: Flutter mobil uygulaması, Nuxt klinik paneli ve SMS linkiyle açılan şifresiz çiftçi portalı.
Sonuç ve sınırlar
Laravel, Nuxt ve Flutter'dan oluşan çalışan bir platform: randevu, muayene, fotoğraf, stok ve borç/ödeme cihaz ile sunucu arasında senkronize oluyor. Dürüst notlar: SMS şimdilik log sürücüsüyle simüle, rota yol ağını değil kuş uçuşu mesafeyi kullanıyor ve iki cihazın aynı kaydı çevrimdışı değiştirdiği çakışma senaryosu henüz cihazda test edilmedi. Tümü repoda ve README'de yazılı.