Aller au contenu

Quoi de neuf ?

Releases, améliorations et corrections de la plateforme.

1.9.0

Application installable et fiche de route consultable hors connexion

07/08/2026 4 changements

  • added

    Évènements Créateurs s'installe désormais sur l'écran d'accueil de votre téléphone ou de votre ordinateur, comme une application. Depuis votre navigateur : « Ajouter à l'écran d'accueil » sur mobile, ou l'icône d'installation dans la barre d'adresse sur ordinateur.

  • added

    Nouvelle page « Ma fiche de route », dans votre menu à côté de « Mon calendrier » : toutes vos prochaines dates confirmées, avec les horaires, l'adresse complète et le contact de l'organisateur.

  • added

    Votre fiche de route reste lisible même sans réseau, à condition de l'avoir ouverte au moins une fois. Pratique sur un stand, en salon ou dans un sous-sol mal couvert. Un bandeau vous indique alors la date à laquelle les informations ont été enregistrées, pour que vous sachiez si elles ont pu changer depuis.

  • improved

    Sur iPhone et iPad, le système efface la copie hors connexion après environ une semaine sans ouvrir l'application. Pensez à l'ouvrir une fois avant un déplacement pour que vos dates soient bien enregistrées.

1.8.0

Mairies et offices de tourisme organisateurs, affichage mobile corrigé

07/08/2026 3 changements

  • added

    Les mairies, offices de tourisme et associations inscrits comme simples visiteurs peuvent désormais être reconnus comme organisateurs par notre équipe. Vous publiez alors vos évènements directement, en tant qu'organisateur officiel, au lieu de passer par le référencement communautaire.

  • added

    Vous recevez un email dès que votre accès organisateur est actif, avec ce que vous pouvez faire immédiatement : publier vos évènements, recevoir les candidatures d'exposants, et voir vos fiches indexées sur la page de votre ville.

  • fixed

    Sur téléphone, le panneau des notifications s'affichait décalé vers la gauche et se retrouvait tronqué : une partie du texte sortait de l'écran. Il s'ouvre désormais correctement, sur toute la largeur disponible.

1.7.0

Carte qui masquait le menu sur mobile, notifications en direct

02/08/2026 2 changements

  • fixed

    Sur mobile, la carte des évènements s'affichait par-dessus le menu une fois celui-ci ouvert, rendant la navigation impossible.

  • fixed

    La pastille de notifications se met à jour toute seule : plus besoin de recharger la page pour voir un nouveau message.

1.6.0

Vitrines mises en avant, désinscription garantie et SEO

19/07/2026 7 changements

  • added

    Rappel aux exposants abonnés dont la vitrine n'a pas encore de visuel, pour ne pas passer inaperçu auprès des organisateurs.

  • improved

    La page d'accueil ne met en avant que les exposants dont la vitrine est complète.

  • improved

    Cadrage des photos de couverture revu, et infobulles ajoutées sur les graphiques du tableau de bord.

  • improved

    Titres de pages raccourcis pour un meilleur affichage dans les résultats de recherche.

  • fixed

    Tous les emails de relance comportent bien un lien de désinscription (RGPD).

  • fixed

    Les relances quotidiennes échouaient silencieusement : plus aucun email n'était envoyé.

  • fixed

    Les pages d'atterrissage sans contenu ne sont plus proposées aux moteurs de recherche.

1.5.0

Correctifs de sécurité et horaires d'emails

08/07/2026 2 changements

  • fixed

    Correctifs de sécurité issus d'un audit complet de la plateforme.

  • fixed

    Les emails affichaient une heure décalée : ils portent désormais l'heure de Paris.

1.4.0

Évènements importés enrichis et filtre « à venir »

