Changelog

Historique complet des mises a jour de LeadTouch.

1.0.15 Onglet Cibles, collecte avancée et France entière

5 avril 2026

Nouveautes

  • Nouvel onglet « Cibles » dans le dashboard — permet de configurer le ciblage de la prospection sans toucher au fichier config.yaml
  • 11 profils de ciblage predefinis — web, SEO, marketing, restauration, immobilier, comptable, formation, assurance, BTP, beaute, generaliste — chacun avec des filtres NAF et options adaptes au secteur
  • 4 switches on/off personnalisables par profil : ignorer les entreprises avec site pro, garder les sites template (refonte), ignorer les personnes physiques, ignorer les structures publiques
  • Gestion visuelle des codes NAF — exclusions par groupe (agriculture, commerces, BTP, etc.) avec checkboxes, et codes NAF prioritaires (jamais filtres meme s'ils sont dans les exclusions)
  • Panneau « Parametres avances » (pliable) — visualise la configuration complete du profil selectionne, permet d'editer chaque parametre pour creer un profil personnalise sans modifier les profils predefinis
  • Collecte avancée Sirene — bouton dédié dans le panneau de run, ouvre un modal avec filtres : créneau de dates, catégorie juridique (SAS, SARL, auto-entrepreneur, etc.), tranche d'effectifs, état administratif, codes NAF, départements. Collecte uniquement sans enrichissement ni envoi
  • Option « France entière » — disponible dans le sélecteur de département et dans la collecte avancée, couvre les 101 départements (métropole + DOM)
  • Collecte par batches — les départements sont traités par groupes de 10 pour respecter les limites API, avec arrêt propre possible entre chaque batch

Ameliorations

  • Les filtres NAF, structures publiques et personnes physiques du pipeline ne sont plus codes en dur — ils sont lus dynamiquement depuis le profil de ciblage actif
  • Le filtre « site pro » est desormais controle par le profil de ciblage (skip_has_website) au lieu de service_type
  • Nouvelle section targeting: dans config.yaml avec profil de base et overrides
  • Textarea « sender_activity » agrandi dans l'onglet Configuration (largeur 100%, hauteur min 220px)
  • Script de déploiement (deploy-site.bat) corrige automatiquement les permissions fichiers (chmod 755/644) après chaque envoi
  • Le dashboard s'ouvre désormais dans une fenêtre dédiée sans barre d'URL (Edge/Chrome en mode --app) — aspect application native, fallback navigateur classique si indisponible

1.0.14 Desabonnement RGPD, engagement email et envoi progressif

4 avril 2026

Nouveautes

  • Desabonnement RGPD complet — le lien de desinscription pointe vers leadtouch.fr, identifie le client emetteur et synchronise automatiquement les desabonnements au demarrage du pipeline (ajout a la blacklist locale)
  • Stats d'engagement email — les ouvertures, clics et bounces sont agreges par email et envoyes au serveur LeadTouch en batch de 25 pour calculer un score d'engagement global
  • Sync Mailjet periodique — les evenements Mailjet (ouvertures, clics, bounces, spam) sont desormais synchronises toutes les 50 iterations pendant l'enrichissement, et non plus uniquement en fin de pipeline
  • KPI tracking sur le dashboard — 4 nouvelles cartes : ouvertures, clics, taux d'ouverture et taux de clic, affichees sous les KPI existants
  • Envoi progressif — option activable dans la configuration (Limites) qui augmente graduellement le nombre d'emails par run : 20% au run 1, 40% au run 2, jusqu'a 100% au run 5+
  • Envoi d'email de test — bouton « Envoyer un test » dans l'onglet Template Email, ouvre un modal pour saisir l'adresse destinataire et envoie le template actuel avec des donnees fictives
  • Score d'engagement — le serveur LeadTouch calcule un score 0-100 par adresse email (base sur les taux d'ouverture, clic et bounce agreges de tous les clients), visible dans l'import

