# Rosa — Site vitrine

Site vitrine pour **Rosa**, artisan fleuriste à **Rennes**. Projet client de l'agence Corelia.

## Objectifs

- **Vitrine pure** : présenter l'atelier, le savoir-faire et les prestations. Pas d'espace client, pas d'admin, pas de blog, pas de e-commerce.
- **Performance maximale** : Lighthouse 100 sur les quatre axes, Core Web Vitals dans le vert (LCP < 2.5s, INP < 200ms, CLS < 0.1).
- **SEO local de haute qualité** : positionnement sur les requêtes "fleuriste Rennes", "bouquet mariage Rennes", "artisan fleuriste Rennes" et variantes longue traîne.

## Stack

- **Astro** (output `static`) + **Tailwind CSS** (intégration officielle).
- TypeScript pour les composants Astro et scripts.
- Aucun framework UI (React/Vue/Svelte) sauf nécessité ponctuelle isolée via island.
- Pas de JS côté client par défaut — n'ajouter du JS que pour une interaction strictement nécessaire (menu mobile, lightbox éventuelle).

## Pages

Quatre pages, toutes en français :

1. **Accueil** (`/`) — hero, engagements, sélection bouquets, aperçu mariages, atelier.
2. **Nos bouquets** (`/nos-bouquets`) — catalogue présentationnel (pas d'achat). Catégories saisonnières.
3. **Événements & mariages** (`/evenements-mariages`) — prestations événementielles, galerie, formulaire de demande de devis.
4. **L'atelier & contact** (`/contact`) — présentation de l'atelier, adresse, horaires, coordonnées, formulaire.

URLs en français, en kebab-case, sans accents, sans slash final (à fixer une fois et ne plus changer).

## Maquettes

Les maquettes HTML/Tailwind de référence sont dans [maquettes/](maquettes/) :
- [accueil_rosa_artisan_fleuriste/](maquettes/accueil_rosa_artisan_fleuriste/)
- [nos_bouquets_catalogue/](maquettes/nos_bouquets_catalogue/)
- [v_nements_mariages/](maquettes/v_nements_mariages/)
- [l_atelier_contact/](maquettes/l_atelier_contact/)

Le design system (couleurs, typo, espacements, composants) est défini dans [maquettes/rosa_artisan_fleuriste/DESIGN.md](maquettes/rosa_artisan_fleuriste/DESIGN.md). Reprendre les tokens tels quels dans `tailwind.config` et dans une CSS layer de variables.

**Contenu** : les textes français des maquettes sont quasi-finaux et à reprendre tels quels. La nav des maquettes contient encore des libellés anglais ("Our Bouquets", "Weddings", "Workshop") — les franciser à l'intégration ("Nos bouquets", "Mariages", "L'atelier").

## Performance — règles dures

- **Images** : utiliser exclusivement `<Image>` / `<Picture>` d'Astro (`astro:assets`). Formats AVIF + WebP avec fallback. Toujours préciser `width`/`height` pour éviter le CLS. `loading="lazy"` partout sauf hero LCP (`loading="eager"` + `fetchpriority="high"`).
- **Polices** : Playfair Display + Montserrat **self-hosted** (pas de Google Fonts CDN). `font-display: swap`, sous-set latin, preload des deux fontes critiques. Ne charger que les graisses utilisées.
- **CSS** : purge Tailwind agressif. Inline du CSS critique via `inlineStylesheets: 'auto'` dans `astro.config`.
- **JS** : zéro JS de tracking/analytics par défaut. Si analytics requis, privilégier Plausible ou un script first-party avec defer.
- **Pas de Tailwind via CDN en prod** (les maquettes l'utilisent — c'est une commodité de maquette uniquement).
- **Material Symbols** : ne PAS embarquer la police Material Symbols (les maquettes l'utilisent). Remplacer par des SVG inline optimisés (1.5px stroke, style fine-line conforme au DESIGN.md).

## SEO — règles dures

- `<html lang="fr">` partout.
- Chaque page : `<title>` unique (50–60 car.), `meta description` unique (140–160 car.), `<link rel="canonical">`.
- Open Graph + Twitter Card complets, image OG dédiée 1200×630 par page.
- **Sitemap.xml** généré (intégration `@astrojs/sitemap`).
- **robots.txt** explicite, autoriser tout sauf endpoints internes éventuels, lien sitemap.
- **Schema.org JSON-LD** :
  - `LocalBusiness` / `Florist` sur toutes les pages (NAP cohérent : nom, adresse Rennes, téléphone, horaires, geo).
  - `BreadcrumbList` sur les pages internes.
  - `Service` pour la page mariages.
  - `WebSite` + `Organization` sur l'accueil.
- **NAP** (Name / Address / Phone) doit être identique partout : footer, page contact, JSON-LD, et cohérent avec la fiche Google Business Profile de Rosa.
- Hiérarchie Hn stricte : un seul `<h1>` par page, pas de saut de niveau.
- Texte alternatif descriptif et naturel sur toutes les images (pas de bourrage de mots-clés).
- Liens internes maillés entre les quatre pages (footer + contextuels).

## Formulaires

Les formulaires (contact, demande mariage) sont implémentés en **`mailto:` simple** — pas d'endpoint serveur, pas de service tiers. Les champs sont sérialisés dans le `subject` + `body` du `mailto:`. C'est un choix assumé : zéro backend à maintenir, conforme à un hébergement statique OVH.

Conséquence à garder en tête : **ne pas promettre** au client une analytics de soumission, un anti-spam, ou un stockage des demandes. Si ces besoins émergent, il faudra basculer sur une solution avec endpoint (à rediscuter).

## Hébergement & déploiement

- **OVH hébergement mutualisé FR** (statique pur, pas de Node côté serveur).
- Build local : `npm run build` → dossier `dist/`.
- Déploiement : upload `dist/` via SFTP vers le `www/` OVH. Ne pas pousser le dossier `dist/` dans git.
- `.htaccess` à fournir : redirection HTTPS forcée, redirection www → apex (ou inverse, à confirmer avec le client une fois), gzip/brotli activés, cache headers longs sur assets fingerprintés.
- Certificat SSL Let's Encrypt OVH activé.

## Contraintes & non-objectifs

- **Ne pas ajouter** : compte client, panier, paiement, blog, CMS headless, base de données, authentification, multilingue (FR uniquement).
- **Ne pas ajouter** d'analytics, pixels marketing, ou scripts tiers sans validation explicite — chaque script tiers dégrade le score Lighthouse et la confidentialité.
- **Ne pas réintroduire** Tailwind CDN ou Material Symbols hors maquettes (voir section Performance).
- Pas de cookie banner si aucun cookie tiers n'est posé — c'est un objectif à préserver.

## Conventions

- Composants Astro en `PascalCase.astro` dans `src/components/`.
- Layouts dans `src/layouts/` (au minimum `BaseLayout.astro` avec head SEO complet).
- Données structurées (NAP, horaires, infos atelier) centralisées dans `src/data/business.ts` — source unique de vérité référencée par footer, page contact, et JSON-LD.
- Images sources dans `src/assets/` (traitées par Astro), pas dans `public/` (sauf favicon, og par défaut, robots.txt, fichiers de vérification).
