Tableau de bord

Utilisateurs
-
Chargement...
Annonces
-
Chargement...
Professionnels
-
Chargement...
Estimations en attente
-
Chargement...
Ventes
-
Chargement...
Packs offerts
-
Derniers inscrits
PrenomNomEmailRoleStatutDate
Chargement...
Reporting
Utilisateurs
Annonces
Rôles
Professionnels
Monitoring fiabilité IA
Chargement des données...
Tous les utilisateurs
PrenomNomEmailRoleVilleStatutInscriptionActions
Chargement...
Toutes les annonces
PhotosMarqueModeleTypePrixVilleVendeurDateActions
Chargement...
Professionnels inscrits
📡 Localisation GPS globale :
PrenomNomEmailRolesSIRETEntrepriseVilleRayonLocalisationStatutMissionsScoreExpérienceDiplômeInscriptionActions
Chargement...
Commission
-
Sur chaque vente
Transport
-
Grilles par type
Packs
-
3 formules
Modifier les parametres
%
Grilles par type de piano
Configurables dans Missions & Rapports
jours — Les annonces vendues restent visibles sur la marketplace pendant ce delai avec un badge VENDU. 0 = disparition immediate.
Si desactive, les documents uploades ne seront pas visibles par les acheteurs (mais restent stockes en base).
Affichage du numero d'annonce en messagerie
Si active, le numero d'annonce (ANXXXXXXXXXX) s'affiche a cote du nom de l'annonce dans la messagerie.
🎯 Page Devenir Pro (espace-pro.html)
Ces textes s'affichent sur la page de recrutement des professionnels.
Prix des packs
Noms et descriptions des packs
Ces noms se répercutent sur tout le site (accueil, finalisation achat, IA).
Achat sans pack
Définissez pour chaque type de piano si l'acheteur peut acheter SANS choisir de pack. Décochez pour forcer le choix d'un pack.
Éligibilité des packs par type de piano
Activez ou désactivez chaque pack selon le type de piano. Les packs désactivés ne s'afficheront pas pour l'acheteur.
🟢 Pack Essentiel
🔵 Pack Confort
🟣 Pack Sérénité
Packs offrables par le vendeur
Activez ou désactivez la possibilité pour le vendeur d'offrir chaque pack selon le type de piano. Les options désactivées n'apparaîtront pas dans le formulaire de dép\u00f4t d'annonce.
Transport offert
Pack Confort offert
Pack Sérénité offert
Formulaires d'achat
Le site propose 2 parcours d'achat distincts. Vous pouvez personnaliser les textes de chacun.
🤝 Achat après négociation
Page achat.html — Après qu'un prix a été convenu entre acheteur et vendeur.
Achat au prix affiché
Page achat-direct.html — Sans négociation, au prix de l'annonce.
Visibilité : Le bouton « Acheter au prix affiché » apparaît sur la page annonce à côté du prix. Il disparaît automatiquement quand une offre est acceptée ou un achat confirmé.
Annonces
Parametres des annonces : categories de piano et seuil piano ancien
Avant cette annee = piano ancien
Ces types apparaissent dans le depot d'annonce, les tunnels d'achat, les grilles transport et l'estimateur IA. Cliquez sur un nom pour le modifier.
Pré-remplissage automatique (vendre depuis Mes Pianos)
Ces textes et cases sont injectés automatiquement quand un acheteur Piano Panier revend son piano. Il peut tout modifier avant de soumettre.
Injecté dans le champ "Description de l'annonce"
Injecté dans l'historique technique
Injecté dans l'historique technique
Fournisseur
-
Actif
Modele
-
En cours d'utilisation
Statut
-
Verification...
Appels aujourd'hui
-
estimations
Tokens aujourd'hui
-
tokens consommes
Cout aujourd'hui
-
estimation
Mode maintenance
-
IA active
Connexion API
La cle n'est jamais affichee en clair. Elle est stockee dans Airtable.
Serper.dev permet a l'IA de chercher les prix reels sur Google. Obtenir une cle gratuite (2500 recherches/mois gratuites)
Reglages avances
En maintenance, le message de fallback s'affiche
500 = court, 1000 = standard, 2000 = detaille
Apres cette limite, l'utilisateur doit se connecter
Reglages fins de l'estimation
Ces curseurs controlent precisement le comportement de l'IA lors des estimations de prix.
Optimiste Conservateur
0 = prix haut (favorise le vendeur) / 10 = prix bas (favorise l'acheteur)
Neutre Pousse les packs
0 = analyse neutre / 10 = recommande systematiquement les packs Piano Panier
5% 40%
Ecart tolere avant d'afficher "prix trop haut" ou "prix trop bas" en mode validation
10% 80%
En dessous de ce seuil, l'IA suggere une estimation manuelle par un expert
⚖️ Coefficients etat du piano
Ces coefficients s'appliquent au prix de base. "Bon" = reference (×1.00).
×0.40 (tres severe)×0.80
×1.05×1.30 (genereux)
×1.10×1.60 (restauration prestige)
0% (ignore) ±15%
Poids max que la description du client peut peser sur le prix (ex: "recemment accorde" = leger +, "feutres uses" = leger -)
5% 35%
Un piano revendu la meme annee que son achat neuf perd automatiquement ce pourcentage. C'est le plancher de decote.
Feedback sur les estimations
Permet aux utilisateurs de signaler si l'estimation leur semble coherente. Les retours alimentent l'IA pour les futures estimations.
Permet au client de relancer l'estimation IA en tenant compte de son commentaire (piano restaure, piece rare, etc.). Le commentaire est injecte dans le prompt.
🏪 Magasins de reference
L'IA cherchera les prix de ces magasins en priorite lors de ses recherches web. Un magasin par ligne.
L'IA effectuera des recherches specifiques sur chaque magasin pour comparer les prix.
📐 Instructions d'evaluation des prix
Ce texte est injecte directement dans le prompt IA pour cadrer les estimations. Ecrivez vos regles, baremes, exceptions — tout ce que l'IA doit savoir.
Soyez aussi precis que possible. Ce texte sera lu par l'IA a chaque estimation.
Corrections rapides
Ajoutez ici des corrections ponctuelles basees sur votre experience terrain. L'IA les lira en priorite. Une correction par ligne.
Ces corrections sont prioritaires sur les instructions generales. Utilisez-les pour corriger rapidement les erreurs recurrentes de l'IA.
Message de transparence IA
Ce message s'affiche au-dessus de chaque estimation. Il rassure le client sur le fait que l'IA s'ameliore en continu. Vous pouvez le modifier ou le desactiver.
Ce message apparait sur la page d'accueil et la page de depot d'annonce, au-dessus du prix estime.
⚖️ Ponderations des sources
Ajustez l'importance relative de chaque source dans le raisonnement de l'IA. L'algo reste identique — seul le poids de chaque element change.
IndicatifDeterminant
IndicatifDeterminant
IndicatifDeterminant
IndicatifDeterminant
IndicatifDeterminant
IndicatifDeterminant
En cas de conflit entre sources, l'IA privilegiera celles avec le poids le plus eleve. Exemple : si "Donnees web" est a 9 et "Feedbacks" a 2, l'IA suivra les prix web meme si un feedback suggere le contraire.
🛡️ Garde-fous anti-incoherence & anti-hallucination
Ces parametres controlent comment l'IA reagit quand elle detecte des incoherences ou des situations douteuses. Objectif : zero hallucination, zero prix absurde.
TolerantTres strict
Plus c'est haut, plus l'IA signale d'incoherences (meme mineures)
Tres strict (1%)Souple (20%)
Ecart max tolere entre 2 estimations du meme piano apres correction mineure
3%30%
Si l'estimation < X% du prix neuf ET le piano a moins de 30 ans → prix probablement absurde, l'IA doit se re-verifier
L'IA se relit et verifie la coherence prix/analyse avant de repondre (plus lent mais plus fiable)
Separees par des virgules. Si un modele renseigne par le client correspond a cette liste, l'IA saura que c'est un acoustique meme si le client a selectionne numerique.
Separees par des virgules. Si le modele commence par un de ces prefixes, l'IA saura que c'est un numerique.
Ces listes sont injectees dans le prompt IA pour eliminer les confusions nature/modele. Mettez-les a jour regulierement.
Cerveau de l'IA — Prompt systeme
C'est le texte qui definit la personnalite, les regles et le comportement de l'IA. Les prix des packs et la commission sont injectes automatiquement depuis vos parametres commerciaux.
Factuel Creatif
Recommande : 0.3-0.5 pour des estimations de prix fiables
Variables auto-injectees : {commission}, {pack_essentiel}, {pack_confort}, {pack_serenite}, {livraison_km}
Apercu du prompt final (avec les variables remplacees)
Historique des prompts
DateTemperatureModeleNoteActions
Chargement...
Mode actuel
-
-
En attente
-
a traiter
Repondues
-
traitees
Mode d'estimation
Auto = l'IA repond instantanement. Manuel = vous repondez vous-meme par email.
⚠️ Estimations en attente
Historique des estimations
DateClientMarqueModeleTypeEtatPrixStatut
Chargement...
Statut du site
-
-
Acces autorises
-
comptes
Page "Coming Soon"
Quand active, les visiteurs voient une page d'attente. Seuls les comptes autorises ont acces au site complet.
Les comptes admin ont toujours acces. Ajoutez ici les emails des autres comptes autorises.
📧 Configuration Mailing
Personnalisez les emails envoyes automatiquement par Piano Panier
Contenu du template :
Apercu :
Variables disponibles (a inserer dans les textes) :
Général :
{prenom} Prenom du client   {email} Email du client   {lien} Lien d action (confirm/reset)
Estimation :
{marque} Marque   {modele} Modele   {prix} Prix recommande   {fourchette} Fourchette de prix   {analyse} Analyse expert
Messagerie :
{prenomExpediteur} Prenom de l expediteur   {annonceTitre} Titre de l annonce   {messagePreview} Apercu du message   {lienConversation} Lien vers la messagerie
Missions :
{prenomPro} Prenom du pro   {typeMission} Type de mission (Transport/Accord/Technique)   {distance} Distance en km   {prixMission} Prix de la mission   {lienMission} Lien vers Mes achats   {delaiValidation} Delai de validation   {numPiano} N° piano (PP ID)   {numAnnonce} N° annonce
Coordonnées client (emails pro) :
{clientNom} Nom complet du client   {clientEmail} Email du client   {clientTel} Telephone du client   {clientAdresse} Adresse du client   {note} Note etoiles (1-5)
Achat :
{prenomAcheteur} Prenom acheteur   {vendeurPrenom} Prenom vendeur   {packNom} Nom du pack   {total} Total de la commande   {lienAchats} Lien vers Mes achats
Mes pianos :
{ppId} Identifiant piano (PP ID)   {numAnnonce} N° annonce   {prenomAcheteur} Prénom acheteur   {lienPianos} Lien vers Mes pianos
Statistiques mailing :
Les stats d envoi sont disponibles sur resend.com/emails (emails envoyes, delivres, ouverts, erreurs).
En attente
-
Proposees
-
En cours
-
Terminees
-
Refusees
-
Total
-
Rapports
-
Solo
-
Missions achat
Type Annonce Statut Assigné Dist. Prix CR Fiche Date Actions
Chargement...
Missions solo
Type Piano Client Statut Assigné Prix Commentaire CR Fiche Date Actions
Chargement...
Rapports d'intervention
Type Annonce Pro Date Note Rapport CR
Chargement...
⚙️ Parametres d'assignation
Configurez l'algorithme d'assignation des pros aux missions. Tous les parametres sont modifiables en temps reel.
Distance
60%
Disponibilite
25%
⭐ Fiabilite
15%
Tarifs transport par type de piano
Tranches dégressives (km → €/km)
Calcul cumulatif. La dernière tranche s'arrête au seuil devis.
Cumulé départ + arrivée. Pas de majoration si ascenseur large.
Au-delà de ce seuil → "Sur devis" (le pro propose son prix).
Spline cubique : courbe lisse et naturelle entre les points d'ancrage. Paliers : le €/km change brusquement à chaque seuil (100/200/300 km).
Simulateur
Grille tarifaire transport
Cliquez sur Min ou Étage pour modifier directement. Les prix par distance sont recalculés depuis les tranches.
Tarifs technique
✅ Validation
Au-delà de ce nombre de refus, l'admin est notifié pour intervention manuelle.
Le pro peut proposer au maximum +X% du tarif Piano Panier. Ex : 50% = un tarif PP de 300€ autorise jusqu'à 450€.
Templates de comptes-rendus
Configurez les champs que les pros remplissent a la fin d'une mission. Un rapport PDF est genere automatiquement.
En-tete et pied de page du rapport
En transfert
-
Transferts complets
-
CA total (prix piano)
-
CA packs
-
Packs offerts vendeur
-
Toutes les ventes
Date achat Piano Acheteur Vendeur Pack Prix piano Total Missions Statut transfert Paiement (à venir) Actions
Total
-
Actifs
-
En vente
-
Vendus
-
Ajout manuel
-
Via annonce
-
Via achat
-
Parc pianos
PP ID Marque / Modèle Propriétaire Statut Source Ville Date Annonce Actions
Chargement...
Messagerie
Toutes les conversations entre acheteurs et vendeurs
Chargement...
Documentation du projet
Reference complete — Architecture, flux, tables, identifiants, regles
Acces rapide
Hebergement
Cloudflare Pages
piano-panier.fr / pianopanier.pages.dev
Base de donnees
Railway / PostgreSQL
12 modeles Prisma — API Fastify
Photos
Cloudflare Images
Worker: photosupload.pianopanier7.workers.dev
Securite
reCAPTCHA v2 invisible
Connexion + Inscription
Recherche web IA
Serper.dev (Google Search)
Prix reels injectes dans le prompt. Historique: tblC6snfvuG2VeUv3
Algorigramme des flux
Vue d'ensemble des 25 flux du site v182 — de l'inscription aux packs offerts.
↗ Ouvrir en plein ecran
Page
Action
Decision
API / IA
Email
Succes
Railway/DB

1 Estimation IA

accueil.html
Formulaire
marque/modele/annee/etat
Cache 1h ?
Serper API
Claude API
Resultat ?
OK →
Fourchette + Prix
Feedback
Historique IA
⚠ →
Incoherences
Correction
Re-estimation
✗ →
Impossible
Saisie email
Expert humain

2 Inscription / Connexion

connexion.html
Type ?
Part. →
Prenom, Email, MDP
SHA-256
Utilisateurs
Email verif
Actif
Pro →
+ SIRET, Rayon, Role
+ Adresse base
Geocoding
→ Lat/Lng base
Utilisateurs
Missions: non
Verif + Notif admin
Activation admin

3 Depot d'annonce

deposer-annonce.html
① Piano
② Photos
③ Prix + IA
④ Adresse piano
⑤ Recap
Connecte ?
Oui →
Annonces
Email + code
Annonce active
Non →
Compte auto
Annonces + Users
Email + code
Active

4 Achat par negociation

annonce.html
Proposer un prix
Conversation + Offre
Email vendeur
Reponse ?
Accept →
Offre OK
Barre 🛒 Acheter
achat.html
→ Flux 6
Refus →
Refusee
Nouvelle offre
Contre →
Contre-prop
Email acheteur
↩ Boucle

5 Achat direct au prix affiche

annonce.html
🟢 Acheter au prix
achat-direct.html
Conversation auto
→ Flux 6
⚠ Masque si offre acceptee ou achat confirme

6 Post-achat (commun flux 4 & 5)

Formulaire livraison
Adresse + Etage* + Asc.* + Acces + Contact + Commentaire
Pack ?
Essentiel / Confort / Serenite
Transaction + Piano transfere (Photos + Docs + Date MAJ)
Enrichit profil utilisateur
vente_confirmee + achat_confirme
createMissions → Flux 7
Etage + ascenseur obligatoires si pack choisi. Missions accord/technique enrichies : infos piano, dernier accord, historique technique, logistique. Photos + Documents copies lors du transfert.

7 Missions & Assignation

📡 Mode GPS actif ?
→ Lat/Lng GPS live
Sinon → Lat/Lng base
geocode a l'inscription
findBestPro
dist × dispo × fiab
+ rayon perso pro
Mission → proposee
Email pro
Reponse pro ?
Accept →
Acceptee
Demarrer
Terminer + CR
Livree
Validation ?
Refus →
Refusee
Reassignation
✓ →
Validee + Note ★
MAJ stats pro
⚠ →
Contestee
Notif admin
48h →
Auto-validee

8 Espace Pro (3 modes)

espace-pro.html
Qui ?
Visiteur →
Page decouverte
Se connecter / S'inscrire Pro
Particulier →
Page vendeuse + avantages
Formulaire upgrade
metier + SIRET + adresse + geocoding
PATCH role → metier,pro,particulier
Pro →
Dashboard + Missions + Profil GPS
Missions →
Accepter / Refuser
Demarrer / Terminer+CR
Client
Chat →
mon-compte#messages&filter=pro
Bouton PRO dans la nav de toutes les pages. Textes page pro editables depuis back-office (Parametres commerciaux). Badges roles messagerie (TECH ACC TRANSP).

9 Cycle de vie annonces

annonce.html
Statut ?
publiee →
Visible marketplace
Acheter / Proposer / Contacter
vendue →
Bouton VENDU
Pianos similaires
meta noindex
bloquee →
Admin only
Bloquer / Debloquer
Achat → createTransaction → annonce passe en vendue auto. Delai tampon : annonces vendues visibles X jours sur marketplace. Email achat_confirme a l'acheteur.

10 Inscription, Roles, Upgrade & Validation

connexion.html / espace-pro.html
Type ?
Particulier →
role = particulier
Acheter + vendre
Pro / Upgrade →
en_attente
Confirm email
en_attente_validation
Admin ?
Valide →
actif + Missions oui
Email pro_valide
Refuse →
Pro refuse = oui
Email + message messagerie
Reste particulier fonctionnel
Guard espace-pro verifie Airtable (pas localStorage). Refus : roles pro retires + Pro refuse = oui. Badge REFUSÉ + bouton Debloquer dans back-office. Debloquer vide Pro refuse = le candidat peut re-soumettre.

11 Upload Photos & Documents

deposer-annonce.html
Type fichier ?
Photo (JPG/PNG/WebP/GIF) →
Worker photosupload
Cloudflare Images
URL dans champ Photos (Attachment)
Document (PDF/image) →
Worker photosupload
Cloudflare KV
URL dans champ Documents (Attachment)
Formats photos : JPG, PNG, WebP, GIF (max 10 Mo, max 10 photos). Documents : PDF, JPG, PNG (max 10 Mo, max 5). Affichage docs sur annonce : toggle back-office (annonce_docs_visible). Fonction uploadFile() dans airtable-config.js reutilisable pour les CR pro.

12 Modification, Retrait & Suppression

annonce.html / mon-compte.html
Action ?
Modifier →
PATCH Prix, Description, Historique, Accessoires
Baisse prix ?
Message auto acheteurs
Retirer →
PATCH Statut = bloquee
Conversations conservees
Suppr admin →
DELETE messages
DELETE conversations
DELETE annonce
Champs modifiables : UNIQUEMENT Prix, Description, Historique technique, Accessoires. Aucun champ structurant (Marque, Modele, Type, Ville, Etat). Retrait = bloquee (reversible). Suppression admin = cascade irreversible.

13 Rapports d'intervention (CR)

espace-pro.html
Terminer mission
Modal CR structure
generateCRPdf()
Upload HTML → KV
PATCH Mission (CR + CR PDF + CR JSON)
Email mission_terminee + lien rapport
Message auto conversation
Templates CR configurables. Infos piano + lieu d'intervention + CP dans le PDF. PP ID + N° annonce.

14 Fiches PDF (3 types)

assignMission()
Type ?
TRANSPORT : Piano + Depart (logistique+CP) + Arrivee (logistique+CP) + Expediteur (Nom/Email/Tel) + Receveur + Distances
ACCORD : Piano + Dernier accord + Historique tech + Lieu (adresse+CP+logistique) + Client (Nom/Email/Tel)
TECHNIQUE : Piano + Historique tech + Dernier accord + Lieu + Client
Upload HTML → KV
Champ 'Fiche transport PDF'
Lien dans email + espace pro + back-office
N° piano, N° annonce, N° transaction, CP partout. Generees achat ET solo. Noms + emails + tel charges depuis les profils Airtable.

15 Mailing (44 templates)

sendPianoEmail()
Templates custom
Worker Cloudflare
Resend API
Email
44 templates. 4 nouveaux templates Mes pianos (piano_dans_garage, piano_transfere_vendeur, piano_reference, piano_ajoute_garage). mission_proposee = mission_demarree (meme contenu complet). Transport : Expediteur + Receveur + 2 logistiques + 2 distances. Accord/Tech : Client. pianoBlock, contactBlock, logistiqueBlock, refBlock. Badge nav Mon compte = messages non lus + evenements pianos 7j.

16 Back-office (14 sections)

admin.html
Section ?
Dashboard, Utilisateurs, Annonces, Pros, Params, Config IA, Estimations, Acces, Mailing (44 templates), Missions (2 tableaux Achat+Solo + litiges), Pianos, Ventes, Messagerie, Documentation, Changelog

17 Mes pianos — Cycle de vie

mon-compte.html
Evenement ?
Achat →
Piano en_transfert
Acheteur email + TX ID
Pack ?
Avec →
Missions → validerMission()
Toutes validees → transferPiano()
piano_dans_garage + piano_transfere_vendeur
Sans →
Transfert immediat
Statut actif + Transfert complet
piano_dans_garage
Depot →
Piano en_vente
source: depot_annonce
piano_reference
Manuel →
Piano actif
source: manuel
piano_ajoute_garage
Badge Mes pianos (menu lateral)
Badge Mon compte (nav globale)
localStorage pp_piano_events 7j
TODO PAIEMENT : le transfert immediat sans_pack sera remplace par la confirmation Stripe. PP ID unique par piano. Champs : Acheteur email, Transaction ID achat, Supprime par, Date suppression.

18 Contestation client + Escalade

mon-compte.html
Mission livree → Signaler
Overlay
6 categories + motif
+ upload preuves
Mission → contestee
TK + cat + preuvesUrls
+ EvenementLitige
5 emails (600ms)
pro + client + admin
+ conv_ouverte ×2
Conv TICKET
typeConv: ticket
1 par mission
Message initial
via sendMessage()
72h →
Relance pro
+ notif admin (1x)
EvenementLitige
relance_72h
7j →
en_mediation
3 emails escalade
client + pro + admin
EvenementLitige
escalade_auto
Admin →
Mediation (test)
EvenementLitige
escalade_admin
Badges : LITIGE (rouge) / EN MEDIATION (orange) / LITIGE CLOS (vert). Bouton Contact pro rouge. Deep link email → conv ticket. Cron check-litiges toutes les heures.

19 Resolution litige

Client →
Clore le ticket
bandeau dore + btn vert
Mission → validee
EvenementLitige
resolution_client
ticket_resolu_pro
ticket_resolu_admin
Admin ✓ →
Valider (pro paye)
motif obligatoire
Mission → validee
EvenementLitige
decision_admin
decision_admin_client
decision_admin_pro
Admin ✗ →
Annuler (rembourser)
motif obligatoire
Mission → annulee
EvenementLitige
decision_admin
decision_admin_client
decision_admin_pro
Decision tracee
Message dans conv ticket
Badge → CLOS (vert)
Zone de saisie grisee
Conversation fermee
12 statuts mission. Soft delete conversation autorise uniquement apres resolution. Bouton Historique dans admin : overlay timeline structuree via table EvenementLitige.

20 Pack offert par le vendeur

deposer-annonce
Boostez votre annonce
Aucun / Transport /
Confort / Serenite
Type piano ?
Params admin
pack_offert_*_types
OK →
Options actives
Non →
Options grisees
packOffert en DB
Annonce
Badge carousel
MutationObserver
accueil + annonce
achat-direct / achat
Quel pack ?
Couvert →
Offert (0 EUR)
Sup →
Supplement seul
packPrix - prixPackOffert
Inf →
Grise
Inclus dans le pack offert
Transaction
packOffert + transportPrix
+ packPrix (client) + total
Versement vendeur
Stripe Phase 2.5
Deduction vendeur
transportPrix +
{tp:0 / confort:149 /
serenite:349}
Transport = 0 EUR pour le client des qu'un packOffert existe. Deduction vendeur = transportPrix + prix fixe du pack offert (PAS packPrix client). Admin : KPI + filtre + grilles parametrables.

21 Transport degressif (v177)

deposer-annonce.html
Type piano
Grilles JSON admin
calculerPrixMission
< seuil ?
OUI →
Prix fixe
tranches degressives + etages
NON →
Sur devis
transportPrix = null

22 Flux devis transport (v179)

Transaction creee
transportPrix null
Mission transport creee
Pro assigne
find-best
Email mission_proposee
Pro propose prix
espace-pro
Email devis_propose
Client repond
mon-compte
Decision ?
Accept →
prixMission valide
+ total recalcule
devis_accepte
+ devis_accepte_client
Refus →
nbDevisRefuses++
candidatsExclus
Reassignation auto
front
devis_refuse
+ devis_refuse_client
Max 3 →
notification_admin
Notre equipe prend le relais

23 Contre-proposition pro (v182)

Mission prix fixe
<300km
Pro voit tarif PP
Decision ?
Accept →
proAccept
statut acceptee
Contre →
prix >= prixMission
justification obligatoire
plafond +50%
API proposer-prix
contre_proposition_client
Client voit comparatif
Accepter / Decliner
meme flux F22
Declin →
proRefuse
reassignation

24 Annulation de vente (v180)

Admin
POST /api/transactions/:id/annuler
Motif obligatoire
Transaction annulee
+ enfants annulees
+ missions annulees
Piano retourne au vendeur
source=depot_annonce
Annonce → retiree
mission_annulee_pro
+ achat client
Restauration →
POST /api/annonces/:id/dupliquer
Nouvelle annonce
nouveau AN

25 Tests & Automatisation (v182)

Admin
Tests & Auto
Creer scenario
API cree annonce
[TEST-AUTO] + transaction
+ mission + assigne pro
Tests Playwright
smoke + auth + E2E
Cleanup
POST /api/test/cleanup
Hard-delete cascade
🗂 Tables Airtable — Champs critiques
TableChamps avec accents (ATTENTION)Types speciaux
AnnoncesModèle, Année, N° sériePrix = number, Date = date, Photos = attachment
ProsPrénom, Spécialités, Expérience, VéhiculeDate = date
UtilisateursAucun accentTout en singleLineText
ParametresAucun accentCle/Valeur/Description (tout texte)
Historique Estimations IAModèle, État, Écart IA/réelAnnée/Prix/Confiance = number, Date = date. 29 champs (22 actifs + 7 futurs : Prix confirme admin, Statut validation, Prix vendu, Ecart IA/reel, Note qualite, Commentaire admin, ID Annonce liee)
🎯 Packs & Services (les SEULS existants)
Pack Essentiel
Livraison a domicile par transporteur specialise
Tous pianos
Pack Confort
Livraison + revision + accord + compte-rendu
Acoustique uniquement
Pack Serenite
Tout Confort + garantie 3 ans + technicien dedie
Acoustique uniquement
Flux fonctionnels
1. Inscription : connexion.html → registerUser() → Airtable (en_attente) → verification-email.html → confirmAccount() → actif
2. Connexion : connexion.html → reCAPTCHA invisible → loginUser() → verifie statut (bloque/en_attente/actif) → session localStorage → redirection
3. Depot annonce : 5 etapes (Infos → Photos → Prix IA/manuel → Logistique → Recap) → uploadPhotosToCloudflare() → saveAnnonce() → Airtable. Marque obligatoire, annee optionnelle (warning si absente). Parcours "Etat lors de l achat" : neuf/occasion → premiere main oui/non → annee achat + annee fabrication (si connue) → lieu d achat occasion (magasin/particulier). Couleur/Finition. Photo minimum : 1 obligatoire pour passer a l etape 3. Categories et seuil ancien charges dynamiquement depuis parametres Airtable.
4. Affichage : index.html → loadAnnoncesVedette() → featured swipable + carousel → clic → annonce.html?id=RECORD_ID
5. Estimation IA v3 — Chaine complete :
a) searchPianoPrices(brand, model, year, type) : 4 queries base + 2 supplementaires si numerique + requetes magasins ref (groupes par 3) + fallback si rien trouve. Filtre anti-variantes cote code (B1 ≠ B1 SC3). Prix neuf = le plus bas trouve (pas le plus haut).
b) Cache 1h : getCachedEstimation(pianoData, mode). Cle = marque+modele+annee+etat+provenance+premiereMain+finition+mode. Meme piano = meme prix garanti pendant 1h.
c) loadPastFeedbacks(brand, model) : charge les 10 derniers feedbacks depuis Airtable.
d) buildEstimationPrompt(pianoData, mode, webData) : assemble le prompt complet avec tous les blocs.
e) callAI(prompt) : appel LLM multi-fournisseur.
f) setCachedEstimation + saveEstimationHistory → Airtable table Historique Estimations IA.
5bis. Prompt IA v34 — Blocs injectes (dans l ordre) :
1. Prompt systeme (personnalite Piano Panier, variables commerciales : commission, livraison, packs)
2. PIANO A ESTIMER (marque, modele, type, finition, provenance, premiere main, annee, age, etat, dernier accord, sourdine, pedale tonale, cadre, details, jours en ligne)
3. PRIX NEUF CATALOGUE (si table Catalogue configuree — consultation automatique Airtable, prix fiable prioritaire)
4. DONNEES MARCHE (prix neuf web, prix occasion moyen, prix trouves, extraits pertinents)
5. CORRECTIONS ADMIN (textarea admin, overrides prioritaires)
6. INSTRUCTIONS ADMIN (textarea admin, regles generales)
7. DONNEES INTERNES — feedbacks passes (si existants, signalements et confirmations, NE JAMAIS mentionner au client)
8. MAGASINS REFERENCE (pour calibration interne, JAMAIS cites au client)
9. REGLES (minimum vital) : prix neuf obligatoire dans l analyse, decote min 15%, version de base sans suffixe, detection nature, estimation impossible si piano sans valeur marchande, longueur analyse, mention packs
10. RE-ESTIMATION (si correction client : ancrage prix precedent, ecart max tolere)
11. INSTRUCTION JSON (format attendu avec `estimation_impossible`, `prix_neuf_reference`, incoherences)
Total : ~2500 tokens (vs ~6000 avant refonte)
5ter. pianoData — 22 cles harmonisees (3 points d appel identiques) :
brand, nature, model, serial, type, finish, year, yearFabric, yearType, provenance, premiereMain, lieuAchat, condition, lastTuning, sourdine, pedaleTonale, techHistory, details, ancien, ancienSeuil, cadre + daysOnline (accueil) ou userPrice (validation)
5quater. Parametres back-office IA :
Curseurs fins : prudence (0-10), agressivite (0-10), tolerance prix (5-40%), seuil confiance (10-80%), longueur analyse (court/moyen/detaille), mention packs (jamais/subtil/systematique)
Coefficients etat : mauvais (×0.40-0.80), bon (×1.00 fixe), excellent (×1.05-1.30), restaure (×1.10-1.60)
Decote : amplitude description (0-15%), decote sortie magasin meme annee (5-35%)
Textes : instructions evaluation, corrections rapides, magasins reference (1 par ligne)
Ponderations : donnees web (1-10), algo interne (1-10), instructions eval (1-10), corrections rapides (1-10), feedbacks (1-10), versions/options (1-10)
Feedback : actif/inactif, roles autorises (admin/pro/client)
6. Feedback estimation : Apres chaque estimation, bloc "Ce prix vous semble-t-il coherent ?" (visible selon roles configures). Si OUI : enregistre confirmation dans Historique (Mode=feedback, Statut=coherent). Si NON : champ prix attendu + commentaire → enregistre avec ecart IA/reel calcule. L IA consulte les 10 derniers feedbacks du modele a chaque estimation. Feedbacks negatifs = signal de re-verification (algo prime). Feedbacks positifs = aiguillage en cas de doute. JAMAIS mentionne au client.
7. Coming-soon : Guard sur toutes pages → verifie parametre + email autorise/admin → redirect ou affiche
8. Upload photos : Client → Worker Cloudflare → Cloudflare Images → URL retournee → Airtable champ Photos
⚠️ Bugs resolus (ne pas reproduire)
1. Doublons parametres — loadParametres() detecte et supprime auto les doublons
2. Cache navigateur — cache-buster ?v=143 sur airtable-config.js. INCREMENTER a chaque modification du fichier
3. IA hallucinations — Prompt strict avec INTERDICTIONS ABSOLUES + liste exhaustive packs
4. Boucle estimation — estimatePrice() dans un seul try/catch/finally
5. reCAPTCHA Firefox — Migre vers v2 invisible
6. Accents champs — Modèle, Année, Prénom, Spécialités (TOUJOURS verifier)
7. Prix type — Champ Prix = number (pas string)
8. Date type — Champ Date = date (format YYYY-MM-DD)
9. index/accueil sync — index.html = copie de accueil.html, toujours synchroniser
10. IA depot annonce — runAiEstimation et checkPriceWithAI appelaient directement api.anthropic.com (CORS). Corriges pour utiliser callAI() multi-fournisseur
11. IA incoherences prix — 3 prompts differents donnaient des estimations contradictoires. Unifies via buildEstimationPrompt(pianoData, mode) avec regles anti-surestimation (prix occasion != prix neuf)
12. searchPianoPrices not defined — Cache navigateur servait l ancien airtable-config.js (v=2) sans la fonction recherche web. Passe en ?v=3 sur toutes les pages. Regle : incrementer le cache-buster a chaque modif de airtable-config.js
13. Prompt trop complexe (v33) — 6000 tokens d instructions noient l IA. Doublon methode de calcul (6 etapes presentes 2 fois). Donnees web contradictoires + grilles rigides = estimations incoherentes (C3X moins cher que C2X). Resolu : refonte v34 simplifiant a 2500 tokens, l IA raisonne naturellement.
14. Piano ravage estime au prix du neuf — Aucune regle sur l impact de l etat dans le prompt simplifie. Yamaha GB1 "ravage par les flammes" estime a 11500€ (= prix neuf). Resolu : regle etat + mecanisme estimation_impossible (renvoi vers experts).
15. Feedback accueil bloque apres re-estimation — Boutons Oui/Non desactives (disabled=true) apres envoi feedback, jamais reinitialises. Resolu : reset complet du bloc feedback a chaque nouvelle estimation.
Idees & A faire — Roadmap produit
PRIORITE HAUTE Referentiel Prix Neuf (table Airtable)
Table "Catalogue Prix Neufs" : Marque, Modele, Type (Droit/Queue/Numerique), Prix_neuf, Source, Date_maj. L'IA consulte cette table EN PRIORITE avant toute recherche web. Code pret : fonction `cherchePrixCatalogue()` dans airtable-config.js + `TABLE_CATALOGUE` a remplir. Page `scraper-catalogue.html` avec scripts console F12 pour Thomann, Woodbrass, Juste Un Piano, Pianos Daude + script generique. Etapes restantes : creer la table Airtable, mettre l ID, scraper les sites. Voir `TODO-catalogue-prix-neufs.md`.
PRIORITE HAUTE Worker Cloudflare CRON — Scraping quotidien des catalogues
Worker programme a 4h du matin, scrape les pages piano de : Nebout & Hamm, Juste Un Piano, Pianos International, Woodbrass, Pianos Hanlet, Thomann. Compare avec Airtable : prix change → MAJ, nouveau modele → ajout, modele disparu → flag "indisponible" (garde le dernier prix). Champ "Derniere verification" pour la fraicheur. Thomann et Woodbrass ont des flux produits XML/CSV (comparateurs) = legal et structure. Pour les autres : scraping HTML classique de leurs pages pianos.
PRIORITE HAUTE Prix Marche Reel — Auto-apprentissage
Quand une annonce passe en "Vendu" : enregistrer prix final + jours en ligne dans Historique. A chaque estimation, injecter les dernieres ventes similaires dans le prompt ("les 3 derniers Yamaha U1 en bon etat se sont vendus a 4200€ (12j), 4400€ (8j), 3900€ (31j)"). Temps de vente = indicateur de justesse : <7j = un poil bas, 7-30j = juste, >60j = trop cher.
MOYEN TERME Indice de Cote Piano Panier
Comme l'Argus pour les voitures. "La cote Piano Panier du Yamaha U1 en bon etat est de 4200€." Page publique consultable par tous → trafic SEO massif sur "cote piano occasion", "prix Yamaha U1 occasion". Les gens viennent checker la cote avant d'acheter/vendre meme ailleurs. Autorite de marque.
FAIT Dashboard fiabilite IA
Implemente dans la vue d ensemble : 5 KPIs (taux fiabilite, total estimations, demandes experts, ecart moyen, confiance moyenne), 3 camemberts (retours utilisateurs, IA vs expertise, niveau confiance), top modeles corriges, activite 7 jours.
FAIT Systeme Mailing complet (sans serveur)
Emails automatiques via Worker Cloudflare + Resend (100/jour gratuit). 6 templates : verification inscription, reponse estimation expert, estimation impossible, reset password, depot annonce, notification admin. Templates custom editables depuis le back-office (section Mailing), stockes dans Airtable. Variables dynamiques ({prenom}, {marque}, {modele}...). Apercu temps reel + bouton test. CONTOURNEMENT SERVEUR : le site appelle un Worker Cloudflare (piano-panier-mailer.pianopanier7.workers.dev) qui appelle l API Resend. Migration serveur = remplacer l appel au Worker par un appel direct Resend depuis le backend.
FAIT Authentification complete (inscription + reset password)
Inscription → email verification automatique → clic lien → compte active (deconnexion auto si deja connecte). Mot de passe oublie → email reset → formulaire nouveau mot de passe. Bouton Deconnexion visible sur toutes les pages. CONTOURNEMENT SERVEUR : hash SHA-256 cote client, session localStorage, codes confirmation/reset dans Airtable. Migration serveur = JWT + bcrypt + cookies httpOnly.
PRIORITE HAUTE Base de donnees Numeros de Serie
Table Airtable "Numeros Serie" : Marque, Prefixe serie, Annee debut, Annee fin, Modele, Lieu fabrication. A chaque estimation, si un n de serie est fourni, lookup automatique dans la table → annee de fabrication exacte, modele confirme, lieu de fabrication. Elimine les erreurs d annee et les confusions de modeles. Incitation forte au remplissage n serie deja en place dans les formulaires. Sources : bases publiques Yamaha, Kawai, Steinway, documentation constructeurs.
LONG TERME Migration base de donnees
Airtable limite a 50k lignes/base. Si ca decolle : migrer vers Supabase ou Firebase. Pas urgent mais a anticiper. Le referentiel prix + historique estimations + ventes seront les premieres tables a saturer.
LONG TERME Optimisation couts API
Chaque estimation = 4-6 requetes Serper + 1 appel LLM + requetes Airtable. Avec le referentiel prix neuf local, les requetes Serper diminuent drastiquement (web uniquement si modele absent du referentiel). Cache estimation deja en place (1h). Surveiller les volumes si >500 estimations/jour.
MOYEN TERME Migration serveur (backend)
Migrer la logique metier (auth, estimation IA, mailing) depuis le client + Workers Cloudflare vers un vrai backend (Node.js Express ou Python FastAPI). Points cles : 1) Cles API (Airtable, Anthropic, Serper, Resend) en variables d environnement serveur au lieu du code client. 2) Auth JWT + bcrypt au lieu de SHA-256 + localStorage. 3) Routes API : /api/estimate, /api/auth/*, /api/email/send, /api/upload. 4) Workers Cloudflare (mailer + images) remplaces par des routes backend. 5) Resend appele directement depuis le serveur. Voir section "Migration serveur — Checklist" dans la documentation complete.
📜 Journal des modifications
Historique des changements majeurs du site
21/03/2026 — v176PACK OFFERT VENDEUR + ADMIN MONITORING + TARIFS TRANSPORT
Pack offert par le vendeur : bloc "Boostez votre annonce" (deposer-annonce), 4 options (aucun/transport/confort/serenite), options grisees dynamiquement selon type piano (parametres admin). Badge premium vert gradient sur fiche annonce. Badge carousel/featured via MutationObserver (meme mecanisme que EN DISCUSSION). Tunnel achat : transport 0 EUR si packOffert existe, packs inferieurs grises, packs superieurs = supplement seul. Formule : prixClientPack = isOffert ? 0 : max(0, packPrix - prixPackOffert). Recap overlay : transport barre si offert. Emails : badges offert (acheteur vert, vendeur orange). Transaction : packOffert + transportPrix stockes. Calcul prix transport cote serveur (POST /api/missions/estimer-transport, geocoding Google Maps). Majoration etages : 49 EUR/etage sans ascenseur, min 150 EUR, 3 EUR/km. Admin : KPI Ventes + Packs offerts dans Vue d'ensemble. Badge + filtre + deduction vendeur dans liste annonces et ventes. Grilles parametrables "Packs offrables par le vendeur" (3 grilles checkboxes par type piano). Flux 20 dans algorigramme. Documentation complete mise a jour (15 sections). Cache-buster v=182. Headers Cloudflare no-cache.
19/03/2026 — v175REVIEW LITIGE COMPLETE + TABLE EVENEMENTLITIGE
Table EvenementLitige : historique structuré des litiges (7 types : contestation, reponse_pro, relance_72h, escalade_auto, escalade_admin, decision_admin, resolution_client). Double écriture dans 7 points (motifRefus + EvenementLitige). Route /api/litiges (POST + GET mission + GET ticket + GET admin). Nouveau module API (12 modules total). Bouton Historique dans admin (overlay timeline colorée). Upload preuves contestation (max 5 fichiers, stockées dans preuvesUrls, liens P1 P2 P3 dans admin Achat+Solo). Fix bug openMissionChat pro en_mediation → redirige maintenant vers conv ticket. Fix sécurité : secret cron retiré du JS front, force-escalade accepte JWT admin. Numéro ticket anti-collision (6 chars). Message initial ticket via sendMessage(). Algorigramme v175 : 19 flux (ajout F18 Contestation/Escalade + F19 Résolution dans le back-office). Légende Airtable → Railway/DB. Documentation refondue 14 sections. Fonction logEvenementLitige() helper front. Champ metadata JSON pour Stripe futur. Index missionId + numTicket. Cache-buster v=182.
17/03/2026 — v174PHASE 1 COMPLÈTE — EXPERTISE + DEADLINES + RÉASSIGNATION + LITIGES
Migration complète Airtable → Railway/PostgreSQL. Expertise (4ème type mission, forfait 150€, CR 11 champs, badge EXPE). Deadlines 48h pro + 7j client + timers visuels + cron auto-validation. Réassignation auto (exclusion par mission + relance find-best). Contestation structurée (overlay 6 catégories, ticket TK, 5 emails). Conversations ticket dédiées (badge LITIGE/MEDIATION/CLOS, bandeau client/pro/admin). Escalade auto 7j + relance 72h. Décision admin (valider/annuler + motif + emails). Statuts en_mediation + annulee. Soft delete conversations protégé par statut mission. 44 templates email. Bouton test Médiation (admin). 22+ corrections de bugs. Cache-buster v=174.
11/03/2026 — v148MES PIANOS — EMAILS CYCLE DE VIE + BADGE NAV + TRANSFERT SANS PACK
4 nouveaux templates email Mes pianos : piano_dans_garage (acheteur, post-transfert), piano_transfere_vendeur (vendeur, post-transfert), piano_reference (vendeur, post-depot annonce), piano_ajoute_garage (proprietaire, ajout manuel). Templates editables dans la section Mailing (nouveau groupe "Mes pianos"). Chaque email explique Mes pianos et ses benefices. Badge nav "Mon compte" enrichi : additionne messages non lus + evenements pianos recents (localStorage 7 jours) sur toutes les pages (index, accueil, annonce). Badge "Mes pianos" dans le menu lateral (disparait au clic). Achat sans pack : transfert piano immediat a la confirmation (plus de blocage en_transfert indefini) — TODO PAIEMENT marque pour Stripe. Fix message "Livraison et services en cours" supprime pour sans_pack. Fix email acheteur post-transfert (utilisait existingPiano/newPiano en memoire, evite re-requete Airtable avec delai propagation). Templates : suppression liseret border-left, fonds uniformes. Mailing back-office : 4 nouvelles options + variables ppId/lienPianos documentees. 44 templates total.
10/03/2026 — v144-v147MES PIANOS — TRANSACTIONS + MISSIONS SOLO + BACK-OFFICE VENTES
Numérotation TR anti-collision (timestamp ms + random). Types transaction : achat, mission_solo_transport/accord/technique, remboursement, avoir. Back-office Ventes (section + stats + export CSV). Missions solo : creation transaction avec lien parent si piano achete. Filtre Pianos achetés : strict type=achat. transferPiano() → statut actif chez acheteur. Annee fabrication vs achat corrigee. Soft-delete piano (Supprime par + Date suppression). Statut retiree vs bloquee. Champs v2 Transactions (Numero, Type, Transaction parente, Mission ID, Annonce Numero) crees manuellement. Scripts PATCH sur Cloudflare/Airtable corriges. Rapports PDF : bandeau references (N annonce / PP ID / Mission / Transaction). CR pro : guard anti-double-submit + anti-popup cascade. N° transaction mere dans back-office Ventes.
09/03/2026 — v143MES PIANOS — SECTION COMPLÈTE + TRANSFERT CONDITIONNEL
Section Mes pianos (mon-compte.html) : garage a pianos, carnet entretien, historique missions. Transfert conditionnel : piano en_transfert chez vendeur jusqu a validation toutes missions, puis transfert effectif (Proprietaire email + Statut actif) chez acheteur. Champs Pianos : Acheteur email, Transaction ID achat, Statut (actif/en_vente/en_transfert/vendu/archive). Missions solo (accord/accord/technique) depuis Mes pianos. Pré-remplissage formulaire depot depuis Mes pianos. Textes depuis Parametres Airtable (prefill_*). Persistance onglets localStorage. getNumAnnonceFromMission(). Champs Pianos Supprime par + Date suppression. Centrage vertical cartes.
08/03/2026 — v140RAPPORTS + NUMÉROTATION + PROFIL + MAILING 25 TEMPLATES
Numerotation annonces AN+DDMMYY+XXXX (4 chiffres, max 9999/jour). Email annonce_publiee (25e template, post-confirmation). Profil : adresse complete (numero voie, CP, ville). Rapports intervention : formulaire CR structure par type, document HTML/PDF, back-office Templates CR. Tri/filtre/pagination missions et rapports (back-office). Liens cliquables annonces et utilisateurs dans tous les tableaux. Notation post-validation client. Diapason saisie libre. Export CSV missions+rapports. Message depot corrige (Plus quune etape). Templates mailing synchronises 25/25.
07/03/2026 — v139CHARTE GRAPHIQUE + MODIFICATION ANNONCE + MESSAGERIE PAR ANNONCE
Charte graphique unifiee (badges, boutons, icones type mission, 0 emoji). Modification annonce (Prix, Description, Historique technique, Accessoires — aucun champ structurant). Retrait annonce (bloquee, conversations conservees). Suppression admin cascade (annonce + conversations + messages). Messagerie par annonce (filtre groupe, compteur discussions, deep link). Documents vendeur+acheteur uniquement si vendue. Proposer un prix supprime du DOM si vendue. Fallback ville profil vendeur (annonce + marketplace). Upload ville pre-remplie depuis profil. SVG localisation (0 emoji epingle). Page annonce : cadre description, miniatures centrees, flèches, ResizeObserver. Espace Pro : fonctions exportees window, design unifie missions+dashboard. Mes achats : design unifie missions. N de serie dans Mes Annonces.
06/03/2026 — v138REFONTE ACCUEIL + ESPACE PRO + UPLOAD + MAILING
Refonte accueil (hero, recherche, packs, recemment vendus). Annonces : vendue auto, bloquee, pianos similaires, meta noindex. Mes achats refondee. Upload photos Cloudflare Images (JPG/PNG/WebP/GIF) + documents Cloudflare KV (PDF/images). Affichage docs sur annonce (toggle back-office). Messagerie : badges ADMIN>TECH>ACC>TRANSP>PRO, filtre PRO elargi, soft delete. Missions emails auto. IA 16 params + re-estimation guidee. Espace Pro 5 etats + validation admin (NOUVEAU/REFUSE/Debloquer). Refus retire roles pro. Roles simplifies, upgrade pro. 24 templates mailing + toggle actif/inactif. Emails auto : assignation/desassignation roles, blocage/suppression comptes. Bouton PRO nav + notifications badges polling 30s. Persistance onglets hash URL. Polling temps reel 4 pages. "Suspendre pro" vs "Bloquer". 62 corrections accents. Documentation complete 17 sections.
05/03/2026 — v113-v121ESPACE PRO + MISSIONS + GPS
Espace Pro complet (dashboard, missions, messagerie PRO, profil GPS). Carte Leaflet zone intervention. Missions admin (assignation, suivi, statuts). Geocoding Google API. Conversations PRO (Type conv, Mission ID). GPS toggle (base/live). Responsive mobile espace pro.
05/03/2026 — v99-v112ACHAT + RESPONSIVE + ROLES
Achat au prix affiche (achat-direct.html). Responsive global. Roles multiples virgules. Missions creation auto post-achat. Geocoding adresse piano. Algo findBestPro.
04/03/2026 — v88MESSAGERIE + MAILING + ROLES + ACHAT
• Messagerie complète style LeBonCoin/Vinted : conversations, messages, polling 15s, notifications email
• Propositions de prix : offre, contre-offre inline (formulaire dans le chat), acceptation, refus — allers-retours illimités
• 11 templates email (7 nouveaux) : vérification, dépôt annonce, message simple, nouvelle offre, contre-proposition, offre acceptée, offre déclinée, estimation expert, estimation impossible, reset password, notif admin
• Chaque type d'email a son propre template customisable dans la section Mailing
• Variables messagerie : {prenomExpediteur}, {annonceTitre}, {messagePreview}, {lienConversation}
• Worker mailer : types d'email dédiés (plus de détection par contenu, chaque action = son propre case)
• Rôles utilisateurs : admin/particulier/pro + boutons "Nommer admin" / "Retirer admin" dans la section Utilisateurs
• syncCurrentUser() : synchronise rôle/statut depuis Airtable au chargement de chaque page, déconnexion auto si bloqué
• Confidentialité : seul le prénom est affiché publiquement partout (annonces, messagerie)
• Bandeau "Reprendre la discussion" sur la page annonce si conversation existante
• Conversations retrouvées automatiquement (normalisation email LOWER + trim)
• Anti-double-clic + délais anti rate-limit Airtable 429 + email non-bloquant
• Validation annonces par email (en_attente → clic lien → publiée)
• Dépôt annonce : pré-remplissage si connecté, création compte si pas connecté (1 seul email confirme tout)
• Recherche marketplace fonctionnelle + section "Mes annonces" + blocage auto-contact renforcé
03/03/2026 — v55-v59 — Systeme mailing complet : Worker Cloudflare piano-panier-mailer + Resend (100 emails/jour gratuit, domaine piano-panier.fr verifie DKIM+SPF+DMARC). 6 templates email initiaux. Templates custom editables depuis section "Mailing" du back-office. Inscription email verification automatique. Mot de passe oublie complet. Bouton Deconnexion visible sur toutes les pages.
03/03/2026 — v51-v54 — Formulaires estimation + depot : simplification annees. Neuf = annee d achat uniquement. Occasion = annee d achat + annee de fabrication (toujours les 2, premiere main ou pas). Warning adapte : incite a renseigner l annee de fabrication et le n de serie. Champ n de serie renforce ("fortement recommande") avec mention future base de donnees. Monitoring fiabilite IA deplace dans la vue d ensemble. Fix API_KEY → API_TOKEN pour les feedbacks. Prompt IA : date actuelle injectee (fix "2026 dans le futur"), estimation impossible = expertise manuelle OBLIGATOIRE pour degats eau/feu/cadre fissure, incoherences = UNIQUEMENT erreurs de saisie client (plus de contradictions internes IA).
03/03/2026 — Estimation impossible (v41) : si l IA juge qu un piano n a aucune valeur marchande (degats feu/eau, cadre bois fissure, composants HS), elle ne donne pas de prix. Le client voit un message "Estimation par nos experts", entre son email, et la demande est envoyee automatiquement dans le back-office (table Estimations, statut en_attente, email + motif IA dans Details). Page depot : envoi auto sans email (client inscrit). Page accueil : champ email obligatoire avant envoi.
03/03/2026 — Message de transparence IA (v38) : message configurable depuis le back-office (section Config IA > "Message de transparence IA"). Activable/desactivable + texte modifiable. Apparait au-dessus de chaque estimation sur accueil et depot. Parametre Airtable : `ia_disclaimer_actif` (oui/non), `ia_disclaimer_texte`.
03/03/2026 — Refonte prompt IA v34 : simplification radicale du prompt (~2500 tokens au lieu de ~6000). Suppression methode 6 etapes, grilles decote, coefficients etat, ponderations sources, double check. L IA raisonne naturellement avec les donnees. Regles minimales conservees : prix neuf obligatoire dans l analyse, decote minimum 15%, version de base sans suffixe, detection nature. Nouveau champ JSON `prix_neuf_reference` affiche sous la fourchette de prix.
03/03/2026 — Fix feedback accueil : reset complet du bloc feedback (boutons, champs, message merci) a chaque nouvelle estimation. Plus besoin de recharger la page pour renvoyer un avis.
02/03/2026 — Correction prompt IA v28-v33 : prix absurdes haut de gamme corriges (CF4 120k→45-55k, C2X 48k→18-22k). Ajout hierarchie gamme avec prix neufs reference (CX, S, GX). Regle decote minimum 15% (sortie magasin). Regle hierarchie absolue : modele superieur = toujours plus cher a conditions egales. Doublon methode de calcul supprime (-2000 tokens). Exemples comparatifs C1X/C3X/S7. Equilibrage grille vs web (seuil ecart 30%).
01/03/2026 — Nature du piano : separation Acoustique/Numerique en 2 boutons radio. Format adapte automatiquement. Sourdine + dernier accord masques si numerique. Detection d incoherences par l IA avec affichage visuel (boutons "Corriger", highlight champ, badge "A corriger"). Re-estimation apres correction avec ancrage prix. Garde-fous anti-incoherence back-office : severite detection (1-10), ancrage re-estimation (%), seuil prix absurde (% du neuf), double verification IA (oui/non), listes modeles acoustiques/numeriques editables. Garde-fou CODE : detection automatique ecart prix JSON vs analyse (ratio >10x = correction auto), ancrage prix re-estimation cote code. Prompt IA : instruction prioritaire nature (determine la VRAIE nature du modele), listes de reference injectees, seuil absurde, double verification 5 points.
01/03/2026 — Estimation IA v3 : ponderations des sources (6 curseurs back-office), feedback estimation (coherent/incoherent avec prix attendu et commentaire, assignable par role, consulte par l IA comme signal de verification), feedbacks positifs = aiguillage en cas de doute, negatifs = re-verification. Section "Idees & A faire" dans la doc.
01/03/2026 — Estimation IA v2.5 : cache estimation 1h, filtre anti-variantes (B1 ≠ B1 SC3), interdiction citer magasins/sources/villes/"catalogue", decote numerique specifique (-25% a -90%), ponderation petites annonces pour numerique, interdiction inventer details techniques (SC3 sur piano de 2010), champ Couleur/Finition, "Provenance" renomme "Etat lors de l achat".
01/03/2026 — Estimation IA v2 : suppression modele decote fixe, remplacement par instructions texte libre. Coefficients etat, amplitude description, magasins de reference, corrections rapides, classification gamme auto, methode 8 etapes, decote sortie magasin configurable, recherche web obligatoire + fallback.
01/03/2026 — Formulaires depot+accueil : parcours etat lors de l achat (neuf/occasion), premiere main, annee optionnelle avec warning contextuel (visible uniquement quand le champ annee est affiche). pianoData harmonise (16 cles identiques sur les 3 points d appel).
01/03/2026 — Recherche web IA (Serper.dev) + table Historique Estimations IA (29 champs Airtable). Reglages fins IA : curseurs prudence, agressivite, tolerance, seuil confiance, longueur, mention packs.
01/03/2026 — Photos annonces : drag & drop pour reordonner + affichage photos dans back-office avec modal.
28/02/2026 — Parametres annonces : categories dynamiques + seuil annee piano ancien configurable + types piano crapaud/demi-queue/carre
28/02/2026 — Depot annonce : validation marque/annee, detection piano ancien cadre metallique/bois, garantie cadre bois
28/02/2026 — Creation marketplace + Upload photos Cloudflare Images + Blocage comptes + Export Excel
28/02/2026 — Page coming-soon + controle acces + estimation manuelle + reCAPTCHA invisible
28/02/2026 — Moteur IA multi-fournisseur + configuration avancee + prompt anti-hallucinations
28/02/2026 — Creation initiale : auth, back-office, navigation, parametres commerciaux
Tests & Automatisation
Créer des données de test, lancer des scénarios, nettoyer. Toutes les données test sont taguées [TEST-AUTO].
Créer un scénario de test
Données de test actives
Cliquez sur "Rafraîchir" pour voir les données de test.