Structure du projet
Explainer v2 est organisé sous forme de workspace pnpm géré par Turborepo. Voici la structure de premier niveau :
explainer-v2/
├── apps/
│ ├── docs/ # Site de documentation (Astro)
│ ├── blog/ # Blog (Astro)
│ └── website/ # Page d'accueil (Astro)
├── packages/
│ ├── ui/ # Composants React UI partagés
│ ├── mdx/ # Composants MDX & plugins remark
│ └── thumbnail/ # Génération de miniatures OG
├── .github/workflows/ # Workflows CI/CD de déploiement
├── Dockerfile # Build Docker multi-étapes
├── nginx.conf # Configuration Nginx
├── turbo.json # Configuration du pipeline Turborepo
├── pnpm-workspace.yaml
└── .env # Variables d'environnement
Applications
| Application | Port | Nom du package | Objectif |
|---|---|---|---|
apps/docs | 4321 | @explainer/docs | Site de documentation principal avec support multi-projets, versionnement et i18n |
apps/blog | 4322 | @explainer/blog | Blog avec articles, tags, flux RSS et temps de lecture |
apps/website | 4323 | @explainer/website | Page marketing |
Chaque application est un projet Astro indépendant qui peut être construit et déployé séparément.
Packages
| Package | Nom | Objectif | Utilisé par |
|---|---|---|---|
packages/ui | @explainer/ui | Button, Card, Navbar, ThemeToggle, Dropdown, MobileMenu, LocaleSwitcher | Toutes les applications |
packages/mdx | @explainer/mdx | Surcharges de composants MDX, Callout, Steps, Tabs, CodeGroup, Preview, plugins remark, configuration Shiki | Docs, Blog |
packages/thumbnail | @explainer/thumbnail | Génération d’images OG avec Satori + Resvg | Docs, Blog, Website |
Workspaces
Le monorepo est défini dans pnpm-workspace.yaml :
packages:
- 'apps/*'
- 'packages/*'Turborepo gère l’orchestration des tâches. La configuration turbo.json garantit que les packages sont construits avant les applications qui en dépendent :
{
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
},
"dev": {
"cache": false,
"persistent": true
},
"lint": {}
}
}Variables d’environnement
Le fichier .env à la racine configure les URLs de navigation entre applications :
| Variable | Valeur par défaut | Description |
|---|---|---|
PUBLIC_WEBSITE_URL | http://localhost:4323 | URL de l’application Website |
PUBLIC_DOCS_URL | http://localhost:4321 | URL de l’application Docs |
PUBLIC_BLOG_URL | http://localhost:4322 | URL de l’application Blog |
Ces variables sont utilisées par la barre de navigation partagée pour lier les applications entre elles. En production, définissez-les avec vos domaines déployés (par exemple, https://explainer.dev, https://docs.explainer.dev).