Documentation
Le toolkit Genèse est la chaîne d'outils que nous utilisons pour construire, vérifier et livrer les sites et applications de nos projets. Cette page couvre l'installation, la configuration et la mise en ligne, de la machine vide au site en production.
Introduction
Le toolkit repose sur trois briques, volontairement peu nombreuses :
L'outil en ligne de commande : création du projet, serveur de développement, contrôles avant livraison et mise en ligne.
Un seul fichier décrit le projet : structure juridique visée, volets actifs, plugins et coordonnées.
Des modules optionnels qui ajoutent le SEO, la conformité RGPD, les formulaires ou le volet mobile.
Aux personnes qui interviennent sur un projet Genèse : bénévoles, prestataires, ou client qui souhaite reprendre la main sur son site après la livraison. Pour une estimation de budget, utilisez plutôt le configurateur.
Prérequis
Avant d'installer quoi que ce soit, vérifiez que votre machine dispose des outils suivants.
| Outil | Version | Rôle |
|---|---|---|
Node.js | 20 LTS (18 minimum) | Exécution de la CLI et du serveur de développement |
npm | 10 ou plus | Installation des paquets. pnpm 9 et Yarn 4 fonctionnent aussi |
Git | 2.40 ou plus | Versionnage du projet et livraison |
Flutter | 3.24 ou plus | Volet application mobile, uniquement si celui-ci est actif |
Vérifier ce qui est déjà installé
$ node -v
v20.11.0
$ npm -v
10.2.4
$ git --version
git version 2.45.1
Sous Windows, prenez l'installeur officiel sur nodejs.org et cochez l'ajout au PATH.
Sous macOS et Linux, passez plutôt par un gestionnaire de versions : il évite les conflits entre projets.
$ nvm install 20
$ nvm use 20
Now using node v20.11.0 (npm v10.2.4)
Installation
La CLI s'installe une fois pour toutes, en global. Choisissez votre gestionnaire de paquets :
$ npm install -g @genese/cli
$ pnpm add -g @genese/cli
$ yarn global add @genese/cli
Contrôlez ensuite que la commande répond :
$ genese --version
genese/1.4.0 node-v20.11.0
N'utilisez pas sudo : cela crée des fichiers appartenant à root que npm ne saura
plus mettre à jour. La bonne solution est décrite dans la section Dépannage.
Démarrage rapide
Quatre commandes suffisent pour obtenir un projet qui tourne en local.
-
1
Créer le projet
L'assistant pose quelques questions : nom du projet, structure juridique visée et volets à activer.
terminal$ genese init mon-projet ? Nom affiché du projet › Mon Projet ? Structure juridique › SAS ? Volets à activer › administratif, web, communication ✔ Projet créé dans ./mon-projet -
2
Installer les dépendances
terminal$ cd mon-projet $ npm install -
3
Lancer le serveur de développement
Le rechargement est automatique à chaque fichier enregistré.
terminal$ npm run dev ▲ genese dev local http://localhost:3000 réseau http://192.168.1.24:3000 prêt en 412 ms -
4
Vérifier avant de livrer
La commande
checkpasse en revue l'accessibilité, les liens morts, les métadonnées et les en-têtes de sécurité.terminal$ genese check ✔ contrastes .............. 0 problème ✔ navigation clavier ...... 0 problème ✔ liens ................... 34 vérifiés ! images .................. 2 sans attribut alt
Structure des fichiers
Un projet fraîchement créé contient uniquement ce qui suit. Rien n'est caché, tout est modifiable à la main.
mon-projet/
├─ public/ fichiers servis tels quels : images, polices, favicon
├─ src/
│ ├─ pages/ une page du site = un fichier .html
│ ├─ styles/ style.css et ses partiels
│ ├─ scripts/ main.js et modules
│ └─ contenus/ textes en markdown, relus par le client
├─ mobile/ projet Flutter, présent si le volet mobile est actif
├─ .env.local secrets de la machine, jamais versionnés
├─ genese.config.ts configuration du projet
└─ package.json
dist/
Il apparaît après la première commande genese build et contient le site
compilé. Il n'est pas versionné : il se régénère à chaque mise en ligne.
Le fichier genese.config.ts
C'est le seul fichier à connaître pour piloter un projet. Il est typé : votre éditeur signale une option mal orthographiée avant même l'exécution.
import { defineConfig } from "@genese/core";
import seo from "@genese/plugin-seo";
import rgpd from "@genese/plugin-rgpd";
export default defineConfig({
projet: "mon-projet",
structure: "SAS",
contact: "contact@mon-projet.fr",
volets: {
administratif: true,
legal: false,
web: true,
communication: true,
},
suivi: false,
plugins: [
seo({ sitemap: true }),
rgpd({ banniere: "minimale" }),
],
});
Référence des options
| Option | Type | Défaut | Description |
|---|---|---|---|
projet | string | requis | Identifiant technique du projet, en minuscules et sans accent. |
structure | "SAS" | "SASU" | "micro" | "association" | "SAS" |
Structure juridique visée. Détermine les documents générés par le volet administratif. |
contact | string | requis | Adresse qui recevra les messages envoyés depuis le site. |
volets.administratif | boolean | false |
Active la génération des statuts, PV et registres. |
volets.legal | boolean | false |
Active la relecture de conformité et les mentions obligatoires. |
volets.web | boolean | true |
Active le site et, si Flutter est présent, le dossier mobile/. |
volets.communication | boolean | false |
Ajoute les gabarits d'affiches, de flyers et de visuels réseaux. |
suivi | boolean | false |
Bascule le projet en accompagnement douze mois, avec points de suivi planifiés. |
plugins | Plugin[] | [] |
Liste ordonnée des plugins à charger. |
build.sortie | string | "dist" |
Dossier de destination de la compilation. |
Variables d'environnement
Les secrets ne vivent jamais dans genese.config.ts. Ils se déclarent dans un
fichier .env.local, à la racine du projet.
# Jeton de déploiement, fourni par Genèse
GENESE_TOKEN=gns_live_xxxxxxxxxxxx
# Destinataire du formulaire de contact
CONTACT_TO=contact@mon-projet.fr
SMTP_URL=smtp://utilisateur:motdepasse@smtp.example.net:587
# Exposées au navigateur : uniquement des valeurs publiques
PUBLIC_SITE_URL=https://mon-projet.fr
.env.local est listé dans le .gitignore du projet. Seules les
variables préfixées par PUBLIC_ sont injectées dans le navigateur : tout le reste
reste côté serveur.
Commandes
Toutes les commandes acceptent --help pour afficher leurs options.
| Commande | Ce qu'elle fait |
|---|---|
genese init [nom] | Crée un projet et pose les questions de cadrage. |
genese dev | Serveur local avec rechargement. Option --port. |
genese build | Compile le site dans dist/, minifie et optimise les images. |
genese preview | Sert le contenu de dist/ comme en production. |
genese check | Accessibilité, liens morts, métadonnées, en-têtes de sécurité. |
genese estimate | Recalcule le budget à partir des volets actifs du fichier de configuration. |
genese deploy | Met en ligne. Option --env production ou preprod. |
genese status | État du projet : dernière mise en ligne, certificat, sauvegardes. |
genese upgrade | Met à jour la CLI et les plugins officiels vers la dernière version compatible. |
Exemple : genese status
$ genese status
projet ............ mon-projet
environnement ..... production
dernier build ..... il y a 2 jours
✔ certificat TLS .... valide 74 jours
✔ sauvegardes ....... 7 versions conservées
Plugins
Un plugin s'installe comme n'importe quel paquet, puis se déclare dans la configuration.
$ npm install @genese/plugin-seo @genese/plugin-rgpd
$ pnpm add @genese/plugin-seo @genese/plugin-rgpd
$ yarn add @genese/plugin-seo @genese/plugin-rgpd
| Plugin | Rôle |
|---|---|
@genese/plugin-seo | Métadonnées, sitemap, données structurées et aperçus de partage. |
@genese/plugin-rgpd | Bannière de consentement minimale, mentions légales, registre des traitements. |
@genese/plugin-forms | Formulaires avec anti-spam, validation côté serveur et envoi par SMTP. |
@genese/plugin-analytics | Mesure d'audience sans cookie, hébergée dans l'Union européenne. |
@genese/plugin-flutter | Relie le dossier mobile/ et compile l'application iOS et Android. |
@genese/plugin-print | Exporte les gabarits d'affiches et de flyers en PDF prêts à imprimer. |
Les plugins s'exécutent de haut en bas. plugin-seo doit être déclaré avant
plugin-rgpd, sinon la bannière de consentement n'est pas prise en compte dans
les pages générées.
Mise en ligne
La compilation produit un site statique : il peut être servi par n'importe quel hébergeur, sans base de données ni processus permanent.
$ genese build
✔ 28 pages compilées
✔ images optimisées .... 1,8 Mo économisés
sortie ............... dist/ (612 Ko)
$ genese deploy --env production
▲ en ligne : https://mon-projet.fr
Ce que nous exigeons en production
| Point | Attendu |
|---|---|
| Transport | HTTPS obligatoire, redirection depuis HTTP, HSTS activé. |
| En-têtes | Content-Security-Policy, X-Content-Type-Options, Referrer-Policy. |
| Hébergement | Serveurs situés dans l'Union européenne. |
| Sauvegardes | Sept versions conservées, restauration possible à tout moment. |
| Accès | Remis au client à la livraison : domaine, hébergement, dépôt Git. |
Dépannage
genese: command not found
Le dossier des binaires globaux n'est pas dans votre PATH. Affichez-le puis ajoutez-le à votre profil de shell :
$ npm config get prefix
/Users/moi/.npm-global
$ echo 'export PATH="$(npm config get prefix)/bin:$PATH"' >> ~/.zshrc
EACCES: permission denied
npm tente d'écrire dans un dossier système. Plutôt que sudo, déplacez le
préfixe npm dans votre dossier personnel, puis réinstallez la CLI :
$ npm config set prefix ~/.npm-global
$ npm install -g @genese/cli
The engine "node" is incompatible
Votre version de Node est trop ancienne. Basculez sur la 20 puis relancez l'installation
des dépendances : nvm use 20 && npm install.
Port 3000 is already in use
Un autre serveur occupe le port. Lancez le vôtre ailleurs :
genese dev --port 3001.
Support
Une question qui n'est pas couverte ici, un comportement inattendu, une demande d'accès : écrivez-nous, nous répondons sous 48 heures ouvrées.
Contact technique
Précisez le nom du projet, la commande lancée et le message d'erreur complet.