Pourquoi ce site est un monorepo Astro
Quand j’ai commencé à esquisser ce site, j’avais déjà en tête plusieurs sous-domaines : un site personnel, un blog, un portfolio, et un espace pour mes expérimentations vidéo et jeu. Plutôt que de dupliquer la configuration, les couleurs et les composants dans quatre projets séparés, j’ai choisi un monorepo.
Un seul jeu de tokens
packages/tokens contient un seul fichier CSS qui définit toutes les couleurs du site à partir de trois variables : une teinte de marque, une saturation, et une teinte neutre. Six palettes et deux thèmes (clair/sombre) en découlent automatiquement, sans qu’aucune app n’ait besoin de redéfinir une seule couleur.
Des composants partagés, pas dupliqués
packages/ui héberge les composants Svelte communs : la navigation, le header, le sélecteur de réglages. Si demain le portfolio a besoin de la même barre de navigation que ce blog, il l’importe, il ne la recopie pas.
Le compromis
Un monorepo a un coût : bun run build à la racine reconstruit tout, même si je n’ai touché qu’une seule app. Turborepo (le turbo.json à la racine) met en cache ce qui n’a pas changé, ce qui rend le compromis largement acceptable pour un site de cette taille.
C’est aussi pour ça que ce blog vit directement sous aifedespaix.com/blog/, et non sur un sous-domaine séparé : tant que le contenu reste simple, mutualiser avec le site principal coûte moins cher que de faire vivre un cinquième projet Astro.