Version actuelle v1.14.3

Changelog

Historique des livraisons Batimio. Versionnage majeur.mineur.patch conforme SemVer.

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éma ActionArtisan structuré remplace le tableau de strings plat. Champs : ordre, etape, duree_min, icone (emoji), description optionnelle
  • feat(prompt) Le prompt Claude oblige désormais des étapes strictement chronologiques avec durées réalistes et icône emoji (🧱 🔧 ⚡ 🎨 🏗️ 🪜 📏 …)
  • feat(ui) /client/demande/diagnostic et /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
  • compat Backward-compatible via normaliserActions() — les anciens diagnostics en string[] s'affichent en timeline avec duree_min: 0
  • feat(validation) Zod schema dans /api/agent accepte l'union des 2 formats

Corrigé — Ceinture de sécurité sur RepondreQuestions

  • fix(ui) Ajout d'une key prop calculée sur le contenu des questions dans la page parent → force le remount complet du composant quand les questions changent, en complément du useEffect de 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 via router.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 : useEffect qui observe une signature stable du tableau questions (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&nbsp;: 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) Composant RepondreQuestions.tsx&nbsp;: formulaire inline avec une zone de texte par question posée par l&apos;IA
  • feat(api) Route POST /api/demande/:id/preciser&nbsp;:
  • Reçoit les réponses textuelles du client
  • Fusionne dans demandes.mesures (clés q1, 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/diagnostic intégrée avec le formulaire
  • Rafraîchit automatiquement (router.refresh()) après envoi pour afficher le nouveau diagnostic
  • Bouton «&nbsp;Affiner le diagnostic avec mes réponses&nbsp;»
  • Si l&apos;IA estime qu&apos;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é&nbsp;: un tiers ne peut pas préciser la demande d&apos;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 devis
  • lib/claude/devis-adaptatif.ts : prompt Claude + fonction evaluerEtGenererDevis()
  • Deux statuts de sortie : questions (3–8 questions typées) ou pret (DevisNormeResult)
  • Questions catégorisées (dimensions, materiaux, acces, support, finitions) et priorisées (bloquant / important / nice_to_have)
  • Types d'input&nbsp;: mesure (avec unité), choix, oui_non, text, photo
  • feat(api) Route POST /api/devis/adaptatif
  • Fusionne les réponses dans demandes.mesures (persistance multi-passe)
  • Persiste le devis dans missions.devis_normé dès que status=pret
  • Peut être appelée N fois jusqu'à convergence
  • feat(pdf) lib/pdf/devis-html.ts deux modes de rendu HTML A4
  • simplified (envoi client)&nbsp;: langage clair, pas de références matériau, durées en heures, DTU en codes seulement, signatures prestataire/client
  • detailed (usage interne pro)&nbsp;: 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|detailed accepte le paramètre de rendu
  • feat(ui) Composant React components/pro/DevisAdaptatif.tsx
  • Bouton «&nbsp;Évaluer et générer le devis&nbsp;»
  • Formulaire dynamique avec inputs typés selon DevisQuestion.type
  • Badge «&nbsp;Requis&nbsp;» sur questions bloquantes + désactivation submit tant que bloquantes non remplies
  • 4 boutons sortie&nbsp;: client HTML / client PDF / pro HTML / pro PDF
  • feat(ui) /pro/devis/[id] refondue autour du composant adaptatif, DevisForm legacy conservé en fallback

Séparation stricte matériaux / main d'œuvre

Les deux formats séparent clairement les deux postes&nbsp;:

  • 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&nbsp;: Fournitures HT + MO HT + TVA + TTC

Basé sur les DTU

  • Chaque devis cite exclusivement les DTU stockés en DB (normes table, 103 entrées)
  • Validation côté serveur&nbsp;: 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 «&nbsp;ROADMAP V1.1+&nbsp;» étendue avec Sprint 17 détaillé
  • Timeline synthétique mise à jour jusqu'à v1.14

[1.13.2] — 2026-04-20

Corrigé

  • fix(agent) Enum corps_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é&nbsp;: 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 sur site_url racine 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/devis avec ?print=1 auto-trigger dialogue d'impression
  • Mentions légales complètes&nbsp;: 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 + «&nbsp;Bon pour accord&nbsp;» 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 «&nbsp;Imprimer / PDF&nbsp;»
  • 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
  • feat lib/pdf/branding.ts&nbsp;: source unique pour infos éditeur SAS RHEXO
  • feat lib/pdf/css-print.ts&nbsp;: CSS commun A4 + @page + @media print
  • feat UI /pro/devis/[id]&nbsp;: 2 boutons «&nbsp;Prévisualiser&nbsp;» + «&nbsp;Télécharger PDF&nbsp;»
  • feat UI /pro/chantier/[id]&nbsp;: 4 boutons (Lettre HTML + PDF, Devis HTML + PDF)
  • Choix technique&nbsp;: pas de Playwright/Puppeteer → «&nbsp;Print → Save as PDF&nbsp;» natif navigateur, compatible Alpine

[1.12.0] — 2026-04-20

Ajouté — Catalogue DTU complet (95 normes supplémentaires)

  • feat(dtu) Migration 016&nbsp;: 95 nouvelles normes DTU/NF ajoutées au catalogue (e361a91)
  • Couvreur&nbsp;: 19 DTU (40.x complet + 43.x étanchéité)
  • Plombier&nbsp;: 18 DTU (60.x, 61.1, 64.1, 65.x, 75.1)
  • Menuisier&nbsp;: 14 DTU (33, 34, 35, 36, 37, 39, 51.x, 55)
  • Maçon&nbsp;: 14 DTU (13.x, 14.1, 20.x, 21, 23.1, 26.x, 42.1)
  • Plaquiste&nbsp;: 11 DTU (25.x, 27.1, 45.x, 58.x)
  • Peintre&nbsp;: 10 DTU (42.1, 44.1, 53.x, 59.x)
  • Électricien&nbsp;: 8 normes (NF C 15-100, DTU 68.3, 70.1, NF C 14-100, 16-600)
  • Charpentier&nbsp;: 7 DTU (31.x, 32.x, 41.2)
  • Carreleur&nbsp;: 2 DTU (52.1, 52.2)
  • Total&nbsp;: 103 normes en DB (8 Sprint 15 + 95 Sprint 19)
  • feat(dtu) Lettre de mission branchée sur la table normes
  • 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é «&nbsp;DTU XX.Y — Titre (§article)&nbsp;»

[1.11.0] — 2026-04-19

Ajouté — Script de migration Supabase Cloud

  • feat(migrate) scripts/migrate-cloud.ts avec postgres.js (dep postgres ^3.4.5)
  • feat Table _migrations_applied pour idempotence
  • feat npm scripts migrate:cloud et migrate:cloud:dry
  • feat Lecture SUPABASE_DB_URL depuis .env.local
  • feat Gestion des migrations déjà appliquées (pré-marquage manuel possible)

[1.10.0] — 2026-04-19

Ajouté — Mentions légales SAS RHEXO

  • feat CGU section 1 «&nbsp;Éditeur du site&nbsp;» avec SAS RHEXO complet + hébergeurs
  • feat Renumérotation des sections 2-8 CGU
  • feat Confidentialité&nbsp;: SAS RHEXO comme responsable du traitement
  • feat Confidentialité section cookies mise à jour (3 catégories avec consentement par catégorie)

Corrigé

  • fix(ui) Sauts de ligne CGU + confidentialité (classes prose inertes sans plugin typography → remplacées par styles Tailwind explicites via attribute selectors)

[1.9.0] — 2026-04-19

Ajouté — Recherche par ville

  • feat Champ «&nbsp;Ville&nbsp;» remplace «&nbsp;Code postal&nbsp;» sur /recherche
  • feat Parse automatique&nbsp;: accepte «&nbsp;Versailles&nbsp;», «&nbsp;78000&nbsp;» ou «&nbsp;Versailles (78000)&nbsp;»
  • feat Affichage format «&nbsp;Ville (CP)&nbsp;» partout&nbsp;: /recherche + /[metier]/[ville]
  • compat Paramètre URL cp= conservé pour rétro-compatibilité

[1.8.0] — 2026-04-19

Ajouté — Bannière de consentement cookies (RGPD)

  • feat(consent) components/shared/ConsentBanner.tsx&nbsp;: bannière fixe + bouton flottant de réouverture (1325292)
  • feat(consent) lib/consent.ts&nbsp;: state localStorage + events réactifs
  • feat(consent) lib/consent-hook.ts&nbsp;: hook useConsent() via useSyncExternalStore
  • feat(consent) Mode «&nbsp;Personnaliser&nbsp;» avec toggles par catégorie (Essentiel / Analytics / Marketing)
  • feat(consent) Refus aussi visible que l'acceptation (conformité CNIL)
  • feat(consent) GoogleAnalytics gated&nbsp;: GA4/GTM/Ads ne chargent QUE si consent donné
  • feat GA4 configuré avec anonymize_ip: true + cookie_flags: SameSite=None;Secure

Fichiers clés

  • components/shared/ConsentBanner.tsx
  • components/shared/GoogleAnalytics.tsx
  • lib/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
  • feat Metadata verification Google Search Console + Bing Webmaster
  • feat lib/analytics/google.ts&nbsp;: helpers sendGaEvent, sendAdsConversion, GaEvents
  • feat Événements métier pré-câblés&nbsp;: demandeCreee, rdvReserve, paiementConfirme, abonnementSouscrit
  • env Ajout des 5 variables Google dans .env.example&nbsp;: 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&nbsp;: SPF racine + DMARC relaxed
  • Site URL Supabase corrigé&nbsp;: http://localhost:3000https://batimio.com
  • Redirect URL allowlist&nbsp;: prod + dev local + batimio.fr
  • Migrations 010 à 016 appliquées sur Supabase Cloud
  • choix technique Pas 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 table normes
  • 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éactifs
  • lib/consent-hook.ts : hook useConsent() via useSyncExternalStore
  • components/shared/ConsentBanner.tsx : bannière + bouton flottant réouverture
  • Mode "Personnaliser" avec toggles par catégorie
  • Refus aussi visible que l'acceptation (conformité CNIL)
  • feat GoogleAnalytics gated : GA4/GTM/Ads ne chargent QUE si consent donné
  • feat GA4 anonymize_ip: true + cookie_flags: SameSite=None;Secure

Ajouté — Recherche par ville (Sprint 5 refonte)

  • feat Champ "Ville" remplace "Code postal" sur /recherche
  • feat Parse automatique : accepte "Versailles", "78000" ou "Versailles (78000)"
  • feat Affichage format "Ville (CP)" partout : /recherche + /[metier]/[ville]
  • compat Paramètre URL cp= conservé pour rétro-compatibilité

Ajouté — Mentions légales SAS RHEXO

  • feat CGU section 1 "Éditeur du site" avec SAS RHEXO complet + hébergeurs
  • feat Renumérotation sections 2-8 CGU
  • feat Confidentialité : SAS RHEXO comme responsable du traitement
  • feat Confidentialité section cookies mise à jour (3 catégories)

Ajouté — Script de migration Supabase Cloud

  • feat(migrate) scripts/migrate-cloud.ts avec postgres.js (dep postgres ^3.4.5)
  • feat Table _migrations_applied pour idempotence
  • feat npm scripts migrate:cloud et migrate:cloud:dry
  • feat Lecture SUPABASE_DB_URL depuis .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
  • feat Metadata verification Google Search Console + Bing Webmaster
  • feat lib/analytics/google.ts helpers : sendGaEvent, sendAdsConversion, GaEvents
  • feat Événements métier pré-câblés : demandeCreee, rdvReserve, paiementConfirme, abonnementSouscrit
  • env Ajout 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 emailRedirectTo pointe sur site_url racine
  • Défense en profondeur : le middleware préserve le path d'origine comme redirect=
  • fix(ui) Sauts de ligne CGU + confidentialité (classes prose inertes → styles Tailwind explicites)
  • fix(lint) Échappement apostrophes (react/no-unescaped-entities)
  • fix(lint) Date.now() remplacé par new 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 + table mission_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:3000https://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/analytics avec 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
  • feat Redirection 301 batimio.frbatimio.com via next.config.ts redirects()
  • feat Page publique /changelog convertit CHANGELOG.md en HTML
  • feat Badge version du footer cliquable vers /changelog

Corrigé

  • fix(lint) Échappement apostrophes (react/no-unescaped-entities) sur 3 fichiers
  • fix(lint) Date.now() remplacé par new Date().getTime() dans composant async
  • fix(lint) Variable artisan inutilisée remplacée par void 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 × niveau
  • feat(sprint-15) Génération IA devis normé (lib/claude/devis-norme.ts) avec validation refs
  • feat(sprint-15) Route POST /api/devis/norme + persistance missions.devis_normé
  • feat(sprint-15) Table devis_ecarts pour 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 XSS
  • feat(sprint-14) Route POST /api/mission/[id]/lettre avec versioning + historique
  • feat(sprint-14) Table mission_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) Table demande_messages + RLS client
  • feat(sprint-13) Seuil confiance 85% + limite 5 tours avant escalade
  • feat(sprint-13) Route POST /api/dialogue avec tracking tokens + coût EUR
  • feat(sprint-13) Composant React client DialogueIA.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égales
  • feat(sprint-12) Tables artisan_dirigeants, artisan_certifications, artisan_annonces_legales
  • feat(sprint-12) Fonction SQL calc_score_completude + trigger auto
  • feat(sprint-12) Worker scripts/enrich-inpi.ts + route /api/admin/enrichir
  • feat(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 × ville
  • feat(sprint-11) Tables seo_pages + prestations_types (9 prestations seed)
  • feat(sprint-11) Composants Schema.org : LocalBusiness, Breadcrumb, FAQPage, ItemList
  • feat(sprint-11) Route /api/og/[slug] OG image dynamique (edge runtime)
  • feat(sprint-11) Page /[metier]/[ville]/[prestation] longue traîne
  • feat(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)
  • chore Renommage 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)
  • docs Straté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)
  • docs Ajoute 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 /recherche et /[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)
  • feat Page liste artisans + nettoyage lint/typographie/E2E (e9e4425)

