Farmso is een modern, edge-native platform. De clients zijn licht en snel; de logica en data leven op het wereldwijde netwerk van Cloudflare; en vertrouwenskritische dossiers kunnen op een publieke blockchain worden verankerd. Deze pagina legt het technische ontwerp uit en hoe het platform wordt beheerd.
Systeemoverzicht
Clients
Edge API
Data & services
De onderdelen
Web-app
React + TanStack Router/Query, gebouwd met rsbuild/Vite, uitgerold naar Cloudflare Pages. De back-office: dashboards, naleving, facturatie, analyses.
Mobiele app
Expo / React Native (offline-first), geleverd via EAS naar iOS en Android. Vastleggen met camera + Bluetooth-EID + NFC, met een lokale outbox die synchroniseert.
Backend (cf-back)
Cloudflare Workers + Hono + Drizzle ORM. Eén API voor web en mobiel, met organisatie-isolatie per verzoek en functietoegang op basis van het abonnement.
Database — D1
Cloudflare D1 (SQLite aan de edge). Geversioneerde migraties; aparte databases voor dev, staging en prod.
Bestanden — R2
Cloudflare R2-objectopslag voor documenten, inspectiefoto’s, labels en exports.
On-chain — Solana
Het uitgerolde pet_did Anchor-programma verankert een hash van het dossier van elk dier; Farmso beheert de sleutels zodat gebruikers nooit wallets aanraken.
Authenticatie & tenancy
Inloggen is wachtwoordloos: AWS SES mailt een eenmalige code, en bij succes geeft de backend zijn eigen ondertekende JWT uit (geen externe identity provider). Elk verzoek draagt het token plus de actieve organisatie, en de API beperkt alle data tot die organisatie — de ene tenant kan nooit de dossiers van een andere zien. Functietoegang wordt bepaald door het abonnement van de organisatie, aan de serverkant gecontroleerd, zodat dezelfde regel geldt of een verzoek nu van de web- of de mobiele app komt.
Offline-first synchronisatie
De mobiele app is gebouwd voor plekken zonder bereik. Leesbewerkingen worden geserveerd vanuit een cache op het apparaat; schrijfbewerkingen (een dier registreren, een behandeling vastleggen, een scan, een inspectie) worden in een lokale outbox geplaatst en teruggegeven als “in wachtrij”. Zodra er weer verbinding is, wordt de outbox automatisch geleegd — scans worden opnieuw afgespeeld als één idempotente batch zodat niets wordt gedupliceerd, en eventuele conflicten worden getoond in plaats van stilzwijgend weggegooid. Je kunt dit volgen en beheren in het scherm Wachtende wijzigingen van de app.
Bedrijfsvoering
Farmso draait drie geïsoleerde omgevingen — ontwikkeling, staging en productie — elk met een eigen database, opslagbucket en API-host (productie is api.farmso.org). Code stroomt via pull requests naar staging en dan naar de main-branch. Achtergrondwerk (blockchain-verankering, nachtelijke anomaliescans, maandelijkse AI-verbruiksfacturatie, verval van certificeringen) draait op Cloudflare Queues en geplande cron-triggers. Facturatie en gemeten AI-verbruik worden via Stripe afgehandeld.
Beveiligingshouding: ondertekende JWT’s, strikte data-isolatie per organisatie, afdwinging van abonnementen aan de serverkant, versleuteld transport (HTTPS) overal, en optionele manipulatiebestendigheid via publieke blockchain voor de dossiers die er het meest toe doen.