# Déployer un framework

Host sert ce que `vercel build` produit : les fichiers statiques, les pages pré-rendues et, en préversion, les fonctions Node. Tu construis en local ou en CI, puis tu envoies le résultat. Les sources de ton projet ne sont jamais servies.

**Résultat attendu** : un déploiement **Prêt** dont la page affiche ton site construit.

**Avant de commencer** : une commande de build qui fonctionne sur ton poste, et une clé d’API dans `VERCEL_TOKEN`. Pour la liste des frameworks et de ce qui est servi pour chacun, voir [Compatibilité](/docs/reference/compatibilite/).

## Construire puis envoyer

1. **Construis le projet**

   Depuis le dossier du projet :

   ```bash
   export VERCEL_TOKEN=ah_…
   vercel --api https://api.host.hgdc.ch build
   ```

   La commande détecte le framework, installe les dépendances, lance le build, et écrit le résultat dans `.vercel/output`. Elle télécharge aussi les variables de l’environnement visé. Voir [vercel build](/docs/reference/cli/#vercel-build).

   **Vérification** : le dossier `.vercel/output/static` contient les fichiers de ton site.

2. **Envoie le résultat**

   ```bash
   vercel --api https://api.host.hgdc.ch deploy --prebuilt
   ```

   L’option `--prebuilt` envoie `.vercel/output` tel quel, sans reconstruire.

   **Vérification** : l’adresse du déploiement répond avec ton site, et le déploiement passe à **Prêt**.

3. **Passe en production**

   Utilise la même cible des deux côtés. Pour la production :

   ```bash
   vercel --api https://api.host.hgdc.ch build --prod
   vercel --api https://api.host.hgdc.ch deploy --prebuilt --prod
   ```

   > **Attention**
   >
   > La CLI refuse l’envoi si la cible du build et celle du déploiement ne correspondent pas. Une preview se construit sans `--prod`, et se déploie sans `--prod`.

## Ce qui est servi, par framework

| Framework                  | Servi tel quel                           | Préversion                                                                |
| -------------------------- | ---------------------------------------- | ------------------------------------------------------------------------- |
| Astro                      | Les pages générées                       | Rendu à la demande, routes d’API, middleware, ISR                         |
| Vite (React, Vue, Svelte…) | Le build de l’application                |                                                                           |
| SvelteKit                  | Les pages pré-rendues                    | Rendu à la demande, routes d’API, actions de formulaire, ISR              |
| Nuxt                       | Les pages générées                       | Rendu à la demande, routes d’API, middleware serveur, ISR                 |
| TanStack Start             | Les pages pré-rendues                    |                                                                           |
| React Router               | Les pages pré-rendues                    |                                                                           |
| Next.js                    | Les pages pré-rendues et leur navigation | Rendu à la demande, routes d’API, Server Actions, proxy, ISR, routes edge |

Le tableau complet, avec les fonctions de la plateforme, est dans [Compatibilité](/docs/reference/compatibilite/).

## Next.js

- `next/image` sert l’image d’origine, sans redimensionnement. Optimise tes images avant le build.
- La page `not-found` sert de 404.
- Une page rendue à la demande, une route d’API ou une Server Action tourne dans une fonction. Elle demande la préversion, voir [Préversion](/docs/concepts/preversion/).

## Un site de documentation

Un dossier avec un `docs.json` et le paquet `@hgdc/docs` dans son `package.json` est reconnu comme une documentation, sans `vercel.json`. Le build lance `hgdc-docs build` et publie le dossier `dist`. Les pages `.md` sont servies en `text/markdown`.

## Si ça ne marche pas

- Le déploiement répond `404` : la sortie de build ne contient pas de `index.html` à la racine, ou le dossier de sortie est faux. Voir [Dépannage](/docs/guides/depannage/#mon-site-affiche-404).
- Une page répond `501` : le rendu à la demande n’est pas encore ouvert à ton organisation. Pré-rends la page, ou consulte [Préversion](/docs/concepts/preversion/).
