# Changelog

Format : [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) · Versioning SemVer.

## [0.62.0] - 2026-07-23

### Ajouté
- **Un bandeau annonce l'appli du festival en haut de toutes les pages** : « Tout le festival dans votre poche : programme, plan et invités. » avec un bouton doré « Ouvrir l'appli » vers mobile.festyggdrasil.fr. Le visiteur peut le fermer, il ne le revoit alors pas avant un mois. L'affichage et l'adresse se règlent dans « Paramètres du site ».
- **Export Markdown des questions de visiteurs** sur la page « Questions / leads » : chaque question part avec **la conversation entière** qui l'a précédée, plus une consigne de rédaction, pour être donnée telle quelle à une IA qui écrira les réponses. Un second bouton n'exporte que les questions non traitées.

## [0.61.1] - 2026-07-23

### Ajouté
- **Mode d'emploi pour brancher un autre site** (`API.md`) : la liste des adresses publiques (infos pratiques, FAQ, configuration, animations, exposants, photographes, programme, plan), les trois règles à respecter (appel depuis le serveur, copie locale, source unique) et un connecteur prêt à coller, en Laravel comme en PHP simple.

## [0.61.0] - 2026-07-23

### Corrigé
- **Un créneau n'emprunte plus la fiche d'un autre groupe.** « Initiation à la danse » par Queimada, troupe absente de La Comte, affichait la photo et le texte de « Danse historique et participation du public » d'une tout autre compagnie : le seul mot « danse » en commun suffisait. Désormais, quand un créneau annonce QUI joue, seul le nom de cette troupe peut le relier à une fiche ; introuvable, il n'affiche rien plutôt que n'importe quoi. Les rapprochements légitimes (« Thalia » retrouve « Compagnie Thalia ») sont conservés.

### Modifié
- **Tout bouton de rechargement recharge maintenant TOUS les caches** (La Comte, Orgexpo, photographes, invités, programme, plan), depuis n'importe quelle page du back-office. Les sources se citent les unes les autres : le programme nomme des activités et des invités, le plan nomme des exposants et des scènes. Une mise à jour partielle laissait des fiches manquantes ou dépareillées. Le message récapitule chaque source.

## [0.60.0] - 2026-07-23

### Ajouté
- **Le programme se relie aux fiches par identifiant, plus par ressemblance de nom.** Merlin (v1.60) annonce désormais, pour chaque créneau et chaque artiste, sa référence stable chez sa source. Le site l'utilise : une troupe rebaptisée dans La Comte ou un invité renommé dans Yggdra-Guest **garde sa fiche, sa photo et sa présentation**, là où le rapprochement par nom les perdait à chaque correction ou vidage de cache.
- Le rapprochement par nom reste en dernier recours, pour les créneaux saisis à la main dans Merlin : rien n'est perdu.

### Note
- ⚠️ Une migration est à appliquer après le déploiement (deux colonnes sur les créneaux). Le site et l'import continuent de fonctionner sans elle, avec l'ancien rapprochement par nom.

## [0.59.2] - 2026-07-23

### Corrigé
- **Plan : la recherche d'un emplacement s'arrêtait au 60e résultat**, sans le dire, et suivait l'ordre de pose sur le plan : impossible de trouver un nom au-delà de la lettre L. La liste affiche désormais **tous** les emplacements, **rangés par ordre alphabétique**.

## [0.59.1] - 2026-07-23

