Technische & operationele architectuur

Hoe Farmso is gebouwd en draait: web- + mobiele clients, de Cloudflare Workers-backend, D1/R2-opslag, Solana-verankering, wachtwoordloze authenticatie, offline synchronisatie en multi-environment-bedrijfsvoering.

Bijgewerkt 2026-07-12 · 8 min

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

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

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.