27/06/2026 5 changements

  • added

    Filtre « à venir » sur la recherche : les évènements terminés ne se mélangent plus aux prochains.

  • added

    Les évènements issus de nos sources partenaires affichent désormais leurs coordonnées de contact quand elles sont publiques.

  • improved

    L'origine d'un évènement (référencé par la communauté, importé, saisi par l'organisateur) est affichée clairement.

  • fixed

    Un évènement en cours n'était plus marqué « passé » à tort : le badge s'appuie sur la date de fin et non la date de début.

  • fixed

    Le bouton « Participer » restait proposé sur un évènement déjà commencé.

1.3.0

Inscription sécurisée et page Soutien

19/06/2026 5 changements

  • added

    Page « Soutien » : possibilité de soutenir le projet par un versement ponctuel, sans abonnement.

  • improved

    Inscription protégée contre les robots : les créations de comptes automatisées et les envois d'emails en masse sont bloqués en amont.

  • improved

    Navigation et pages d'atterrissage revues pour aller plus vite de la recherche à la fiche d'un évènement.

  • improved

    Connexion chiffrée renforcée sur l'ensemble du site (HTTPS strict, cookies sécurisés).

  • fixed

    Les pages de catégorie ne renvoyaient plus d'erreur lorsqu'aucun évènement n'était disponible.

1.2.0

Connexion Google, galerie 3D et refonte de l'expérience

17/05/2026 5 changements

  • added

    Connexion avec un compte Google, en un clic, sans mot de passe à retenir.

  • added

    Galerie photo en 3D sur les vitrines d'exposants, pour mettre les créations en valeur.

  • improved

    Menu mobile repensé : navigation plus lisible et zones tactiles plus larges.

  • improved

    Refonte de l'interface et du parcours de profil exposant.

  • improved

    Optimisation du référencement : les évènements et les vitrines remontent mieux dans les moteurs de recherche.

1.1.0

Freemium 3 mois sans engagement (exposants) + campagne createurs

13/05/2026 10 changements

  • added

    Freemium 3 mois sans engagement pour tout nouveau profil exposant : Le parcours /devenir-exposant attribue automatiquement 3 mois Premium offerts (motif `PERIODE_LANCEMENT`) a la creation du profil exposant, sans carte bancaire ni engagement. Aucun debit automatique : a l'echeance, le profil est masque sauf si l'utilisateur souscrit explicitement un abonnement paye. Pilote par la variable d'environnement `FREEMIUM_3_MOIS_ACTIF` pour couper le robinet sans redeploiement applicatif. Flag `Utilisateur.a_deja_utilise_essai` pose au 1er grant pour eviter qu'un utilisateur consomme plusieurs essais.

  • added

    Conversion trial -> abonnement paye a tout moment : Depuis /mon-abonnement, un exposant en essai gratuit peut souscrire un abonnement paye sans attendre la fin de son trial. Le webhook `checkout.session.completed` detecte l'abonnement trial encore actif, le revoque proprement (statut CANCELED + periode_fin=now) et trace `freemium.converti` dans le journal d'audit. Permet de mesurer le taux de conversion reel.

  • added

    Email de bienvenue trial + adaptation email d'expiration : Nouveau template `bienvenue_trial_exposant` envoye apres le grant automatique (presentation des avantages 3 mois gratuits, rappel date d'expiration, CTA vers /mon-profil). Le template `expiration_compte_offert` accepte un flag `motif_freemium` qui adapte le wording (« essai gratuit » vs « Premium offert ») et le sujet (J-7 / J-1 / J-0) selon l'origine de l'abonnement.

  • added

    KPI freemium sur le dashboard admin : Nouvelle section « Freemium 3 mois · phase de lancement » sur /admin/ : essais en cours, convertis, expires sans conversion, et taux de conversion calcule sur l'ensemble des essais termines (convertis / (convertis + expires)). Visible des qu'au moins un grant a ete fait. Source de verite : audits `freemium.grant` / `freemium.expire` / `freemium.converti` dans le `JournalAudit`.

  • added

    Bandeau « 3 mois gratuits » sur la page tarifs publique : Quand `FREEMIUM_3_MOIS_ACTIF=true`, la section #tarifs de la landing affiche un bandeau d'annonce dedie (« Offre de lancement · pour les createurs ») au-dessus des cartes tarifs, avec un CTA « Devenir exposant » direct (cree le profil + active le trial sans passer par Stripe). Badge « 3 mois gratuits » ajoute en haut de la carte Mensuel via le composant `carte_offre.html`.

  • added

    Page /mon-abonnement adaptee pour les trials freemium : Bandeau d'en-tete dedie (« Essai gratuit · 3 mois sans engagement ») affichant la date de fin, le rappel « aucun debit automatique » et un CTA « Souscrire maintenant » qui redirige vers le checkout avec `?conversion_trial=1`. Le bouton « Gerer mon abonnement (Stripe) » est masque pendant le trial (pas de Customer Stripe rattache, ouvrirait sur une erreur).

  • added

    Campagne email d'acquisition createurs (acquisition_createurs) : Nouveau template `campagne_acquisition_createurs` (HTML + texte) et script CLI `envoyer_email_campagne_acquisition_createurs.py` pour adresser les createurs / artisans (ton chaleureux, hook 3 mois gratuits sans CB, mise en avant : profil public, candidatures 1 clic, agenda webcal://, referencement multi-territoires). Matching geo : evenements proches selon ville / code postal / departement. Idempotence via audit `email_marketing.envoye` avec champ `campagne=acquisition_createurs` (la page BO /admin/campagnes agregera automatiquement). Helpers Brevo / Mailjet / recap admin reutilises du script first_wave.

  • improved

    Service comptes_offerts : grant self-service sans admin : `comptes_offerts.offrir_premium` accepte desormais `admin=None` pour les attributions automatiques. L'audit `JournalAudit` differencie alors `freemium.grant` (self-service) de `comptes_offerts.offrir` (cadeau admin) avec un flag `self_service` dans le contexte. Nouvelle fonction `tenter_grant_freemium_3_mois(utilisateur)` qui orchestre les verifications (flag config, flag user, abonnement actif) et envoie l'email de bienvenue trial.

  • improved

    CLI envoyer-rappels : audit `freemium.expire` a J-0 : Quand un abonnement trial PERIODE_LANCEMENT atteint sa date d'expiration sans conversion, la commande `flask offerts envoyer-rappels` cree desormais un audit `freemium.expire` (en plus du basculement en CANCELED). Permet le calcul du taux de conversion sur le dashboard admin.

  • improved

    Page /devenir-exposant adaptee selon eligibilite freemium : Si l'utilisateur n'a pas encore consomme son essai et que le flag est ouvert, la page affiche un bandeau « Offre de lancement · 3 mois gratuits, sans carte bancaire » et adapte le bouton (« Activer mes 3 mois gratuits » au lieu de « Continuer vers le paiement »). Sinon, parcours Stripe Checkout standard.