### Corrigé
- **Une nouveauté ne peut plus casser le site en attendant les migrations.** Entre le dépôt des fichiers sur l'hébergement et le clic sur « appliquer les migrations », le code neuf tourne sur l'ancienne base : une table pas encore créée provoquait une erreur 500. Les pages et adresses concernées (infos pratiques, plan, programme, liens publicitaires, suivi d'audience) vérifient désormais que la table existe et se rabattent sur un contenu de repli. La page d'accueil garde ainsi ses informations pratiques, même avant la migration.
- Un test dédié supprime les tables récentes et vérifie que **toutes les pages publiques répondent toujours**.

## [0.59.0] - 2026-07-23

### Ajouté
- **Les informations pratiques deviennent un module du back-office** (« Infos pratiques ») : dates, lieu, transports, parking, restauration, paiement, accessibilité, animaux, météo, billetterie. Une carte se modifie, se réordonne, se dépublie, sans toucher au code. Les dix cartes déjà en ligne ont été reprises telles quelles.
- **Elles sont diffusées aux autres sites** par l'adresse publique `/api/v1/infos` : le back-office d'ici est la source unique, un horaire corrigé ici est corrigé partout.
- Une carte peut pointer vers **la billetterie du moment** (écrire `billetterie` dans l'adresse du bouton) : le lien suit tout seul si vous changez la billetterie dans les paramètres, y compris sur les sites qui reprennent nos infos.

### Corrigé
- **L'accueil et la page « Infos pratiques » se contredisaient** : l'accueil annonçait encore « stationnement à préciser » et « horaires à confirmer » quand l'autre page donnait le parking gratuit et les horaires définitifs. Les deux pages puisent désormais à la même source, l'accueil en montrant les six premières cartes.
- Les infos pratiques sont écrites **dans la page par le serveur**, et non ajoutées après coup par du JavaScript : elles restent donc lisibles par les moteurs de recherche.

## [0.58.1] - 2026-07-22

### Modifié
- **L'import ne se freine plus d'avance** : le quota de la clé Merlin ayant été relevé, les images sont redemandées au plus vite. Le rythme de repli (50 appels par minute) ne s'enclenche que si Merlin refuse un appel, et les images déjà rapatriées restent réutilisées.

## [0.58.0] - 2026-07-22

### Corrigé
- **Le fond de plan manquait à cause du quota de l'API**, pas de son poids : Merlin n'accepte que 60 appels par minute et par cle, or l'import en demandait un par image (une soixantaine de decors) ; les dernieres etaient refusees, dont justement le fond. Les images deja rapatriees **ne sont plus redemandees** (l'import ordinaire ne fait plus que deux appels), les nouvelles sont **espacees pour tenir le rythme**, et un refus laisse passer l'orage avant de reessayer.

### Ajouté
- Un bouton **« Importer, images comprises »** sur la page « Plan du site » : à utiliser quand une image a été retouchée dans Merlin (plus long, puisqu'il redemande tout).

## [0.57.1] - 2026-07-22

### Corrigé
- **Une image que Merlin ne livre pas dit maintenant pourquoi** : le message du back-office porte le code de réponse (« réponse 500 », « pas de réponse » quand le délai est dépassé), de quoi distinguer un fichier trop lourd d'une image absente à la source.

## [0.57.0] - 2026-07-22

### Corrigé
- **Le plan s'affiche enfin vite.** Mesuré en ligne : les décors collés arrivaient de Merlin en pleine résolution, soit **28,7 Mo d'images** (jusqu'à 2,3 Mo pièce) pour des dessins qui n'occupent que quelques dizaines de pixels à l'écran. Ils sont désormais **ramenés à la taille où ils s'affichent** (12 pixels par mètre de terrain, 900 px au maximum) et convertis en WebP à l'import.
- **Le fond de plan était tout simplement absent** : son téléchargement échouait en silence à l'import. Il est maintenant récupéré en flux (plus de limite de mémoire), avec un second essai en version allégée s'il est trop lourd, et **tout échec d'image est signalé** sur la page « Plan du site » du back-office au lieu de passer inaperçu.
- **Le plan ne se reconstruit plus à chaque geste** : pendant un glissement ou un zoom, seuls le cadrage et les puces bougent, les images ne sont plus recréées (donc plus redécodées) par le navigateur. Le dessin complet est refait une fois le geste terminé.
- **Les images du plan sont gardées un an par le navigateur** (au lieu de 15 minutes) : leur nom porte l'empreinte de leur contenu, une image retouchée dans Merlin change donc d'adresse et se recharge quand même.

## [0.56.0] - 2026-07-22

### Ajouté
- **Les décors retournés en miroir** (nouveauté Merlin) : un autocollant inversé horizontalement ou verticalement dans Merlin s'affiche retourné sur le plan du site, dans son cadre exact. Un arbre penché à droite, sa copie penchée à gauche : le plan du site est enfin identique à celui de Merlin.

## [0.55.0] - 2026-07-22

### Ajouté
- **Le jeu d'Yggdrasil sur le plan** : les serrures du jeu des clés et les personnages de la quête, posés dans Merlin, apparaissent sur le plan du site sous forme de pastilles colorées (trou de serrure ou silhouette), à taille lisible quel que soit le zoom. Un clic dit de quel jeu il s'agit et, quand la pastille est raccordée à un stand, **chez qui aller chercher**.
- Ces pastilles ont leur propre bouton de tri sous le plan (« Jeu d'Yggdrasil »), à côté d'Animations et Exposants.
- **Les décors collés (autocollants) habillent le plan sans le gêner** : ils se dessinent sous les vignettes des emplacements, comme dans Merlin, et ne sont ni cliquables ni comptés parmi les emplacements.
- **Les repères écrits qui pointent un endroit précis tracent leur trait** jusqu'au point désigné, et les blocs de texte reprennent leur encadré en pointillé.

### Corrigé
- **Les vignettes rondes étaient dessinées carrées** : Merlin dit « rond », le site n'entendait que « cercle ».

## [0.54.1] - 2026-07-22

### Corrigé
- **Plan** : le nom d'une scène se répartit maintenant sur le nombre de lignes qui le rend le plus lisible (« GRANDE / SCÈNE » sur une vignette étroite, une seule ligne sur un bandeau large) au lieu de dépendre de sa seule longueur.

## [0.54.0] - 2026-07-22

### Ajouté
- **Plan : le planning d'une scène en plein écran**. La fiche d'une scène propose « 🖥️ Voir le planning en plein écran », qui ouvre le programme dans un nouvel onglet **directement sur cette scène** (le bon jour est sélectionné, le tableau est mis en évidence quelques secondes).
- Le planning d'une scène s'affiche aussi **en aperçu** pour les membres connectés, même avant la diffusion publique du programme (le public, lui, ne voit toujours rien avant la date).

### Corrigé
- **Plan** : on ne peut plus dézoomer ni faire glisser le plan au-delà de ses bords : fini les côtés vides autour du terrain.
- **Plan** : le texte des vignettes tournées (nom de scène, numéro d'emplacement) et les repères écrits restent **horizontaux**, donc lisibles, quelle que soit l'orientation du dessin.

## [0.53.1] - 2026-07-22

### Corrigé
- **Plan** : le **nom des scènes s'affiche en grand** sur leur vignette (sur deux lignes équilibrées quand il est long), au lieu de rester vide.
- **Plan** : les puces grossissent maintenant légèrement quand on zoome (de 35 à 54 px environ) au lieu de rester figées et de paraître minuscules ; elles restent lisibles en vue d'ensemble et n'envahissent jamais le plan.

## [0.53.0] - 2026-07-22

### Ajouté
- **Les scènes sur le plan** : les scènes posées dans Merlin apparaissent sur le plan du site, et un clic sur l'une d'elles annonce **ce qui s'y joue** (jour, horaires, spectacle, artistes), repris du programme, avec un lien vers le programme complet. Rien n'est dévoilé avant la date de diffusion du programme.

### Corrigé
- **Plan** : plus de pastille en double dans la fiche quand la famille et le type disent la même chose.

## [0.52.0] - 2026-07-22

### Ajouté
- **Les puces du plan** : les animations de La Comte, dont les grands blocs écrasaient le fond de plan, s'affichent maintenant comme un petit repère en goutte portant leur numéro d'emplacement, posé exactement là où l'organisation l'a placé dans Merlin. La goutte garde la **même taille à l'écran quel que soit le zoom**, prend la couleur de l'activité et écrit son numéro en blanc ou en noir selon ce qui se lit le mieux. Les exposants et les stands de l'organisation gardent leur vignette.
- **Rafraîchissement économe** : le site interroge d'abord l'empreinte de fraîcheur du plan et ne retélécharge le plan entier que s'il a réellement changé (le bouton « Importer le plan » force le rechargement complet).

## [0.51.2] - 2026-07-22

### Corrigé
- **Plan** : la règle « pas de numéro d'emplacement, pas d'affichage » s'applique bien à **tous** les emplacements attribuables, animations comprises (et plus seulement aux exposants). Seuls les décors et dessins libres restent visibles sans numéro.

## [0.51.1] - 2026-07-22

### Corrigé
- **Plan** : cliquer directement sur une vignette du plan ouvre bien sa fiche. Le mécanisme de déplacement captait le clic avant elle ; désormais un appui sans mouvement ouvre la fiche, un appui suivi d'un glissement déplace le plan (souris comme doigt).

## [0.51.0] - 2026-07-22

### Ajouté
- **Plan : fiche complète au clic** sur un emplacement, dans l'esprit des encarts du programme : photo, nom, auteur (troupe ou créateur), catégorie, numéro d'emplacement, présentation et **liens** (site, Facebook, Instagram) repris de La Comte ou d'Orgexpo.
- **Module de recherche sous le plan** : tri par **Animations / Exposants / Autres lieux**, **légende interactive** (un clic sur un type filtre le plan), recherche par nom ou numéro, et liste de résultats cliquable qui **zoome sur l'emplacement** et ouvre sa fiche. Compteur et bouton « tout afficher ».

### Corrigé
- **Plan** : les stands sans numéro d'emplacement (pas encore attribués) ne sont plus affichés ; les décors et scènes, eux, restent visibles même sans numéro.
- **Page « Le plan » sur mobile** : la grille des repères ne débordait plus de l'écran (règles responsives déclarées avant la règle de base, donc jamais appliquées).

## [0.50.0] - 2026-07-22

### Ajouté
- **Le plan du festival devient interactif** (page « Le plan ») : le plan dessiné dans Merlin est repris à l'échelle, avec zoom, déplacement à la souris ou au doigt, recherche d'un stand ou d'une taverne, légende par type, et une fiche au clic sur chaque emplacement (numéro, type, description et photo venant de La Comte ou d'Orgexpo). Il remplace l'image statique dès qu'il est disponible.
- **Date de dévoilement du plan**, comme pour le programme : avant l'heure dite, le public ne reçoit rien du tout ; les membres connectés voient déjà le plan avec un bandeau rouge d'avertissement.
- **Nouveau menu « Plan du site (Merlin) »** : date de dévoilement, test de connexion, import (bouton + cron horaire + bouton « Tout resynchroniser ») et compte rendu de ce qui a été écarté.

### Sécurité
- **Seul le plan commercial sort** : les vignettes non publiques ou annulées, le fond de plan technique et les tracés techniques (portes, passages, fenêtres) sont écartés à l'import ; statuts, notes internes et pilotes ne sont jamais enregistrés dans le site, même si la clé API voit tout.

## [0.49.1] - 2026-07-22

### Ajouté
- **Maître Frelon est de retour** : sa fiche réapparaît sur la page Invités, sa tuile dans la section concerts de l'accueil, son emplacement photo dans le gestionnaire d'images, et le chatbot le cite à nouveau parmi les artistes invités.

## [0.49.0] - 2026-07-22

### Ajouté
- **Nouvelle page publique « Nos partenaires »** (/partenaires), dans le menu Découvrir de toutes les pages : partenaires **en vedette** en grand en tête, puis regroupés par catégorie (institutions, partenaires, médias, fournisseurs, associations), chacun avec son logo, sa présentation et un lien vers son site. Message d'attente élégant tant qu'aucun partenaire n'est publié, et bloc « Devenir partenaire » en bas de page.
- **Fiche partenaire enrichie** au back-office : catégorie, présentation (une ou deux phrases) et case ⭐ « En vedette ». Le tout alimente la page publique, l'accueil et le bandeau du pied de page.

## [0.48.0] - 2026-07-22

### Ajouté
- **Partenaires : nouveau module d'image**. Fini le vieux champ « Parcourir » : chaque partenaire a une zone de dépôt moderne (glisser-déposer, clic pour choisir un fichier, **aperçu immédiat** avant enregistrement), un bouton **📚 Médiathèque** pour réutiliser une image déjà en ligne, et un ✕ pour retirer le logo. La page passe en fiches, lisibles aussi sur mobile.
- Le sélecteur de médiathèque (navigation par dossiers, vignettes) est désormais un composant partagé, réutilisable sur toutes les pages du back-office.

### Corrigé
- **Partenaires** : retirer ou remplacer un logo ne supprime plus jamais l'image d'origine quand elle vient de la médiathèque (elle est partagée avec le reste du site).

## [0.47.1] - 2026-07-22

### Corrigé
- **Photographes** : le statut officiel / accrédité suit désormais le **forfait du dossier de l'édition** (le libellé fait foi), même quand le type d'accréditation enregistré côté Festorga Photographe le contredit.
- **Photographes** : les albums « sans compte » (crédits d'anciennes éditions sans fiche photographe) étaient ignorés à l'import ; ils sont maintenant importés et apparaissent dans les albums des éditions précédentes, sans polluer l'annuaire de l'édition en cours.
- **Back-office** : chaque photographe affiche son forfait, et un photographe sans photo est signalé (« 0 photo : pas d'album affiché »).

## [0.47.0] - 2026-07-22

### Ajouté
- **Liens publicitaires** : nouveau menu au back-office pour créer des liens courts à donner aux partenaires (ex. `/go/affiche-cultura`), redirigeant vers l'accueil ou la billetterie. Nom du lien au choix, copie en un clic, activation/désactivation.
- **Vraies statistiques de campagne**, mesurées côté serveur (insensibles aux bloqueurs de publicité) et anonymes par conception (jamais d'IP, robots exclus, Do Not Track respecté) : clics, visiteurs uniques, graphique 14 jours, appareils, sites d'origine, langues, et surtout la **rentabilité** : combien de pages les visiteurs du lien ont ouvertes ensuite et combien ont cliqué vers la billetterie.
- Les campagnes remontent aussi dans l'API statistiques de l'app centrale (bloc `campagnes`).

## [0.46.8] - 2026-07-22

### Corrigé
- **Programme sur mobile** : caractères des tuiles réduits et titres sur deux lignes : le nom du spectacle reste lisible en entier, même sur les créneaux de 45 minutes et moins.

## [0.46.7] - 2026-07-22

### Corrigé
- **Programme sur mobile** : les scènes fusionnées ne s'affichent plus en colonnes minuscules ; sur petit écran, chaque scène du tableau s'empile en pleine largeur (titre « Tableau · Scène »), et l'affichage rebascule tout seul quand on tourne l'écran.

## [0.46.6] - 2026-07-22

### Corrigé
- **Programme** : le planning est pensé pour des créneaux jusqu'à 5 minutes. L'échelle verticale s'adapte : un tableau contenant des créneaux courts se dessine plus grand (avec repères discrets à la demi-heure), et les tuiles gardent leur vraie place sans jamais se recouvrir.

## [0.46.5] - 2026-07-22

### Corrigé
- **Programme** : les créneaux très courts (10-20 minutes) ne débordent plus sur le créneau suivant. Le partage côte à côte tient compte de la taille minimale de lecture des tuiles, pas seulement des horaires.

## [0.46.4] - 2026-07-22

### Corrigé
- **Programme** : deux créneaux qui se chevauchent sur la même scène ne se recouvrent plus ; ils se partagent la largeur côte à côte, comme dans un agenda.

## [0.46.3] - 2026-07-22

### Corrigé
- **Accueil** : le bloc de l'affiche 2026 remonte juste sous le bandeau doré des chiffres, avant la section concerts.

## [0.46.2] - 2026-07-22

### Corrigé
- **Lloyd HypnoGeek** : sa carte annonce son rôle de **présentateur officiel du festival**, aux commandes des shows de la grande scène tout le week-end.

## [0.46.1] - 2026-07-22

### Corrigé
- **Invités** : le groupe s'appelle désormais par son nom complet « La Rioule des Compagnons du Monde » (pages Concerts, Invités, Accueil et libellés photos) ; l'orthographe du magicien est corrigée en « Jérémy Allimann » ; la carte de Lloyd HypnoGeek ne mentionne plus de stand.

## [0.46.0] - 2026-07-21

### Ajouté
- **Bouton « Tout resynchroniser »** en haut du tableau de bord : relance en un clic tous les imports configurés (La Comte, Orgexpo, Photographes, Programme Merlin, Invités Guest) et récapitule le résultat connecteur par connecteur. Les connecteurs non configurés ou en échec sont signalés.

## [0.45.2] - 2026-07-21

### Corrigé
- **Invités (Guest)** : quand la clé API ne peut pas lire les fiches personnes (scope read:persons manquant), le test de connexion l'annonce clairement avec la marche à suivre, au lieu d'importer silencieusement des fiches sans résumé.

## [0.45.1] - 2026-07-21

### Corrigé
- **Pop-up des créneaux** : chaque personne (invité comme présentateur) a désormais son encart directement dans la pop-up : photo ronde, nom, catégorie et **résumé officiel**, les uns sous les autres s'il y en a plusieurs. Plus de « plus d'informations bientôt » quand la fiche existe. Un clic sur la photo ouvre la fiche en grand.

## [0.45.0] - 2026-07-21

### Ajouté
- **Présentateurs à l'honneur** : dans la pop-up d'un créneau, les présentateurs/animateurs apparaissent sur leur propre ligne « 🎤 Présenté par… », séparés des artistes.
- **Fiches des personnes en un clic** : chaque bulle de personne (artiste ou présentateur) qui a une fiche Yggdra-Guest s'ouvre en sur-pop-up : photo, catégorie et bio officielle, sans quitter le créneau.

## [0.44.0] - 2026-07-21

### Ajouté
- **Les invités remplissent le programme** : quand un créneau correspond à un invité ou présentateur importé d'Yggdra-Guest (ex. « Dédicace » avec Arthur Pestel), sa bio officielle et sa photo remplissent automatiquement la pop-up. Ordre : fiche manuelle, puis La Comte, puis Yggdra-Guest. Les fiches admin le signalent (« ✅ déjà remplie par Yggdra-Guest : … ») et les invités décochés ne servent jamais.

## [0.43.1] - 2026-07-21

### Corrigé
- **Fiches des spectacles (back-office)** : chaque créneau affiche maintenant son état d'un coup d'œil : « ✅ déjà remplie par La Comte » (avec aperçu de la photo et du texte que la pop-up montrera), « ✍️ fiche manuelle », ou « 🟠 à compléter ». Fini le doute sur ce qui existe déjà.

## [0.43.0] - 2026-07-21

### Ajouté
- **« Sur scène » dans les fiches** : sur les pages Troupes et Animations, la pop-up d'une troupe ou d'une animation programmée affiche ses passages (jour, horaires, scène) avec un lien vers le programme complet. Uniquement une fois le programme diffusé : rien ne fuite avant la date.
- **Connecteur Yggdra-Guest (préparation)** : nouveau menu « Invités (Guest) » au back-office pour importer les fiches des invités et présentateurs (identité de scène, catégories, bio officielle, photo créditée copiée localement). Choix de l'événement, test de connexion, import (bouton + cron), cases de visibilité. Le site public ne change pas encore : les fiches sont prêtes pour la future page Invités. Aucune donnée privée (jamais de coordonnées).

## [0.42.1] - 2026-07-21

### Corrigé
- **Programme** : titres des scènes agrandis dans les tableaux fusionnés (en-têtes de colonnes plus lisibles, pastilles plus visibles).

## [0.42.0] - 2026-07-21

### Ajouté
- **Tableaux de scènes composables** : au back-office, glissez les pastilles de scènes pour les fusionner en un tableau (ex. Scène 1 + Scène 2 côte à côte) ou les laisser seules ; ordre des tableaux au choix (flèches), titre et image de fond par tableau. Le tout est enregistré, rien à refaire.
- **Sur le site** : les tableaux se suivent les uns sous les autres, avec les scènes fusionnées en colonnes côte à côte (en-têtes colorés) ; les raccourcis en haut de page descendent directement au tableau voulu.

## [0.41.1] - 2026-07-21

### Corrigé
- **Programme (back-office)** : fini les URLs à coller à la main. Les images (fonds de scène et fiches des spectacles) se choisissent dans la **médiathèque** (navigation par dossiers, vignettes), avec aperçu à côté du champ et bouton ✕ pour retirer.

## [0.41.0] - 2026-07-21

### Ajouté
- **Programme raccordé à La Comte** : quand un créneau correspond à une activité importée (même nom de spectacle, d'artiste ou de troupe), sa description et sa photo remplissent automatiquement la pop-up. Ce qui est saisi à la main dans les fiches garde la priorité.

### Corrigé
- **Tuiles du programme** : les créneaux courts n'ont plus de texte coupé, l'affichage se condense automatiquement (titre seul sur les tout petits créneaux).

## [0.40.2] - 2026-07-21

### Sécurité
- **Programme des scènes** : même si la clé API Merlin a des droits trop larges, les créneaux internes (repas, loges…) et les créneaux incertains ne sont jamais mis en cache ni affichés sur le site.

## [0.40.1] - 2026-07-21

### Corrigé
- **Connexion Merlin** : l'adresse saisie sans « https:// » est corrigée automatiquement (cause du « Serveur injoignable » à la mise en service) et les erreurs de connexion s'affichent désormais en français clair (protocole manquant, domaine introuvable, certificat SSL, délai dépassé…).

## [0.40.0] - 2026-07-21

### Ajouté
- **Nouvelle page « Le programme »** (/programme) : la grille des scènes, alimentée automatiquement par Merlin (l'application centrale des événements). Onglets par jour, sélecteur par scène, grille horaire interactive et pop-up par spectacle (résumé, image, artistes, horaires). Une image de fond peut habiller chaque scène.
- **Date de diffusion** : tant qu'elle n'est pas atteinte, le public voit « Le programme sera bientôt dévoilé » ; les membres connectés voient déjà tout, avec un bandeau rouge d'avertissement. Réglable dans le back-office.
- **Back-office → Programme (Merlin)** : choix de l'événement, test de connexion, import (bouton + cron horaire), fiches des spectacles (résumé + image de la pop-up, conservées même après ré-import) et fonds par scène.

## [0.39.1] - 2026-07-21

### Corrigé
- **Vignettes des activités** (page Troupes) : une activité sans image affiche désormais sa première photo, sinon le **logo de sa troupe**, et seulement en dernier recours la vignette de remplacement du site.

## [0.39.0] - 2026-07-17

### Ajouté
- **API de statistiques** pour l'application centrale de l'écosystème : `GET /api/v1/stats` (clé `X-Stats-Key`, périodes 7/30/90/365 jours) : audience (vues, visiteurs, par jour, top pages, référents, appareils, événements), chatbot (conversations, questions sans réponse, leads), contenus et coûts IA. Contrat standard documenté dans `autressites.md` pour réplication sur les autres sites (Indoor…). Clé configurable dans l'éditeur .env. Aucune donnée personnelle exposée.
- **Menu du back-office en vert forêt** ; sélecteur d'événements Orgexpo trié alphabétiquement ; bouton « S'inscrire en tant que photographe » sur la page Photographes (branché sur le lien Pro) ; annuaire exposants corrigé (plus d'exigence de numéro de stand) ; albums photographes triés du plus récent au plus ancien.

## [0.38.0] - 2026-07-14

### Ajouté
- **Nouvelle page « Le plan »** (/plan) dans le menu Découvrir : le plan du festival encadré et cliquable (pleine résolution + téléchargement), les 6 lieux à ne pas manquer (Drakenfjord, univers, grande arène, entrée/billetterie/parking, Bureau des Aventuriers, tavernes) et un clin d'œil à la chasse aux clés. Deux emplacements dans le gestionnaire de photos : la bannière et l'image du plan (placeholder élégant tant que le plan 2026 n'est pas déposé). Ajoutée au sitemap et aux menus de toutes les pages.

## [0.37.0] - 2026-07-14

### Ajouté
- **Fini le cache têtu** : les fichiers CSS/JS du site sont automatiquement versionnés à chaque mise à jour : les visiteurs voient les nouveautés immédiatement, sans Ctrl+F5.
- **Registre `autressites.md`** : le site sert de modèle à d'autres sites ; chaque modification de structure y est consignée avec sa procédure de report.

### Modifié
- **Pop-up exposant** (page Créateurs) : image en format carré, cadrée en haut : fini les visages coupés.
- **Page photographes** : les albums des anciennes éditions s'affichent même quand l'édition en cours n'a pas encore de photographe ; « accrédités » remplacé par « officiels » dans les textes publics.

### Corrigé
- **Connecteurs (audit)** : modifications et suppressions côté source vérifiées et testées sur les trois connecteurs ; purge des événements photographes retirés de la configuration.

## [0.36.0] - 2026-07-14

### Ajouté
- **Upload de la vidéo teaser de l'accueil** : nouvelle carte « 🎬 Vidéo teaser » en tête du menu Photos : glissez votre MP4 (200 Mo max), suivez la **barre de progression**, aperçu intégré, remplacement et suppression en un clic. La vidéo n'est pas versionnée (trop lourde pour git) : téléversez-la sur chaque environnement, comme les logos. Limites PHP relevées via `.user.ini` (OVH compatible).

### Modifié
- **Tableau de bord** : tuiles cliquables, coûts IA corrigés (bug d'échelle ×1000), statuts et dates en français : voir 0.35.0 pour le détail des contenus.

## [0.35.0] - 2026-07-10

### Ajouté
- **Citations fantasy sourcées** sur les pages Créateurs, Chasse aux clés (Tolkien), Photographes (Ursula K. Le Guin), Troupes (Terry Pratchett) et Le thème (Neil Gaiman d'après G.K. Chesterton) : toutes authentiques et attribuées.
- **Nouvelle invitée : C by Camille**, costumière et corsetière lyonnaise spécialisée dans les mondes fantastiques (fiche sur la page Invités, lien Instagram, emplacement photo).
- **Page photographes** : les accrédités passent en pastilles compactes avec pop-up de fiche (infos et liens officiels) ; blocs officiels / accrédités / albums différenciés par couleurs ; section générique « Des artistes de l'instant » retirée.

### Modifié
- **Maître Frelon masqué** de tout le site (venue incertaine) : accueil, page Invités, gestionnaire de photos et réponse du chatbot. Tout est conservé en commentaire : réactivable en un instant s'il confirme.

## [0.34.0] - 2026-07-10

### Ajouté
- **Alerte « mise à jour de la base requise »** : après un déploiement qui ajoute des migrations, un bandeau rouge apparaît en haut de toutes les pages du back-office (super admin) avec un bouton « Appliquer maintenant » : fini les erreurs 500 silencieuses faute de migration.
- **Visibilité des photographes** : sur la page Photographes du back-office, décochez ceux qui ne doivent pas apparaître sur le site (annuaire et albums). Le choix survit aux ré-imports et au cron.
- **Officiels et accrédités séparés** sur la page « Nos photographes » : « Nos photographes officiels » d'abord (ordre alphabétique), puis « Vous pourrez aussi rencontrer : » pour les accrédités. Le statut vient du forfait.

### Corrigé
- **Import photographes en erreur (500)** : un champ « expérience » trop long était refusé par la base : colonne élargie, champs normalisés (spécialités reçues en chaîne converties en liste, textes tronqués défensivement). Vérifié contre l'API réelle.
- La page de réglages s'appelle désormais simplement **« Photographes »**.

## [0.33.0] - 2026-07-10

### Ajouté
- **Albums des anciennes éditions** sur la page « Nos photographes » : sous l'annuaire, les albums des **photographes officiels** des éditions passées, triés de la plus ancienne à la plus récente : vignette, nombre de photos et lien direct vers l'album sur le site des photographes. Au back-office : liste de tous les événements avec **cases à cocher** pour choisir les éditions affichées ; l'import (bouton + cron) rafraîchit l'annuaire **et** les albums cochés.

## [0.32.0] - 2026-07-09

### Ajouté
- **Page « Nos photographes » branchée sur l'API Festorga Photographe** : nouveau connecteur (même principe que La Comte / Orgexpo) avec menu « Photographes (accrédités) » dans le back-office : sélecteur d'événement, test de connexion, bouton « Importer dans le site ». La page du site remplace la zone iframe par un **annuaire natif** : avatar, pseudo, crédit photo, spécialités, bio, liens (portfolio, réseaux) et bouton « 📷 Voir ses photos » vers la galerie publique de chaque photographe. Rafraîchi automatiquement par le cron (import + journal), servi depuis le cache local (rapide, résiste aux pannes de l'API).

## [0.31.0] - 2026-07-03

### Ajouté
- **Espace Partenaires** : nouveau menu « Partenaires » dans le back-office (nom, lien, logo : PNG/SVG transparent conservé, ordre et publication). Sur le site : section « Nos partenaires » sur l'accueil (cartes cliquables, masquée si aucun partenaire) et rangée de logos en bas de **toutes** les pages, au-dessus du pied de page.

## [0.30.0] - 2026-07-03

### Ajouté
- **Appareil de confiance (2FA)** : après un code validé, cochez « Faire confiance à cet appareil pendant 30 jours » : le code n'est plus redemandé sur ce navigateur. Désactiver ou réenrôler la 2FA invalide automatiquement tous les appareils de confiance.

### Modifié
- **Fini les déconnexions à répétition** : la session passe de 2 h à **7 jours** d'inactivité, et « Se souvenir de moi » est coché par défaut à la connexion.
- **Médiathèque plus fluide** : le glisser-déposer d'une image ne recharge plus la page (déplacement instantané, compteurs mis à jour, petite confirmation).
- **Sélecteur « Bibliothèque » unifié** : dans le menu Photos, le choix d'une image affiche désormais les **dossiers** de la médiathèque (fil d'Ariane + navigation), comme dans le module Médiathèque.

## [0.29.0] - 2026-07-03

### Ajouté
- **Notes de version** : nouvelle page du back-office qui liste les nouveautés de chaque version, la plus récente en haut.
- **Adresses web propres** : les pages du site ont des adresses lisibles (`/le-theme`, `/univers`, `/concerts`…) au lieu des noms techniques. Les anciennes adresses redirigent automatiquement (rien ne casse).
- **Médiathèque organisable** : nouveau menu avec dossiers / sous-dossiers (3 niveaux), rangement des images par glisser-déposer, et bouton « Importer toutes les images du site » (sans doublon).
- **Logos personnalisables** : le logo du back-office et celui du site public se changent depuis « Paramètres du site » (transparence conservée).
- **Chasse aux clés** : les 4 badges à gagner sont nommés et illustrés (Guilde des Marchands, Explorateur, Dragonologue, Cartographe), avec la mention « dans la limite des stocks ».
- **Nouveaux cadres photo** : le TCG Yggdrasil Coliséum (accueil + thème), l'illustration Drakenfjord (thème), la soirée concerts, le badge d'Ambassadeur (personnages), l'image de remplacement des vignettes et l'affiche officielle sont désormais remplaçables depuis le menu Photos.
- **Cron OVH fiabilisé** : script dédié `cron/run.php` (plus besoin d'URL ni de jeton) + journal des exécutions visible dans « Import auto (Cron) ».

### Modifié
- **Accueil** : footer rééquilibré en 4 colonnes (avec liens pratiques et pages légales).
- **Univers** : couleurs réharmonisées avec le reste du site.
- **Invités** : rôles d'Arthur Pestel réordonnés (voix de Rustik en premier).
- **Le thème** : phrase Drakenfjord adoucie ; **Créateurs** : mise en page aérée (citation entre les deux blocs de texte).
- **Assistant Yggi** : la bulle flottante devient un « ? » plus explicite ; sur mobile, l'assistant s'ouvre depuis le menu (« Vous avez une question ? »).

### Corrigé
- **Formulaires du back-office** : les erreurs de validation s'affichent désormais clairement (bandeau rouge) : fini les réglages qui semblaient ne pas s'enregistrer (ex. mode « en construction »).

## [0.28.0] - 2026-06-30

### Ajouté
- **API v2 La Comte / Orgexpo** : prise en charge des données enrichies. **Sélecteur d'événement** (menu déroulant chargé depuis `/events/` et `/evenements.php`) dans les pages de réglage : fini la saisie manuelle de l'ID. **Filtrage par statut** : seuls les dossiers **validés** sont importés et affichés (les options/refusés sont ignorés). **Fiche troupe** festorga (logo, site, réseaux, email, description) + galerie `photos`. **Catégorie** (typologie) des exposants orgexpo. API publiques `/activities` et `/exposants` enrichies.

## [0.27.0] - 2026-06-30

### Ajouté
- **Base de connaissances enrichie** : 60 questions/réponses générées à partir du contenu réel du site (dates, lieu, accès, billetterie, invité d'honneur, concerts/artistes, spectacles, univers, personnages, chasse aux clés, Ygg, créateurs, infos pratiques), en 8 catégories. Bouton **« Importer la base de départ »** (idempotent, n'écrase pas vos articles) : fonctionne en local et en prod sans CLI. Données dans `database/data/festival-knowledge.json` + `FestivalKnowledgeSeeder`.
- **Page Base de connaissances repliable** : articles regroupés en **sections (catégories)** repliables, **« Base de connaissance générale » en premier**, chaque question **pliable/dépliable**, bouton **« Plier / déplier tout »**, filtre amélioré.

## [0.26.0] - 2026-06-30

### Ajouté
- **Carrousels d'images** : dans le menu Photos, chaque emplacement peut être passé en **carrousel** (case à cocher) avec un **intervalle réglable** (défaut 2 s) et l'ajout de **plusieurs images** (slides). Côté site, l'image concernée défile automatiquement : **flèches** sur les `<img>` (bannières, vignettes) et **défilement auto** sur les fonds CSS. Optimisation serveur appliquée aussi aux slides. Endpoint public `GET /api/v1/carousels`, runtime dans `site-dynamic.js`. Donne du dynamisme à l'accueil et aux pages.

## [0.25.0] - 2026-06-30

### Modifié
- **Optimisation des images garantie côté serveur** : chaque upload (et chaque affectation depuis la médiathèque) est désormais redimensionné (≤ largeur max) et recompressé en JPEG progressif **sur le serveur** (service `ImageOptimizer`, GD), en plus de l'optimisation navigateur. Fini les images en pleine résolution (ex. 6016×4016 / 13 Mo) si le canvas n'a pas pu s'exécuter. La commande `photos:optimize` réutilise le même service (support PNG/WebP, aplatissement de la transparence).

## [0.24.0] - 2026-06-30

### Ajouté
- **Bannière photo optionnelle par page** : chaque page intérieure peut recevoir une photo d'en-tête (`header-<page>.jpg`) via le menu Photos. Si présente, elle recouvre l'illustration SVG (avec dégradé de lisibilité) ; **sinon l'illustration reste** (repli automatique `onerror`). Géré par une règle unique dans `header.css` (le texte reste toujours au-dessus). 12 emplacements « Bannière de page » ajoutés au gestionnaire.

## [0.23.0] - 2026-06-30

### Ajouté
- **Optimisation en masse des images** : commande `php artisan photos:optimize` (options `--width`, `--quality`, `--threshold`, `--force`, `--library`) + **bouton « Optimiser les images »** dans le menu Photos (utile sur mutualisé sans CLI). Redimensionne à la largeur max et recompresse en JPEG progressif, met à jour dimensions/poids en base, conserve les crédits.

### Performance
- Images existantes optimisées : **~27 Mo économisés** (ex. `fantastique.jpg` 4,6 Mo → 379 Ko) : meilleur temps de chargement et score Lighthouse.

## [0.22.0] - 2026-06-30

### Ajouté
- **Médiathèque** : chaque image uploadée est désormais **archivée** (copie dédoublonnée par contenu) dans `public/img/library/`. Bouton **« 📚 Bibliothèque »** à côté de « Choisir une photo » : ouvre une galerie pour **réutiliser** une image déjà importée sur n'importe quel emplacement (en un clic, sans réupload). Rattrapage automatique des images déjà présentes sur le site.

## [0.21.2] - 2026-06-30

### Modifié
- **Photos rangées dans un dossier dédié `public/img/`** (au lieu de la racine). Les images existantes y ont été déplacées, toutes les pages du site repointées vers `/img/…`, ainsi que l'image de repli du JS, l'image de partage SEO par défaut et la page « en construction ». Le gestionnaire de photos enregistre désormais dans `public/img/`.

## [0.21.1] - 2026-06-30

### Modifié
- **Gestionnaire de photos basé sur les vraies images du site** : les emplacements correspondent désormais aux images réellement référencées par chaque page (scan des pages). L'upload écrit le fichier à son **emplacement réel** (racine publique) → l'image apparaît directement sur le site. « Manquante » = fichier absent. Les images **partagées** entre plusieurs pages sont synchronisées (un seul fichier, mis à jour partout). Compteur précisant les images uniques.

## [0.21.0] - 2026-06-30

### Ajouté
- **Gestionnaire de photos** (menu « Photos », Sources & contenus) : upload **page par page** en accordéon (page → emplacement, chacun repliable). Upload à gauche / **aperçu à droite**, tout en AJAX (sans rechargement). **Optimisation automatique** (redimensionnement + compression côté navigateur). **Lecture EXIF du crédit** (Artist/Copyright) avec champ éditable pré-rempli. **Compteurs X/X** global, par page et par emplacement pour repérer les images manquantes. Glisser-déposer. Photos stockées dans `public/site/photos/` (versionnées, incluses au déploiement).

## [0.20.0] - 2026-06-30

### Ajouté
- **Suivi d'audience propriétaire (Temps 2)** : analytics **maison, cookieless et anonyme** (l'IP n'est jamais stockée ; hachage quotidien non réversible pour les visiteurs uniques). Beacon léger injecté sur le site, endpoint `POST /api/v1/track` (respect du *Do Not Track*, exclusion des robots). Suivi des **clics billetterie** (conversion).
- **Tableau de bord « Statistiques »** (vue direction) : pages vues, visiteurs uniques, courbe par jour, pages populaires, sources de trafic, appareils, et engagement (billetterie, FAQ, chatbot, leads). Sélecteur 7/30/90 jours.

## [0.19.0] - 2026-06-30

### Ajouté
- **SEO (Temps 1)** : pages du site vitrine servies via Laravel avec **injection SEO côté serveur** : `canonical`, **Open Graph / Twitter** (aperçus de partage), favicon, et **données structurées JSON-LD** (`Festival`/Event, `Organization`, et `FAQPage` alimentée par la base de connaissances). Génération de **`sitemap.xml`** et **`robots.txt`** dynamiques. Lazy-loading automatique des images. Réglages SEO dans « Paramètres du site » (URL publique, image de partage, réseaux, dates/lieu, vérification Search Console).
- Le mode « en construction » s'applique désormais à **toutes** les pages publiques (plus seulement l'accueil).

### Modifié
- Pages HTML du site déplacées de `public/` vers `resources/site/` (servies par le contrôleur). Suppression du `robots.txt` statique qui bloquait l'indexation.

## [0.18.0] - 2026-06-29

### Modifié
- **Base de connaissances : édition en ligne** : page repensée en éditeur « une seule page ». Chaque article est une carte modifiable directement (question, réponse, catégorie, mots-clés, publication) avec **enregistrement automatique** (débounce + indicateur d'état par carte), bouton **Nouvel article** instantané, **filtre** en direct, boutons IA par carte, et stats (chatbot / FAQ). Endpoints JSON `knowledge.quick` et `knowledge.autosave`.

## [0.17.0] - 2026-06-29

### Ajouté
- **Réinitialisation de mot de passe** par e-mail (lien à durée limitée) : pages « Mot de passe oublié » / « Nouveau mot de passe », notification française, réponse neutre anti-énumération, mot de passe fort exigé. Lien ajouté sur la page de connexion.
- **Sauvegarde BDD automatisée** : commande `db:backup` (mysqldump + rétention GFS 7j/4s/12m via `DatabaseBackupService`), planifiée quotidiennement et déclenchée une fois par jour par le cron HTTP (utile sur mutualisé). Le module Base de données réutilise ce service.
- **Bandeau « développement »** configurable (`DEV_BANNER_*`), affiché hors production, pilotable depuis l'éditeur `.env`.

### Sécurité
- Tag Git de version posé à chaque déploiement (à partir de `v0.17.0`).

## [0.16.2] - 2026-06-29

### Modifié
- **Menu back-office réorganisé** : « Catégories » masqué du menu (toujours fonctionnel en interne, juste retiré de la navigation). Nouvelle section **« Sources & contenus »** regroupant Liens (menu Pro), La Comte, Orgexpo et Intégrations (iframes).

## [0.16.1] - 2026-06-29

### Ajouté
- **Menu « Import auto (Cron) »** (Super Admin) : mode d'emploi OVH pas à pas, URL du déclencheur (avec jeton), état des dernières synchros, et bouton d'import manuel.

### Supprimé
- Route de diagnostic temporaire `/__diag` (le 500 de prod est résolu).

## [0.16.0] - 2026-06-29

### Modifié
- **Renommage « Festorga » → « La Comte »** dans toute l'interface (menu, page, libellés, éditeur .env). Les identifiants techniques internes restent inchangés.

### Ajouté
- **Import automatique régulier** des sources : commande groupée `sources:import` (planifiée toutes les heures) + **déclencheur HTTP** `GET /api/v1/tasks/import?token=CRON_TOKEN` pour un cron externe (recommandé sur mutualisé). Voir `CRON.md`.

### Tests
- 59 tests : déclencheur d'import (jeton requis, lance les deux imports).

## [0.15.0] - 2026-06-29

### Modifié
- **Éditeur `.env` convivial** : remplacé le textarea brut par un **formulaire à champs labellisés et groupés** (Application, Base de données, E-mail, IA, Intégrations). Secrets en champ masqué (avec bouton afficher), booléens en menu Activé/Désactivé. Les commentaires et clés non listées du `.env` sont **préservés**. Un mode « édition avancée (texte brut) » reste disponible. Menu renommé « Configuration (.env) ».

## [0.14.2] - 2026-06-29

### Corrigé
- **Déploiement / 500 en prod** : le workflow excluait tout `storage/framework/*`, si bien que sur un serveur vierge ces dossiers n'existaient pas → Laravel ne pouvait pas compiler les vues (500 partout, y compris `/install`). Le workflow déploie désormais la structure `storage/` (fichiers `.gitignore`) ; seuls les `*.log` et le cache compilé restent exclus.

## [0.14.1] - 2026-06-29

### Modifié
- **Installateur** : demande désormais aussi l'**email** et le **mot de passe** de l'administrateur (validés : min. 10 car., maj/min/chiffre/spécial). Le compte Super Admin est créé avec ces identifiants (plus de mot de passe par défaut à changer).

## [0.14.0] - 2026-06-29

### Ajouté
- **Vrai installateur web** : `/install` fonctionne désormais **même sans `.env`** (middlewares cookies/session/CSRF contournés sur cette route). Si le `.env` est absent, l'installateur demande la **config base de données**, **génère l'`APP_KEY`**, **crée le `.env`** (vérif de la connexion BDD avant écriture), puis lance migrate + seed. Débloque la 1re mise en ligne sur mutualisé sans SSH.

### Tests
- 56 tests verts.

## [0.13.5] - 2026-06-29

### Modifié
- **Footer du site harmonisé** : passage du marron au dégradé **navy + liseré or**, titres dorés, liens animés : cohérent avec l'en-tête et les sections. Appliqué aux 13 pages via la feuille partagée.

## [0.13.4] - 2026-06-29

### Corrigé
- **Images cassées** (festorga renvoie parfois une URL de photo en 404) : ajout d'un repli automatique `onerror` → l'image du header s'affiche dès qu'une photo échoue à charger (404 ou URL vide), sur toutes les tuiles et pop-up (troupes, animations, créateurs).

## [0.13.3] - 2026-06-29

### Modifié
- **Troupes & animations sans photo** : même fond de repli que les exposants (image du header), sur les tuiles et les pop-up.

## [0.13.2] - 2026-06-29

### Modifié
- **Exposants** : on n'affiche plus ceux **sans numéro de stand** (filtré dans l'API publique). Les exposants **sans photo** reçoivent un **fond de repli** (image du header `ffl-header.jpg`), sur la tuile et la pop-up.

## [0.13.1] - 2026-06-29

### Modifié
- **Tuiles Animations** : description tronquée à **6 lignes** avec « … », **clic = ouverture en grand** (pop-up détail), et **images cadrées en haut** (`object-position: top`). Le cadrage haut s'applique aussi aux tuiles troupes/créateurs.

## [0.13.0] - 2026-06-29

### Ajouté
- **Créateurs / exposants en natif** (page Créateurs) via l'API **orgexpo** : tuiles côte à côte (une par exposant), clic → **pop-up** avec la fiche (photo, description, emplacement, **site web + Facebook + Instagram**). Fini l'iframe créateurs.
- **Menu back-office « Orgexpo (exposants) »** : ID événement, test de connexion, import ; clé `ORGEXPO_API_KEY` côté serveur.
- **Cache** `orgexpo_exposants` (colonne `status` prévue), commande `orgexpo:import` planifiée, API publique `GET /api/v1/exposants` (clés normalisées site/facebook/instagram).

### Tests
- 55 tests (152 assertions) : import orgexpo, API exposants normalisée, accès admin.

## [0.12.0] - 2026-06-29

### Modifié
- **Troupes** : affichage en **tuiles côte à côte** (une par troupe). Au clic, une **pop-up** s'ouvre par-dessus le site avec la fiche de la troupe (ses animations en cartes ; emplacements pour site web / réseaux sociaux prévus, affichés dès que la donnée sera disponible).
- **Animations** : la page liste désormais **toutes les activités festorga en tuiles**, avec filtres par type (cases à cocher cumulables : stand / spectacle / déambulation). La liste d'exemple est masquée quand les données réelles sont chargées.

### Note
- L'API festorga `/activities` fournit le nom de la troupe et ses animations (image, description, univers, emplacement) mais **pas le site web ni les réseaux sociaux** : ces liens apparaîtront automatiquement quand la source les exposera (ou via un futur petit éditeur back-office).

## [0.11.0] - 2026-06-29

### Ajouté
- **Éditeur de `.env`** dans le back-office, **réservé au Super Admin** (Administration → Éditeur .env). Utile sur hébergement mutualisé (sans SSH) pour régler BDD, clés API, mail, etc. Sécurités : **sauvegarde automatique** avant écriture (`storage/app/backups`), **garde-fou APP_KEY** (refus si absent/vide), vérification d'accès en écriture, `config:clear` après enregistrement, journal d'audit.

### Tests
- 52 tests (144 assertions) : accès Super Admin, refus non-super, garde-fou APP_KEY (sans écrire le vrai fichier).

## [0.10.0] - 2026-06-29

### Ajouté
- **Annuaire des troupes natif** sur le site (page Troupes) alimenté par festorga : fini l'iframe. Cartes par troupe (image, type, univers, emplacement, description) avec **filtres en cases à cocher cumulables** par type (stand / spectacle / déambulation).
- **Cache local** des activités (`festorga_activities`) : import via bouton back-office (« Importer dans le site ») + commande `festorga:import` planifiée toutes les heures. Purge automatique des activités retirées.
- **API publique** `GET /api/v1/activities` servie depuis le cache (rapide, résiliente, clé jamais exposée).
- Colonne `status` prévue dès maintenant pour un futur **tri par statut** (cases à cocher cumulables), quand l'API festorga l'exposera.

### Modifié
- L'iframe « Troupes » est retirée (remplacée par l'annuaire natif) ; le réglage iframe « troupes » disparaît (créateurs/photographes conservés).

### Tests
- 49 tests (138 assertions) : import en cache, API activités, service festorga.

## [0.9.0] - 2026-06-29

### Ajouté
- **Menu de réglage Festorga** (back-office) : connexion à l'API festorga pour récupérer les activités (stands, spectacles, déambulations) et les troupes d'un événement. Champ « ID événement » + bouton « Tester la connexion » qui affiche l'événement, le nombre d'activités et de troupes. La **clé API reste côté serveur** (`FESTORGA_API_KEY` dans le `.env`, jamais exposée).
- `FestorgaService` (appel API + résumé), réglage `festorga_event_id`, config `services.festorga`.

### Notes
- L'API festorga n'expose **que les activités validées/publiques** (endpoint `/activities`) : pas de statut de dossier ni d'endpoint dossiers/troupes séparés.

### Tests
- 47 tests (132 assertions) : service festorga (résumé), enregistrement de l'événement, test de connexion.

## [0.8.1] - 2026-06-29

### Corrigé
- **Header unifié sur tout le site** : une feuille commune `public/site/header.css` (le header v2 de l'accueil) est chargée après le CSS de chaque page. Corrige les divergences mobiles (certaines pages basculaient en menu burger dès 920px au lieu de 760px) → en-tête identique partout, surtout sur mobile.

## [0.8.0] - 2026-06-28

### Ajouté
- **Intégrations iframe pilotées par le back-office** : nouvelle page **Intégrations (iframes)** pour coller l'URL des annuaires Créateurs / Photographes / Troupes (table `site_embeds`). Les pages du site récupèrent l'URL via `/api/v1/site` et l'injectent automatiquement (plus besoin d'éditer le HTML).
- **Hauteur d'iframe réglable** par intégration : remède au scroll interne (une iframe cross-domaine ne pouvant pas mesurer sa hauteur). Bonus : `site-dynamic.js` écoute un `postMessage` de hauteur si la source coopère.

### Tests
- 44 tests (124 assertions) : API iframes, configuration d'une intégration.

## [0.7.0] - 2026-06-28

### Ajouté
- **Déploiement automatique** vers OVH mutualisé (`.github/workflows/deploy.yml`) : à chaque push sur `main`, build des dépendances dans le runner puis téléversement FTPS vers `fflv2/`. Secrets : `FTP_HOST`, `FTP_USER`, `FTP_PASSWORD`.
- **Installateur web** `/install` (mise en ligne sans SSH) : lance migrations + seed initial, **auto-désactivant** dès qu'un compte existe, protégé par `INSTALL_TOKEN` optionnel. Fonctionne avant toute migration (sans session/CSRF).

### Modifié
- `.env.example` : `SESSION_DRIVER`/`CACHE_STORE` passés à `file` (recommandé mutualisé), ajout d'`INSTALL_TOKEN`. Procédure de déploiement OVH réécrite dans `DEPLOY.md`.

### Tests
- 42 tests (118 assertions) : installateur (création des données, auto-désactivation).

## [0.6.0] - 2026-06-28

### Ajouté
- **FAQ du site alimentée par la base de connaissances** (source unique de vérité) : fini la double maintenance. Les questions sont **triées par popularité** (compteur d'ouvertures), les plus consultées en haut.
- **Suivi des ouvertures FAQ** : compteur `faq_opens` par question, visible dans le back-office (colonne « FAQ » à côté de « Chatbot »).
- **API** : `GET /api/v1/faq` (questions triées) et `POST /api/v1/faq/{uuid}/open` (incrémente le compteur).
- Le widget expose `window.Yggi.open()` pour ouvrir le chat depuis n'importe quel bouton.

### Modifié
- Le **formulaire de contact** de la page Infos & FAQ est remplacé par un **bloc convivial « Demandez à Yggi »** qui ouvre l'assistant IA (la capture de demande se fait via le chatbot, qui transmet à l'équipe s'il ne sait pas répondre).

### Tests
- 40 tests (110 assertions) : FAQ (contenu, tri par popularité, incrément d'ouverture).

## [0.5.0] - 2026-06-28

### Ajouté
- **Module de mise à jour de la base de données** (Super Admin) : état des migrations, application des migrations en attente **avec sauvegarde mysqldump automatique au préalable**, sauvegardes manuelles listées (`storage/app/backups`). Détection auto de mysqldump (ou `MYSQLDUMP_PATH`).
- **Prévisualisation** : un utilisateur connecté voit toujours le vrai site, même quand le mode « en construction » est actif (cookie `ygg_preview` + bypass serveur).

### Modifié
- **Page « en construction » redessinée** : thème clair et festif (crème, or, étincelles) au lieu du fond sombre.
- Typographie française : espace fine insécable avant `! ? : ;` (corrige le « ! » isolé en bout de ligne).

### Tests
- 37 tests (103 assertions) : module BDD (accès, migration), bypass construction connecté.

## [0.4.0] - 2026-06-28

### Ajouté
- **Menu « Pro » sur le site** : accès aux inscriptions externes (exposants, troupes, bénévoles, presse, photographes, stages). Les liens sont gérés dans le back-office.
- **Page « Liens » dans le back-office** (CRUD) : libellé, URL, ordre, publication. Pré-rempli avec les vraies URLs (orgexpo, Airtable, ammy) ; un lien sans URL n'apparaît pas.
- **URL de billetterie modifiable** depuis les Réglages : tous les boutons « Réserver » du site la reprennent dynamiquement (plus besoin d'éditer chaque page).
- **Mode « site en construction »** activable d'un clic dans les Réglages : affiche une page d'attente (nom, dates, lieu, affiche, accroche, note, liens Pro, bouton billetterie) et redirige les pages internes vers l'accueil. Contenu repris du site d'attente officiel.
- **API publique `GET /api/v1/site`** : billetterie, état du mode construction et liens Pro, consommée par le site via un script partagé (`/site/site-dynamic.js`).

### Technique
- Table `site_links` + modèle + seeder ; réglages `billetterie_url`, `site_construction`, `construction_slogan`, `construction_note`.
- Isolation des tests renforcée : purge du cache des réglages entre chaque test.

### Tests
- 32 tests (94 assertions) : API site, mode construction, CRUD liens, billetterie modifiable.

## [0.3.0] - 2026-06-28

### Ajouté
- **Site vitrine intégré** : les 13 pages publiques du Festival (accueil, univers, concerts, animations, FAQ, etc.) + visuels sont désormais servis par l'application (dossier `public/`). La racine `/` affiche l'accueil ; le back-office reste sur `/login` et `/admin`. Un seul dépôt, un seul déploiement.
- **Widget de chat « Yggi » embarqué** sur toutes les pages du site (même origine, sans CORS).
- **Formulaire de contact branché** (Infos & FAQ) sur `POST /api/v1/contact` avec **case de consentement RGPD** obligatoire, retours succès/erreur.
- Docs du site archivées dans `docs/site/` (guide d'intégration Elementor, liste des assets à fournir).

### Modifié
- `Content-Security-Policy` étendu aux Google Fonts (`fonts.googleapis.com` / `fonts.gstatic.com`) utilisées par le site vitrine.
- Route `/` : sert l'accueil public au lieu de rediriger vers le login.

### Tests
- 28 tests (84 assertions) : ajout de la couverture du site public (racine + login).

### À faire (contenu, par l'organisation)
- Déposer les ~27 images + la vidéo dans `public/` (voir `docs/site/ASSETS_A_FOURNIR_FFL_2026.md`) : sinon des placeholders s'affichent.
- Mettre l'URL Billetweb de l'édition 2026 (variable `BILLETTERIE` dans les pages) et les 3 URLs d'iframes (créateurs/photographes/troupes).

## [0.2.0] - 2026-06-28

### Ajouté
- **2FA TOTP** (RFC 6238, sans dépendance) : obligatoire pour Super Admin et Admin, optionnelle pour les éditeurs. Activation par QR code, défi à la connexion, secret chiffré en base, désactivation protégée par mot de passe.
- **RGPD** : export JSON d'un lead, corbeille avec restauration et **effacement définitif** (droit à l'oubli).
- **Pages légales** rédigées (mentions, confidentialité avec registre des traitements, CGU, cookies) + bandeau cookies CNIL (accepter/refuser).
- **Sécurité connexion** : verrouillage après 5 tentatives (15 min), en-tête **Content-Security-Policy** complet, HSTS `preload` en production.
- **CI/CD** : GitHub Actions (Pint + PHPUnit), configuration Pint, codebase entièrement formaté.
- **Documentation API** : spec OpenAPI 3.1 (`/openapi.yaml`) + Swagger UI (`/api/docs`).
- **Écosystème** : endpoint public `POST /api/v1/contact` (formulaire du site vitrine → lead + mail orga), **webhooks Hub signés HMAC-SHA256** (inactifs si non configurés).
- **Tableau de bord IA** enrichi : coûts (jour/mois/total), tokens cumulés, répartition par usage.
- **Confort** : recherche globale **Ctrl/⌘ + K**, export **CSV** des leads, carte d'onboarding au premier login, **persistance** de la conversation du widget (localStorage, historique rejoué).

### Corrigé
- Chatbot : faux positifs de recherche dus aux mots vides (« est », « comment », mots interrogatifs) qui matchaient par sous-chaîne. Ajout d'une liste de stopwords ; le test « question inconnue » passe désormais.

### Tests
- 26 tests (78 assertions) : chatbot, 2FA, permissions, sécurité/lockout, RGPD, contact/webhook, recherche, export CSV.

### Notes de périmètre (documentées, non implémentées en code)
- Installateur web `install.php` et module de migration BDD : la procédure artisan (`migrate --seed`) tient lieu d'équivalent validé (déploiement en ligne).
- Backups (spatie/laravel-backup), monitoring Sentry et notifications in-app : nécessitent secrets/services externes : à brancher selon l'hébergement.

## [0.1.0] - 2026-06-28

### Ajouté
- Socle Laravel 11 (MVC), structure de dossiers, documentation racine.
- Authentification (login/logout, hash bcrypt, throttle, régénération de session).
- Rôles : Super Admin, Admin, Éditeur + middleware de contrôle.
- Base de connaissances éditable (catégories + articles question/réponse).
- Chatbot public (API `/api/v1/chat`) : recherche dans la base, réponse via Claude limitée à la base, sinon capture de l'email et envoi à `ORG_CONTACT_EMAIL`.
- Widget de chat embarquable (`public/widget/chat-widget.js`).
- Journal d'audit, journal d'usage IA, réglages, gestion des leads et conversations.
- Soft delete (corbeille), en-têtes de sécurité, pages légales + bandeau cookies.
- Seeders : rôles, Super Admin, réglages, base de connaissances initiale (FAQ du festival).

### Sécurité
- CSRF sur les formulaires, requêtes préparées (Eloquent), CORS strict sur l'API du widget, rate limiting sur le chat et le login.

### À venir (roadmap)
- 2FA TOTP obligatoire Super Admin/Admin (champs déjà présents).
- CI/CD GitHub Actions, suite de tests (objectif 70 %), module de migrations BDD UI, API OpenAPI/Swagger, intégration Hub (SSO + webhooks).
