Pourquoi tous les sites générés par IA se ressemblent

Vous avez déjà vu ce site. Fond gris ardoise, police Inter, un titre avec un dégradé sur deux mots, trois cartes de fonctionnalités aux coins arrondis et une petite icône en haut à gauche. Ce n'est pas que le modèle a mauvais goût. C'est que personne ne lui en a donné, alors il s'est rabattu sur les valeurs par défaut — et ces valeurs sont partagées par tous les outils de génération d'UI.

Mis à jour 2026-07-27

L'uniformité est héritée, pas inventée

Il est tentant de décrire cela comme un problème de goût — le modèle a vu un milliard de landing pages et converge vers leur moyenne. C'est en partie vrai, mais ce n'est pas le mécanisme, et cela pousse les utilisateurs vers la mauvaise solution (de meilleurs prompts). Le mécanisme est plus banal et bien plus concret : un agent de code à qui l'on demande de construire une UI s'appuie sur une bibliothèque de composants, et cette bibliothèque livre des valeurs par défaut. Ces valeurs ont été conçues pour être neutres, ce qui est précisément ce qui les rend universelles.

Demandez un tableau de bord à cinq outils différents — Claude Code, Cursor, v0, Lovable, Bolt — sans autre instruction. Vous obtiendrez cinq mises en page et une seule identité visuelle. Ils ne se copient pas. Ils font chacun, indépendamment, le choix le plus rationnel avec le même matériau de départ.

Les quatre indices et leur origine

1. La rampe neutre

Le thème par défaut de shadcn/ui est basé sur l'échelle zinc de Tailwind, avec slate et gray comme alternatives courantes. C'est un gris froid, légèrement teinté de bleu. Une fois qu'on l'a remarqué, on ne voit plus que ça : c'est le fond de la plupart des produits créés par IA ces deux dernières années. C'est un neutre réellement efficace, et c'est là le problème — il est assez bon pour que personne ne le remplace.

L'indice n'est pas le gris en soi, mais son *uniformité*. Une interface designée oriente généralement ses neutres légèrement vers la teinte de la marque, pour que les gris semblent liés à la couleur d'accentuation. Une interface par défaut utilise une rampe pure juxtaposée à un accent sans rapport, et les deux ne semblent jamais appartenir au même ensemble.

2. Inter, ou une police indiscernable

Inter est une excellente police pour l'UI, c'est pourquoi elle est partout et pourquoi elle est désormais perçue comme un défaut plutôt que comme un choix. Quand ce n'est pas littéralement Inter, c'est la pile système font-sans, qui aboutit à une grotesque quasi identique sur la plupart des machines. Dans les deux cas, la page utilise une seule famille pour tout : titres, corps de texte, labels, chiffres.

C'est l'utilisation d'une seule famille qui est l'indice, plus encore que le choix de la famille elle-même. Un design system associe presque toujours — une police de titrage avec du caractère pour les titres et une police utilitaire pour le corps, ou au minimum un contraste délibéré de graisse et de largeur au sein d'une même superfamille. Les pages à famille unique paraissent plates, même quand toutes les autres décisions sont justes.

3. `0.5rem` partout

Le --radius par défaut de shadcn est 0.5rem, et il se propage aux boutons, aux champs de saisie, aux cartes, aux dialogues et aux popovers. Un rayon uniforme pour toutes les tailles d'éléments n'est pas le comportement d'un design system : un bouton de 44px et une carte de 400px avec le même rayon de coin rendent la carte trop douce et le bouton informe, car le rayon est perçu relativement à l'élément sur lequel il s'applique.

:root {
  /* The line most AI-built projects never touch */
  --radius: 0.5rem;
}
Une seule déclaration à l'origine d'une part surprenante de cette uniformité.

4. La grille de trois cartes

Une section Hero, puis trois cartes égales, puis un bandeau de témoignages, puis un CTA. Ici, il s'agit d'une véritable gravité liée aux données d'entraînement plutôt que d'un défaut de configuration — c'est la structure de page marketing la plus courante sur le web, c'est donc la forme qu'un modèle produit quand le brief n'en suggère pas une autre. Ce n'est pas faux. C'est simplement la mise en page qui ne donne aucune information sur votre produit.

Preview unavailable here. Browse complete kits in the kit gallery.

Pourquoi l'amélioration des prompts finit par échouer

La réponse courante est d'écrire un prompt plus long : *utilise une palette chaude, associe un titrage serif avec un corps grotesque, varie le rayon.* Cela fonctionne. Cela fonctionne pour un écran, et généralement pour le deuxième et le troisième.

Ensuite, cela se dégrade, et d'une manière spécifique. L'agent n'ignore pas vos instructions — il mène une conversation de plus en plus longue dans laquelle votre paragraphe de style est en compétition avec tout ce qui a suivi. Au cinquième écran, il se souvient de *chaud* mais a perdu les valeurs hexadécimales, alors il improvise. L'improvisation donne un chaud légèrement différent. Le sixième écran improvise sur l'improvisation.

