# Frontend statique et rendu PHP — étape 3

## Architecture livrée

Le build statique réutilise directement les composants React existants :

- `app/page.tsx` pour l'accueil et la publication ;
- `app/spirigo/page.tsx` pour SpiriGo ;
- `app/manage/[token]/page.tsx` pour la gestion privée.

Les entrées se trouvent dans `static-src/` et les documents HTML dans
`static/`. `vite.static.config.ts` génère le paquet dans `php/public/`.

Le frontend conserve les appels same-origin :

- `/api/events`
- `/api/manage/{token}`
- `/api/uploads`
- `/api/images/{key}`

Aucun contrat API, slug ou jeton n'a changé.

## Adaptations minimales

- Les composants SpiriGo et gestion utilisent des liens HTML standards à la
  place de `next/link`.
- La page de gestion lit le jeton dans `window.location.pathname`.
- Le frontend statique n'utilise ni route dynamique Next, ni `headers()`, ni
  rendu serveur Node.
- L'application Next reste disponible comme référence et continue de compiler.

## Routes Apache

`php/public/.htaccess` conserve :

| URL | Cible |
| --- | --- |
| `/` | `index.html` |
| `/spirigo` | `spirigo/index.html` |
| `/manage/{token}` | `manage/index.html` |
| `/e/{slug}` | `e/event.php` |
| `/api/*` | `api/index.php` |
| `/assets/*` et ressources | fichiers statiques |

`php/public/router.php` reproduit ces routes avec le serveur PHP intégré,
uniquement pour les tests locaux.

## Page événement PHP

`PublicEventPage` produit directement :

- le contenu visible complet ;
- les mêmes classes CSS que la page Next ;
- le titre dynamique ;
- la description dynamique ;
- l'URL canonique ;
- Open Graph ;
- Twitter Card ;
- l'image événement ou l'image Event'Go par défaut ;
- un `404` HTML non indexable.

La couche MySQL possède `findBySlug()` afin que le rendu n'utilise aucune API
cliente ni JavaScript.

## Comparaison visuelle

Comparaison locale effectuée à viewport égal entre Next (`:3100`) et le paquet
statique/PHP (`:3101`) :

- accueil : captures PNG strictement identiques, mêmes dimensions et même
  empreinte SHA-256 ;
- SpiriGo : mêmes dimensions de page et mêmes géométries, couleurs, polices et
  tailles sur neuf zones structurantes ;
- modale de publication statique : mêmes classes et dimensions attendues ;
- page événement PHP : contrôle visuel effectué avec les styles de la page
  Next.

Les captures de travail sont placées dans `outputs/` et restent hors Git.

## Parcours fonctionnel local vérifié

Avec PHP 8.3 et MySQL 8.4 locaux :

1. ouverture de l'accueil statique ;
2. publication en trois étapes ;
3. création sans compte ;
4. obtention du slug et du lien privé ;
5. ouverture de `/manage/{token}` ;
6. modification du titre ;
7. suppression ;
8. upload, lecture puis suppression physique d'une image ;
9. envoi d'e-mail désactivé, avec `emailSent: false`.

Aucun service OVH, e-mail réel ou donnée distante n'a été utilisé.

## Étape 4 restante

- durcir les en-têtes HTTP et la politique de cache ;
- finaliser la configuration e-mail OVH sans effectuer d'envoi réel ;
- compléter les protections d'upload et les tests de limites d'hébergement ;
- auditer l'accessibilité et le SEO technique ;
- préparer les procédures d'exploitation, sauvegarde et surveillance.
