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 dans public/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 (registre src/config/index.ts). scripts/instance.mjs fixe 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ériques brand, 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.ts et PORTS dans scripts/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.