La dérive n'est pas l'oubli de l'instruction par l'agent. C'est l'agent qui s'en souvient approximativement, six fois de suite.

Certains appellent cela le *design drift* (dérive du design), et c'est la raison pour laquelle une application codée au feeling qui semblait nette le vendredi paraît avoir été assemblée par un comité le lundi. L'instruction vivait dans la conversation, et les conversations s'estompent.

Le test pour distinguer les deux modes de défaillance : ouvrez l'écran un et l'écran huit côte à côte. S'ils divergent sur l'espacement et la couleur mais que chacun est cohérent en interne, c'est de la dérive. Si les deux sont incohérents en interne, c'est que le système n'a jamais été spécifié.

La solution est un fichier que l'agent relit, pas un paragraphe dont il se souvient

Un design system empêche la dérive pour la même raison qu'il l'empêche au sein d'équipes humaines : les valeurs sont stockées dans un support durable et consultées, plutôt que de reposer sur la mémoire de quelqu'un. Pour un agent de code, ce support est un fichier DESIGN.md associé à un ensemble de tokens dans le repo. Les deux sont relus au début de chaque session, garantissant ainsi que le vingtième écran utilise exactement le même --primary que le premier — et non une valeur similaire.

Dans le promptDans les tokens + DESIGN.md
Persiste après une nouvelle sessionNon — le contexte est réinitialiséOui — relu depuis le repo
Précision après 10 écransApproximatif (« plutôt chaud »)Hex exact, à chaque fois
Revue possible via PRNonOui — c'est un fichier qui permet le diff
Fonctionne avec tous les outilsÀ réécrire pour chaque outilMême fichier pour Claude Code, Cursor, v0
Une même instruction, appliquée de deux manières différentes.

C'est tout l'intérêt de fournir à un agent un véritable système plutôt qu'une meilleure description de celui-ci. La couche de tokens sémantiques importe plus que la palette : --primary et --muted-foreground survivent à une refonte, contrairement à un blue-600 dispersé dans le markup.

Token specimen · real values

Terrain Vivant

Live render

Terrain Vivant's actual tokens — the same values its exports use.

Color tokensSemantic roles with HEX / HSL / CMYK

Color tokens

Terrain Vivant

light · HEX · HSL · CMYK

Core

#229F39

background

H 131 · C79, 0, 64, 38

#001500

foreground

H 120 · C100, 0, 100, 92

#2B3386

card

H 235 · C68, 62, 0, 47

#17882A

muted

H 130 · C83, 0, 69, 47

#0C7023

border

H 134 · C89, 0, 69, 56

Brand

#2B3386

primary

H 235 · C68, 62, 0, 47

#FFFFFF

primary-fg

H 0 · C0, 0, 0, 0

#1A4A8C

secondary

H 215 · C81, 47, 0, 45

#095DAC

accent

H 209 · C95, 46, 0, 33

#2B3386

ring

H 235 · C68, 62, 0, 47

Semantic

#B91C1C

destructive

H 0 · C0, 85, 85, 27

#FFFFFF

destructive-fg

H 0 · C0, 0, 0, 0

#004D10

success

H 132 · C100, 0, 79, 70

#92400E

warning

H 23 · C0, 56, 90, 43

#000000

muted-fg

H 0 · C0, 0, 0, 100

Charts

#2B3386

chart-1

H 235 · C68, 62, 0, 47

#095DAC

chart-2

H 209 · C95, 46, 0, 33

#0C549C

chart-3

H 210 · C92, 46, 0, 39

#001500

chart-4

H 120 · C100, 0, 100, 92

#3C438A

chart-5

H 235 · C57, 51, 0, 46

Type scaleHeading, body, and mono in the kit's fonts

Typography

Terrain Vivant

Scale: perfect-fourth

Density: balanced

Heading · Space Mono · 3rem

Sample headline

Subheading · Space Mono · 2.25rem

A bold two-color institutional editorial system built on vivid green and cobalt blue full-screen surfaces, with monospace type throughout and zero-radius geometry.

Body · Space Mono · 1rem

