Architektura techniczna i operacyjna

Jak Farmso jest zbudowane i prowadzone: klienci webowi i mobilni, backend Cloudflare Workers, pamięć D1/R2, kotwiczenie Solana, logowanie bez hasła, synchronizacja offline i praca w wielu środowiskach.

Zaktualizowano 2026-07-12 · 8 min

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

Web app
React + TanStack · Cloudflare Pages
Mobile app
Expo / React Native · offline-first · EAS

Edge API

Farmso API — Cloudflare Workers + Hono + Drizzle
Passwordless JWT auth · per-organisation isolation · plan-based feature gating

Data & services

D1
SQLite at the edge
R2
Documents · photos · exports
Solana
pet_did on-chain anchoring
AWS SES
One-time login codes · email
Stripe
Billing · metered AI usage
Queues & Cron
Anchoring · scans · billing jobs

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.