Farmso to nowoczesna platforma natywna dla brzegu sieci. Klienci są lekcy i szybcy; logika i dane żyją w globalnej sieci Cloudflare; a zapisy krytyczne dla zaufania można zakotwiczyć w publicznym łańcuchu bloków. Ta strona wyjaśnia projekt techniczny oraz sposób prowadzenia platformy.
Przegląd systemu
Clients
Edge API
Data & services
Elementy składowe
Aplikacja webowa
React + TanStack Router/Query, budowana z rsbuild/Vite, wdrażana na Cloudflare Pages. Zaplecze: pulpity, zgodność, fakturowanie, analityka.
Aplikacja mobilna
Expo / React Native (offline-first), dostarczana przez EAS na iOS i Android. Przechwytywanie aparatem + EID Bluetooth + NFC, z lokalną skrzynką nadawczą, która się synchronizuje.
Backend (cf-back)
Cloudflare Workers + Hono + Drizzle ORM. Jedno API dla sieci i urządzeń mobilnych, z izolacją organizacji na poziomie żądania i bramkowaniem funkcji według planu.
Baza danych — D1
Cloudflare D1 (SQLite na brzegu sieci). Wersjonowane migracje; osobne bazy dev, staging i prod.
Pliki — R2
Pamięć obiektowa Cloudflare R2 na dokumenty, zdjęcia kontroli, etykiety i eksporty.
W łańcuchu — Solana
Wdrożony program pet_did (Anchor) kotwiczy skrót zapisu każdego zwierzęcia; Farmso zarządza kluczami, więc użytkownicy nigdy nie dotykają portfeli.
Uwierzytelnianie i wielodostępność
Logowanie odbywa się bez hasła: AWS SES wysyła e-mailem jednorazowy kod, a po powodzeniu backend wystawia własny podpisany token JWT (bez zewnętrznego dostawcy tożsamości). Każde żądanie niesie token oraz aktywną organizację, a API ogranicza wszystkie dane do tej organizacji — jeden najemca nigdy nie zobaczy zapisów innego. Dostęp do funkcji jest bramkowany subskrypcją organizacji, sprawdzaną na serwerze, więc ta sama reguła obowiązuje niezależnie od tego, czy żądanie pochodzi z sieci, czy z aplikacji mobilnej.
Synchronizacja offline-first
Aplikacja mobilna została stworzona dla miejsc bez zasięgu. Odczyty są obsługiwane z pamięci podręcznej urządzenia; zapisy (rejestracja zwierzęcia, leczenie, skan, kontrola) trafiają do lokalnej skrzynki nadawczej i są zwracane jako „w kolejce”. Gdy łączność wróci, skrzynka opróżnia się automatycznie — skany są odtwarzane jako jedna idempotentna partia, więc nic się nie dubluje, a wszelkie konflikty są ujawniane, a nie po cichu porzucane. Możesz to obserwować i tym zarządzać na ekranie Pending Changes w aplikacji.
Operacje
Farmso działa w trzech odizolowanych środowiskach — deweloperskim, staging i produkcyjnym — każde z własną bazą danych, koszykiem pamięci i hostem API (produkcja to api.farmso.org). Kod przepływa przez pull requesty do staging, a następnie do gałęzi main. Zadania w tle (kotwiczenie w łańcuchu bloków, nocne skany anomalii, comiesięczne rozliczenie zużycia AI, wygasanie certyfikacji) działają na Cloudflare Queues i zaplanowanych wyzwalaczach cron. Rozliczenia i mierzone zużycie AI obsługiwane są przez Stripe.
Postawa bezpieczeństwa: podpisane tokeny JWT, ścisła izolacja danych na organizację, egzekwowanie planu po stronie serwera, szyfrowany transport (HTTPS) wszędzie oraz opcjonalny publiczny dowód braku manipulacji w łańcuchu bloków dla zapisów, które liczą się najbardziej.