A resolutely flat two-color surface system. Vivid grass-green (#229f39) and deep cobalt-blue (#2b3386) are sovereign peers: either can fill an entire screen or section, with no neutral intermediary. All text is set in Space Mono at every scale from hero display down to captions, making the monospace grid the primary typographic voice rather than a code aesthetic. All shapes are sharp 90-degree rectangles, and section breaks use stacked parallel horizontal lines as a graphic band.

Mono · Space Mono · 0.75rem

npx shadcn add terrainvivant.json

Aa

Space Mono · Heading

400700

Aa

Space Mono · Body

400700

ABCDEFGHIJKLM NOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz

0123456789 & @ # % →

Un ensemble de tokens complet : des neutres orientés vers la teinte d'accentuation, et deux familles remplissant des rôles distincts.

Ceux qui documentent leur design parviennent-ils réellement à s'affranchir des réglages par défaut ?

La plupart du temps non, et c'est le constat le plus dérangeant. Nous avons analysé 299 fichiers DESIGN.md publics sur GitHub — le fichier dont le rôle unique est d'empêcher cela — et mesuré leur contenu.

Parmi les 72 décrivant un design system visuel, 21 % spécifient une échelle de radius et 26 % spécifient l'élévation. Ce sont deux des quatre indices mentionnés plus haut, laissés par défaut par trois quarts des personnes s'étant spécifiquement penchées sur la rédaction d'un contrat de design. 69 % omettent totalement le mode sombre, laissant l'agent inventer l'intégralité du second thème. Enfin, 86 % nomment les couleurs par teinte ou listent des hex bruts au lieu d'utiliser des rôles sémantiques, ce qui signifie que le fichier ne peut être appliqué à aucun composant qu'il n'a pas explicitement décrit.

Les réglages par défaut survivent aux tentatives de remplacement

La typographie est traitée dans 83 % des fichiers et la couleur dans 67 %, car ce sont les deux éléments que l'on associe instinctivement au « design ». Le radius, l'élévation et le mode sombre restent discrètement génériques. Ces quatre indices persistent non pas parce que personne n'a essayé, mais parce que la plupart des tentatives ne couvrent que la partie visible.

Il existe une version dérivée du même problème : 54 % des fichiers contiennent au moins un adjectif vague en guise de valeur, en tête desquels *clean* (39 %) et *modern* (36 %). Un adjectif ne remplace pas un réglage par défaut. Il demande à l'agent d'en choisir un.

Un audit de cinq minutes

  1. 1

    Analyser l'arrière-plan

    Récupérez l'hex de l'arrière-plan de votre page. S'il s'agit de #09090b, #18181b, #0f172a ou #020617, vous utilisez une palette zinc ou slate non modifiée.

  2. 2

    Compter les familles typographiques

    Ouvrez les styles calculés d'un H1 et d'un paragraphe de corps de texte. Si la font-family est identique, une seule famille remplit toutes les fonctions.

  3. 3

    Comparer deux radius

    Mesurez le radius des coins d'un bouton et de votre plus grande carte. Des valeurs identiques signifient que le radius n'a pas été adapté à la taille de l'élément.

  4. 4

    Comparer votre premier et dernier écran

    Placez le tout premier écran créé à côté du plus récent. Listez chaque valeur divergente : cette liste représente votre dérive design.

  5. 5

    Déterminer où réside la source de vérité

    Pour chaque divergence, demandez-vous si la valeur correcte existe dans un support durable. Si la réponse honnête est « dans le prompt que j'ai écrit en mars », c'est là qu'il faut intervenir.

S'affranchir totalement des quatre réglages par défaut

Chaque kit Identity Forge est livré avec un ensemble complet de tokens — neutres accordés à l'accent, véritable appairage de polices, radius adapté par élément — ainsi que le fichier DESIGN.md que votre agent lit avant d'écrire le markup. Les kits gratuits ne nécessitent aucun compte.

S'agit-il d'un problème lié au modèle ou aux outils qui l'entourent ?

Principalement aux outils. Un même modèle produit une UI distinctive lorsqu'on lui fournit un ensemble de tokens et un brief, et une UI générique lorsqu'il n'a ni l'un ni l'autre. C'est la matière première qui varie, pas la capacité du modèle.

Le changement de la couleur d'accentuation règle-t-il le problème ?

Non, et c'est l'erreur la plus courante qui fait perdre un après-midi. Changer l'accent tout en conservant les neutres par défaut, une seule famille typographique et un rayon uniforme produit la même page dans une teinte différente. La typographie et la structure portent davantage l'identité que la couleur d'accent.

Puis-je simplement demander à l'agent d'éviter Inter et zinc ?

Pour une seule session, oui. L'instruction réside dans le contexte, elle se dégrade donc à mesure que la conversation s'allonge et disparaît complètement lors de l'ouverture d'une nouvelle session. Un fichier dans le repo n'a pas ce défaut.

Est-ce shadcn/ui le problème ?

Non. shadcn propose des valeurs par défaut cohérentes précisément pour permettre de démarrer sans tout décider, et sa couche de thémisation est ce qui rend la correction simple. Le problème est que ces valeurs par défaut sont traitées comme un résultat final plutôt que comme un point de départ.

Combien d'écrans avant que le drift ne devienne visible ?

Dans nos propres tests, cela apparaît vers le cinquième ou sixième écran d'une session continue, et bien plus tôt si vous changez d'outil en cours de route. Il n'y a pas de nombre fixe : cela dépend de la longueur de la conversation, pas du nombre d'écrans.