DOD Peinture ← Retour au site
Making-of · Claude Fable 5

Comment ce site a été peint.

Une marque d'artisan, bâtie pour faire sonner le téléphone. Voici la direction artistique, les vraies techniques de code, le pipeline d'images IA et les prompts. Tout est reproductible.

Cette page est une maquette de refonte adaptée pour un artisan réel, DOD Peinture (Ugur Dalgic, peintre plaquiste de Lyon à Aix-les-Bains), à partir d'une proposition de design initiale. Le brief, les coordonnées, le parcours et les avis sont réels. Le logo, les photos de chantiers et le portrait sont ceux de l'artisan ; les quelques illustrations d'ambiance issues de la maquette de départ sont générées par IA et signalées comme telles.

01 · Concept & direction artistique

Un chantier, pas une agence

DOD Peinture est un artisan réel : Ugur Dalgic, peintre plaquiste installé à La Verpillière, qui intervient de Lyon à Aix-les-Bains. Le brief tenait en un mot : conversion frontale. Numéro de téléphone énorme, promesse de devis sous 24h, preuve concrète partout. Le risque, avec ce genre de commande, c'est le site criard et bon marché. La réponse : un maximalisme graphique exécuté avec précision. On emprunte le langage visuel du métier lui-même, le ruban de masquage, la peinture, le rouleau, et on le transforme en système d'interface. Le fil rouge du discours est sa propre phrase : un artisan se différencie par ses finitions, pas par ses prix, donc aucun prix n'est affiché.

La palette est rationnée, pas éparpillée. Le rouge DOD, extrait du vrai logo de l'artisan, possède les moments de marque : souligné du titre, bouton d'appel, tampons, cadre du formulaire. Le noir encre structure et porte les actions secondaires, le blanc cassé respire. Un rouge fort se dose : jamais de pleine page rouge, l'or est réservé aux étoiles d'avis.

Rouge DOD#C43B39
Rouge profond#A32E2C
Noir encre#1A1A1A
Blanc cassé#F6F1E6

La typographie

Deux familles, deux rôles. Clash Display (700) pour les titres : une grotesque large, franche, qui monte à 15vw sans trembler. Archivo pour le texte, les étiquettes et surtout les chiffres, en tabular-nums pour que tous les prix et compteurs s'alignent au pixel. Jamais la même police pour titrer et pour lire.

Ugur peint.
Archivo, le corps de texte : lisible, carré, sans chichi. Il porte la promesse sans la ramener.
2014 · 07 68 24 59 09
02 · Les techniques

Ce qui se passe sous le capot

Le titre peint au rouleau

La signature de la page. « UGUR PEINT. » est du vrai texte (pas une image), révélé comme s'il était passé au rouleau, en deux traits, en moins d'1,5 seconde. Le truc : un clip-path: inset() animé de droite à gauche sur le texte, pendant qu'un rouleau SVG rouge suit exactement le front de peinture. Le texte est déjà en gras dans une police de secours préchargée, donc aucun flash de fine graisse au chargement.

// pour chaque ligne, on peint le texte et on fait rouler le rouleau au front
tl.fromTo(ink,
  {clipPath:'inset(0 100% 0 0)'},
  {clipPath:'inset(0 0% 0 0)', duration:0.72, ease:'power3.inOut'}, at);

gsap.set(roller,{left:'-3%', opacity:0});
tl.to(roller,{opacity:1, duration:0.12}, at)
  .to(roller,{left:'101%', duration:0.72, ease:'power3.inOut'}, at);

Le comparateur avant / après

Un slider maison, sans dépendance, gardé comme démonstration ludique (les deux images sont générées par IA et signalées comme telles, sous la séquence de vraies photos). Deux images superposées ; celle du dessus est rognée par clip-path: inset() selon la position de la poignée. Il écoute les Pointer Events (souris, tactile, stylet dans un seul chemin de code) et reste pilotable au clavier : la poignée est un role="slider" qui répond aux flèches, à Home et à End.

// une seule source de vérité : la position en %, appliquée partout
function apply(p){
  pos = Math.max(0, Math.min(100, p));
  before.style.clipPath = 'inset(0 ' + (100-pos) + '% 0 0)';
  handle.style.left = pos + '%';
  grip.setAttribute('aria-valuenow', Math.round(pos));
}

Le formulaire de devis

La demande de devis n'est pas un simple mailto : elle poste en JSON vers une fonction serverless (Vercel), qui envoie un email via Resend, avec un champ piège anti-robots. Les photos sont allégées côté client avant l'envoi : chaque image est redessinée dans un <canvas> à 1280 px maximum, ré-encodée en JPEG, puis transmise en base64 comme pièce jointe. Le tout reste accessible : labels, focus visibles, états d'envoi, de succès et d'erreur.

