Die Gleichförmigkeit wird geerbt, nicht erfunden
Es ist verlockend, dies als Geschmacksproblem zu beschreiben – das Modell hat Milliarden von Landingpages gesehen und regrediert zum Mittelwert. Das ist ein Teil davon, aber nicht der Mechanismus, und es führt Nutzer zu der falschen Lösung (bessere Prompts). Der Mechanismus ist langweiliger und wesentlich einfacher zu beheben: Ein Coding-Agent, der eine UI bauen soll, greift auf eine Komponenten-Bibliothek zurück, und diese Bibliothek liefert Defaults. Diese Defaults wurden so entworfen, dass sie niemanden stören, was genau sie so universell macht.
Fragen Sie fünf verschiedene Tools – Claude Code, Cursor, v0, Lovable, Bolt – nach einem Dashboard, ohne weitere Anweisungen. Sie erhalten fünf Layouts und eine einzige visuelle Identität. Sie kopieren sich nicht gegenseitig. Sie tun unabhängig voneinander das Sinnvolle mit demselben Ausgangsmaterial.
Die vier Erkennungsmerkmale und ihre Herkunft
1. Die Neutral-Ramp
Das Standard-Theme von shadcn/ui basiert auf der zinc-Skala von Tailwind, wobei slate und gray häufige Alternativen sind. Es ist ein kühles, leicht bläuliches Grau. Wenn man es einmal bemerkt hat, sieht man es überall: Es ist der Hintergrund der meisten KI-generierten Produkte der letzten zwei Jahre. Es ist ein wirklich gutes Neutral, und genau das ist das Problem – es ist gut genug, dass es niemand ersetzt.
Das verräterische Element ist nicht das Grau an sich, sondern seine *Uniformität*. Eine gestaltete Oberfläche neigt ihre Neutraltöne meist leicht in Richtung der Markenfarbe, sodass die Grautöne mit dem Akzent korrespondieren. Eine Default-Oberfläche hat eine reine Ramp neben einem nicht korrespondierenden Akzent; die beiden gehören nie wirklich zusammen.
2. Inter oder etwas, das nicht von ihr zu unterscheiden ist
Inter ist eine exzellente UI-Schriftart, weshalb sie überall präsent ist und mittlerweile eher als Default denn als bewusste Entscheidung wahrgenommen wird. Wenn es nicht explizit Inter ist, dann ist es der font-sans System-Stack, der auf den meisten Maschinen zu einer nahezu identischen Grotesk führt. In jedem Fall nutzt die Seite eine einzige Schriftfamilie für alles: Headlines, Fließtext, Labels, Zahlen.
Dass nur eine Familie genutzt wird, ist das eigentliche Merkmal, unabhängig davon, welche es ist. Ein gestaltetes System kombiniert fast immer – eine charakterstarke Display-Schrift für Headlines mit einer Arbeitsschrift für den Fließtext oder zumindest einen bewussten Kontrast in Gewicht und Breite innerhalb einer Superfamilie. Seiten mit nur einer Schriftfamilie wirken flach, selbst wenn jede andere Entscheidung fundiert ist.
3. `0.5rem` für alles
Der Standard---radius von shadcn ist 0.5rem, und dieser setzt sich in Buttons, Inputs, Cards, Dialogs und Popovers gleichermaßen fort. Ein einheitlicher Radius über alle Elementgrößen hinweg entspricht nicht dem Verhalten gestalteter Systeme: Ein 44px Button und eine 400px Card mit identischem Eckenradius lassen die Card weich und den Button klumpig wirken, da der Radius relativ zum Element wahrgenommen wird.
:root {
/* The line most AI-built projects never touch */
--radius: 0.5rem;
}4. Das Drei-Card-Grid
Hero-Sektion, dann drei gleich große Cards, dann ein Testimonial-Band, dann ein CTA. Dies ist eher eine Gravitation der Trainingsdaten als ein Konfigurations-Default – es ist die am häufigsten vorkommende Struktur für Marketing-Seiten im Web. Daher produziert das Modell diese Form, wenn das Briefing nichts anderes impliziert. Es ist nicht falsch. Es ist einfach das Layout, das keinerlei Information über Ihr Produkt vermittelt.
Warum besseres Prompting nicht funktioniert
Die gängige Reaktion ist, einen längeren Prompt zu schreiben: *nutze eine warme Palette, kombiniere eine Serif-Display-Schrift mit einer Grotesk für den Body, variiere den Radius.* Das funktioniert. Es funktioniert für einen Screen und meistens auch für den zweiten und dritten.
Dann baut es sich ab, und zwar auf eine spezifische Weise. Der Agent ignoriert Ihre Anweisung nicht – er führt ein zunehmend langes Gespräch, in dem Ihr Styling-Absatz mit allem konkurriert, was seitdem folgte. Beim fünften Screen erinnert er sich an *warm*, hat aber die Hex-Werte vergessen und approximiert daher. Die Approximation ist ein leicht anderes Warm. Screen sechs approximiert die Approximation.
Drift bedeutet nicht, dass der Agent Ihre Anweisung vergisst. Es bedeutet, dass der Agent sie sechsmal hintereinander nur annähernd erinnert.
In Fachkreisen nennt man dies *Design Drift*. Das ist der Grund, warum eine „Vibe-coded“ App, die am Freitag noch scharf aussah, am Montag wirkt, als wäre sie von einem Komitee zusammengestellt worden. Die Anweisung existierte im Gespräch, und Gespräche verfallen.
Der Test, um die beiden Fehlermodi zu unterscheiden: Öffnen Sie Screen eins und Screen acht nebeneinander. Wenn sie sich bei Abständen und Farben uneinig sind, aber jeder für sich intern konsistent ist, ist das Drift. Wenn beide intern inkonsistent sind, wurde das System nie spezifiziert.
Die Lösung ist eine Datei, die der Agent erneut liest, kein Absatz, an den er sich erinnert
Ein Designsystem stoppt Drift aus demselben Grund, warum es dies in menschlichen Teams tut: Die Werte stehen an einem dauerhaften Ort und werden konsultiert, anstatt im Kopf einer Person gespeichert zu sein. Für einen Coding-Agenten ist dieser Ort eine DESIGN.md plus ein Token-Set im Repo. Beides wird zu Beginn jeder Session neu gelesen, sodass Screen zwanzig denselben --primary-Wert auflöst wie Screen eins – nicht einen ähnlichen.
| Im Prompt | In Tokens + DESIGN.md | |
|---|---|---|
| Übersteht eine neue Session | Nein — Kontext wird zurückgesetzt | Ja — wird erneut aus dem Repo gelesen |
| Präzision nach 10 Screens | Ungefähr („warm-ish“) | Immer exakter Hex-Wert |
| In einem PR prüfbar | Nein | Ja — es ist eine Datei, die diffbar ist |
| Funktioniert toolübergreifend | Pro Tool neu schreiben | Dieselbe Datei für Claude Code, Cursor, v0 |
Dies ist das Hauptargument dafür, einem Agenten ein echtes System zu geben, statt nur eine bessere Beschreibung eines solchen. Die semantische Token-Ebene ist wichtiger als die Palette: --primary und --muted-foreground überstehen ein Redesign, während blue-600, verteilt im Markup, dies nicht tut.
Token specimen · real values
Terrain Vivant
Live renderTerrain Vivant's actual tokens — the same values its exports use.
Color tokens
Terrain Vivant
Core
background
H 131 · C79, 0, 64, 38
foreground
H 120 · C100, 0, 100, 92
card
H 235 · C68, 62, 0, 47
muted
H 130 · C83, 0, 69, 47
border
H 134 · C89, 0, 69, 56
Brand
primary
H 235 · C68, 62, 0, 47
primary-fg
H 0 · C0, 0, 0, 0
secondary
H 215 · C81, 47, 0, 45
accent
H 209 · C95, 46, 0, 33
ring
H 235 · C68, 62, 0, 47
Semantic
destructive
H 0 · C0, 85, 85, 27
destructive-fg
H 0 · C0, 0, 0, 0
success
H 132 · C100, 0, 79, 70
warning
H 23 · C0, 56, 90, 43
muted-fg
H 0 · C0, 0, 0, 100
Charts
chart-1
H 235 · C68, 62, 0, 47
chart-2
H 209 · C95, 46, 0, 33
chart-3
H 210 · C92, 46, 0, 39
chart-4
H 120 · C100, 0, 100, 92
chart-5
H 235 · C57, 51, 0, 46
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
Aa
Space Mono · Body
ABCDEFGHIJKLM NOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & @ # % →
Entkommen diejenigen, die es schriftlich fixieren, tatsächlich den Defaults?
Meistens nicht, und das ist die unangenehmere Erkenntnis. Wir haben 299 öffentliche DESIGN.md-Dateien von GitHub analysiert — genau die Dateien, deren einzige Aufgabe es ist, dies zu verhindern — und deren Inhalte gemessen.
Von den 72 Dateien, die ein visuelles Designsystem beschreiben, spezifizieren 21 % eine Radius-Skala und 26 % die Elevation. Das sind zwei der oben genannten Merkmale, die von drei Vierteln der Personen, die sich explizit an das Schreiben eines Design-Kontrakts gesetzt haben, auf den Defaults belassen wurden. 69 % lassen den Dark Mode komplett weg, sodass das gesamte zweite Theme der Erfindung des Agenten überlassen wird. Und 86 % benennen Farben nach dem Farbton oder listen reine Hex-Werte auf, anstatt semantische Rollen zu verwenden. Das bedeutet, dass die Datei auf keine Komponente angewendet werden kann, die sie nicht explizit beschrieben hat.
Die Defaults überleben den Versuch, sie zu ersetzen
Typografie wird in 83 % der Dateien abgedeckt und Farben in 67 %, da dies die zwei Dinge sind, die Menschen primär mit „Design“ assoziieren. Radius, Elevation und Dark Mode bleiben stillschweigend generisch. Die vier Merkmale bleiben bestehen, nicht weil es niemand versucht hätte, sondern weil die meisten Versuche nur die sichtbare Hälfte abdecken.
Es gibt eine zweite Ebene desselben Problems: 54 % der Dateien enthalten mindestens ein vages Adjektiv als Ersatz für einen Wert, angeführt von *clean* (39 %) und *modern* (36 %). Ein Adjektiv ersetzt keinen Default. Es fordert den Agenten auf, selbst einen auszuwählen.
Ein Fünf-Minuten-Audit
- 1
Hintergrund prüfen
Ermitteln Sie den Hex-Wert Ihres Seitenhintergrunds. Wenn es
#09090b,#18181b,#0f172aoder#020617ist, befinden Sie sich auf einer unberührten Zinc- oder Slate-Rampe. - 2
Schriftfamilien zählen
Öffnen Sie die berechneten Styles (computed styles) einer H1 und eines Body-Absatzes. Die gleiche
font-familyan beiden Stellen bedeutet, dass eine einzige Familie jede Aufgabe übernimmt. - 3
Zwei Radien vergleichen
Messen Sie den Eckenradius eines Buttons und Ihrer größten Card. Identische Werte bedeuten, dass der Radius nicht an die Elementgröße skaliert wurde.
- 4
Ersten und letzten Screen diffen
Platzieren Sie den ersten erstellten Screen neben den aktuellsten. Listen Sie jeden Wert auf, der abweicht — diese Liste ist Ihr Drift.
- 5
Festlegen, wo die Antwort liegt
Fragen Sie bei jeder Abweichung, ob der korrekte Wert irgendwo dauerhaft existiert. Wenn die ehrliche Antwort lautet: „In dem Prompt, den ich im März geschrieben habe“, dann ist genau das der Punkt, der behoben werden muss.
Die vier Defaults komplett überspringen
Jedes Identity Forge Kit wird mit einem vollständigen Token-Satz ausgeliefert — Neutraltöne, abgestimmt auf den Akzent, ein echtes Font-Pairing, pro Element skalierter Radius — plus der DESIGN.md, die Ihr Agent liest, bevor er Markup schreibt. Kostenlose Kits erfordern kein Konto.
Liegt das Problem am Modell oder an den Tools drumherum?
Überwiegend an den Tools. Dasselbe Modell erzeugt eine markante UI, wenn ihm ein Token-Set und ein Briefing übergeben werden, und eine generische UI, wenn beides fehlt. Es variiert das Ausgangsmaterial, nicht die Fähigkeit.
Hilft es, die Akzentfarbe zu ändern?
Nein, und dies ist die häufigste Art, einen Nachmittag zu verschwenden. Das Austauschen der Akzentfarbe bei gleichzeitiger Beibehaltung der Standard-Neutraltöne, einer einzigen Schriftfamilie und eines einheitlichen Radius erzeugt dieselbe Seite in einem anderen Farbton. Typografie und Struktur tragen mehr zur Identität bei als die Akzentfarbe.
Kann ich dem Agent einfach sagen, dass er Inter und Zinc vermeiden soll?
Für eine einzelne Session ja. Die Anweisung befindet sich im Kontext, degradiert also, je länger die Konversation wird, und verschwindet vollständig, wenn eine neue Session geöffnet wird. Eine Datei im Repo besitzt diese Eigenschaft nicht.
Ist shadcn/ui das Problem?
Nein. shadcn liefert sinnvolle Standardwerte aus, damit man starten kann, ohne alles im Voraus entscheiden zu müssen, und die Theming-Layer macht die Korrektur erst einfach. Das Problem ist, dass die Standardwerte als fertiges Ergebnis statt als Ausgangspunkt behandelt werden.
Nach wie vielen Screens wird Drift sichtbar?
In unseren eigenen Tests tritt dies etwa beim fünften oder sechsten Screen einer kontinuierlichen Session auf, und wesentlich früher, wenn zwischendurch die Tools gewechselt werden. Es gibt keine feste Zahl – es hängt von der Länge der Konversation ab, nicht von der Anzahl der Screens.