Ajouté — Bootstrap MVP

  • feat MVP ArtisanIA — stack Next.js/Supabase/Claude + Docker local (e5d8224)
  • feat Initial commit (ce7a2d2)
  • Initial commit from Create Next App (ecb99df)

Corrigé

  • fix(recherche) Matching accent-insensitive + tokenise + multi-champs (9d072cd)
  • fix Wrap useSearchParams() dans Suspense (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 import ssr:false via Client Component wrapper (5aaa624)
  • fix(calendrier) suppressHydrationWarning sur le highlight "aujourd'hui" (245c73c)
  • fix(header) Remplace <Button render={<Link/>}> par un <Link> direct (03292ab)
  • fix Auth magic link PKCE dans Docker local (6ebae1a)

Tests & qualité

  • test(smoke) Test navigateur anti-régression runtime + fix themeColor (9d52e85)

Documentation

  • docs Section 18 CLAUDE.md — roadmap V1 (Sprints 5 à 10) (0113824)
  • docs Ajoute section 17 FAQ ArtisanIA dans CLAUDE.md (4041592)
  • docs Mise à jour documents vivants à chaque Sprint livré (afadea3, 38bde5b, a04939f, ed82d8e, 3673dbd, cafb17f, 5a6c48a)

Infrastructure

  • chore Trigger 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).