Corrections de bugs

  • Erreur database is locked lors de la sync Mailjet pendant un run — timeout SQLite augmente a 30s et busy_timeout ajoute sur toutes les connexions critique
  • Erreur UNIQUE constraint failed: email_tracking.tracking_id — la contrainte UNIQUE sur tracking_id seul empechait d'enregistrer plusieurs evenements (open + click) pour un meme email. Migre vers UNIQUE(tracking_id, event_type) critique

Ameliorations

  • Les adresses desabonnees sont automatiquement exclues de l'import et du browse (conformite RGPD)
  • Route /api/import/sync-unsubscriptions dans le dashboard pour synchroniser manuellement les desabonnements
  • Tous les INSERT INTO email_tracking passes en INSERT OR IGNORE pour eviter les doublons

1.0.13 Template email editable, quota intelligent et signalement de bugs

4 avril 2026

Nouveautes

  • Template email editable depuis le dashboard — onglet dedie avec editeur HTML, previsualisation en iframe et restauration du template par defaut
  • Validation des placeholders obligatoires ({{subject}}, {{body}}, {{cta_text}}, {{unsubscribe_url}}) a la sauvegarde du template
  • Signalement de bugs depuis la GUI — bouton « Signaler un bug »» dans la barre de statut, modal avec sujet et description
  • Les signalements sont envoyes au serveur LeadTouch avec la version client et l'OS pour un suivi centralise
  • Quota intelligent Mailjet — avant chaque envoi, la reputation est evaluee via l'API Mailjet Statistics (bounces, spam, blocked). Si degradee, max_emails est reduit automatiquement (75%, 50%, 25% ou suspension totale)
  • Fallback reputation locale — si l'API Mailjet est indisponible, le taux d'echec est calcule sur les 7 derniers jours de la table sent_emails
  • Masquage des donnees sensibles dans l'onglet Importer — les emails et telephones sont masques dans la previsualisation (ex: j***@d***.com) avec icone cadenas. Les donnees completes ne sont visibles qu'apres import
  • Synchronisation evenements Mailjet — les ouvertures, clics, bounces, spam et blocages sont recuperes automatiquement via l'API Mailjet en fin de pipeline. Le MessageID Mailjet est stocke a l'envoi pour le suivi
  • Actions automatiques sur evenements Mailjet : hard bounce → invalid_email, spam complaint → blacklist automatique
  • Nouvelle commande CLI --check-mailjet pour synchroniser manuellement les evenements Mailjet des 14 derniers jours

Ameliorations

  • Invalidation automatique du cache template dans le mailer apres modification depuis le dashboard
  • Le template email n'est plus ecrase lors des mises a jour (preserve les modifications du client)

1.0.12 Performance, credits intelligents et monitoring serveur

3 avril 2026

Nouveautes

  • Monitoring de charge serveur temps reel — calcul base sur req/s, req/min, connexions concurrentes et latence moyenne
  • Rate limiting dynamique — adapte automatiquement selon la charge (300 → 150 → 60 req/min)
  • Throttle adaptatif cote client — le pipeline interroge /health toutes les 30s et ralentit automatiquement ses requetes API (0.4s/req a 60-85% de charge, 1.0s/req au-dessus de 85%)
  • Retry automatique sur HTTP 429 — chaque requete API est retentee une seconde fois apres le delai Retry-After du serveur
  • Indicateur de charge dans le dashboard — le badge LeadTouch passe du vert au orange fonce selon la charge serveur
  • Compteurs GET/POST dans Redis — partages entre tous les workers Gunicorn, drain de 75% de la capacite max toutes les 60s, pression ponderee (45% GET / 55% POST) integree comme 5e facteur de charge
  • Charge serveur exposee dans GET /api/health (load_percent, rps, rpm, concurrent, avg_latency_ms, active_clients, get_pending, post_pending)

