Skip to content

Type de ressource : Configuration Framework Astro
Fichier source : apps/web/astro.config.mjs
Statut : Actif

Configuration principale d’Astro pour le site web. Configure le mode de rendu SSR, l’adaptateur Cloudflare, et les intĂ©grations (Sanity, Starlight, MDX, Sitemap, Tailwind).

  • Configurer le mode de rendu SSR (Server-Side Rendering) pour l’application
  • IntĂ©grer l’adaptateur Cloudflare pour le dĂ©ploiement sur Cloudflare Workers
  • Configurer les intĂ©grations principales (Sanity CMS, Starlight, MDX, Sitemap)
  • Configurer Tailwind CSS via Vite plugin
  • Mode de rendu : Hybrid (static par dĂ©faut, SSR Ă  la demande via prerender = false)
  • Adaptateur : Cloudflare
  • IntĂ©grations actives : Sanity, Starlight, MDX, Sitemap, Tailwind CSS
  • Environnements : Development, Production
astro.config.mjs
export default defineConfig({
output: 'server', // Hybrid : static par défaut, SSR à la demande via prerender = false
session: false,
});

Rationale : Le mode server avec l’adaptateur Cloudflare permet le rendu hybride : les pages sont prĂ©-rendues en static par dĂ©faut (prerender = true), et le rendu dynamique (SSR) est activĂ© Ă  la demande via export const prerender = false sur les pages spĂ©cifiques. session: false indique que l’application n’utilise pas le systĂšme de sessions d’Astro.

import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
adapter: cloudflare({
imageService: 'passthrough',
prerenderEnvironment: 'node',
}),
});

Rationale : L’adaptateur Cloudflare est nĂ©cessaire pour dĂ©ployer l’application SSR sur Cloudflare Workers. imageService: 'passthrough' indique que le service d’images est configurĂ© sĂ©parĂ©ment. prerenderEnvironment: 'node' permet le prerendering en environnement Node pendant le build.

Variable Description Obligatoire Valeur par défaut
SANITY_PROJECT_ID ID du projet Sanity ✅ -
SANITY_DATASET Nom du dataset ✅ -
SANITY_API_READ_TOKEN Token de lecture (preview) ✅ (en preview) -
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({
vite: {
plugins: [
tailwindcss(),
],
},
});

Configuration :

  • Fichier : tailwind.config.mjs (Ă  vĂ©rifier)
  • ThĂšme personnalisĂ© : Non configurĂ© (defaults Tailwind)
  • Design tokens : Non configurĂ©
import sanity from '@sanity/astro';
export default defineConfig({
integrations: [
sanity({
projectId: process.env.SANITY_PROJECT_ID,
dataset: process.env.SANITY_DATASET,
}),
],
});

Rationale : L’intĂ©gration Sanity permet de connecter le frontend Astro au CMS Sanity. Le client Sanity sera reconfigurĂ© dynamiquement dans src/lib/sanity.ts pour supporter le mode preview (useCdn: false, perspective: previewDrafts).

import starlight from '@astrojs/starlight';
export default defineConfig({
integrations: [
starlight({
title: 'Documentation',
sidebar: [],
}),
],
});

Configuration :

  • Route interceptĂ©e : Non configurĂ©e (sidebar vide)
  • Source de contenu : src/content/docs/ (Ă  vĂ©rifier)
  • ThĂšme personnalisĂ© : Non configurĂ©
import mdx from '@astrojs/mdx';
export default defineConfig({
integrations: [
mdx(),
],
});

Rationale : L’intĂ©gration MDX permet d’utiliser le format MDX (Markdown + JSX) dans les fichiers de contenu.

import sitemap from '@astrojs/sitemap';
export default defineConfig({
integrations: [
sitemap(),
],
});

Rationale : L’intĂ©gration Sitemap gĂ©nĂšre automatiquement un sitemap.xml pour le SEO.

Intégration RÎle Configuration
Pagefind Recherche (non configuré) Non intégré
React Composants React (non configuré) Non intégré
// package.json (apps/web/package.json)
{
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
}
}

Non documenté - le déploiement est automatique via GitHub Actions (selon rÚgles globales).

Variable Description Obligatoire
SANITY_PROJECT_ID ID du projet Sanity ✅
SANITY_DATASET Nom du dataset ✅
SANITY_API_READ_TOKEN Token de lecture ✅
src/lib/sanity.ts
export function getSanityClient(isPreview: boolean = false) {
return createClient({
projectId,
dataset,
apiVersion: '2026-09-06',
useCdn: !isPreview,
perspective: isPreview ? 'previewDrafts' : 'published',
token: isPreview ? readToken : undefined,
});
}
  • ✅ Le mode Preview utilise useCdn: false et perspective: 'previewDrafts'
  • ✅ Le token SANITY_API_READ_TOKEN est uniquement disponible en runtime
  • ✅ La documentation Starlight n’est pas concernĂ©e par ce mĂ©canisme
  • ✅ Les routes /api/preview et /api/exit-preview gĂšrent le cookie de preview

