Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

📚 Documentation CerOps

Ce dossier contient la documentation fonctionnelle et technique du projet CerOps.

Objectif

Centraliser la vision produit, les choix techniques et les règles métier afin de :

  • faciliter le développement
  • aligner l’équipe
  • préparer les livrables (école / pitch / démo)

Structure

  • parcelles.md → gestion des parcelles agricoles
  • agriculteurs.md → gestion des utilisateurs agriculteurs
  • pilotes-drone.md → gestion des pilotes de drone
  • marketplace.md → mise en relation agriculteurs ↔ pilotes
  • imagerie-parcellaire.md → traitement et exploitation des images
  • plan-actions.md → recommandations et suivi d’actions
  • mobile-map-offline.md → fonctionnement mobile + offline
  • api-contrats.md → contrats entre frontend et backend

Règles

  • 1 fichier = 1 domaine
  • Utiliser le template commun
  • Mettre à jour la doc en même temps que le code

🎯 [Nom du module]

Contexte

Décrire le rôle de ce module dans CerOps.

Objectif

Quel problème ce module résout ?

Utilisateurs concernés

  • Agriculteur
  • Pilote de drone
  • Admin
  • Autre ?

Fonctionnalités (User Stories)

  • En tant que …, je veux …, afin de …

Données manipulées

  • Entités
  • Champs importants
  • Relations

API / Interfaces

  • Endpoints concernés
  • Inputs / outputs

Écrans / UX

  • Pages / composants liés
  • Comportements attendus

Cas limites

  • Offline ?
  • Erreurs ?
  • Données manquantes ?

Critères d’acceptation

Dépendances

  • Backend
  • Mobile
  • Drone
  • Autres modules

MVP vs Post-MVP

MVP

Post-MVP

🎯 [Nom du module]

Contexte

Décrire le rôle de ce module dans CerOps.

Objectif

Quel problème ce module résout ?

Utilisateurs concernés

  • Agriculteur
  • Pilote de drone
  • Admin
  • Autre ?

Fonctionnalités (User Stories)

  • En tant que …, je veux …, afin de …

Données manipulées

  • Entités
  • Champs importants
  • Relations

API / Interfaces

  • Endpoints concernés
  • Inputs / outputs

Écrans / UX

  • Pages / composants liés
  • Comportements attendus

Cas limites

  • Offline ?
  • Erreurs ?
  • Données manquantes ?

Critères d’acceptation

Dépendances

  • Backend
  • Mobile
  • Drone
  • Autres modules

MVP vs Post-MVP

MVP

Post-MVP

🎯 [Nom du module]

Contexte

Décrire le rôle de ce module dans CerOps.

Objectif

Quel problème ce module résout ?

Utilisateurs concernés

  • Agriculteur
  • Pilote de drone
  • Admin
  • Autre ?

Fonctionnalités (User Stories)

  • En tant que …, je veux …, afin de …

Données manipulées

  • Entités
  • Champs importants
  • Relations

API / Interfaces

  • Endpoints concernés
  • Inputs / outputs

Écrans / UX

  • Pages / composants liés
  • Comportements attendus

Cas limites

  • Offline ?
  • Erreurs ?
  • Données manquantes ?

Critères d’acceptation

Dépendances

  • Backend
  • Mobile
  • Drone
  • Autres modules

MVP vs Post-MVP

MVP

Post-MVP

🎯 [Nom du module]

Contexte

Décrire le rôle de ce module dans CerOps.

Objectif

Quel problème ce module résout ?

Utilisateurs concernés

  • Agriculteur
  • Pilote de drone
  • Admin
  • Autre ?

Fonctionnalités (User Stories)

  • En tant que …, je veux …, afin de …

Données manipulées

  • Entités
  • Champs importants
  • Relations

API / Interfaces

  • Endpoints concernés
  • Inputs / outputs

Écrans / UX

  • Pages / composants liés
  • Comportements attendus

Cas limites

  • Offline ?
  • Erreurs ?
  • Données manquantes ?

Critères d’acceptation

Dépendances

  • Backend
  • Mobile
  • Drone
  • Autres modules

MVP vs Post-MVP

MVP

Post-MVP

🎯 [Nom du module]

Contexte

Décrire le rôle de ce module dans CerOps.

Objectif

Quel problème ce module résout ?

Utilisateurs concernés

  • Agriculteur
  • Pilote de drone
  • Admin
  • Autre ?

Fonctionnalités (User Stories)

  • En tant que …, je veux …, afin de …

Données manipulées

  • Entités
  • Champs importants
  • Relations

API / Interfaces

  • Endpoints concernés
  • Inputs / outputs

Écrans / UX

  • Pages / composants liés
  • Comportements attendus

Cas limites

  • Offline ?
  • Erreurs ?
  • Données manquantes ?

Critères d’acceptation

Dépendances

  • Backend
  • Mobile
  • Drone
  • Autres modules

MVP vs Post-MVP

MVP

Post-MVP

🎯 [Nom du module]

Contexte

Décrire le rôle de ce module dans CerOps.

Objectif

Quel problème ce module résout ?

Utilisateurs concernés

  • Agriculteur
  • Pilote de drone
  • Admin
  • Autre ?

Fonctionnalités (User Stories)

  • En tant que …, je veux …, afin de …

Données manipulées

  • Entités
  • Champs importants
  • Relations

API / Interfaces

  • Endpoints concernés
  • Inputs / outputs

Écrans / UX

  • Pages / composants liés
  • Comportements attendus

Cas limites

  • Offline ?
  • Erreurs ?
  • Données manquantes ?

Critères d’acceptation

