Plan - Découplage Header, Prefooter et Footer via Sanity
Plan - Découplage Header, Prefooter et Footer via Sanity
Plan d'exécution pour gérer le Header, le Prefooter et le Footer via des types de paramètres dédiés dans Sanity CMS (headerSettings, prefooterSettings, footerSettings).
Plan d’exécution — Découplage Header, PreFooter et Footer via Sanity CMS
Date : 2026-10-18
Référence : Demande utilisateur (plan/description.md), ADR-001
Dépôts cibles :
audyssee/amn-studio(Schémas & contenu CMS)audyssee/amn-blog(Présentation Astro SSR)audyssee/amn-docs(Documentation d’architecture)
1. Contexte & Objectifs1/2
Actuellement, les composants globaux du site :
Header.astro(navigation, dropdowns, liens GitHub et Docs)PreFooter.astro(accroche newsletter, 4 colonnes de navigation et statut “Coming soon”)Footer.astro(copyright, liens sociaux GitHub, LinkedIn, RSS)
contiennent leurs textes, libellés et listes de liens en dur dans le balisage Astro.
1. Contexte & Objectifs2/2
Objectif :
Adopter pour le Header, le PreFooter et le Footer le même principe de gestion par singleton que pour blogSettings :
- Définir trois types de paramètres dédiés dans Sanity Studio :
headerSettings,prefooterSettingsetfooterSettings. - Initialiser et publier ces documents dans Sanity avec le contenu existant.
- Centraliser la récupération des réglages dans
MainLayout.astroen une seule requête GROQ SSR combinée pour optimiser les performances. - Injecter les données dynamiques dans les composants de présentation avec des fallbacks robustes.
2. Conception des schémas Sanity (amn-studio)
A. Schéma headerSettings.ts1/3
Document singleton pour la barre de navigation supérieure :
- Marque / Logo :
brandTitle(string, ex:"amn")brandLogo(image optionnelle, pour upload de logo vectoriel/raster)brandLink(string, lien racine par défaut :"/")
A. Schéma headerSettings.ts2/3
- Navigation (
navItems) : Tableau d’éléments de menu :label(string, ex:"Blog","Resources","Community","Enterprise")href(string, optionnel si sous-menu dropdown)dropdownItems(tableau optionnel) :label(string, ex:"Docs","About","Contact us")href(string)isExternal(boolean)badge(string, ex:"Coming soon")
A. Schéma headerSettings.ts3/3
- Actions & Utilitaires :
enableSearch(boolean, activer/désactiver la modale Pagefind)githubUrl(url, lien repo GitHub)
B. Schéma prefooterSettings.ts1/2
Document singleton pour la section pre-footer :
- Section Newsletter (Colonne gauche) :
newsletterTitle(string, ex:"Let's keep in touch")newsletterDescription(text, ex:"Subscribe to our newsletter to receive the latest updates, releases, and technical insights from the AMN platform.")newsletterPlaceholder(string, ex:"your@email.com")newsletterButtonLabel(string, ex:"Subscribe to newsletter")
B. Schéma prefooterSettings.ts2/2
- Colonnes de navigation (Colonnes droites) : Tableau de colonnes (4 par défaut : Resources, About, Community, Legal) :
title(string, ex:"Resources")items(tableau) :label(string, ex:"Docs","Blog","Contact us")href(string, optionnel)isExternal(boolean)note(string optionnel, ex:"Coming soon")
C. Schéma footerSettings.ts
Document singleton pour le pied de page :
- Copyright :
copyrightOwner(string, ex:"Audyssée • AMN Platform")copyrightNotice(string, ex:"All rights reserved.")
- Liens Sociaux (
socialLinks) : Tableau de réseaux sociaux :platform(liste déroulante :github,linkedin,rss,twitter,custom)label(string, ex:"GitHub Audyssée","LinkedIn","Flux RSS")url(string, ex:"https://github.com/audyssee","/rss.xml")
3. Plan d’implémentation par étapes
Étape 1 : Création des schémas dans amn-studio
- Créer
amn-studio/schemaTypes/headerSettings.ts. - Créer
amn-studio/schemaTypes/prefooterSettings.ts. - Créer
amn-studio/schemaTypes/footerSettings.ts. - Mettre à jour
amn-studio/schemaTypes/index.ts.
Étape 2 : Initialisation des données dans Sanity (MCP)
- Via l’outil MCP
create_documentsetpublish_documents, initialiser les 3 documents singleton avec l’intégralité des données actuelles du site. - Garantir la continuité sans aucune régression visuelle ou de contenu.
Étape 3 : Requête GROQ unifiée dans MainLayout.astro1/2
Charger les 3 réglages en un seul appel au niveau du layout racine :
{ "header": *[_type == "headerSettings"][0] { brandTitle, brandLogo { asset->{ url } }, brandLink, navItems[] { label, href, dropdownItems[] { label, href, isExternal, badge } }, enableSearch, githubUrl }, "prefooter": *[_type == "prefooterSettings"][0] { newsletterTitle, newsletterDescription, newsletterPlaceholder, newsletterButtonLabel, columns[] { title, items[] { label, href, isExternal, note } } }, "footer": *[_type == "footerSettings"][0] { copyrightOwner, copyrightNotice, socialLinks[] { platform, label, url } }}Étape 3 : Requête GROQ unifiée dans MainLayout.astro2/2
Et propager aux composants :
<Header {...headerSettings} /><main class="flex-1 w-full"><slot /></main><PreFooter {...prefooterSettings} /><Footer {...footerSettings} />Étape 4 : Adaptation des composants Astro1/2
Header.astro:- Itération dynamique sur
navItemsetdropdownItems. - Affichage dynamique du logo textuel/image et du lien GitHub.
- Itération dynamique sur
PreFooter.astro:- Titre, description, placeholder et bouton de newsletter dynamiques.
- Itération dynamique sur les colonnes de navigation (avec prise en compte des items
note/ “Coming soon”).
Étape 4 : Adaptation des composants Astro2/2
Footer.astro:- Année courante calculée dynamiquement + mention de copyright Sanity.
- Itération dynamique sur la liste des réseaux sociaux avec les icônes SVG correspondantes.
Étape 5 : Validation & Recette
- Vérifier que la modification d’un lien du header, d’un texte du prefooter ou du copyright dans Sanity se répercute instantanément sur l’ensemble des pages du site (
/,/blog,/blog/[slug],/about,/contact). - Vérifier la tolérance aux pannes (fallbacks par défaut si Sanity est inaccessible).
4. Retours utilisateurs & Ajustements Footer Settings1/2
- Logo de la plateforme dans le Footer :
- Ajout du champ
platformLogo(image avec hotspot) dansfooterSettings.ts. - Si une image est téléversée dans Sanity, elle s’affiche avant la mention de copyright
@ {currentYear} ...; sinon, l’icône géométrique vectorielle violette AMN s’affiche par défaut.
- Ajout du champ
4. Retours utilisateurs & Ajustements Footer Settings2/2
- Logos des réseaux sociaux :
- Ajout du champ
icon(image avec hotspot) pour chaque réseau danssocialLinksau sein defooterSettings.ts. - Affichage de la vignette
icondans la prévisualisation Sanity Studio. - Côté Astro, chaque lien social affiche l’image personnalisée de Sanity si téléversée, avec fallback automatique vers les icônes vectorielles officielles (GitHub, LinkedIn, RSS, Twitter/X, Custom).
- Adaptation instantanée au thème sombre : Application d’un filtre CSS (
brightness-0 invert opacity-70 group-hover:opacity-100 transition-opacity) permettant à toute icône téléversée (noire, monochrome ou autre) de s’afficher en gris doux assorti au thème du site et de passer en blanc éclatant au survol.
- Ajout du champ
5. Statut de réalisation
| Composant | Document Sanity | État |
|---|---|---|
| Header (Logo, Navigation dropdowns, Recherche, GitHub) | headerSettings |
✅ Implémenté & Publié dans Sanity |
| PreFooter (Newsletter, 4 colonnes de navigation) | prefooterSettings |
✅ Implémenté & Publié dans Sanity |
| Footer (Logo plateforme, Copyright, Réseaux sociaux & logos) | footerSettings |
✅ Implémenté & Publié dans Sanity |
| Layout racine (Requête GROQ consolidée) | MainLayout.astro |
✅ Intégré & Fonctionnel |