# Routes et URL à conserver

Les chemins ci-dessous constituent le contrat public. La conversion ne doit pas imposer d'extension `.php` visible ni changer les liens existants.

## Pages

| URL | Type actuel | Comportement à conserver |
| --- | --- | --- |
| `/` | composant React client | Accueil Event'Go, exemples, choix d'univers et publication en modale |
| `/?publier=spirigo` | accueil React | Ouvre directement la publication avec la catégorie `Spiri’go` |
| `/#evenements` | ancre | Défile vers « Les prochains événements » |
| `/spirigo` | composant React client | Page SpiriGo, géolocalisation navigateur et exemples |
| `/spirigo#pres-de-moi` | ancre | Défile vers les événements proches |
| `/e/{slug}` | composant Next serveur | Page publique d'un événement ou page 404 |
| `/manage/{token}` | composant React client | Gestion privée : lecture, modification et suppression |

### Publication

Il n'existe pas de route `/publish` ou `/publication`. La publication est une modale de l'accueil :

- ouverture par bouton sur `/` ;
- ouverture SpiriGo par `/?publier=spirigo` ;
- upload facultatif via `/api/uploads` ;
- création via `/api/events` ;
- résultat vers `/e/{slug}` et `/manage/{token}`.

## API

| URL | Méthodes |
| --- | --- |
| `/api/events` | `GET`, `POST` |
| `/api/manage/{token}` | `GET`, `PATCH`, `DELETE` |
| `/api/uploads` | `POST` |
| `/api/images/{key}` | `GET` |

Le contrat détaillé figure dans `API_CONTRACT.md`.

## Ressources publiques actuelles

| URL | Fichier |
| --- | --- |
| `/favicon.svg` | `public/favicon.svg` |
| `/og-eventgo.png` | `public/og-eventgo.png` |
| `/og.png` | `public/og.png` |
| `/spirigo-echo-hero.png` | `public/spirigo-echo-hero.png` |
| `/file.svg` | `public/file.svg` |
| `/globe.svg` | `public/globe.svg` |
| `/window.svg` | `public/window.svg` |

Les ressources compilées Next sous `/_next/` ne constituent pas un contrat permanent : leurs noms sont générés. La version statique pourra employer d'autres noms hachés, à condition que les pages et ressources fonctionnent sans changer visiblement.

## Métadonnées et SEO

Métadonnées globales actuelles :

- titre : `Event’go — Tous les événements, tous les univers` ;
- description : publication Event'Go ou univers SpiriGo ;
- icône : `/favicon.svg` ;
- image Open Graph/Twitter : `/og-eventgo.png` ;
- langue HTML : `fr`.

La future page `/e/{slug}` devra être rendue côté PHP avec :

- HTTP `200` si l'événement existe, `404` sinon ;
- titre et description propres à l'événement ;
- URL canonique ;
- Open Graph et Twitter Card ;
- image de l'événement si présente, sinon image Event'Go ;
- contenu principal disponible sans exécution JavaScript.

La page `/manage/{token}` devra être exclue des moteurs de recherche et ne pas transmettre le jeton comme référent.

## Règles de compatibilité

- Conserver les apostrophes typographiques dans `Event’go` et `Spiri’go`.
- Conserver les slugs et jetons existants ; ne pas les régénérer.
- Conserver le format `/api/images/{key}` ; aucune URL R2 n'existe à reprendre.
- Ne pas rediriger publiquement un jeton de gestion vers une URL différente.
- Les URL doivent fonctionner directement lors d'un rafraîchissement navigateur.
- Les API restent same-origin et ne nécessitent pas CORS.
- Les chemins sont sensibles aux formats définis dans le contrat API.
- Les fragments (`#evenements`, `#pres-de-moi`) restent traités côté navigateur.

## Routes non contractuelles ou historiques

- `/_vinext/image` appartient à l'ancien worker Vinext/Cloudflare et n'est pas utilisé par l'interface actuelle.
- `app/chatgpt-auth.ts` contient un mécanisme d'authentification de starter, mais aucune page ni route actuelle ne l'importe.
- `examples/d1/app/api/notes/route.ts` est un exemple non monté dans l'application.
- Aucun endpoint de réservation n'existe pour le bouton visuel « Je participe ».