1.0.0

Lancement public : SSO Google, parcours exposant, geolocalisation, dashboard admin

07/05/2026 13 changements

  • added

    Connexion avec Google (SSO OAuth 2.0) : Bouton « Continuer avec Google » sur les pages connexion et inscription. Si l'email Google correspond a un compte local existant, fusion intelligente (oauth_subject ajoute, mot de passe local conserve) plutot que doublon. Email recupere uniquement si verifie par Google. Implementation via Authlib.

  • added

    Rapprochement automatique email -> evenements : Au 1er login (Google ou classique), si l'email de l'utilisateur correspond a un Evenement.email_contact ou .organisateur_email existant, redirection vers /mon-profil/rapprochement-evenements. L'utilisateur peut affecter chaque evenement a son compte (« C'est mon evenement ») ou l'ignorer. Revendication express sans OTP puisque l'email est deja certifie. Promotion automatique du role UTILISATEUR -> ORGANISATEUR a la 1ere affectation.

  • added

    Parcours « Devenir exposant » avant le paiement : Nouvelle page /devenir-exposant qui demande le nom de l'atelier, l'activite principale et l'acceptation des CGV (lien hypertexte vers /cgv en nouvel onglet). Cree le ProfilExposant minimal puis redirige vers Stripe Checkout. Choix entre formule mensuelle (9,99 €/mois) et annuelle (89,99 €/an) via 2 cartes selectionnables avec retour visuel instantane (CSS :has(:checked), pas de JS).

  • added

    Geolocalisation de l'utilisateur sur la recherche d'evenements : Detection optionnelle de la position du visiteur (API Geolocation navigateur, opt-in explicite) pour pre-remplir le rayon de recherche et trier les resultats par proximite. Conforme RGPD : aucune position stockee cote serveur, traitement client uniquement.

  • added

    Tableau de bord admin redesigne : Refonte complete /admin/ : 6 KPI avec sparklines et delta vs periode precedente (utilisateurs actifs, exposants Premium, evenements a venir, MRR, nouveaux inscrits, conversion Premium), filtres de periode (7/30/90/365 jours), donut repartition par role, graphe inscriptions par jour, donut categories, gauge conversion Free -> Premium avec objectif, repartition par departement, derniers paiements, file de moderation. Toutes les donnees viennent de la BDD reelle (statistiques.py), aucune valeur fictive.

  • added

    Audit complet des actions OAuth et revendications express : Nouvelles entrees JournalAudit : auth.google_creation, auth.google_fusion, rapprochement.revendication_express. Trace qui (utilisateur), quand, par quelle methode (Google vs OTP), et quels evenements affectes.

  • improved

    Carrousel exposants masque tant qu'aucun atelier Premium actif : La section « Decouvrez les artisans » de la landing ne s'affiche qu'a partir du 1er exposant ayant souscrit Stripe. Avant : un atelier cree mais sans paiement finalise apparaissait. Compteur « createurs » de la section stats utilise la meme regle.

  • improved

    Bouton « Devenir exposant » dans /mon-profil : Carte profil affiche desormais soit « Devenir exposant » (si aucun ProfilExposant), soit « Mon abonnement » (si deja exposant) selon l'etat du compte. CTA des offres mises a jour pour pointer vers /devenir-exposant?cle=... au lieu de /auth/inscription.

  • improved

    Formulaire pre-checkout avec lien CGV explicite : Le label de la case d'acceptation des CGV est maintenant un hyperlien vers /cgv ouvert dans un nouvel onglet, accompagne d'une mention « (s'ouvre dans un nouvel onglet) » pour les lecteurs d'ecran.

  • fixed

    Badges « added » et « removed » du changelog public : Ces 2 badges etaient invisibles (sans couleur de fond) car Tailwind purgeait leur CSS lors de la compilation : ils n'etaient jamais utilises en dur dans le HTML, seulement assembles dynamiquement (`class="badge-{{ type }}"`). Ajoutes a la safelist Tailwind pour garantir leur presence dans le bundle.

  • fixed

    URLs absolues correctes derriere reverse proxy : Werkzeug ProxyFix configure dans la factory Flask : les URLs generees par url_for(_external=True) utilisent maintenant le scheme et le host envoyes par nginx/HAProxy via X-Forwarded-Proto/Host. Sans ca, le redirect_uri OAuth Google partait en http://127.0.0.1:8020 et Google rejetait la requete (redirect_uri_mismatch).

  • fixed

    RecursionError gevent + SSL au demarrage du flow OAuth : Au 1er appel HTTPS sortant via Authlib (requests/urllib3), Gunicorn avec preload_app=True declenchait une boucle infinie sur SSLContext.minimum_version. Correction : monkey.patch_all() applique en tete de gunicorn.conf.py, avant le preload de l'app.

  • fixed

    Redirection /devenir-exposant prioritaire sur les checks Stripe : Un nouvel utilisateur sans ProfilExposant tombait sur des messages Stripe (« sync desactivee », « offre non synchronisee ») avant de pouvoir nommer son atelier. Le check « pas de profil -> /devenir-exposant » passe maintenant en premier dans la vue checkout(), pour offrir un parcours fluide.

0.9.0

Pre-lancement : referencement communautaire + OpenAgenda

06/05/2026 8 changements

  • added

    Referencement communautaire d'evenements : Tout utilisateur inscrit peut signaler un evenement non liste sur la plateforme. La fiche reste en `REFERENCE_EN_ATTENTE` jusqu'a ce que la communaute la confirme : un score de fiabilite >= 5 (votes ponderes par anciennete + statut Premium) la fait basculer en `REFERENCE_VERIFIE`. Anti-doublon prealable sur titre/ville/date pour eviter les fiches concurrentes.

  • added

    Revendication d'evenement par l'organisateur reel : Le veritable organisateur peut reprendre la main sur une fiche referencee : verification automatique par OTP envoye sur l'email du domaine de la source (`@mairie-de-...fr`), ou validation manuelle par un admin si ce canal n'est pas disponible. Une fois acceptee, la fiche passe en `OFFICIEL` avec `organisateur_id` mis a jour.

  • added

    Statut Premium organisateur (poids vote) : Nouveau flag `Utilisateur.est_organisateur_premium` qui pondere les confirmations communautaires (un Premium pese 3x un utilisateur standard). Activation manuelle pour le moment ; sera pilote par le webhook abonnement quand un produit Stripe organisateur sera lance.

  • added

    Source OpenAgenda (CLI flask import openagenda) : Deuxieme source de donnees publique apres DATAtourisme. Import incremental, idempotent, rate-limite (50 req/min, 2000/h prudent). Whitelist d'agendas a parcourir (defaut : agendas regionaux), filtre par mots-cles (marche, salon, expo, artisan, createur, noel...). Cron quotidien 2h conseille pour rester sous les seuils.

  • added

    Anti-doublon cross-sources DATAtourisme x OpenAgenda : Avant de creer un evenement OpenAgenda, on cherche un doublon DATAtourisme deja indexe (titre similaire + ville + CP + date_debut +- 1j). Si match : on enrichit l'evenement existant via le nouveau champ JSONB `sources_alternatives` plutot que dupliquer. La source principale est conservee, les champs manquants (description, image, region) sont completes.

  • added

    Colonne `region` derivee du code postal : Nouvelle colonne `Evenement.region` (snake_case, ex. `auvergne_rhone_alpes`) calculee automatiquement depuis le code postal a chaque creation/edition. Backfill effectue pour les 154 evenements DATAtourisme existants. Indexee : prepare les futures pages SEO /marches-createurs/<region>.

  • improved

    Sophie organisatrice ajoutee au seed demo : La distinction stricte EXPOSANT vs ORGANISATEUR introduite par le referencement communautaire imposait un compte de demo dedie pour les tests E2E qui couvrent la creation d'evenements (les exposants comme Alice passent desormais par le parcours de referencement, pas par /mes-evenements/nouveau).

  • fixed

    Tests E2E test_evenements + test_admin_categories : Mise a jour des suites E2E pour utiliser Sophie (organisatrice) au lieu d'Alice (exposante) sur les flux de creation d'evenements. Robustification du cleanup initial de test_admin_categories pour tolerer une pollution de run precedent (events orphelins references par une categorie de test).