Quoi de neuf ?
Releases, améliorations et corrections de la plateforme.
1.9.0
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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).