Ameliorations

  • PagesJaunes et 118712.fr passes en HTTP pur — suppression de Playwright/Chromium headless, enrichissement parallelise sans goulot d'etranglement (~20x plus rapide)
  • Credits fractionnaires — consultation API avec email trouve : -1 credit, sans resultat : -0.25 credit seulement
  • Credits stockes en DECIMAL cote serveur, affiches en entier dans la GUI et le dashboard
  • Version client minimum requise : 1.0.12

1.0.11 Interface amelioree, optimisation ressources

3 avril 2026

Nouveautes

  • Banniere ASCII au demarrage — logo LeadTouch stylise avec version, mode d'execution et departements
  • Barres de progression visuelles — [████████░░░░] 62% — 25/40 en console et barre graphique dans la GUI
  • Resume de fin de pipeline en tableau — statistiques formatees sur plusieurs lignes avec couleurs par metrique
  • Barre de progression GUI — Canvas custom avec pourcentage, mise a jour en temps reel pendant l'enrichissement
  • Indicateur de phase GUI — affiche la phase en cours (Phase 1, Phase 2...) dans la barre de progression et la barre de statut
  • Compteurs "Envoyes" et "Erreurs" ajoutes a la barre de stats GUI

Ameliorations

  • Couleurs par niveau de log — WARNING en jaune, ERROR en rouge bold, DEBUG en gris attenue (console et GUI)
  • En-tetes de phase stylises — encadres avec box-drawing characters en bleu bold (console), bold accent (GUI)
  • Scores eleves (★ Score 8+) affiches en vert bold, resume final en magenta bold
  • Timestamp raccourci — heure seule (10:30:00) dans la console et la GUI, le fichier de log conserve le format complet
  • Separateurs visuels ameliores — tirets fins et barres verticales au lieu de === et ---
  • Tags GUI enrichis — en-tetes de phase et scores en gras, detection des nouveaux patterns (▶, ★, ┃)
  • Suppression du nom du logger en console et GUI — economie d'espace, le fichier de log conserve l'info
  • PagesJaunes et 118712.fr passes en HTTP pur — suppression de Playwright/Chromium headless, enrichissement parallelise sans goulot d'etranglement (~20x plus rapide)
  • Caches memoire bornes (LRU) — presence web et tracking limites en taille pour eviter les fuites memoire
  • Export Excel par curseur iteratif — plus de chargement complet en memoire sur les grosses bases
  • Sessions HTTP reutilisables — connection pooling sur toutes les sources d'enrichissement et les API d'IA
  • Regex pre-compilees dans la GUI et l'envoi d'email — reduction de la charge CPU
  • Filtres NAF et deduplication optimises — prefixes pre-calcules et set comprehensions directes
  • Liberation memoire apres la phase de collecte — donnees brutes et index de deduplication supprimes
  • Connexions base de donnees securisees — try/finally sur toutes les fonctions critiques
  • Protection des callbacks GUI contre la fermeture de fenetre — plus de crash TclError a l'arret

1.0.10 Production-ready : Gunicorn, health check et securite

3 avril 2026

Nouveautes

  • Gunicorn multi-workers — 9 workers par defaut (2×cores+1), fallback automatique sur uvicorn si gunicorn absent
  • Health check avance GET /api/health — ping MariaDB (SELECT 1) + Redis (PING), retourne HTTP 503 si un service est down
  • Credentials externalises — secrets charges depuis api/.env via python-dotenv, plus aucun mot de passe en clair dans le code
  • Script deploy.bat — envoi automatique du setup + latest.json sur le serveur via SCP

Securite

  • Protection XSS dans le dashboard — echappement HTML (esc()) sur toutes les donnees utilisateur injectees via innerHTML
  • Thread-safety Brave Search — acces concurrent a _brave_exhausted_keys protege par Lock
  • Rate limiting tracking — maximum 10 evenements par tracking_id (anti-spam ouvertures/clics)

