Changelog Batimio
Toutes les modifications notables de ce projet sont documentées dans ce fichier.
Le format suit Keep a Changelog et le projet suit la gestion sémantique de versions majeur.mineur.patch.
- majeur : rupture publique (API, parcours utilisateur, schéma DB non rétro-compatible)
- mineur : livraison d'un nouveau Sprint ou d'une nouvelle fonctionnalité
- patch : correction de bug ou ajustement mineur sans nouvelle feature
[1.14.3] — 2026-04-21
Ajouté — Timeline chronologique illustrée des interventions
feat(diagnostic)SchémaActionArtisanstructuré remplace le tableau de strings plat. Champs :ordre,etape,duree_min,icone(emoji),descriptionoptionnellefeat(prompt)Le prompt Claude oblige désormais des étapes strictement chronologiques avec durées réalistes et icône emoji (🧱 🔧 ⚡ 🎨 🏗️ 🪜 📏 …)feat(ui)/client/demande/diagnosticet/pro/demandes/[id]affichent une timeline visuelle :- Badge « Étape N »
- Icône dans un cercle à gauche
- Durée formatée en badge à droite (
30 min/1 h 30/2 j 4 h) - Description en ligne secondaire
compatBackward-compatible vianormaliserActions()— les anciens diagnostics enstring[]s'affichent en timeline avecduree_min: 0feat(validation)Zod schema dans/api/agentaccepte l'union des 2 formats
Corrigé — Ceinture de sécurité sur RepondreQuestions
fix(ui)Ajout d'unekeyprop calculée sur le contenu des questions dans la page parent → force le remount complet du composant quand les questions changent, en complément duuseEffectde v1.14.2. Évite les cas edge où le state pourrait rester bloqué.
[1.14.2] — 2026-04-20
Corrigé — Formulaire de précisions client qui se bloquait après la 1re réponse
fix(ui)RepondreQuestions.tsx : le state local (reponses,enCours,erreur) n'était pas réinitialisé quand le serveur retournait de nouvelles questions viarouter.refresh(). Conséquences :- Les anciennes réponses s'affichaient dans les nouveaux textarea (placeholder incorrect)
- Les champs restaient désactivés (
disabled={enCours}à true) - Le bouton « Mise à jour du diagnostic » restait grisé
- Solution :
useEffectqui observe une signature stable du tableauquestions(join('\u0001')) et remet à zéro le state à chaque changement de contenu.
Corrigé — La confiance IA ne remontait pas après réponses
fix(preciser)Le prompt disait « révise à la hausse » mais Claude pouvait renvoyer une confiance stagnante ou en baisse quand il identifiait encore des ambiguïtés. Double correctif :
1. Prompt renforcé : instruction stricte « confiance DOIT augmenter de MINIMUM 10 points » + contexte envoyé (confiance précédente + nombre de réponses fournies)
2. Plancher post-traitement : si Claude renvoie confiance < confiance_precedente + 10, on clampe à ce plancher (plafonné à 100). Garantit la monotonie.
[1.14.1] — 2026-04-20
Ajouté — Le client peut répondre directement aux questions IA
feat(client)ComposantRepondreQuestions.tsx : formulaire inline avec une zone de texte par question posée par l'IAfeat(api)RoutePOST /api/demande/:id/preciser :- Reçoit les réponses textuelles du client
- Fusionne dans
demandes.mesures(clésq1,q2, …) en préservant les mesures existantes - Relance Claude avec contexte enrichi (question → réponse en paires Q/R)
- Met à jour
diagnostic_detail,diagnostic_label,confiance_ia, durées, matériaux, fourchettes tarifaires - Recalcule la fourchette DVF avec les durées révisées
feat(ui)Page/client/demande/diagnosticintégrée avec le formulaire- Rafraîchit automatiquement (
router.refresh()) après envoi pour afficher le nouveau diagnostic - Bouton « Affiner le diagnostic avec mes réponses »
- Si l'IA estime qu'il reste des questions non couvertes, elle peut en poser de nouvelles → cycle itératif
Sécurité
- Vérification
demande.client_id === auth.uid()quand un user est connecté : un tiers ne peut pas préciser la demande d'un autre
[1.14.0] — 2026-04-20
Ajouté — Sprint 17 : Devis adaptatif (questions ou devis, 2 formats)
feat(devis-adaptatif)Pipeline unifié qui évalue si la description est suffisante pour chiffrer, puis renvoie soit des questions ciblées soit directement le devislib/claude/devis-adaptatif.ts: prompt Claude + fonctionevaluerEtGenererDevis()- Deux statuts de sortie :
questions(3–8 questions typées) oupret(DevisNormeResult) - Questions catégorisées (
dimensions,materiaux,acces,support,finitions) et priorisées (bloquant/important/nice_to_have) - Types d'input :
mesure(avec unité),choix,oui_non,text,photo feat(api)RoutePOST /api/devis/adaptatif- Fusionne les réponses dans
demandes.mesures(persistance multi-passe) - Persiste le devis dans
missions.devis_normédès questatus=pret - Peut être appelée N fois jusqu'à convergence
feat(pdf)lib/pdf/devis-html.tsdeux modes de rendu HTML A4simplified(envoi client) : langage clair, pas de références matériau, durées en heures, DTU en codes seulement, signatures prestataire/clientdetailed(usage interne pro) : toutes colonnes (référence, niveau MO, tarif horaire, durée minutes), DTU avec extraits article par article- Commutation visible dans la toolbar écran entre les deux vues
feat(api)/api/mission/:id/devis?format=simplified|detailedaccepte le paramètre de rendufeat(ui)Composant Reactcomponents/pro/DevisAdaptatif.tsx- Bouton « Évaluer et générer le devis »
- Formulaire dynamique avec inputs typés selon
DevisQuestion.type - Badge « Requis » sur questions bloquantes + désactivation submit tant que bloquantes non remplies
- 4 boutons sortie : client HTML / client PDF / pro HTML / pro PDF
feat(ui)/pro/devis/[id]refondue autour du composant adaptatif,DevisFormlegacy conservé en fallback
Séparation stricte matériaux / main d'œuvre
Les deux formats séparent clairement les deux postes :
- Bloc Fournitures et matériaux (table avec désignation, qté, prix unit., total HT)
- Bloc Main d'œuvre (étapes ordonnées avec durée et coût)
- Bloc Totaux ventilés : Fournitures HT + MO HT + TVA + TTC
Basé sur les DTU
- Chaque devis cite exclusivement les DTU stockés en DB (
normestable, 103 entrées) - Validation côté serveur : les références matériaux doivent exister dans
materiaux_catalogue, sinon elles sont filtrées avant persistance - Tarifs horaires tirés de
tarifs_reference(IDCC 1596 + FFB IDF)
Roadmap CLAUDE.md
- Section 19 « ROADMAP V1.1+ » étendue avec Sprint 17 détaillé
- Timeline synthétique mise à jour jusqu'à v1.14
[1.13.2] — 2026-04-20
Corrigé
fix(agent)Enumcorps_metierétendu aux 9 métiers du catalogue (plombier, électricien, menuisier, peintre, maçon, plaquiste, carreleur, charpentier, couvreur) + normalisation tolérante (accents, pluriels, synonymes comme "maconnerie"/"toiture"). Avant, une demande maçon renvoyait "Données invalides" car Claude répondait "maçon" avec cédille mais le schéma Zod attendait "macon" sans.fix(i18n)CGU + page confidentialité : restauration des accents français (é, è, ê, ç, à) et des espaces insécables avant les:/%/ unités, conformément aux règles typographiques de l'Imprimerie nationale.
[1.13.1] — 2026-04-20
Corrigé
fix(auth)Middleware capture le?code=orphelin sur toute page hors/auth/*et redirige vers/auth/callback(a215872). Défense en profondeur pour le cas où un magic link pointe sursite_urlracine sans passer explicitement par le callback.
[1.13.0] — 2026-04-20
Ajouté — Documents HTML/PDF imprimables (devis + lettre de mission)
feat(docs-pdf)Génération HTML A4 imprimable du devis (a29aa8b)- Route
GET /api/mission/:id/devisavec?print=1auto-trigger dialogue d'impression - Mentions légales complètes : L.111-1 / L.242-5 Code de la consommation + L.221-18 rétractation + L.441-10 pénalités de retard
- Champs signature prestataire + « Bon pour accord » client
- Normes DTU/AFNOR citées en bloc dédié
- Pied de page SAS RHEXO
feat(docs-pdf)Refactor complet du rendu HTML de la lettre de mission- Toolbar écran avec bouton « Imprimer / PDF »
- Date de génération + numéro de version visibles
- Mémo synthétique en callout en haut
- Matériel complet en table avec références fournisseurs
featlib/pdf/branding.ts : source unique pour infos éditeur SAS RHEXOfeatlib/pdf/css-print.ts : CSS commun A4 +@page+@media printfeatUI/pro/devis/[id] : 2 boutons « Prévisualiser » + « Télécharger PDF »featUI/pro/chantier/[id] : 4 boutons (Lettre HTML + PDF, Devis HTML + PDF)- Choix technique : pas de Playwright/Puppeteer → « Print → Save as PDF » natif navigateur, compatible Alpine
[1.12.0] — 2026-04-20
Ajouté — Catalogue DTU complet (95 normes supplémentaires)
feat(dtu)Migration 016 : 95 nouvelles normes DTU/NF ajoutées au catalogue (e361a91)- Couvreur : 19 DTU (40.x complet + 43.x étanchéité)
- Plombier : 18 DTU (60.x, 61.1, 64.1, 65.x, 75.1)
- Menuisier : 14 DTU (33, 34, 35, 36, 37, 39, 51.x, 55)
- Maçon : 14 DTU (13.x, 14.1, 20.x, 21, 23.1, 26.x, 42.1)
- Plaquiste : 11 DTU (25.x, 27.1, 45.x, 58.x)
- Peintre : 10 DTU (42.1, 44.1, 53.x, 59.x)
- Électricien : 8 normes (NF C 15-100, DTU 68.3, 70.1, NF C 14-100, 16-600)
- Charpentier : 7 DTU (31.x, 32.x, 41.2)
- Carreleur : 2 DTU (52.1, 52.2)
- Total : 103 normes en DB (8 Sprint 15 + 95 Sprint 19)
feat(dtu)Lettre de mission branchée sur la tablenormes- Nouvelle fonction
chargerNormesContexte()qui lit les DTU applicables au corps de métier - Prompt Claude instruit strictement de ne citer QUE les DTU fournis (pas d'invention)
- Format standardisé « DTU XX.Y — Titre (§article) »
[1.11.0] — 2026-04-19
Ajouté — Script de migration Supabase Cloud
feat(migrate)scripts/migrate-cloud.tsavec postgres.js (deppostgres ^3.4.5)featTable_migrations_appliedpour idempotencefeatnpm scriptsmigrate:cloudetmigrate:cloud:dryfeatLectureSUPABASE_DB_URLdepuis.env.localfeatGestion des migrations déjà appliquées (pré-marquage manuel possible)
[1.10.0] — 2026-04-19
Ajouté — Mentions légales SAS RHEXO
featCGU section 1 « Éditeur du site » avec SAS RHEXO complet + hébergeursfeatRenumérotation des sections 2-8 CGUfeatConfidentialité : SAS RHEXO comme responsable du traitementfeatConfidentialité section cookies mise à jour (3 catégories avec consentement par catégorie)
Corrigé
fix(ui)Sauts de ligne CGU + confidentialité (classesproseinertes sans plugin typography → remplacées par styles Tailwind explicites via attribute selectors)
[1.9.0] — 2026-04-19
Ajouté — Recherche par ville
featChamp « Ville » remplace « Code postal » sur/recherchefeatParse automatique : accepte « Versailles », « 78000 » ou « Versailles (78000) »featAffichage format « Ville (CP) » partout :/recherche+/[metier]/[ville]compatParamètre URLcp=conservé pour rétro-compatibilité
[1.8.0] — 2026-04-19
Ajouté — Bannière de consentement cookies (RGPD)
feat(consent)components/shared/ConsentBanner.tsx : bannière fixe + bouton flottant de réouverture (1325292)feat(consent)lib/consent.ts : state localStorage + events réactifsfeat(consent)lib/consent-hook.ts : hookuseConsent()viauseSyncExternalStorefeat(consent)Mode « Personnaliser » avec toggles par catégorie (Essentiel / Analytics / Marketing)feat(consent)Refus aussi visible que l'acceptation (conformité CNIL)feat(consent)GoogleAnalytics gated : GA4/GTM/Ads ne chargent QUE si consent donnéfeatGA4 configuré avecanonymize_ip: true+cookie_flags: SameSite=None;Secure
Fichiers clés
components/shared/ConsentBanner.tsxcomponents/shared/GoogleAnalytics.tsxlib/consent.ts+lib/consent-hook.ts
[1.7.0] — 2026-04-19
Ajouté — Intégration Google (GA4 + GTM + Ads + Search Console)
feat(google)components/shared/GoogleAnalytics.tsx(d7895ce)- Scripts conditionnels GA4 + GTM + Google Ads
- Pas de rendu si aucune variable d'env Google renseignée
featMetadata verification Google Search Console + Bing Webmasterfeatlib/analytics/google.ts : helperssendGaEvent,sendAdsConversion,GaEventsfeatÉvénements métier pré-câblés :demandeCreee,rdvReserve,paiementConfirme,abonnementSouscritenvAjout des 5 variables Google dans.env.example :NEXT_PUBLIC_GA_MEASUREMENT_ID,NEXT_PUBLIC_GTM_ID,NEXT_PUBLIC_GOOGLE_ADS_ID,GOOGLE_SITE_VERIFICATION,BING_SITE_VERIFICATION
Infrastructure (non-code)
- Configuration Resend SMTP sur Supabase Auth (délivrabilité magic link)
- Configuration DNS
batimio.com : SPF racine + DMARC relaxed - Site URL Supabase corrigé :
http://localhost:3000→https://batimio.com - Redirect URL allowlist : prod + dev local +
batimio.fr - Migrations 010 à 016 appliquées sur Supabase Cloud
choix techniquePas de Playwright/Puppeteer → "Print → Save as PDF" natif navigateur, compatible Alpine
Ajouté — Catalogue DTU complet (95 normes)
feat(dtu)Migration 016 : 95 nouvelles normes DTU/NF ajoutées au catalogue (e361a91)- Couvreur : 19 DTU (40.x complet + 43.x étanchéité)
- Plombier : 18 DTU (60.x, 61.1, 64.1, 65.x, 75.1)
- Menuisier : 14 DTU (33, 34, 35, 36, 37, 39, 51.x, 55)
- Maçon : 14 DTU (13.x, 14.1, 20.x, 21, 23.1, 26.x, 42.1)
- Plaquiste : 11 DTU (25.x, 27.1, 45.x, 58.x)
- Peintre : 10 DTU (42.1, 44.1, 53.x, 59.x)
- Électricien : 8 normes (NF C 15-100, DTU 68.3, 70.1, NF C 14-100, 16-600)
- Charpentier : 7 DTU (31.x, 32.x, 41.2)
- Carreleur : 2 DTU (52.1, 52.2)
- Total : 103 normes en DB (8 Sprint 15 + 95 cette version)
feat(dtu)Lettre de mission branchée sur la tablenormes- Nouvelle fonction
chargerNormesContexte()qui lit les DTU applicables au corps de métier - Prompt Claude instruit strictement de ne citer QUE les DTU fournis (pas d'invention)
- Format standardisé "DTU XX.Y — Titre (§article)"
Ajouté — Bannière de consentement cookies (RGPD)
feat(v1.6.0)Banner de consentement avec catégories Analytics / Marketing (1325292)lib/consent.ts: state localStorage + events réactifslib/consent-hook.ts: hookuseConsent()viauseSyncExternalStorecomponents/shared/ConsentBanner.tsx: bannière + bouton flottant réouverture- Mode "Personnaliser" avec toggles par catégorie
- Refus aussi visible que l'acceptation (conformité CNIL)
featGoogleAnalytics gated : GA4/GTM/Ads ne chargent QUE si consent donnéfeatGA4anonymize_ip: true+cookie_flags: SameSite=None;Secure
Ajouté — Recherche par ville (Sprint 5 refonte)
featChamp "Ville" remplace "Code postal" sur/recherchefeatParse automatique : accepte "Versailles", "78000" ou "Versailles (78000)"featAffichage format "Ville (CP)" partout :/recherche+/[metier]/[ville]compatParamètre URLcp=conservé pour rétro-compatibilité
Ajouté — Mentions légales SAS RHEXO
featCGU section 1 "Éditeur du site" avec SAS RHEXO complet + hébergeursfeatRenumérotation sections 2-8 CGUfeatConfidentialité : SAS RHEXO comme responsable du traitementfeatConfidentialité section cookies mise à jour (3 catégories)
Ajouté — Script de migration Supabase Cloud
feat(migrate)scripts/migrate-cloud.tsavec postgres.js (deppostgres ^3.4.5)featTable_migrations_appliedpour idempotencefeatnpm scriptsmigrate:cloudetmigrate:cloud:dryfeatLectureSUPABASE_DB_URLdepuis.env.local
Ajouté — Google Analytics / GTM / Ads / Search Console
feat(google)components/shared/GoogleAnalytics.tsx(d7895ce)- Scripts conditionnels GA4 + GTM + Google Ads
- Pas de rendu si aucune variable d'env renseignée
featMetadata verification Google Search Console + Bing Webmasterfeatlib/analytics/google.tshelpers :sendGaEvent,sendAdsConversion,GaEventsfeatÉvénements métier pré-câblés :demandeCreee,rdvReserve,paiementConfirme,abonnementSouscritenvAjout des 5 variables Google dans.env.example
Corrigé
fix(auth)Middleware catch?code=orphelin et redirige vers/auth/callback(a215872)- Cas d'edge : magic link sans
emailRedirectTopointe sursite_urlracine - Défense en profondeur : le middleware préserve le path d'origine comme
redirect= fix(ui)Sauts de ligne CGU + confidentialité (classesproseinertes → styles Tailwind explicites)fix(lint)Échappement apostrophes (react/no-unescaped-entities)fix(lint)Date.now()remplacé parnew Date().getTime()(react-hooks/purity)
Migrations DB (10 à 16 poussées sur Supabase Cloud)
- Migration 010 — SEO programmatique (tables
seo_pages+prestations_types) - Migration 011 — Enrichissement INPI/RGE/BODACC (3 tables + fonction
calc_score_completude) - Migration 012 — Dialogue IA adaptatif (table
demande_messages+ RLS) - Migration 013 — Lettre de mission (colonnes sur
missions+ tablemission_etapes) - Migration 014 — Devis normé DTU (tables
normes,materiaux_catalogue,tarifs_reference,devis_ecarts) - Migration 015 — Analytics (table
analytics_events+ 3 vues agrégées) - Migration 016 — Catalogue DTU complet (95 normes seed)
Infrastructure
- Configuration Resend SMTP sur Supabase Auth (délivrabilité magic link)
- Configuration DNS
batimio.com: SPF racine + DMARC relaxed (délivrabilité email) - Site URL Supabase corrigé :
http://localhost:3000→https://batimio.com - Redirect URL allowlist : prod + dev local +
batimio.fr
[1.6.0] — 2026-04-19
Ajouté — Sprint 16 : Analytics + redirection .fr + changelog
feat(sprint-16)Analytics pages vues, provenance, funnels de conversion (cb4053f)- Table
analytics_events+ 3 vues agrégées (pageviews, sources, funnels) - 4 funnels prédéfinis : demande / revendication / abonnement / recherche
- Tracking serveur (trackServerEvent) et client (sendBeacon + session anonyme localStorage)
- Route
POST /api/analyticsavec extraction UTM + geo headers Vercel - Composant
AnalyticsProvider(page_view auto sur changement de route) - Dashboard
/admin/analytics(KPIs, top pages, sources, funnels) - RGPD-compatible : pas de cookie, session ID anonyme
featRedirection 301batimio.fr→batimio.comvianext.config.ts redirects()featPage publique/changelogconvertitCHANGELOG.mden HTMLfeatBadge version du footer cliquable vers/changelog
Corrigé
fix(lint)Échappement apostrophes (react/no-unescaped-entities) sur 3 fichiersfix(lint)Date.now()remplacé parnew Date().getTime()dans composant asyncfix(lint)Variableartisaninutilisée remplacée parvoid artisanData
[1.5.0] — 2026-04-19
Ajouté — Sprint 15 : Devis DTU/AFNOR + quantitatifs
feat(sprint-15)Référentiel normes DTU/AFNOR (8 normes seed) (8686a29)feat(sprint-15)Catalogue matériaux (15 refs plomberie seed)feat(sprint-15)Barème tarifs horaires IDF (IDCC 1596 + FFB) par métier × niveaufeat(sprint-15)Génération IA devis normé (lib/claude/devis-norme.ts) avec validation refsfeat(sprint-15)RoutePOST /api/devis/norme+ persistancemissions.devis_norméfeat(sprint-15)Tabledevis_ecartspour la boucle d'amélioration estimé vs réel
[1.4.0] — 2026-04-19
Ajouté — Sprint 14 : Lettre de mission artisan
feat(sprint-14)Génération IA lettre synthétique (5 infos clés mobile)feat(sprint-14)Génération IA lettre détaillée (étapes + matériel + DTU)feat(sprint-14)Rendu HTML imprimable A4 avec échappement XSSfeat(sprint-14)RoutePOST /api/mission/[id]/lettreavec versioning + historiquefeat(sprint-14)Tablemission_etapes(check-list chantier cochable)
[1.3.0] — 2026-04-19
Ajouté — Sprint 13 : Dialogue IA adaptatif
feat(sprint-13)Machine à états conversationnelle (5 états + escalade)feat(sprint-13)Questions complémentaires typées (text/choix/mesure/photo/oui_non)feat(sprint-13)Tabledemande_messages+ RLS clientfeat(sprint-13)Seuil confiance 85% + limite 5 tours avant escaladefeat(sprint-13)RoutePOST /api/dialogueavec tracking tokens + coût EURfeat(sprint-13)Composant React clientDialogueIA.tsx
[1.2.0] — 2026-04-19
Ajouté — Sprint 12 : Enrichissement INPI / RGE / BODACC
feat(sprint-12)Client API INPI RNE (auth OAuth + cache token + rate-limit)feat(sprint-12)Client open data RGE (data.gouv.fr) + BODACC annonces légalesfeat(sprint-12)Tablesartisan_dirigeants,artisan_certifications,artisan_annonces_legalesfeat(sprint-12)Fonction SQLcalc_score_completude+ trigger autofeat(sprint-12)Workerscripts/enrich-inpi.ts+ route/api/admin/enrichirfeat(sprint-12)Alerte si procédure collective BODACC
[1.1.0] — 2026-04-19
Ajouté — Sprint 11 : SEO programmatique
feat(sprint-11)Référentiels métiers (9) et villes IDF (46 principales)feat(sprint-11)Génération Claude de contenu SEO par couple métier × villefeat(sprint-11)Tablesseo_pages+prestations_types(9 prestations seed)feat(sprint-11)Composants Schema.org : LocalBusiness, Breadcrumb, FAQPage, ItemListfeat(sprint-11)Route/api/og/[slug]OG image dynamique (edge runtime)feat(sprint-11)Page/[metier]/[ville]/[prestation]longue traînefeat(sprint-11)Sitemap étendu : statiques + métier × ville + prestations + artisans
[1.0.0] — 2026-04-17
Première version publique de Batimio. MVP complet V1 livré (Sprints 1 à 10 + Sprint 11 bonus).
Ajouté — Branding & identité
feat(branding)Aligne les icônes sur le bleu primaire du site (7065c71)feat(artisan)Affiche le SIRET dans la fiche publique (52c37a4)feat(favicon)Force le B orange partout, suppression de l'ancien A bleu (e4df40a, 422844a)feat(logo)Remplace le wordmark ArtisanIA par Batimio + nouveau B stylisé (c9f735e)choreRenommage ArtisanIA → Batimio (brand, URLs, config Supabase cloud) (bc10d0a)
Ajouté — Sprint 11 : catégories manquantes + IDF complet
feat(sprint-11)Catégories manquantes + IDF complet + vues pro (9483af3)feat(sirene)Import complet IDF 257k artisans + fix pagination curseur (5d55b9d)feat(sirene)INSEE API V3.11 en production via API Key header (7ee80bd)docsStratégie Sirène hybride API V3 + data.gouv.fr phase 2 (b9210a4)
Ajouté — Sprint 10 : RGPD + SEO + mise en production
feat(sprint-10)RGPD + SEO + pages légales — V1 complète (0952ff4)
Ajouté — Sprint 9 : facturation + export comptable
feat(pro)Page factures + export CSV (4f60747)
Ajouté — Sprint 8 : abonnement + parrainage + onboarding
feat(sprint-8)Stripe Subscriptions + parrainage artisan + onboarding (f04e2e0)feat(pro)Tarifs + abonnement + souscription mock (27b6cd8)feat(sms)Twilio Alpha Sender BATIMIO + fix slug dans import Sirène (0c545b8)docsAjoute programme de parrainage artisan au Sprint 8 (c0b04ef)
Ajouté — Sprint 7 : messagerie + historique + annulation
feat(sprint-7)Messagerie + historique + annulation (79cca0a)
Ajouté — Sprint 6 : tournée géolocalisée
feat(pro)Tournée géolocalisée + check-in GPS (fcfd632)
Ajouté — Sprint 5 + 5.5 : profil public, recherche, design system
feat(public)Profil artisan + recherche + SEO + réponse avis (9ec2894)feat(design)3 moods comparatifs pour choisir la charte graphique (cd46de3)feat(design)Sprint 5.5 — design system moderne (mood bleu Doctolib-like) (433df6a)feat(map)Carte Leaflet des artisans dans/rechercheet/[metier]/[ville](66fc173)feat(map)Marker générique + scroll liste au clic (b8b1237)
Ajouté — Sprint 4 : devis + facturation + paiement + avis
feat(devis)Éditeur de devis pro avec calcul TVA temps réel (12b47ed)feat(cloture)Clôture chantier + facture HTML auto (f0eb2e0)feat(paiement)Escrow Stripe avec mode mock + libération client (7eb6627)feat(avis)Vue client mission + validation paiement + avis (8e997a9)
Ajouté — Sprint 3 : réservation + agenda + notifications
feat(reservation)Parcours réservation client complet (f2b2603)feat(pro)Agenda des disponibilités éditable (c9fe4b1)feat(notifications)SMS Twilio avec fallback mock + PWA SW (9f3e744)
Ajouté — Sprint 2 : diagnostic IA avancé + brief artisan
feat(ia)Claude Vision + DVF réel dans/api/agent(ffc057b)feat(pro)Liste demandes + acceptation avec brief IA (ac7e53a)
Ajouté — Sprint 1 : fondations MVP
feat(client)Géocodage + géoloc + upload photos (d7d97dd)feat(pro)Dashboard KPIs + profil + revendication Sirène (6951713)feat(admin)Auth password + dashboard + sync Sirène + RLS (fc955f1)featPage liste artisans + nettoyage lint/typographie/E2E (e9e4425)
Ajouté — Bootstrap MVP
featMVP ArtisanIA — stack Next.js/Supabase/Claude + Docker local (e5d8224)featInitial commit (ce7a2d2)- Initial commit from Create Next App (ecb99df)
Corrigé
fix(recherche)Matching accent-insensitive + tokenise + multi-champs (9d072cd)fixWrapuseSearchParams()dansSuspense(requis Next.js 15) (6b57dbe)fix(types)Alias métier + correction nullabilité pour build Vercel (0706689)fix(upload)URLs Storage publiques au lieu d'internes Docker (f6579ed)fix(calendrier)Dynamic importssr:falsevia Client Component wrapper (5aaa624)fix(calendrier)suppressHydrationWarningsur le highlight "aujourd'hui" (245c73c)fix(header)Remplace<Button render={<Link/>}>par un<Link>direct (03292ab)fixAuth magic link PKCE dans Docker local (6ebae1a)
Tests & qualité
test(smoke)Test navigateur anti-régression runtime + fix themeColor (9d52e85)
Documentation
docsSection 18 CLAUDE.md — roadmap V1 (Sprints 5 à 10) (0113824)docsAjoute section 17 FAQ ArtisanIA dans CLAUDE.md (4041592)docsMise à jour documents vivants à chaque Sprint livré (afadea3, 38bde5b, a04939f, ed82d8e, 3673dbd, cafb17f, 5a6c48a)
Infrastructure
choreTrigger Vercel build (ajustement email auteur) (29bf735)
Ce changelog est maintenu manuellement à chaque commit de livraison Sprint. Le format des messages de commit suit la spécification Conventional Commits (voir CLAUDE.md §0.1).