Intégrations externes
LeBoard est conçu pour être isolé des services externes. Il ne parle qu'à la base PostgreSQL partagée et à LeHub (pour authentification et configuration). Aucune appel API à des services tiers.
Dépendances internes au SI
LeHub (configuration et authentification)
LeBoard dépend du Hub pour :
-
Catalogue des plateaux (
WorkshopModel,Lot) — créés et gérés exclusivement par LeHub via/admin/cards/.- LeBoard lit ces données et les utilise pour structurer l'interface (étapes, lots, matrices).
- Les métadonnées du plateau (stageId, matrice cellules, lots) viennent du Hub.
-
Authentification animateur — JWT signé par le Hub avec
BOARD_ADMIN_JWT_SECRET.- Lien « Animer » dans la fiche atelier LeHub redirige vers
board.fresquesystemique.org/b/[token]?admin=<jwt>. - LeBoard valide la signature JWT pour accorder les droits admin.
- Lien « Animer » dans la fiche atelier LeHub redirige vers
-
Identité Workshop — Link bidirectionnel.
- Le Hub crée un atelier (Workshop).
- Hub crée automatiquement une
Board(leBoard crée la ligne en DB). Board.workshopIdréférence l'atelier LeHub (pas de FK, juste textuel).
Fichiers clés :
src/lib/admin-auth.ts— validation JWT admin.app/b/[token]/page.tsx— setup Socket.io, validation JWT.server/socket-handler.ts— gestion état temps réel, broadcast Socket.io.
LeSite (lien public)
LeBoard n'a aucune intégration directe avec LeSite. Cependant :
- L'URL publique du plateau (
board.fresquesystemique.org/b/[token]) est affichée dans la fiche atelier LeSite publique (via l'API LeHub/api/public/workshops). - Le lien ne révèle rien de sensible — c'est juste une URL token sans contexte.
Base PostgreSQL partagée
LeBoard partage la même base que LeHub. Cela signifie :
- Lectures : LeBoard lit
WorkshopModel,Lot,Member(du Hub) pour l'authentification et la configuration. - Écritures : LeBoard crée/modifie
Board,CardPlacement,Connection,StickyNote,BoardArrow,BoardLotDistribution,AnimatorSession. - Migrations : LeBoard gère ses propres migrations (
prisma/migrations/) et les applique au déploiement.
Aucune intégration externe
LeBoard n'appelle aucun service externe :
- ❌ Pas d'API HelloAsso (paiements gérés par LeHub).
- ❌ Pas d'API Telegram (notifications gérées par LeHub).
- ❌ Pas d'API Resend (emails gérés par LeHub).
- ❌ Pas d'API Google Slides (pas utilisé pour le plateau).
- ❌ Pas de webhook sortants.
Comportement en cas d'indisponibilité
LeHub indisponible
Si LeHub est indisponible au moment où un animateur veut animer :
- L'animateur ne peut pas générer le token JWT (ne peut pas clicker le lien « Animer »).
- Les boards existants restent accessibles en lecture/écriture publique (participants peuvent continuer à collaborer).
- Les fonctionnalités admin (distribuer lots, changer étapes) restent actives (pas de validation runtime du Hub, authentification est stateless JWT).
Base PostgreSQL indisponible
- Impossible de charger la page board.
- Socket.io disconnect, participants voient erreur de connexion.
- Aucun fallback — board est entièrement dépendant de la DB.
Architecture déploiement
LeHub (hub.fresquesystemique.org)
├─ API /api/admin/workshops (crée Board)
└─ JWT signing (BOARD_ADMIN_JWT_SECRET shared)
│
▼
PostgreSQL (partagée)
├─ WorkshopModel, Lot (créés par Hub)
└─ Board, CardPlacement, etc. (créés par Board)
│
▼
LeBoard (board.fresquesystemique.org)
├─ Lecture WorkshopModel, Lot, Member
└─ Écriture Board et modèles dérivés
Variables d'environnement (pas de secrets externes)
LeBoard n'a besoin d'aucun secret externe :
DATABASE_URL=postgresql://fresque:password@host:5432/fresquesystemique
NEXT_PUBLIC_SOCKET_URL=http://localhost:3001 # (dev) ou https://board.fresquesystemique.org (prod)
PORT=3000
BOARD_ADMIN_JWT_SECRET=your-secret-here # Partagé avec LeHub
Voir la page Développement pour la liste complète.
Considérations sécurité
Isolation données
- LeBoard ne lit jamais les emails ou données personnelles des participants (pas même depuis
Registration). - LeBoard ne valide pas les inscriptions (= LeHub job).
- LeBoard ne gère pas les paiements (= LeHub job).
Authentification animateur
- Token JWT signé avec secret partagé (BOARD_ADMIN_JWT_SECRET).
- TTL token = 24h (recherchercher depuis le Hub si besoin de renouvellement).
- Aucune validation online auprès du Hub — vérification signature locale seulement.
Accès public sans authentification
- URL board publique = accès complet en lecture/écriture.
- Aucune permission par utilisateur — tous les participants ont les mêmes droits.
- Seul l'animateur (JWT) a les droits admin (stages, lots).
- Pas de rate limit sur les actions publiques (TODO si besoin).