Ameliorations

  • Pool aiomysql agrandi — minsize=10, maxsize=50 (au lieu de 5/20) pour supporter 9 workers Gunicorn
  • Documentation corrigee — MariaDB au lieu de SQLite pour l'API, dependances mises a jour, scores SMS corriges, numerotation sources corrigee

1.0.9 Optimisation serveur API et verification de version

3 avril 2026

Nouveautes

  • Verification de version obligatoire au demarrage — le serveur peut exiger une version minimum du client
  • Endpoint GET /api/check-version — retourne la compatibilite et la version minimum requise
  • Fichier api/requirements.json — configure la version client minimum cote serveur
  • Dialogue de mise a jour — en mode console (oui/non) et en mode GUI (popup tkinter)

Ameliorations

  • Serveur API entierement async — toutes les routes converties en async def avec aiomysql
  • Pool de connexions MySQL (5-20 connexions) — remplace la creation d'une connexion par requete
  • 4 workers uvicorn par defaut — capacite multipliee par 4
  • 5 index MySQL ajoutes — postal_code+created_at, category, created_at, unsubscribed, naf_checked
  • Cache en memoire pour categories et departements (TTL 5 min) — plus de GROUP BY a chaque appel
  • Cache du trust score (TTL 1h) — economise un SELECT par soumission
  • Pagination par curseur sur /prospects/browse — performant meme avec des milliers de prospects
  • Batch submit optimise — deduplication groupee avec IN(...) au lieu de requetes individuelles
  • Backfill INSEE en aiohttp — appels reseau non-bloquants
  • Capacite serveur estimee passee de ~10 a ~200-500 utilisateurs simultanes

1.0.8 Tracking emails, detection reponses et analyse de site

3 avril 2026

Nouveautes

  • Tracking des ouvertures d'emails — pixel transparent 1x1 insere dans chaque email, statistiques en temps reel
  • Tracking des clics — liens rediriges via le dashboard avec comptage (lien de desinscription preserve)
  • Endpoint /api/tracking — taux d'ouverture, taux de clic et 20 derniers evenements
  • Detection automatique des reponses via IMAP — scan de la boite de reception en fin de pipeline
  • Nouveau flag --check-replies — lancer la detection des reponses manuellement
  • Nouveau statut replied — les prospects ayant repondu sont identifies automatiquement
  • Analyse du site web des prospects — detection HTTPS, responsive, SEO, Open Graph, plateforme, performance
  • Personnalisation des emails par IA — l'analyse du site est injectee dans le prompt pour mentionner des points d'amelioration concrets

Ameliorations

  • Table email_tracking en base — historique complet des ouvertures et clics (IP, User-Agent, date)
  • Colonne tracking_id dans sent_emails — lien entre email et evenements de tracking
  • Colonne site_analysis dans prospects — resume JSON de l'analyse du site stocke en base
  • Deduction automatique du serveur IMAP depuis le SMTP (Gmail, Outlook, Yahoo, Zoho, IONOS, Free, Orange, SFR...)
  • Normalisation recursive des sujets d'email pour le matching des reponses (Re: Fwd: TR: imbriques)
  • Template email HTML inclus dans l'installateur Windows (copie a la racine a cote du .exe)
  • reply_checker ajoute aux hidden imports PyInstaller

1.0.7 Corrections, nouvelles fonctionnalites et robustesse

2 avril 2026

Nouveautes

  • Lien de desinscription dans chaque email — page /unsubscribe avec blacklist locale + API partagee
  • Cache d'enrichissement (SQLite, TTL 7 jours) — evite les requetes redondantes sur les reruns
  • Recherche avancee de prospects dans le dashboard — filtres par statut, departement, source, email, telephone, site, score, texte libre + pagination
  • Notifications desktop Windows (toast) — run termine, erreur fatale, credits bas (< 50)
  • Type de service configurable (service_type) — web, SEO, marketing, compta, etc. Le filtre "site pro → skip" ne s'applique qu'en mode web
  • Source d'enrichissement Hunter.io (optionnel, desactive par defaut) — domain search + email finder par dirigeant, quota mensuel configurable (25 req/mois gratuites)
  • Bot LinkedIn autonome — simule un usage humain (scroll, likes, visites) et enrichit les prospects en arriere-plan avec planning journalier aleatoire
  • Lancement du bot LinkedIn depuis l'interface graphique — detection automatique de la premiere connexion