Dépendances

  • Backend
  • Mobile
  • Drone
  • Autres modules

MVP vs Post-MVP

MVP

Post-MVP

🎯 [Nom du module]

Contexte

Décrire le rôle de ce module dans CerOps.

Objectif

Quel problème ce module résout ?

Utilisateurs concernés

  • Agriculteur
  • Pilote de drone
  • Admin
  • Autre ?

Fonctionnalités (User Stories)

  • En tant que …, je veux …, afin de …

Données manipulées

  • Entités
  • Champs importants
  • Relations

API / Interfaces

  • Endpoints concernés
  • Inputs / outputs

Écrans / UX

  • Pages / composants liés
  • Comportements attendus

Cas limites

  • Offline ?
  • Erreurs ?
  • Données manquantes ?

Critères d’acceptation

Dépendances

  • Backend
  • Mobile
  • Drone
  • Autres modules

MVP vs Post-MVP

MVP

Post-MVP

🎯 [Nom du module]

Contexte

Décrire le rôle de ce module dans CerOps.

Objectif

Quel problème ce module résout ?

Utilisateurs concernés

  • Agriculteur
  • Pilote de drone
  • Admin
  • Autre ?

Fonctionnalités (User Stories)

  • En tant que …, je veux …, afin de …

Données manipulées

  • Entités
  • Champs importants
  • Relations

API / Interfaces

  • Endpoints concernés
  • Inputs / outputs

Écrans / UX

  • Pages / composants liés
  • Comportements attendus

Cas limites

  • Offline ?
  • Erreurs ?
  • Données manquantes ?

Critères d’acceptation

Dépendances

  • Backend
  • Mobile
  • Drone
  • Autres modules

MVP vs Post-MVP

MVP

Post-MVP

⚙️ DevOps & Infrastructure

Monorepo

CerOps est organisé en monorepo géré par Turborepo et Bun. Toutes les applications et packages partagés cohabitent dans un seul dépôt Git, ce qui garantit la cohérence des types TypeScript entre le backend et les frontends, et simplifie les déploiements.

Bun est utilisé à la fois comme runtime JavaScript, package manager et outil de compilation (le serveur Fastify est compilé en binaire natif via bun build --compile). Les versions des dépendances partagées sont centralisées dans le workspace catalog pour éviter toute dérive entre packages.

Application mobile Flutter

L’application mobile agriculteurs est développée en Flutter dans un dépôt séparé. Elle n’est pas intégrée au monorepo pour deux raisons principales : l’écosystème Flutter (Dart, pub.dev) est incompatible avec la chaîne d’outils Bun/Node, et les cycles de release mobiles (App Store / Play Store) suivent un rythme indépendant du déploiement web.

L’app communique avec le même backend via les mêmes endpoints ORPC.

Intégration Continue (GitHub Actions)

Quatre workflows couvrent l’ensemble du cycle de qualité :

  • CI (ci.yaml) : build, tests unitaires et lint (Biome, knip, sherif) — déclenché sur chaque PR et push sur main
  • E2E (e2e.yaml) : tests Playwright avec une base PostGIS éphémère — déclenché sur chaque PR
  • PR title (pr-title.yaml) : validation Conventional Commits
  • Docs (docs.yaml) : compilation mdBook — déclenché uniquement si docs/** est modifié

Le cache Turborepo est restauré entre les runs pour ne reconstruire que les packages affectés par la PR.

Conteneurisation (Docker)

Chaque application a son propre Dockerfile multi-stage : le pruning Turborepo extrait uniquement les fichiers nécessaires à l’app ciblée, puis le build produit une image minimale. Le serveur est distribué comme binaire compilé, les frontends Next.js en mode standalone.

Déploiement : Coolify

Coolify est le PaaS self-hosted qui orchestre tous les services. Aujourd’hui, en phase de développement, Coolify effectue lui-même les builds directement depuis le dépôt Git à chaque push sur main.

À terme, cette responsabilité sera transférée à GitHub Actions : un workflow dédié se chargera de builder et publier une image Docker taguée (ex. v1.2.0) sur le registry, et Coolify n’aura plus qu’à déployer cette image prébuilt sur l’environnement cible (production, pré-production, etc.) sans refaire de build. Cette séparation garantit que le même artefact immuable traverse tous les environnements.

Services applicatifs

Les trois applications (server, web-agri, web-pilots) sont chacune un service Coolify distinct pointant sur leur Dockerfile respectif.

Base de données

La base de données est un service PostGIS (PostgreSQL + extension géospatiale) provisionné par Coolify. L’extension PostGIS est utilisée pour les calculs géographiques liés aux zones agricoles et aux missions terrain.

Services annexes

Coolify héberge également :

  • OpenObserve — observabilité unifiée (logs, métriques, traces)
  • RustFS — stockage objet compatible S3 (uploads, livrables de missions)
  • pgAdmin — interface d’administration PostgreSQL
  • mdBook — cette documentation

Architecture de déploiement (actuelle — full dev)

GitHub (push main)
    │
    ▼ webhook + build
Coolify
    ├── server        (API Fastify)
    ├── web-agri      (frontend agriculteurs)
    ├── web-pilots     (frontend pilotes)
    ├── postgis        (base de données)
    ├── openobserve    (observabilité)
    ├── rustfs         (stockage objet)
    ├── pgadmin        (admin BDD)
    └── mdbook         (documentation)

Architecture de déploiement (cible)

GitHub (tag vX.Y.Z)
    │
    ▼ GitHub Actions (build + push image)
Container Registry
    │
    ▼ deploy image
Coolify
    ├── prod       → image :v1.2.0
    ├── preprod    → image :v1.2.0-rc1
    └── ...