- BRIEF-Claude-Code.md: Claude Code start brief (13 sections) - 2 PDF deliverables: Strategie & Contenu (84p) + Design Handoff (31p) - README.md: project overview, local setup, structure, conventions - MISSING-ASSETS.md: live tracker for missing media (hero video, photos, logos) - .gitignore: excludes ThirdParty/ (commercial plugin ZIPs), PDF text extracts, WP runtime Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
21 KiB
Brief Claude Code — Refonte asterionvr.com (Bricks Builder + WordPress)
Ce document est le brief de démarrage à donner à Claude Code au lancement du projet. Il contient tout ce que Claude Code doit savoir pour commencer efficacement, sans aller-retour avec le client.
0. État de départ — IMPORTANT, lis en premier
Tu démarres sur une feuille blanche en local. Concrètement :
- L'environnement de travail est une installation WordPress fraîche dans LocalWP sur la machine du client (Jérôme). Domaine local :
asterion-2026.local. - Aucun code custom n'existe encore. Pas de child theme, pas de custom post type, pas de contenu, pas d'images, pas de tokens CSS. Le
wp-content/themes/ne contient que les thèmes par défaut WordPress (Twenty Twenty-Five, etc.) et le thème Bricks parent, déjà installé et activé manuellement par Jérôme. - Ne cherche pas de codebase à explorer. Si tu fais
lssurwp-content/themes/, tu verras Bricks et les thèmes WP par défaut, rien d'autre. Si tu faislssur le dossier où ce brief vit, tu trouveras seulement les deux.docxde référence et ce fichierBRIEF-Claude-Code.md. Il n'y a aucun lien avec le site live asterionvr.com : ne tente pas de le scraper, de l'inspecter, de t'y connecter en SSH/SFTP, ni d'en télécharger des contenus. Le site live continue de tourner sur sa propre infra et reste intouché jusqu'au jour de la bascule (phase ultérieure, hors scope). - Ton point de départ est : créer le scaffold du child theme
asterion-bricksà partir de zéro. C'est la première chose que tu écris. Tout le reste s'appuie sur ce scaffold. - Les deux livrables
.docx(Stratégie & Contenu + Design Handoff) sont les seules sources de vérité externes. Lis-les viapandoc fichier.docx -o /tmp/fichier.mdavant de commencer à coder. Ils contiennent toute la spec design et tout le contenu rédactionnel à utiliser.
Ce que Jérôme (humain) a fait avant de te donner ce brief
- ✅ Installé LocalWP et créé le site
asterion-2026.localavec WordPress dernière version. - ✅ Uploadé et activé le thème Bricks Builder parent (license achetée, ZIP fourni par le vendor).
- ✅ Installé le plugin WPML (license achetée).
Ce que tu (Claude Code) vas faire
- 🔨 Créer le child theme
asterion-brickscomplet, scaffold + tokens + composants + templates. - 🔨 Construire la home en premier, puis les autres templates dans l'ordre indiqué en section 7.
- 🔨 Créer les Custom Post Types
case_studyetscenario. - 🔨 Configurer Bricks (réglages globaux, registres de classes, conditions de templates) via les fichiers du child theme et via l'admin WP.
- 🔨 Saisir le contenu textuel anglais des pages clés (depuis le livrable 1, section D) directement dans WordPress, page par page.
- 🔨 Versionner le tout sous Git (repo local pour démarrer).
Ce que tu (Claude Code) ne fais PAS
- ❌ Pas de production prod, pas de DNS, pas de CDN, pas de Cloudflare, pas de migration depuis le site live actuel.
- ❌ Pas d'installation de Bricks ou de WPML — c'est fait. Si tu as besoin d'une nouvelle license Bricks ou d'un plugin payant, demande à Jérôme.
- ❌ Pas de traduction FR — ça vient après, via le linguiste interne du client.
- ❌ Pas de création de blog posts éditoriaux — phase post-launch.
Si tu es bloqué dès le départ
Si tu lances ls ou find et que tu es perplexe parce que rien n'existe, c'est normal. Lis ce brief, lis les deux .docx, puis commence par mkdir wp-content/themes/asterion-bricks && cd wp-content/themes/asterion-bricks && touch style.css functions.php et déroule la section 4.
1. Contexte projet
Client : Asterion VR — entreprise française basée à Montgermont (35), fondée en 2016. Concepteur et éditeur de PROSERVE, plateforme XR (réalité étendue) modulaire pour la formation des forces de sécurité : police nationale et municipale, forces spéciales, militaires, pompiers et services d'urgence.
Mission : refonte complète du site web asterionvr.com. Le site actuel est sur WordPress + Avada (page builder Fusion), daté visuellement, sans contenu éditorial, sans tunnel de génération de leads, sans pages segmentées par cible.
Résultat attendu : un site moderne, tactical-cinematic, mobile-first, avec arborescence segmentée par cible, tunnel de leads à trois CTA (Demo / T&E / Quote), blog éditorial, études de cas, conformité RGPD, performance Lighthouse 90+, accessibilité WCAG 2.1 AA.
2. Documents de référence (à lire avant de coder)
Deux livrables stratégie + design ont déjà été produits. Lis-les en priorité avant tout travail technique :
-
Asterion-VR_Refonte-2026_Strategie-et-Contenu.docx— 84 pages, contient :- Audit du site actuel et benchmark concurrentiel (HG XR, Operator XR, VRTS, V-Armed)
- Stratégie de positionnement, personas, parcours utilisateur, SEO
- Nouvelle arborescence complète (~35 pages, structure d'URL, mega-menus)
- Contenu prêt-à-publier en anglais pour chaque page du site (29 pages détaillées)
- Calendrier blog 12 mois, lead magnets, tunnel de nurture
-
Asterion-VR_Refonte-2026_Design-Handoff-Specification.docx— 31 pages, contient :- Brand identity (voice, tone, naming, signatures)
- Design tokens (palette, typographie, spacing, radii, shadows, z-index)
- Bibliothèque de composants UI (boutons, formulaires, cartes, navigation, modals…)
- Wireframes textuels des 7 templates de page
- Motion, responsive, accessibilité, notes d'implémentation
Pour lire les .docx : pandoc fichier.docx -o fichier.md puis lire le Markdown. Ces deux documents sont la source de vérité pour le contenu, l'architecture et le design system. Ne rien réinventer s'ils contiennent déjà la réponse.
3. Stack technique imposée
- CMS : WordPress 6.x (dernière stable)
- Builder : Bricks Builder (thème premium, license achetée par le client)
- Architecture : un child theme custom nommé
asterion-bricksqui hérite de Bricks - Environnement local : LocalWP (Flywheel) — installation WordPress local sur la machine du client
- Versioning : Git, repo local au démarrage, push vers GitLab/GitHub privé une fois la base stable
- Multilingue : WPML (anglais comme langue principale, français en seconde)
- Hébergement cible (production) : OVHcloud Managed WordPress ou O2switch (français, RGPD-natif)
- CDN cible : Cloudflare devant la prod
- Analytics : Plausible (RGPD-natif, sans cookie consent) — à intégrer en fin de projet
4. Setup initial (rappel : LocalWP + WordPress + Bricks + WPML sont déjà en place — cf. section 0)
Tu démarres dans le dossier wp-content/themes/ du site local. Bricks parent est déjà là, activé. Ta première action est de créer le child theme :
# 1. Se placer dans le dossier des thèmes du site local
cd /chemin/vers/LocalWP/asterion-2026/app/public/wp-content/themes
# 2. Créer le child theme
mkdir asterion-bricks
cd asterion-bricks
# 3. Initialiser Git
git init
# 4. Créer le scaffold de base (style.css avec en-tête WP, functions.php, etc.)
# (À développer selon la structure ci-dessous)
# 5. Activer le child theme via l'admin WP > Apparence > Thèmes
Structure du child theme à créer :
wp-content/themes/asterion-bricks/
├── style.css # En-tête WP + import des tokens
├── functions.php # Hooks, registers, custom queries
├── theme.json # Tokens globaux (Gutenberg + Bricks)
├── /assets/
│ ├── /css/
│ │ ├── tokens.css # Variables CSS (couleurs, type, spacing)
│ │ ├── components.css # Styles composants
│ │ └── utilities.css # Helpers
│ ├── /js/
│ │ └── main.js # Animations, scroll, microinteractions
│ ├── /fonts/ # Inter / Inter Display (self-hosted, RGPD)
│ └── /img/ # Visuels statiques
├── /templates/ # Templates Bricks exportés en JSON
│ ├── home.json
│ ├── solution-my-proserve.json
│ ├── industry-police.json
│ └── ...
├── /inc/
│ ├── cpt.php # Custom post types (case-study, scenario, insight)
│ ├── acf.php # ACF Pro field groups (si licensé)
│ └── seo.php # Schema.org Organization, Product, Article
└── README.md # Doc projet
Plugins indispensables à installer :
- WPML Multilingual CMS + WPML String Translation
- Yoast SEO ou Rank Math (Rank Math préféré — meilleur free tier)
- Advanced Custom Fields Pro (pour les CPT case-study, scenario, etc.)
- Custom Post Type UI (si pas d'ACF Pro)
- WP Migrate Lite (pour synchroniser local ↔ staging plus tard)
- Redirection (pour le plan de 301 du jour J)
- Wordfence ou Solid Security (sécurité)
- Plausible Analytics (en fin de projet, après go-live)
5. Design tokens (à coder dans tokens.css)
Référence complète dans le livrable 2 (Design Handoff). Synthèse pour démarrage immédiat :
:root {
/* === BRAND COLORS === */
--color-brand-navy: #0B1F3A;
--color-brand-navy-deep: #081427;
--color-brand-gold: #C9A45A;
--color-brand-gold-soft: #E0C892;
--color-alert-red: #C8102E;
/* === NEUTRALS === */
--color-text-primary: #0B1F3A;
--color-text-secondary: #3E4C5E;
--color-text-muted: #6B7785;
--color-text-on-dark: #FFFFFF;
--color-text-on-dark-muted: #B6BFCC;
--color-bg-default: #FFFFFF;
--color-bg-subtle: #F5F7FA;
--color-bg-elevated: #FFFFFF;
--color-bg-dark: #0B1F3A;
--color-bg-dark-elevated: #13294B;
--color-border-default: #CCD3DC;
--color-border-subtle: #E5E9EE;
--color-border-on-dark: #1F3252;
/* === SEMANTIC === */
--color-success: #1F8B4C;
--color-warning: #C29327;
--color-error: #C8102E;
--color-info: #1E5BA8;
/* === TYPOGRAPHY === */
--font-display: "Inter Display", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--font-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--text-display-xl: 4.5rem; /* 72px - hero signature */
--text-display-lg: 3.5rem; /* 56px - product hero */
--text-display-md: 2.75rem; /* 44px - section H2 */
--text-h1: 2.25rem; /* 36px */
--text-h2: 1.75rem; /* 28px */
--text-h3: 1.375rem; /* 22px */
--text-h4: 1.125rem; /* 18px */
--text-body-lg: 1.25rem; /* 20px - lead */
--text-body-md: 1rem; /* 16px - default */
--text-body-sm: 0.875rem; /* 14px */
--text-overline: 0.75rem; /* 12px - eyebrow */
/* === SPACING (8-pt grid) === */
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px */
--space-5: 1.25rem; /* 20px */
--space-6: 1.5rem; /* 24px */
--space-8: 2rem; /* 32px */
--space-10: 2.5rem; /* 40px */
--space-12: 3rem; /* 48px */
--space-16: 4rem; /* 64px */
--space-20: 5rem; /* 80px */
--space-24: 6rem; /* 96px */
--space-32: 8rem; /* 128px */
/* === RADII === */
--radius-none: 0;
--radius-sm: 2px;
--radius-md: 4px;
--radius-lg: 8px;
--radius-pill: 9999px;
--radius-full: 50%;
/* === SHADOWS === */
--shadow-xs: 0 1px 2px rgba(11, 31, 58, 0.05);
--shadow-sm: 0 2px 4px rgba(11, 31, 58, 0.08), 0 1px 2px rgba(11, 31, 58, 0.06);
--shadow-md: 0 4px 12px rgba(11, 31, 58, 0.10), 0 2px 4px rgba(11, 31, 58, 0.06);
--shadow-lg: 0 12px 24px rgba(11, 31, 58, 0.14), 0 4px 8px rgba(11, 31, 58, 0.08);
--shadow-glow-gold: 0 0 24px rgba(201, 164, 90, 0.35);
/* === MOTION === */
--ease-default: cubic-bezier(0.16, 1, 0.3, 1);
--duration-fast: 150ms;
--duration-default: 250ms;
--duration-slow: 400ms;
/* === LAYOUT === */
--container-max: 1280px;
}
/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
Police Inter : self-host les fichiers WOFF2 dans /assets/fonts/ plutôt que charger Google Fonts (RGPD — Google Fonts CDN partage l'IP des visiteurs avec Google).
6. Arborescence du site (à implémenter)
/ (home)
/solutions/ (gamme overview)
/solutions/my-proserve/ (solo)
/solutions/proserve-flex/ (team 1-5)
/solutions/proserve-academy/ (unit 1-16)
/solutions/customization/ (PROSERVE+)
/industries/police/
/industries/special-forces/
/industries/military/
/industries/firefighters/
/technology/ (overview)
/technology/vr-hardware/
/technology/software-ai/
/technology/weapons-tracking/
/technology/scenarios/
/technology/instructor-cockpit/
/technology/after-action-review/
/customers/ (case studies hub)
/customers/[slug]/ (CPT: case-study)
/why-asterion/
/about/
/trust/ (compliance, sovereignty, GDPR)
/insights/ (blog hub)
/insights/[slug]/ (CPT: post natif WP)
/resources/ (datasheets, whitepapers)
/partners/
/request-demo/
/request-te-kit/
/request-quote/
/contact/
/legal/privacy/
/legal/terms/
/legal/cookies/
/legal/notice/
Custom Post Types à créer dans inc/cpt.php :
case_study— slugcustomers, archive activée, supports : title, editor, thumbnail, custom-fieldsscenario— slugscenarios, supports : title, editor, thumbnail, custom-fields- (Les blog posts utilisent le CPT
postnatif WordPress)
7. Templates de page (priorité d'implémentation)
Sept templates couvrent tout le site (détail des wireframes en section 4 du livrable 2). À construire dans cet ordre :
| Priorité | Template | Pages affectées |
|---|---|---|
| 1 | home |
/ |
| 2 | solution-detail |
4 pages /solutions/* |
| 3 | industry-detail |
4 pages /industries/* |
| 4 | technology-detail |
6 pages /technology/* |
| 5 | case-study-detail |
n pages /customers/* |
| 6 | blog-post-detail |
n articles /insights/* |
| 7 | conversion-form |
/request-demo, /request-te-kit, /request-quote |
Plus deux templates partagés : default-page (pour about, why, trust, contact, legal) et archive-list (pour /customers/, /insights/, /resources/).
8. Première mission concrète
Construis la home. C'est le template qui exerce le plus de composants — une fois la home livrée, les autres pages sont des permutations.
Étapes attendues :
- Setup du child theme (
style.css,functions.php,theme.json). - Création de
tokens.cssavec toutes les variables ci-dessus. - Self-host des fonts Inter + Inter Display dans
/assets/fonts/(récupérer les WOFF2 sur rsms.me/inter). - Création des composants de base en CSS pour Bricks (boutons, cartes, header, footer).
- Construction de la home dans Bricks en suivant exactement le wireframe section 4.1 du livrable 2 (9 sections : Hero / Trust bar / Solutions / Industries / Feature heroes / Case study / Testimonials / Insights / Conversion banner + Footer).
- Le contenu textuel anglais à utiliser est dans le livrable 1, section D.1 (Homepage).
- Export du template Bricks en JSON dans
/templates/home.jsonpour permettre la versionnage. - Tests Lighthouse mobile + desktop (cible : 90+ Performance).
- Test accessibilité avec axe DevTools (zéro violations critique).
- Test mobile-first sur 375px, 640px, 768px, 1280px, 1920px.
Critères d'acceptation home :
- Lighthouse mobile : Performance ≥ 85, Accessibility ≥ 95, Best Practices ≥ 90, SEO ≥ 95.
- Lighthouse desktop : Performance ≥ 90, autres ≥ 95.
- Hero vidéo en boucle silencieuse, autoplay, fallback poster image, < 2 Mo.
- Trois CTAs distincts (Demo / T&E / Quote) accessibles depuis le footer dark.
- Navigation header sticky avec mega-menu sur Solutions / Industries / Technology.
- Tous les textes en anglais (la version FR sera ajoutée après via WPML).
- Aucune valeur de couleur, taille de typo, ou spacing en dur dans le code — uniquement via les variables CSS du
tokens.css.
9. Conventions de code
Nommage CSS : BEM-light. Exemple :
.btn { /* base */ }
.btn--primary { /* variant */ }
.btn--large { /* size variant */ }
.btn__icon { /* element */ }
.btn.is-loading { /* state */ }
Préfixe : tous les sélecteurs custom préfixés par av- (asterion-vr) pour éviter collision avec Bricks. Exemple : .av-hero, .av-card-product.
JavaScript : vanilla JS d'abord, pas de framework côté front. Charger en defer. Modules ES6 si nécessaire.
Images : AVIF first, WebP fallback, JPG fallback final. Lazy-loading natif (loading="lazy") sauf hero. Toujours alt text descriptif, jamais vide sauf décoratif (alt="" + role="presentation").
Vidéos : MP4 H.264 + WebM VP9. Autoplay muted plays-inline loop. Poster image obligatoire.
Accessibilité : zéro violation critique axe-core. Focus visible sur tout interactif. Skip link en première position. Contraste 4.5:1 minimum.
Performance budget :
- HTML initial < 100 KB gzipped
- CSS total < 50 KB gzipped
- JS initial bundle < 200 KB gzipped
- Hero video < 2 MB
- Hero poster < 150 KB
- LCP < 2.5s, CLS < 0.1, TBT < 200ms
10. Workflow Git
# Au démarrage
cd wp-content/themes/asterion-bricks
git init
git add .
git commit -m "chore: initial child theme scaffold"
# Branche par template/page
git checkout -b feat/home
# ... travail ...
git commit -m "feat(home): hero section + tokens"
git commit -m "feat(home): trust bar"
git commit -m "feat(home): solutions cards"
# Une fois la home complète et validée :
git checkout main
git merge feat/home
# Push vers le remote (à configurer plus tard)
git push origin main
Convention de commits : Conventional Commits (feat:, fix:, chore:, style:, refactor:, test:, docs:).
Ne jamais commiter : wp-config.php, dossiers uploads/, fichiers .env, mots de passe, ou toute clé API. .gitignore recommandé :
node_modules/
wp-config.php
.env
.DS_Store
uploads/
debug.log
*.sql
11. À demander au client (Jérôme) avant de commencer ou en cas de blocage
Pré-requis techniques déjà fournis (cf. section 0) : LocalWP installé, WordPress + Bricks + WPML en place et activés. Tu n'as pas à t'en occuper.
Ce qui peut bloquer en cours de route :
- Visuels manquants : photographies réelles d'usage (instructeur, stagiaire avec headset, mallette ouverte). Si non disponibles, utiliser des placeholders nommés explicitement (
placeholder-instructor.jpg,placeholder-case-residential.jpg) avec un fond uni navy + texte blanc « PLACEHOLDER » — surtout pas de stock photo générique. Tenir un fichierMISSING-ASSETS.mdà la racine du child theme listant tout ce qu'il faut produire. - Vidéo hero : existe-t-il un master cinematic 30 secondes prêt ? Sinon, créer un placeholder MP4 noir de 30 sec (avec FFmpeg :
ffmpeg -f lavfi -i color=c=black:s=1920x1080:d=30 -c:v libx264 placeholder-hero.mp4) et noter dansMISSING-ASSETS.md. - Logos clients : confirmer avec Jérôme la liste des clients qu'on peut nommer publiquement (NDA sur certains). En attendant, utiliser 5-6 carrés gris numérotés.
- Comptes externes / CRM : pour quel CRM faut-il router les formulaires (HubSpot, Pipedrive, e-mail simple) ? Demander avant d'intégrer un endpoint quelconque. Par défaut, configurer un envoi e-mail simple vers
jerome.foucher@asterionvr.com. - Adresse e-mail dédiée formulaires : ex.
leads@asterionvr.com— à créer par l'IT du client. - Décisions de spec : si tu identifies une ambiguïté ou une incohérence entre les deux livrables
.docx, stopper et poser la question à Jérôme plutôt que d'inventer. La spec est censée être complète.
12. Hors scope de cette session
- Production prod (OVH/O2switch + Cloudflare) — phase ultérieure, après validation locale.
- Migration des contenus existants depuis Avada — à traiter en fin de projet, pas au démarrage. Le contenu nouveau (livrable 1) prime.
- Plan de redirections 301 — à constituer en parallèle (liste old URL → new URL) mais à activer seulement le jour de la bascule.
- Traduction FR via WPML — après validation EN. Le client a un linguiste interne.
- Création de blog posts — phase post-launch (calendrier blog 12 mois dans livrable 1, section B.4).
13. Repères de qualité finale
Avant de considérer un template comme livré :
- Lighthouse cible atteinte (mobile + desktop).
- axe-core : zéro violation critique.
- Test mobile sur 375px, sans clipping ni débordement.
- Tab order logique sur tous les éléments interactifs.
- Aucune valeur hardcodée — tout passe par les tokens.
- Code commité avec un message clair.
- JSON Bricks exporté dans
/templates/. - CSS et JS minifiés en build prod (mais sources lisibles en dev).
- Validation HTML W3C (zéro erreur, warnings tolérés).
- Smoke test : la page se charge en moins de 3 secondes sur connexion Slow 3G simulée.
Bon travail. La spec est complète, le contenu est rédigé, les tokens sont définis. Concentre-toi sur la qualité d'exécution — chaque pixel compte pour un site qui s'adresse à des acheteurs publics.