Corrections de bugs

  • Connexion base de donnees utilisee apres fermeture dans le pipeline critique
  • Departement "Charente (16)" code en dur dans le prompt Gemini Search — desormais extrait du code postal critique
  • Fuites de connexions SMTP dans l'envoi, la verification et la devinette d'emails (3 fonctions corrigees) critique
  • Double debit de credits lors de l'import depuis le dashboard critique
  • Connexion DB non fermee en cas d'erreur dans l'import dashboard critique
  • Log du pipeline GUESS affichait la meme metrique deux fois
  • Crash si un modele IA mal configure (format sans ":")
  • Champ created_at vide par defaut au lieu de la date courante
  • Crash si l'API BODACC renvoie un format inattendu dans le champ registre

Securite

  • Systeme de desinscription RGPD — prospects desinscrits exclus de l'API (plus de credits perdus)
  • Echappement HTML du sujet et du bouton CTA dans les emails (prevention injection)
  • Validation des bornes min/max sur les parametres numeriques du dashboard (workers, delais, limites)
  • --once et --daemon mutuellement exclusifs (argparse enforce)

Ameliorations

  • Scoring intelligent — prospects tries par score dans la file d'envoi (meilleurs en premier)
  • Gestion des reponses JSON invalides sur les 5 sources de collecte (Sirene, RNA, BODACC, JOAFE, INPI)
  • Lock de thread-safety sur l'etat du pipeline dashboard
  • Constantes nommees pour les timeouts du client API
  • Activation des couleurs ANSI Windows via l'API kernel32 (remplace os.system(""))
  • Protection contre les dates futures dans le scoring
  • Nettoyage des imports inutilises et des stats mortes

1.0.6 Filtre fantome, tracking et auto-update

2 avril 2026

Nouveautes

  • Tracking des sources d'emails (quelle source a trouve chaque email)
  • Compteurs en direct dans l'interface (enrichis, envoyes, erreurs)
  • Systeme d'auto-update integre (verification + telechargement automatique)
  • Relance des anciens prospects sans email (--retry-old)

Ameliorations

  • Filtre fantome relaxe — un telephone seul laisse passer vers les sources API

1.0.5 Dashboard et API collaborative

31 mars 2026

Nouveautes

  • Dashboard web local (Flask, stats temps reel, graphiques Chart.js)
  • API LeadTouch collaborative — partage et consultation de prospects enrichis
  • Systeme de credits (1000 offerts, +1 par partage, -1 par consultation)
  • Interface graphique native (tkinter, system tray, logs en direct)
  • Inscription automatique a l'API au premier lancement

1.0.4 Enrichissement Gemini Search

30 mars 2026

Nouveautes

  • Source d'enrichissement Gemini Search (Google AI avec recherche web)
  • Fallback automatique entre modeles Gemini
  • Pipeline SMS avec scoring et envoi via OVH
  • Devinette d'emails par patterns SMTP (--guess)

1.0.0 Lancement initial

29 mars 2026

Nouveautes

  • Collecte multi-sources : INSEE Sirene, RNA, BODACC, JOAFE, INPI RNE
  • Cascade d'enrichissement (10+ sources : scraping, Brave, Serper, Google CSE...)
  • Filtres pre-enrichissement (NAF, nom, personne physique)
  • Generation d'emails par IA (Mistral / Gemini)
  • Envoi email (Mailjet prioritaire, SMTP secours)
  • Verification SMTP des adresses avant envoi
  • Mode demon avec horloge interne
  • Export Excel des prospects