// on redimensionne dans un canvas, puis on sort le base64 sans prefixe
var max = 1280, w = img.width, h = img.height;
if (w > max || h > max) {
  if (w >= h) { h = Math.round(h*max/w); w = max; }
  else        { w = Math.round(w*max/h); h = max; }
}
canvas.width = w; canvas.height = h;
ctx.drawImage(img, 0, 0, w, h);
var data = canvas.toDataURL('image/jpeg', 0.72).split(',')[1];

Les compteurs et le bord de peinture

Les grands chiffres montent depuis zéro quand la section entre à l'écran (via ScrollTrigger, une seule fois), avec une interpolation cubique et un séparateur de milliers ajouté à la volée. La bande noire des chiffres n'a pas un bord droit : une forme SVG preserveAspectRatio="none" dessine des gouttes de peinture qui coulent dans le blanc. Toutes les animations ne touchent que transform, opacity et clip-path, jamais la mise en page, donc tout reste à 60 images par seconde.

Sobriété et accessibilité

En prefers-reduced-motion, le rouleau disparaît, le titre s'affiche d'emblée, les compteurs affichent leur valeur finale et les révélations au défilement deviennent instantanées. Chaque élément cliquable a ses états hover, focus-visible et active distincts, et les grandes images de chantiers passent en loading="lazy".

03 · Des maquettes IA aux vraies photos

D'abord l'IA, puis le réel

La proposition de départ s'appuyait sur des visuels générés par IA, le temps de caler la direction avant d'avoir les vraies photos. Le duo avant / après était le plus délicat : il fallait exactement la même pièce, seulement rénovée. La méthode qui marche, c'est le image-to-image : on génère la scène « avant », puis on la repasse en entrée pour peindre le « après », en gardant la structure et en ne changeant que l'état.

Avant (texte vers image)Tired Parisian living room, cracked plaster walls, dirty handprint near light switch, faded floral wallpaper strip, sofa covered by a translucent plastic dust sheet, dusty herringbone parquet, grey overcast light from a tall window, wide 16:9, photoreal interior photography.
Après (image vers image, à partir du « avant »)Same room, same camera, same sofa now uncovered with floral upholstery, freshly repaired and painted walls in warm off-white, one sage-green accent wall around the window, clean parquet, bright even daylight. Keep composition and geometry identical, change only the renovated state.

Une fois l'artisan à bord, l'essentiel de ces illustrations a cédé la place à ses vraies photos de chantiers : la séquence cheminée avant / pendant / après, la grille de réalisations, l'artisan au travail en t-shirt DOD, et son vrai portrait. Sur un site pour une personne réelle, aucun visage généré n'est présenté comme le sien. Son logo vectorisé (pinceau et rouge DOD) remplace le lettrage et donne sa couleur de marque à toute la charte. Seul le comparateur avant / après reste en image-to-image, gardé pour son côté ludique et signalé comme illustration IA, sous les vraies photos qui portent la preuve. Chaque image est exportée en WebP pour le poids.

04 · Le process

Construit, puis repeint trois fois

Le site a été conçu et codé de bout en bout par Claude Fable 5, dans Claude Code. Un seul fichier index.html autonome (CSS et JS inline), plus la page /guide, sans étape de build ni framework. Seules dépendances externes : les polices et GSAP, versions figées.

Une fois le site complet, il est passé par au moins trois passes d'itération pilotées par capture d'écran : on prend des screenshots à 1440 et 390 pixels, à plusieurs profondeurs de défilement, on les regarde vraiment, on note ce qui est faible, cassé ou générique, on corrige, on recommence. L'échelle typographique, le rythme des espacements, l'équilibre des couleurs, les recadrages maladroits, le comportement mobile : tout y passe. Chaque passe ajoute aussi un détail délibéré, pas seulement des corrections. Le déploiement se fait ensuite sur Vercel avec vercel deploy.

Côté conversion, la demande de devis n'est pas un simple mailto : le formulaire poste en JSON vers une fonction serverless (Vercel), qui envoie un email via Resend. Les photos jointes sont compressées côté client (canvas, 1280 px, JPEG) puis transmises en base64 comme pièces jointes, et un champ piège (honeypot) filtre les robots. En local, l'envoi échoue proprement et renvoie vers le téléphone ; le test réel se fait après déploiement.

05 · Reproduire ce site

La recette, en cinq gestes

  1. Rationnez la couleur : une teinte de marque, une teinte d'action, une encre, un fond. Ne les mélangez pas dans les mêmes zones.
  2. Volez le langage du métier. Ici le ruban de masquage et la peinture deviennent des séparateurs, des étiquettes et une révélation de titre.
  3. Le geste signature doit rester du vrai texte : un clip-path animé plus un rouleau qui suit le front, pas une image.
  4. Pour un duo avant / après crédible, générez en image-to-image : même cadrage, on ne change que l'état.
  5. Terminez, puis itérez à la capture d'écran. Trois passes minimum, mobile inclus, zéro erreur console.