SPB Git

spb/phi-conseil

Public
7.3 KB

# Plan d'implémentation — PHI Conseil

Date : 2026-11-08. Référence visuelle : references/phi-conseil-homepage.jpeg (1024 × 1536 px, capture desktop fournie par le client).

# 1. Audit initial

Élément État constaté
Dépôt Vide à l'origine (créé aujourd'hui). Scaffold create-next-app 16.4.5, TypeScript strict, Tailwind 4, ESLint 9, pnpm 11.
Capture Présente et inspectée. Couleurs échantillonnées par région (médiane / mode / moyenne des pixels sombres) — voir src/styles/tokens.css.
Actifs client Aucun fichier original fourni : pas de logo vectoriel, pas de photos sous licence, pas de polices, pas de coordonnées, pas de textes juridiques, pas de témoignage autorisé.
Hébergement Non précisé. Cible par défaut : Node 20+ (next start derrière un reverse proxy TLS). Un déploiement sur le cluster MacLustr (mld) ou sur Vercel est documenté dans docs/DEPLOYMENT.md.

# Inconnues bloquantes (à valider par le client)

  1. Logo vectoriel officiel (sinon le SVG recréé src/components/graphics/Logo.tsx doit être approuvé).
  2. Photos sous licence pour le hero et la section À propos (les illustrations livrées sont des placeholders vectoriels dans la palette, marqués comme tels dans docs/ASSET_REGISTER.md).
  3. Coordonnées réelles (courriel, téléphone, adresse, LinkedIn) : laissées vides, les icônes/liens correspondants sont masqués tant que les champs du contenu sont vides.
  4. Témoignage(s) autorisé(s) : la section est masquée en production (testimonials.visible=false) ; le texte de la maquette est conservé uniquement comme exemple de prévisualisation marqué « non vérifié ».
  5. Textes juridiques (confidentialité, mentions légales) : gabarit fourni, à faire valider par un conseiller juridique.
  6. Fournisseur de messagerie transactionnelle (SMTP) et adresses expéditeur/destinataire.
  7. Choix CMS : voir §4.

# 2. Architecture

text
content/                 ← contenu administrable (JSON validé par Zod au build et à l'exécution)
  site.json              ← identité, navigation, coordonnées, liens sociaux, SEO par défaut
  home.json              ← hero, services, à-propos, témoignages, bandeau, visibilité des sections
  pages.json             ← pages internes (services, à propos, témoignages, nous joindre, confidentialité)
src/
  app/
    layout.tsx           ← polices, métadonnées par défaut, Header/Footer
    (site)/page.tsx      ← accueil (7 sections)
    (site)/services|a-propos|temoignages|nous-joindre|confidentialite/page.tsx
    api/contact/route.ts ← POST : validation Zod, honeypot, limitation de débit, envoi SMTP
    sitemap.ts, robots.ts, icon.svg, opengraph-image.tsx
  components/
    layout/   Header, MobileNav, Footer
    sections/ Hero, Services, About, Testimonials, CallToAction
    graphics/ Logo, GoldenSpiral, WaveDivider, BotanicalMotif, placeholders photo
    ui/       Button, Container, SectionTitle, Icon…
    forms/    ContactForm (client)
  lib/        content.ts (chargeur + schémas), env.ts, validation.ts, security.ts (rate limit, sanitisation), mail.ts, seo.ts
  styles/     tokens.css (design tokens), globals.css
tests/
  unit/       Vitest + Testing Library (schémas, validation, rate limit, composants)
  e2e/        Playwright (navigation, menu mobile, formulaire, liens, axe, captures)
docs/         IMPLEMENTATION_PLAN, DEPLOYMENT, CLIENT_GUIDE, QA_REPORT, ASSET_REGISTER

# 3. Design system

  • Tokens CSS (src/styles/tokens.css) : couleurs échantillonnées, échelle typographique clamp(), espacements, rayons, ombres, mouvement. Exposés à Tailwind 4 via @theme.
  • Titres : EB Garamond (OFL) ; corps : Figtree (OFL). Chargées par next/font/google (auto-hébergées au build, display: swap). À remplacer par les polices officielles du client si elles existent.
  • Motifs : spirale de Fibonacci (carrés + arcs de quart de cercle, ratio 1,618 approché par la suite 1-1-2-3-5-8-13-21), vagues, feuillage — tous en SVG inline.

# 4. Contenu administrable — décision

Le cahier des charges recommande un CMS maintenu (Payload / Sanity) tout en demandant d'éviter de surdimensionner si une solution statique convient et de demander validation.

Choix livré : contenu structuré en fichiers JSON versionnés (content/*.json), validé par Zod, modifiable sans toucher au code applicatif, avec guide client. Raisons : aucun hébergement de base de données ni de compte tiers à gérer, pas de surface d'authentification à sécuriser, sauvegarde = historique Git, coût nul, déploiement statique possible.

Compromis documentés : l'édition exige un éditeur de texte ou l'interface web Git ; pas d'aperçu WYSIWYG ni de gestion de médias par glisser-déposer. Chemin d'évolution : src/lib/content.ts est l'unique point d'accès au contenu ; brancher Payload (SQLite/Postgres, intégré à Next) ou Sanity consiste à remplacer ce module en conservant les schémas Zod. Décision à valider par le client.

# 5. Étapes

  1. Audit + plan (ce document). ✔
  2. Design system : tokens, polices, UI de base, logo et motifs SVG.
  3. Accueil fidèle : 7 sections, comparaison Playwright à 1024 px (largeur de la capture) puis 1440 px.
  4. Pages internes + chargeur de contenu + visibilité des sections.
  5. Formulaire de contact + API + messagerie SMTP configurable + protection antispam.
  6. Validation : lint, typecheck, Vitest, Playwright (6 largeurs, axe), build de production.
  7. Livraison : README, .env.example, docs/DEPLOYMENT, CLIENT_GUIDE, QA_REPORT, ASSET_REGISTER.

# 6. Critères d'acceptation par section (checklist)

  • En-tête : logo + nom + signature, 5 liens, CTA bleu arrondi « Contactez-nous → », lien actif souligné, menu mobile accessible, en-tête collant sobre.
  • Hero : fond ivoire, H1 serif 3 lignes, sous-titre, bouton bleu, illustration à droite avec spirale dorée superposée, vagues ivoire/bleu pâle en bas.
  • Services : titre centré entre filets dorés, 4 cartes (disque bleu-gris + icône au trait), textes exacts.
  • À propos : image verticale à gauche avec courbe ivoire, surtitre doré, H2, paragraphe, bouton contour, 4 bénéfices avec coches dorées séparés par un filet vertical.
  • Témoignages : encadré bleu pâle arrondi, guillemets dorés, serif italique, pagination ; slider accessible ; masqué en prod sans avis validé.
  • Bandeau : fond bleu ardoise, titre blanc, bouton ivoire, spirale + feuillage dorés à droite.
  • Pied de page : logo + nom, liens, icônes LinkedIn/courriel (si fournis), copyright dynamique, signature, liens légaux.
  • Responsive 360/390/768/1024/1440/1920 sans débordement horizontal.
  • Formulaire : validation client/serveur, honeypot, rate limit, SMTP configurable, états succès/erreur, tests.
  • Lint, typecheck, tests, build, axe : verts ou écarts documentés dans docs/QA_REPORT.md.
Files · 2493ca54aca3eb39cc3f101be8763a9b240d00cd
Menu

Theme