Non documentĂ© - la stratĂ©gie de cache n’est pas explicitement configurĂ©e dans l’implĂ©mentation actuelle.

Non implémenté - les headers Cache-Control ne sont pas explicitement configurés dans les pages.

Implémenté pour le Studio - sanity-typegen est configuré dans apps/studio/sanity.cli.ts pour générer automatiquement les types TypeScript depuis les schémas Sanity.

Configuration :

  • Schema extraction : activĂ© via schemaExtraction.enabled: true
  • Typegen : activĂ© via typegen.enabled: true
  • Fichier de schĂ©ma gĂ©nĂ©rĂ© : apps/studio/schema.json
  • Fichier de types gĂ©nĂ©rĂ© : apps/studio/sanity.types.ts

Note : Sanity TypeGen est configurĂ© pour le Studio, pas pour le web app. Le web app n’utilise pas directement les types gĂ©nĂ©rĂ©s.

Terminal window
# Génération du schéma Sanity
cd apps/studio
npx sanity schema extract
# Génération des types Sanity
cd apps/studio
npx sanity typegen generate

À implĂ©menter - la gĂ©nĂ©ration du schĂ©ma et des types doit ĂȘtre intĂ©grĂ©e dans le pipeline CI/CD du Studio avant le build.

Non documentĂ© - aucune stratĂ©gie d’hydratation d’ülots n’est explicitement configurĂ©e.

  • ✅ L’adaptateur Cloudflare utilise imageService: 'passthrough'
  • ✅ Cloudflare Images peut optimiser les images automatiquement

Non documentĂ© - aucun objectif spĂ©cifique de Core Web Vitals n’est configurĂ©.

Non documentĂ© - les en-tĂȘtes de sĂ©curitĂ© ne sont pas explicitement configurĂ©s dans cette configuration.

  • ✅ Les variables d’environnement sont chargĂ©es depuis .env Ă  la racine du monorepo
  • ✅ Les secrets ne sont pas exposĂ©s dans le code
  • ✅ Le token Sanity est utilisĂ© uniquement en mode preview
SymptĂŽme Cause probable Solution
Build Ă©choue Sanity API inaccessible VĂ©rifier les variables d’environnement
Preview ne fonctionne pas Cookie non détecté Vérifier les routes /api/preview et /api/exit-preview
Images non optimisĂ©es imageService: ‘passthrough’ Configurer le service d’images Cloudflare
Starlight vide Sidebar non configurée Configurer la sidebar dans starlight
Terminal window
# Logs de build
npm run build
# Logs de développement
npm run dev
# Logs Cloudflare (production)
wrangler tail
Terminal window
# Test local
npm run dev
# Test de build
npm run build
npm run preview
# Vérification des types
npx astro check
  • ✅ Utiliser le mode server pour le SSR
  • ✅ Configurer l’adaptateur Cloudflare pour l’alignement L3
  • ✅ Centraliser la configuration du client Sanity dans src/lib/sanity.ts
  • ✅ Documenter les changements de configuration dans ce fichier
  • ✅ Charger les variables d’environnement depuis .env Ă  la racine
  • ✅ Utiliser dotenv pour le dĂ©veloppement local
  • ✅ Valider les types TypeScript avant chaque commit
  • ✅ VĂ©rifier les Core Web Vitals avec Lighthouse
  • ✅ Utiliser GitHub Actions pour le dĂ©ploiement automatique
  • ✅ VĂ©rifier les variables d’environnement dans l’hĂ©bergeur
  • ✅ Tester le mode Preview en staging avant production
  • ✅ Surveiller les erreurs 5xx aprĂšs dĂ©ploiement
  • Configuration de la stratĂ©gie de cache par type de page
  • Configuration des en-tĂȘtes de sĂ©curitĂ©
  • Configuration de Starlight avec sidebar
  • IntĂ©gration CI/CD pour la gĂ©nĂ©ration du schĂ©ma et des types Sanity
  • ❌ La stratĂ©gie de cache n’est pas explicitement configurĂ©e
  • ❌ Starlight n’est pas configurĂ© (sidebar vide)
  • ❌ L’intĂ©gration CI/CD pour sanity-typegen n’est pas encore configurĂ©e
Date Version Description Auteur
2026-09-15 1.0 Création initiale Devin
Edit page

Last updated: