SPEC — Indexeur Pagefind Unifié (Sanity + SSR + Docs)
Cycle : DOC → SPEC → CODE → TEST
Scope : Indexation complète des contenus Sanity (Page d’accueil, Articles de Blog) et Starlight Docs dans Pagefind avec badges de types précis (PAGE,BLOG,DOC).
Destination Spec :docs/PM/phase0-pagefind-sanity-indexer.spec.md
1. Problèmes Identifiés
Section titled “1. Problèmes Identifiés”-
Absence de la Page d’accueil & des Articles de Blog dans les résultats de recherche :
- En mode SSR (
output: "server"), Astro ne pré-génère pas de fichiers HTML statiques dansdist/clientpour les routes serveur (/et/blog/[slug]). - La commande
pagefind --site dist/clientseule ne trouvait donc que la page de documentation statique Starlight (/overview/index.html).
- En mode SSR (
-
Classification erronée des Badges de Type (
PAGEau lieu deDOC) :- La page
/overviewde Starlight recevait le badgePAGEcarSearchModal.astrofallbackait sur'Page'par défaut.
- La page
2. Solutions Techniques (CODE)
Section titled “2. Solutions Techniques (CODE)”2.1 Script d’Indexation Unifié (apps/web/scripts/build-pagefind-index.js)
Section titled “2.1 Script d’Indexation Unifié (apps/web/scripts/build-pagefind-index.js)”Créer un script Node.js exécuté lors du post-build (node scripts/build-pagefind-index.js) qui :
- Crée un index Pagefind via
createIndex(). - Indexe le répertoire
dist/client(inclut la documentation Starlight). - Interroge Sanity API avec les clés d’API
.envpour récupérer :- La Page d’accueil Sanity (
*[_type == "page" && slug.current == "/"][0]) -> ajoute un enregistrementaddCustomRecordavecurl: '/',filters: { type: ['Page'] }. - Tous les articles Sanity (
*[_type == "post"]) -> ajoute un enregistrementaddCustomRecordpour chaque article avecurl: '/blog/${slug}/',filters: { type: ['Blog'] }.
- La Page d’accueil Sanity (
- Écrit l’index consolidé dans
dist/client/pagefind.
2.2 Classification des Badges dans SearchModal.astro
Section titled “2.2 Classification des Badges dans SearchModal.astro”Mettre à jour la fonction d’affichage des badges dans SearchModal.astro :
- Si
filters.type=BlogOUurlcommence par/blog/-> BadgeBLOG(style bleu). - Si
filters.type=DocOUurlcommence par/overview/ou/docs/-> BadgeDOC(style violet/indigo). - Si
filters.type=PageOUurl=/-> BadgePAGE(style vert/émeraude).
3. Matrice de Validation & Critères d’Acceptation (TEST)
Section titled “3. Matrice de Validation & Critères d’Acceptation (TEST)”- Recherche Page d’accueil : Chercher un mot présent sur la page d’accueil (ex:
"Welcome to Our Site","Google Cloud","AWS") retourne le résultat/avec le badgePAGE. - Recherche Article de Blog : Chercher un mot présent dans un article Sanity (ex:
"OCI","Premier Article","Jean Dupont") retourne l’article/blog/<slug>/avec le badgeBLOG. - Recherche Doc Starlight : Chercher un mot présent dans la doc Starlight (ex:
"Documentation AMN","Cloudflare") retourne/overview/avec le badgeDOC(et NONPAGE). - Build & Typecheck :
npx pnpm builds’exécute sans erreur etnpx pnpm typecheckdonne 0 erreurs.