Architecture technique & opérationnelle

Comment Farmso est construit et exploité : clients web + mobile, backend Cloudflare Workers, stockage D1/R2, ancrage Solana, authentification sans mot de passe, synchronisation hors ligne et opérations multi-environnements.

Mis à jour 2026-07-12 · 8 min

Farmso est une plateforme moderne, edge-native. Les clients sont légers et rapides ; la logique et les données vivent sur le réseau mondial de Cloudflare ; et les dossiers critiques pour la confiance peuvent être ancrés sur une blockchain publique. Cette page explique la conception technique et la manière dont la plateforme est exploitée.

Vue d’ensemble du système

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

Les composants

Application web

React + TanStack Router/Query, construite avec rsbuild/Vite, déployée sur Cloudflare Pages. Le back-office : tableaux de bord, conformité, facturation, analyses.

Application mobile

Expo / React Native (offline-first), livrée via EAS sur iOS et Android. Capture appareil photo + EID Bluetooth + NFC, avec une boîte d’envoi locale qui se synchronise.

Backend (cf-back)

Cloudflare Workers + Hono + Drizzle ORM. Une API unique pour le web et le mobile, avec isolation par organisation à chaque requête et contrôle des fonctionnalités selon le forfait.

Base de données — D1

Cloudflare D1 (SQLite en périphérie). Migrations versionnées ; bases de données dev, staging et prod distinctes.

Fichiers — R2

Stockage objet Cloudflare R2 pour les documents, photos d’inspection, étiquettes et exports.

On-chain — Solana

Le programme Anchor pet_did déployé ancre une empreinte du dossier de chaque animal ; Farmso gère les clés pour que les utilisateurs ne touchent jamais aux portefeuilles.

Authentification & multi-tenance

La connexion est sans mot de passe : AWS SES envoie par e-mail un code à usage unique, et en cas de succès le backend émet son propre JWT signé (aucun fournisseur d’identité tiers). Chaque requête porte le jeton ainsi que l’organisation active, et l’API restreint toutes les données à cette organisation — un tenant ne peut jamais voir les dossiers d’un autre. L’accès aux fonctionnalités est contrôlé par le forfait d’abonnement de l’organisation, vérifié côté serveur, si bien que la même règle s’applique qu’une requête provienne du web ou du mobile.

Synchronisation offline-first

L’application mobile est conçue pour les endroits sans réseau. Les lectures sont servies depuis un cache local ; les écritures (enregistrer un animal, consigner un traitement, un scan, une inspection) sont placées dans une boîte d’envoi locale et renvoyées comme « queued ». Au retour de la connectivité, la boîte d’envoi se vide automatiquement — les scans sont rejoués en un seul lot idempotent afin que rien ne soit dupliqué, et les conflits éventuels sont signalés plutôt que silencieusement abandonnés. Vous pouvez suivre et gérer cela dans l’écran Pending Changes de l’application.

Opérations

Farmso exécute trois environnements isolés — développement, staging et production — chacun avec sa propre base de données, son bucket de stockage et son hôte API (la production est api.farmso.org). Le code passe par des pull requests vers staging puis vers la branche main. Les travaux en arrière-plan (ancrage blockchain, analyses d’anomalies nocturnes, facturation mensuelle de l’usage IA, expiration des certifications) s’exécutent sur Cloudflare Queues et des déclencheurs cron planifiés. La facturation et l’usage IA mesuré sont gérés via Stripe.

Posture de sécurité : JWT signés, isolation stricte des données par organisation, application des forfaits côté serveur, transport chiffré (HTTPS) partout, et preuve d’inviolabilité optionnelle sur blockchain publique pour les dossiers les plus importants.