Farmso è una piattaforma moderna, nativa dell’edge. I client sono leggeri e veloci; la logica e i dati vivono sulla rete globale di Cloudflare; e i record critici per la fiducia possono essere ancorati su una blockchain pubblica. Questa pagina spiega il progetto tecnico e come viene gestita la piattaforma.
Panoramica del sistema
Clients
Edge API
Data & services
I componenti
Web app
React + TanStack Router/Query, costruita con rsbuild/Vite, distribuita su Cloudflare Pages. Il back-office: dashboard, conformità, fatturazione, analisi.
App mobile
Expo / React Native (offline-first), distribuita tramite EAS su iOS e Android. Acquisizione con fotocamera + EID Bluetooth + NFC, con una outbox locale che si sincronizza.
Backend (cf-back)
Cloudflare Workers + Hono + Drizzle ORM. Un’unica API per web e mobile, con isolamento per organizzazione a ogni richiesta e gating delle funzionalità in base al piano.
Database — D1
Cloudflare D1 (SQLite all’edge). Migrazioni versionate; database separati per dev, staging e prod.
File — R2
Storage a oggetti Cloudflare R2 per documenti, foto delle ispezioni, etichette ed esportazioni.
On-chain — Solana
Il programma Anchor pet_did già distribuito ancora un hash del record di ogni animale; Farmso gestisce le chiavi così gli utenti non toccano mai i wallet.
Autenticazione e multi-tenancy
L’accesso è senza password: AWS SES invia via email un codice monouso e, in caso di successo, il backend emette il proprio JWT firmato (nessun provider di identità di terze parti). Ogni richiesta porta con sé il token più l’organizzazione attiva, e l’API limita tutti i dati a quell’organizzazione — un tenant non può mai vedere i record di un altro. L’accesso alle funzionalità è vincolato al piano di abbonamento dell’organizzazione, verificato sul server, così la stessa regola vale sia che una richiesta arrivi dal web sia dall’app mobile.
Sincronizzazione offline-first
L’app mobile è costruita per i luoghi senza segnale. Le letture sono servite da una cache sul dispositivo; le scritture (registrare un animale, annotare un trattamento, una scansione, un’ispezione) vengono collocate in una outbox locale e restituite come “in coda”. Quando la connettività ritorna, la outbox si svuota automaticamente — le scansioni vengono ripetute come un unico batch idempotente così nulla viene duplicato, e gli eventuali conflitti vengono segnalati anziché scartati silenziosamente. Puoi osservarlo e gestirlo nella schermata Pending Changes dell’app.
Operazioni
Farmso esegue tre ambienti isolati — sviluppo, staging e produzione — ciascuno con il proprio database, bucket di storage e host API (la produzione è api.farmso.org). Il codice attraversa le pull request verso staging e poi verso il ramo main. Il lavoro in background (ancoraggio blockchain, scansioni notturne delle anomalie, fatturazione mensile dell’uso AI, scadenza delle certificazioni) gira su Cloudflare Queues e trigger cron programmati. La fatturazione e l’uso AI a consumo sono gestiti tramite Stripe.
Postura di sicurezza: JWT firmati, rigoroso isolamento dei dati per organizzazione, applicazione del piano lato server, trasporto cifrato (HTTPS) ovunque e prova opzionale di non manomissione su blockchain pubblica per i record più importanti.