Décisions
ADR 007 : Instances en marque blanche
Statut
Accepté (24/10/2026)
Contexte
La vitrine doit pouvoir être déclinée : Paris-Saclay d'abord, puis une Graduate School, un établissement partenaire, ou un autre membre de la communauté CRISalid. Le code ne doit pas contenir « Paris-Saclay ».
Décision
- Une instance =
instances/<id>/research.config.ts+ ses logos danspublic/brand/<id>/. Le fichier est validé par Zod (src/config/schema.ts) au chargement : une configuration invalide fait échouer le build. - L'instance active est choisie au build par
NEXT_PUBLIC_RESEARCH_INSTANCE(registresrc/config/index.ts).scripts/instance.mjsfixe la variable, un dossier de build par instance (.next-<id>) et un port (3000, 3010). - Le thème Mantine est calculé depuis 4 couleurs de base (
brand.colors) :colorScale()produit les 10 nuances. Les composants n'utilisent que les noms génériquesbrand,accent,ink. - Un seul dépôt et une seule application tant que les instances partagent tout le code. Le découpage
packages/core,packages/ui,apps/<instance>attendra un besoin réel de divergence (pages éditoriales propres, déploiements séparés). - Deuxième instance de démonstration : Université Paris 1 Panthéon-Sorbonne, pionnière de CRISalid et de profil SHS, pour éprouver la configuration sur un établissement opposé à Saclay.
Conséquences
- Ajouter une instance prend une configuration et un logo ; le rapport
pnpm data:probe --instance <id>dit aussitôt ce que les sources savent du périmètre. - Les variables
NEXT_PUBLIC_*étant inlinées, une image Docker par instance. - Les deux registres d'instances (
src/config/index.tsetPORTSdansscripts/instance.mjs) doivent rester alignés. - La charte de l'instance Paris 1 est une maquette : à remplacer par la charte officielle avant toute présentation publique.