Ordre de Priorité des Slices (Tranches Verticales) - Phase 0
Ordre de Priorité des Slices (Tranches Verticales) - Phase 0
Documentation technique
Date : 2026-09-04
Projet : Réarchitecture du Site Web (Vitrine, Blog, Portfolio, Documentation)
Version : 1.0
1. Principes d’ordonnancement
L’ordre des slices respecte les principes suivants :
- Dépendances techniques : Un slice ne peut commencer que si ses prérequis techniques sont implémentés
- Golden Path优先 : Les composants du parcours minimal viable sont priorisés
- Valeur business incrémentale : Chaque slice doit livrer une fonctionnalité utilisable par l’utilisateur
- Complexité croissante : Commencer par les flux simples, puis aborder les flux complexes
2. Ordre validé des 8 Slices1/2
| Ordre | Slice (Tranche Verticale) | Priorité Golden Path | Complexité | Dépendances principales |
|---|---|---|---|---|
| 1 | Schéma Sanity “page” (vitrine) | ✅ Critique | Faible | Infrastructure de base |
| 2 | Schéma Sanity “post” (blog) | ✅ Critique | Moyenne | Slice 1 |
| 3 | Schéma Sanity “project” (portfolio) | ❌ Hors GP | Moyenne | Slice 1 |
| 4 | Formulaire de contact | ❌ Hors GP | Moyenne | Slice 1 |
2. Ordre validé des 8 Slices2/2
| Ordre | Slice (Tranche Verticale) | Priorité Golden Path | Complexité | Dépendances principales |
|---|---|---|---|---|
| 5 | Upload de médias | ❌ Hors GP | Élevée | Slice 1, 2, 3 |
| 6 | Webhook Sanity | ✅ Critique | Moyenne | Slice 1, 2 |
| 7 | Backup & Cleanup | ❌ Hors GP | Élevée | Slice 1, 2, 3, 5 |
| 8 | Documentation & Recherche | ❌ Hors GP | Moyenne | Infrastructure de base |
3. Détail de chaque Slice
Slice 1 : Schéma Sanity “page” (vitrine)1/4
Composants impliqués :
- L1 : Schéma
page, blocs PageBuilder (hero, features, testimonials, cta, richText, imageGallery), objetseo - L2 : Route
index.astro, LayoutMainLayout.astro, utilitairegetSanityClient() - L3 : Middleware Cloudflare (pour preview)
Slice 1 : Schéma Sanity “page” (vitrine)2/4
Justification de la priorité :
- C’est la page d’accueil, premier point d’entrée des utilisateurs
- Établit le pattern de base pour toutes les autres pages Sanity
- Requis pour le Golden Path
Prérequis :
- Infrastructure Astro configurée (astro.config.mjs)
- Projet Sanity créé avec les credentials
- Middleware Cloudflare déployé (pour preview)
Slice 1 : Schéma Sanity “page” (vitrine)3/4
Livrables :
- Schéma
pageavec PageBuilder - Schémas des 6 blocs PageBuilder
- Objet
seoutilitaire - Route
index.astro(SSG) - Layout
MainLayout.astro - Utilitaire
getSanityClient()avec détection preview - Mode Preview fonctionnel
Slice 1 : Schéma Sanity “page” (vitrine)4/4
Critères d’acceptation :
- La page d’accueil s’affiche correctement en production
- Le mode Preview permet de voir les brouillons
- Les blocs PageBuilder sont rendus correctement
- Les métadonnées SEO sont injectées
Slice 2 : Schéma Sanity “post” (blog)1/4
Composants impliqués :
- L1 : Schémas
post,author,category, objetseo - L2 : Routes
blog/index.astro,blog/[slug].astro, LayoutBlogLayout.astro - L3 : Middleware Cloudflare (pour preview)
Slice 2 : Schéma Sanity “post” (blog)2/4
Justification de la priorité :
- Deuxième composant du Golden Path
- Démontre la gestion des contenus chronologiques et des références
- Requis pour tester l’indexation Pagefind
Prérequis :
- Slice 1 terminée (infrastructure de base, getSanityClient, layouts)
- Schémas utilitaires
authoretcategorycréés
Slice 2 : Schéma Sanity “post” (blog)3/4
Livrables :
- Schéma
author - Schéma
category - Schéma
postavec références vers author et category - Route
blog/index.astro(listing) - Route
blog/[slug].astro(détail) - Layout
BlogLayout.astro - Génération de types TypeScript (sanity-typegen)
Slice 2 : Schéma Sanity “post” (blog)4/4
Critères d’acceptation :
- La liste des articles s’affiche correctement
- Un article individuel s’affiche avec son contenu Portable Text
- Les références (auteur, catégories) sont résolues
- Le mode Preview fonctionne pour les articles
Slice 3 : Schéma Sanity “project” (portfolio)1/3
Composants impliqués :
- L1 : Schéma
project, objetseo - L2 : Route
portfolio/index.astro - L3 : Middleware Cloudflare (pour preview)
Justification de la priorité :
- Hors Golden Path, mais suit le même pattern que Slice 2
- Complexité similaire au blog (sans références croisées)
- Peut être développé en parallèle de Slice 2 si ressources disponibles
Slice 3 : Schéma Sanity “project” (portfolio)2/3
Prérequis :
- Slice 1 terminée (infrastructure de base)
Livrables :
- Schéma
projectavec galerie d’images - Route
portfolio/index.astro - Composants de galerie/carrousel si nécessaire
Slice 3 : Schéma Sanity “project” (portfolio)3/3
Critères d’acceptation :
- La galerie de projets s’affiche correctement
- Les projets mis en avant (featured) sont mis en évidence
- Le mode Preview fonctionne
Slice 4 : Formulaire de contact1/4
Composants impliqués :
- L2 : Route
contact.astro(SSR) - L3 : Worker
form-handler, Queuesubmissions-queue, Turnstile (anti-spam)
Justification de la priorité :
- Hors Golden Path
- Introduit la logique métier backend et la gestion des formulaires
- Dépend de l’infrastructure SSR (Pages Functions)
Slice 4 : Formulaire de contact2/4
Prérequis :
- Slice 1 terminée (MainLayout, infrastructure)
- Cloudflare Turnstile configuré
- CRM ou service d’emailing configuré
Slice 4 : Formulaire de contact3/4
Livrables :
- Route
contact.astroavec validation Zod côté client - Worker
form-handleravec validation Turnstile - Queue
submissions-queuepour résilience - Intégration CRM ou service d’emailing
Slice 4 : Formulaire de contact4/4
Critères d’acceptation :
- Le formulaire soumet correctement les données
- La protection anti-spam Turnstile fonctionne
- Les soumissions sont enregistrées dans le CRM
- Le fallback en Queue fonctionne en cas de panne CRM
Slice 5 : Upload de médias1/4
Composants impliqués :
- L1 : Intégration Sanity Studio avec upload custom
- L3 : Worker
media-upload, Bucket R2medias-r2, Cloudflare Stream (vidéos)
Justification de la priorité :
- Hors Golden Path
- Complexité élevée (URLs présignées, gestion R2/Stream)
- Dépend de l’existence des schémas Sanity (post, project, page)
Slice 5 : Upload de médias2/4
Prérequis :
- Slices 1, 2, 3 terminées (schémas Sanity créés)
- Bucket R2 configuré
- Cloudflare Stream configuré (pour vidéos)
Slice 5 : Upload de médias3/4
Livrables :
- Worker
media-upload(génération URLs présignées) - Intégration upload dans Sanity Studio
- Bucket R2
medias-r2avec organisation des dossiers - Support Cloudflare Stream pour les vidéos
Slice 5 : Upload de médias4/4
Critères d’acceptation :
- L’upload d’images fonctionne depuis Sanity Studio
- L’upload de vidéos fonctionne via Stream
- Les fichiers sont stockés dans R2 avec la bonne structure
- Sanity ne stocke que les métadonnées et URLs
Slice 6 : Webhook Sanity1/4
Composants impliqués :
- L1 : Configuration webhooks dans Sanity Studio
- L3 : Worker
cms-webhook-receiver, KVwebhook-lock-kv, Pipeline CI/CD
Justification de la priorité :
- Critique pour le Golden Path : permet le rebuild automatique
- Dépend des slices 1 et 2 (contenu à rebuild)
- Complexité moyenne (validation HMAC, debounce)
Slice 6 : Webhook Sanity2/4
Prérequis :
- Slices 1 et 2 terminées (contenu à publier)
- Pipeline CI/CD configuré avec deploy hook
- Sanity Studio configuré
Slice 6 : Webhook Sanity3/4
Livrables :
- Worker
cms-webhook-receiveravec validation HMAC-SHA256 - KV
webhook-lock-kvpour debounce (2 min) - Configuration webhook dans Sanity Studio
- Intégration avec pipeline CI/CD (deploy hook)
- Alerting en cas d’échec de rebuild
Slice 6 : Webhook Sanity4/4
Critères d’acceptation :
- La publication d’un article déclenche automatiquement le rebuild
- Le debounce évite les rebuilds multiples en cas d’éditions rapides
- Les signatures webhook sont validées cryptographiquement
- Les échecs de rebuild déclenchent une alerte
Slice 7 : Backup & Cleanup1/4
Composants impliqués :
- L3 : Workers
media-cleanup(cron),sanity-backup(cron), Buckets R2
Justification de la priorité :
- Hors Golden Path
- Fonctionnalités de maintenance et résilience
- Complexité élevée (safety locks, streaming, cron triggers)
Slice 7 : Backup & Cleanup2/4
Prérequis :
- Slices 1, 2, 3 terminées (schémas Sanity pour requêtes GROQ)
- Slice 5 terminée (bucket R2 avec médias)
- Buckets R2 configurés
Slice 7 : Backup & Cleanup3/4
Livrables :
- Worker
sanity-backup(cron quotidien, streaming HTTP) - Worker
media-cleanup(cron hebdomadaire, safety locks) - Bucket R2
backups-r2avec lifecycle rules - Alerting en cas d’échec des jobs cron
Slice 7 : Backup & Cleanup4/4
Critères d’acceptation :
- Le backup Sanity s’exécute quotidiennement sans erreur
- Les backups sont stockés dans R2 avec rétention 30 jours
- Le cleanup des médias orphelins s’exécute hebdomadairement
- Les safety locks empêchent les suppressions massives accidentelles
- Les échecs de jobs déclenchent des alertes
Slice 8 : Documentation & Recherche1/4
Composants impliqués :
- L1 : Content Collection
starlight-docs(fichiers Markdown/MDX) - L2 : Intégration Starlight, Pagefind (indexation unifiée)
Justification de la priorité :
- Hors Golden Path
- Dernier slice car indépendant des autres (fichiers locaux)
- Requiert une configuration Starlight spécifique
Slice 8 : Documentation & Recherche2/4
Prérequis :
- Infrastructure Astro configurée
- Slices 1 et 2 terminées (pour indexation Pagefind unifiée)
Slice 8 : Documentation & Recherche3/4
Livrables :
- Configuration Starlight dans Astro
- Structure de documentation Markdown/MDX
- Intégration Pagefind unifiée (indexe Sanity + Starlight)
- Interface de recherche globale avec badges par type
- Overrides CSS Starlight pour cohérence visuelle
Slice 8 : Documentation & Recherche4/4
Critères d’acceptation :
- La documentation Starlight s’affiche correctement
- La recherche Pagefind indexe le contenu Sanity et Starlight
- Les résultats de recherche sont distingués par type (Doc, Blog, Portfolio, Page)
- La cohérence visuelle est maintenue entre Starlight et le reste du site
4. Mapping avec le Golden Path1/2
Le Golden Path (parcours minimal viable) est composé des éléments suivants :
| Composant Golden Path | Slice associé | Statut |
|---|---|---|
| Page d’accueil (vitrine SSG + Sanity) | Slice 1 | ✅ Critique |
| Article de blog (SSG + Sanity + Portable Text) | Slice 2 | ✅ Critique |
| Recherche Pagefind (indexant ces 2 pages) | Slice 2 + Slice 8 | ✅ Critique |
| Mode Preview (pour les contributeurs) | Slice 1 + Slice 2 | ✅ Critique |
| Webhook de rebuild (déclenchement automatique) | Slice 6 | ✅ Critique |
4. Mapping avec le Golden Path2/2
Stratégie recommandée :
- Implémenter les Slices 1, 2, et 6 en priorité absolue
- Stabiliser le Golden Path (tests E2E complets)
- Une fois le Golden Path validé, poursuivre avec les Slices 3, 4, 5, 7, 8
- Slice 8 peut être avancé si la documentation est prioritaire business
5. Templates de Fiches d’Objet
Pour chaque slice, les fiches d’objets doivent être créées en utilisant les templates spécifiques situés dans la structure docs/L[x]/[platforme]/[resource_type]/ :
Templates par type de ressource1/4
| Type de ressource | Template (.template.md) | ObjectData (.objectData.md) |
|---|---|---|
| Sanity (L1) | ||
| Schéma Sanity | docs/L1_Contenu/sanity/schemas/schemas.template.md |
docs/L1_Contenu/sanity/schemas/schemas.objectData.md |
| Configuration API Sanity | docs/L1_Contenu/sanity/api/api.template.md |
docs/L1_Contenu/sanity/api/api.objectData.md |
| Configuration Studio | docs/L1_Contenu/sanity/studio/studio.template.md |
docs/L1_Contenu/sanity/studio/studio.objectData.md |
| Visual Editing / Preview | docs/L1_Contenu/sanity/visual-editing/visual-editing.template.md |
docs/L1_Contenu/sanity/visual-editing/visual-editing.objectData.md |
| Webhook Sanity | docs/L1_Contenu/sanity/webhooks/webhook.template.md |
docs/L1_Contenu/sanity/webhooks/webhook.objectData.md |
Templates par type de ressource2/4
| Type de ressource | Template (.template.md) | ObjectData (.objectData.md) |
|---|---|---|
| Astro (L1) | ||
| Content Collection | docs/L1_Contenu/astro/content-collections/content-collections.template.md |
docs/L1_Contenu/astro/content-collections/content-collections.objectData.md |
| Cloudflare (L1) | ||
| Stockage R2/Stream | docs/L1_Contenu/cloudflare/storage/storage.template.md |
docs/L1_Contenu/cloudflare/storage/storage.objectData.md |
| Configuration Stream | docs/L1_Contenu/cloudflare/stream/stream.template.md |
docs/L1_Contenu/cloudflare/stream/stream.objectData.md |
| Astro (L2) |
Templates par type de ressource3/4
| Type de ressource | Template (.template.md) | ObjectData (.objectData.md) |
|---|---|---|
| Configuration Astro | docs/L2_Presentation/astro/config/config.template.md |
docs/L2_Presentation/astro/config/config.objectData.md |
| Route Astro | docs/L2_Presentation/astro/routes/routes.template.md |
docs/L2_Presentation/astro/routes/routes.objectData.md |
| Layout Astro | docs/L2_Presentation/astro/layouts/layouts.template.md |
docs/L2_Presentation/astro/layouts/layouts.objectData.md |
| Composant Astro | docs/L2_Presentation/astro/components/components.template.md |
docs/L2_Presentation/astro/components/components.objectData.md |
| Pagefind (L2) | ||
| Indexation Pagefind | docs/L2_Presentation/pagefind/indexing/indexing.template.md |
docs/L2_Presentation/pagefind/indexing/indexing.objectData.md |
| API Pagefind | docs/L2_Presentation/pagefind/search-api/search-api.template.md |
docs/L2_Presentation/pagefind/search-api/search-api.objectData.md |
Templates par type de ressource4/4
| Type de ressource | Template (.template.md) | ObjectData (.objectData.md) |
|---|---|---|
| UI Pagefind | docs/L2_Presentation/pagefind/search-ui/search-ui.template.md |
docs/L2_Presentation/pagefind/search-ui/search-ui.objectData.md |
| Cloudflare (L3) | ||
| Worker Cloudflare | docs/L3_Backend/cloudflare/workers/workers.template.md |
docs/L3_Backend/cloudflare/workers/workers.objectData.md |
| Binding Cloudflare | docs/L3_Backend/cloudflare/bindings/bindings.template.md |
docs/L3_Backend/cloudflare/bindings/bindings.objectData.md |
| Configuration Wrangler | docs/L3_Backend/cloudflare/config/config.template.md |
docs/L3_Backend/cloudflare/config/config.objectData.md |
| Pages Function | docs/L3_Backend/cloudflare/functions/functions.template.md |
docs/L3_Backend/cloudflare/functions/functions.objectData.md |
Cycle de développement
Pour chaque objet d’un slice, suivre le cycle strict :
- DOC : Remplir les sections “Vue d’ensemble” et “Architecture” du template
- SPEC : Remplir les sections “Contrats d’Entrée/Sortie”
- CODE : Remplir les sections “Implémentation” avec le code réel
- TEST : Remplir les sections “Tests attendus” et exécuter les tests
- INTÉG : Remplir les sections “Intégration” et vérifier la cohérence
6. Estimation de durée par Slice1/2
| Slice | Estimation (1 développeur) | Notes |
|---|---|---|
| Slice 1 | 2-3 jours | Infrastructure + PageBuilder |
| Slice 2 | 2-3 jours | Références + Portable Text |
| Slice 3 | 1-2 jours | Similaire à Slice 2, sans références |
| Slice 4 | 2-3 jours | Backend + Turnstile + CRM |
| Slice 5 | 3-4 jours | R2 + Stream + URLs présignées |
6. Estimation de durée par Slice2/2
| Slice | Estimation (1 développeur) | Notes |
|---|---|---|
| Slice 6 | 1-2 jours | Webhook + HMAC + Debounce |
| Slice 7 | 2-3 jours | Cron + Safety locks + Streaming |
| Slice 8 | 2-3 jours | Starlight + Pagefind unifié |
| Total | 15-23 jours | Sans tests E2E et documentation |
Note : Ces estimations incluent le cycle complet DOC → SPEC → CODE → TEST → INTÉG pour chaque slice.
7. Possibilités de parallélisation1/2
Si plusieurs ressources sont disponibles, certains slices peuvent être développés en parallèle :
| Groupe de parallélisation | Slices | Condition |
|---|---|---|
| Groupe A | Slice 1, Slice 3 | Infrastructure de base partagée |
| Groupe B | Slice 2, Slice 4 | Slice 1 terminée |
| Groupe C | Slice 5, Slice 6 | Slices 1, 2, 3 terminées |
| Groupe D | Slice 7, Slice 8 | Slices 1, 2, 3, 5 terminées |
Attention : La parallélisation nécessite une coordination rigoureuse pour éviter les conflits de merge et assurer la cohérence de l’architecture.
7. Possibilités de parallélisation2/2
Historique des modifications
| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-04 | 1.0 | Création initiale de l’ordre des slices | AMN |