2026

4. Mai 2026

Fünf Modelle, ein React-Stack: Warum jedes LLM dieselbe App baut

Claude, GPT, Gemini, DeepSeek, Qwen, v0, Lovable, Bolt. Frag eines davon, eine React-App zu bauen, und du bekommst dieselbe Antwort: Next.js oder Vite, TypeScript, Tailwind, shadcn/ui. Eine Bestandsaufnahme der Konvergenz, warum sie passiert, was wir verlieren und wie du das Modell wieder in deine Richtung lenkst.

S
Sascha Becker
Author

17 Min. Lesezeit

Fünf Modelle, ein React-Stack: Warum jedes LLM dieselbe App baut

Frag irgendein aktuelles Top-Modell, "bau mir eine React-App", ohne weiteren Kontext zu liefern, und die Antwort ist im Wesentlichen immer dieselbe: React mit Next.js oder Vite, TypeScript, Tailwind CSS, shadcn/ui, TanStack Query und Zustand. Das Modell variiert. Der Output kaum.

Das ist kein Zufall, und es ist keine Verschwörung. Es ist das vorhersehbare Ergebnis aus dominanten Trainingsdaten, Token-Ökonomie und der Art, wie moderne Coding-Agents geprägt werden. Die Konvergenz ist real, sie ist messbar, und sie hat Konsequenzen, die ernst zu nehmen sind.

Die Konvergenz auf einen Blick

Modell / ToolFrontendStylingKomponentenState / DatenBackend-Tendenz
Claude (Anthropic)Next.js / ViteTailwind v4shadcn/uiZustand + TanStack Q.Vercel, Supabase
GPT / Codex (OpenAI)Next.jsTailwind od. CSSgemischtspiegelt Projektflexibel
Gemini (Google)ViteTailwindgemischtspiegelt ProjektFirebase, Node
DeepSeekNext.jsTailwindshadcn/uiTanStack Queryflexibel
Qwen CoderNext.jsTailwindshadcn/uiTanStack Queryflexibel
v0 (Vercel)Next.jsTailwindshadcn/uiTanStack QueryVercel, Supabase
LovableViteTailwindshadcn/uiTanStack QuerySupabase
Bolt (StackBlitz)variiertTailwindgemischtspiegelt ProjektSupabase

Acht Zeilen. Eine UI-Schicht. Die Styling-Spalte ist eine einzige Antwort. Die Komponenten-Spalte ist fast eine einzige Antwort.

Der Default-Stack, nach Modell

Claude (Anthropic)

Das meinungsfreudigste der Frontier-Modelle. Anthropics eigenes web-artifacts-builder Skill bringt Claude explizit bei, "React, Tailwind CSS und shadcn/ui" für Artefakte zu nutzen1, und die shadcn-Organisation veröffentlicht ein offizielles Claude Skill, das shadcn info --json ausführt, um Claude bei jedem Turn die Komponenten-Registry des Projekts zu liefern2. Das ist First-Party-Tooling, das Claude als primären Konsumenten behandelt.

Ohne explizites Designsystem im Prompt verfällt Claude in einen wiedererkennbaren Stil: abgerundete Ecken, Inter oder System-Sans, gedeckte Grautöne, ein blauer Primary-Button, Card-Layouts. Claudes eigene Marke nutzt warmes Terrakotta auf Creme. Die generierten UIs erben das nicht.

GPT / Codex (OpenAI)

Das am wenigsten dogmatische Modell der Gruppe. Die Codex-CLI-Doku macht AGENTS.md zum primären Mechanismus für Stack-Präferenzen. Es gibt keinen fest verdrahteten React-Default im Agent selbst. Ohne Projekt produziert GPT immer noch React + Tailwind, greift aber häufiger zu reinem CSS, CSS Modules oder styled-components als Claude, und beobachtete Outputs neigen zu älteren Mustern: Jest statt Vitest, Function Components, geschrieben wie 2022.

GPT spiegelt das Projekt. In einer Vue-Codebase schreibt es Vue. Der Default zeigt sich nur, wenn nichts da ist, das gespiegelt werden könnte.

Gemini (Google) und Antigravity

Die Doku zu Google AI Studios Build Mode nennt React als Default für die Client-Seite, mit einer Node.js-Laufzeit auf dem Server. Antigravity, Googles VS-Code-Fork für agentische Entwicklung, bringt Beispiel-Stacks rund um React + Vite + React Router DOM mit. Tailwind taucht in Antigravity-Templates häufig auf, aber nicht so universell wie in Claudes Outputs. Firebase als Backend ist eine stärkere Tendenz als shadcn als UI-Schicht.

DeepSeek und Qwen

Der interessante Fall, weil es Open-Weight-Modelle sind, die hauptsächlich von chinesischen Laboren trainiert werden. Sie konvergieren auf exakt dieselben Defaults: Next.js, TypeScript, Tailwind, shadcn/ui. DeepSeek Artifacts ist drumherum gebaut. Qwen 2.5 Coder produziert es. Die Überlappung der Trainingsdaten mit dem westlichen Open-Source-Ökosystem ist zu stark, um zu entkommen, selbst wenn Labor und Kultur anders sind.

Das ist der sauberste Beleg, dass der Stack eine Eigenschaft des Korpus ist, nicht eine Eigenschaft der Präferenzen einer einzelnen Firma.

v0 (Vercel), Lovable, Bolt

Die KI-Builder. v0 ist vollständig Stack-gesperrt: alles, was es generiert, nutzt React, Next.js, Tailwind und shadcn. Es gibt keinen Vue-Modus und keinen Plain-CSS-Modus. Lovable defaultet auf React + Vite + Tailwind + shadcn + Supabase. Bolt vermarktet sich als Multi-Framework, aber Templates und Demos lehnen sich in der Praxis an React + Tailwind an.

Diese Produkte defaulten nicht nur auf den Stack. Sie sind der Stack, als Produkt verpackt.

Warum diese Konvergenz passiert

Drei sich gegenseitig verstärkende Kräfte.

1. Token-Ökonomie bevorzugt Tailwind

LLMs lesen Tokens, keine Dateien. Tailwind-Utility-Klassen (flex, justify-center, p-4) sind atomare, häufige, vorhersagbare Tokens. Vergleiche das mit CSS-in-JS, wo das Modell einen Klassennamen wie .card-wrapper-inner erfinden, ihn aus JSX referenzieren und beides über Dateigrenzen hinweg konsistent halten muss.

Für ein token-vorhersagendes Modell ist Tailwind der Pfad des geringsten Widerstands:

  • Co-Lokation. JSX und Styling leben in einem Block. Weniger Querverweise im Kontextfenster.
  • Keine Namensgebung. Kein Risiko, einen Klassennamen zu halluzinieren, der nicht existiert.
  • Hohe Trainingsfrequenz. Tailwind-Klassen-Strings tauchen millionenfach in GitHub-Repos, Blogposts und Tutorials auf.

CSS Modules, BEM, vanilla-extract, styled-components, Panda CSS: alle valide, alle schwerer für ein LLM, über eine Generierung hinweg konsistent zu halten. Tailwind gewinnt nicht, weil es technisch überlegen ist, sondern weil es zu der Art passt, wie das Modell Information verarbeitet3.

2. shadcn/ui ist "Open Code", was genau das ist, was LLMs brauchen

Klassische Komponenten-Libraries (Material UI, Chakra, Mantine) werden als kompilierte Pakete ausgeliefert. Das Modell muss die Prop-API kennen, das Theme-System, die Slot-Patterns. Wenn die API zwischen Major-Versionen wechselt, werden Trainingsdaten veraltet.

shadcn/ui kehrt das um. Komponenten werden als reines JSX mit Tailwind-Klassen ins Projekt kopiert. Es gibt keine undurchsichtige Library, die memoriert werden muss. Das Modell liest den Code, modifiziert ihn, schickt ihn raus. shadcn veröffentlicht sogar einen MCP-Server und ein offizielles Claude Skill, damit der Agent in Echtzeit fragen kann: "Welche Komponenten sind in diesem Projekt installiert?" Das ist eine UX-Optimierung für LLM-Konsumenten, nicht für menschliche Entwickler.

3. Trainingsdaten-Dominanz potenziert sich

Der populärste React-Stack auf GitHub wird zum am häufigsten trainierten Stack. Der am häufigsten trainierte Stack wird zum Default-Output. Der Default-Output landet als neuer Code wieder auf GitHub. Künftige Modelle trainieren darauf. Der Kreis zieht sich enger.

Tailwind hat Anfang 2026 die 75 Millionen monatlichen Downloads geknackt. shadcn hat 60K GitHub-Sterne überschritten. Sobald ein Stack diese kritische Masse in Trainingsdaten erreicht, werden Alternativen statistisch begraben.

Das Monokultur-Schwungrad

Ein Messing-Schwungrad auf einer Werkbank, beleuchtet von einer einzelnen Lampe, dreht sich schnell genug, um glühende Code-Partikel ins Zentrum zu ziehen. Fünf kleinere Schwungräder stehen ungenutzt im Hintergrund, verstauben und sind moosbewachsen.
Ein Schwungrad zieht den ganzen Code ein. Die anderen setzen Moos an.

Das ist der Teil dieses Beitrags, der mehr zählt als der Rest. Die Konvergenz ist nicht bloß eine ästhetische Beschwerde oder ein "alter Mann schimpft auf die Wolken". Sie ist eine strukturelle Veränderung darin, wie sich die Web-Plattform weiterentwickelt, und die Dynamik ist auf eine Art selbstverstärkend, wie es vorherige Plattformwechsel nicht waren.

Da läuft ein Schwungrad, und mit jeder Drehung zieht es sich enger:

  1. Ein Stack wird populär. React + Tailwind + shadcn, in 2024-2025.
  2. GitHub füllt sich mit Beispielen dieses Stacks. Andere Stacks schrumpfen in relativer Trainingsmasse.
  3. LLMs trainieren auf dem Korpus und lernen den populären Stack überproportional gut.
  4. Entwickler shippen LLM-Output auf GitHub. Der populäre Stack ist jetzt noch stärker repräsentiert.
  5. Das nächste Modell trainiert auf einem Korpus, der noch stärker verzerrt ist als der vorherige.
  6. Goto 1, mit größerem Abstand pro Zyklus.

Vue, Svelte, Solid, Angular: das Trainingsmasse-Problem

Diese Frameworks sind nicht schlecht. Sie nehmen nicht in Qualität ab. Sie nehmen in Sichtbarkeit für LLMs ab, und das ist zunehmend dasselbe wie eine sinkende Adoption.

Ein neues Vue-3.5-Reaktivitäts-Feature kann mit perfekter Doku ausgeliefert werden. Wenn LLMs es nicht in ihren Trainingsdaten sehen, bekommt der durchschnittliche Vue-Entwickler beim Nutzen eines LLM React-gefärbtes Vue zurück. Das Feature könnte genauso gut nicht existieren.

Svelte 5 Runes sind ein wirklich neuartiges Reaktivitätsmodell. Sie tauchen in Trainingsdaten in einem Bruchteil der Häufigkeit von useState auf. Frag ein LLM "gib mir einen Counter in Svelte" und du bekommst oft Svelte-4-Patterns zurück, weil das der statistische Durchschnitt dessen ist, was es gelesen hat.

Angular hat einen großen Enterprise-Footprint, aber der öffentliche Open-Source-Korpus wird von React dominiert. LLMs spiegeln den öffentlichen Korpus, nicht die Enterprise-Realität.

Die Asymmetrie potenziert sich. Je mehr Entwickler LLMs als ersten Schritt nutzen, desto schlechter wird die praktische Erfahrung, Vue oder Svelte zu schreiben, selbst wenn das Framework selbst besser wird.

Versions-Lag ist jetzt permanent

Vor LLMs war Versions-Lag eine Funktion davon, wie schnell sich Doku und Tutorials verbreiteten. Eine Library konnte v2 ausliefern, und innerhalb eines Jahres holte das Ökosystem auf.

Nach LLMs ist Versions-Lag eine Funktion der Trainingskorpus-Zusammensetzung. Selbst ein 2026er Frontier-Modell, trainiert auf 2025er Daten, hat zehn Jahre useEffect + fetch gesehen und vielleicht zwei Jahre TanStack Query. Es hat ein Jahrzehnt manuelles useMemo gesehen und ein Jahr React Compiler. Der "moderne Weg" verliert den Beliebtheitswettbewerb innerhalb des Modells.

Einsteiger sehen die Speisekarte nie

Vor LLMs: "Wie baue ich eine Webapp?" lieferte tausende glaubwürdige Antworten. Ein Anfänger musste wählen, was schmerzhaft war, aber er begegnete zumindest der Wahl. Er lernte, dass Vue existiert. Er lernte, dass CSS-in-JS eine Debatte ist. Er entwickelte Geschmack.

Nach LLMs: das Modell wählt für dich, lautlos, ohne anzuerkennen, dass es gewählt hat. Ein Erstentwickler, der "bau mir eine Todo-App" eintippt, bekommt React + Tailwind + shadcn und erfährt nie, dass es einen anderen Weg gab. Er hat keine Wahl getroffen. Eine Wahl wurde für ihn getroffen und als die einzige Option präsentiert.

Das ist ein schlimmerer Fehlermodus als "Anfänger wählen den falschen Stack". Es ist "Anfänger wissen nicht, dass Stacks eine Kategorie sind". Die Hürde, Alternativen zu entdecken, erfordert jetzt Vorwissen darüber, dass Alternativen existieren, und das ist genau das Wissen, das ein Anfänger nicht hat.

Die "AI-Slop"-Ästhetik ist dasselbe Problem auf der Design-Ebene

Wenn ein Modell ohne Design-Vorgaben gelassen wird, produziert es einen wiedererkennbaren Look: abgerundete Ecken, Inter, gedeckte Grautöne, blauer Primary-Button, Card-Grid. Es ist kein schlechtes Design. Es ist unsichtbares Design. Jede KI-gebaute Landingpage 2026 sieht aus wie jede andere KI-gebaute Landingpage4.

Es ist derselbe Trainingsdaten-Bias-Mechanismus, angewandt auf Color-Tokens und Font-Stacks statt auf Imports. Marken-Differenzierung erfordert jetzt, dass du das Modell aktiv bekämpfst. Spezifität ist die einzige Verteidigung.

Was der Long Tail verliert

Die Frameworks, die eine Monokultur überleben, sind die mit starkem Corporate Backing oder aggressiven LLM-Era-Investments: shadcn veröffentlicht ein Claude Skill, Chakra veröffentlicht einen MCP-Server, Tailwind liefert eine llms.txt-Datei. Die Frameworks, die verlieren, sind die kleinen, meinungsfreudigen, eigensinnigen, die früher durch Mundpropaganda und persönlichen Geschmack Traktion bekamen.

Eine Zukunft, in der der Long Tail des Frontend-Toolings dünner wird, ist nicht ein effizienteres Web. Sie ist ein langweiligeres. Und der Preis dieser Verdünnung wird im Voraus gezahlt, von jedem Entwickler, der nie lernt, dass es andere Wege gab, ein UI zu bauen5.

Das Modell weg von seinen Defaults steuern

Einem Modell einmal im Chat zu sagen "nimm Vue" funktioniert für einen Prompt. Es über eine 200-Nachrichten-Session hinweg auf Vue zu halten, über neue Chats hinweg, über Teamkollegen hinweg, erfordert strukturelle Eingriffe. Hier ist die Eskalationsleiter, sortiert von billig und fragil zu stark und dauerhaft.

Stufe 1: Direktiven im Prompt

Wirksam für ein einzelnes Artefakt, fragil über eine Session. Nutze sie, wenn du noch kein Projekt hast.

  • Sei explizit, was NICHT genutzt werden soll. Negative Constraints sind stärker als positive. "Nutze Mantine, nutze nicht shadcn oder Tailwind" schlägt "Nutze Mantine".
  • Nenne die Version. "React 19.2 mit aktiviertem React Compiler" verhindert den Rückfall in React-17-Patterns, auf die das Modell mehr Trainingsmasse hat.
  • Spezifiziere den Import. "Importiere aus @mantine/core, nicht aus @mui/material" macht die Sache von Anfang an unmissverständlich.
  • Wiederhole das Constraint am Ende. Lange Prompts verwässern frühe Anweisungen. Ein abschließendes "Erinnerung: Mantine, kein Tailwind" wirkt gegen Attention-Decay.

Stufe 2: Projekt-Regelfiles

Das Format hängt vom Agent ab, aber das Muster ist identisch. Eine Markdown-Datei im Repo-Root, die der Agent automatisch bei jedem Turn liest.

AgentDateiname
Claude CodeCLAUDE.md
Codex / OpenAIAGENTS.md
Gemini CLIGEMINI.md oder AGENTS.md
Cursor.cursorrules oder .cursor/rules/*.mdc
AntigravityAGENTS.md plus GEMINI.md Overrides
Windsurf.windsurfrules

Was in diesen Dateien tatsächlich funktioniert:

  • Beginne mit dem Stack als Liste. "Stack: Vue 3.5, Pinia, UnoCSS, Vitest." Modelle scannen den Anfang der Datei zuerst.
  • Verbiete namentlich, nicht kategorisch. "Nutze nicht Tailwind, shadcn, Material UI oder Chakra" ist besser als "Nutze keine Default-UI-Library".
  • Pinne Import-Pfade und Snippet-Patterns. Zeig ein kanonisches Beispiel. Das Modell wird für den Rest der Session danach pattern-matchen.
  • Füge einen Abschnitt "häufige Fehler" hinzu. Dokumentiere die exakten Regressionen, die du gesehen hast. "Nutze nicht useState für Server-Daten; nutze Pinia-Stores." So trainierst du gegen Muskelgedächtnis.
  • Halte es kurz. Eine 2000-zeilige CLAUDE.md wird wegkomprimiert. Rund 150 Zeilen sind der Sweet Spot.

Stufe 3: Beispiele in der Codebase

Modelle stützen sich stärker auf das, was sie im Projekt lesen, als auf das, was in ihrem Training steht. Wenn dein Repo fünf Vue-SFCs enthält, wird die nächste Datei eine Vue-SFC. Wenn es fünf React-+-Tailwind-Komponenten enthält und du sagst, schreib Vue, halluziniert es etwas auf halbem Weg dazwischen.

  • Säe das Projekt mit dem kanonischen Pattern, bevor du den Agent loslässt. Schreib die erste Komponente von Hand. Referenziere sie.
  • Lösche oder verschiebe Legacy-Code, der dem Ziel-Stack widerspricht. Ein Modell, das tailwind.config.ts findet, geht davon aus, dass Tailwind erlaubt ist, selbst wenn CLAUDE.md das verbietet.
  • Pinne die package.json. Entferne ungenutzte Dependencies. Die Dependency-Liste ist ein stärkeres Signal als Prosa-Anweisungen.

Stufe 4: Skills und MCP-Server

Der schwerste Hammer. Statt dem Modell zu sagen, was es tun soll, gibst du ihm ein Tool, das einschränkt, wie es das tun kann.

  • Skills (Claude). Ein Skill kann das Default-Verhalten für eine Klasse von Aufgaben überschreiben. Das shadcn-Skill ist das Paradebeispiel. Die umgekehrte Nutzung: schreib ein Skill, das deine Komponenten-Library erzwingt und shadcn-Imports ablehnt.
  • MCP-Server. Material UI liefert einen offiziellen MCP-Server, und Chakra UI, Mantine und andere ziehen nach. Sie versorgen den Agent mit der Live-Komponenten-Liste, Prop-Typen und Beispiel-Verwendungen. Das umgeht die Trainingsdaten komplett. Was auch immer das Modell glaubt, was Material UI sei, der MCP-Server ist die Wahrheit.
  • Eigene Registries (shadcn-Stil). Wenn du dem vanilla shadcn entkommen willst, aber im React-+-Tailwind-Universum bleibst, veröffentliche eine shadcn-kompatible Registry deiner Komponenten. Die CLI installiert sie mit npx shadcn add <deine-url>. Das Modell behandelt sie als First-Class.

Stufe 5: Tooling-Leitplanken

Das Modell rutscht trotzdem aus. Fang es an der Grenze ab.

  • ESLint mit no-restricted-imports. Verbiete tailwindcss, @radix-ui/*, was auch immer du nicht willst. Der Agent sieht den Fehler in der nächsten Loop-Iteration und korrigiert.
  • Pre-Commit-Hooks. Prettier mit projektspezifischer Config. Ein Custom-Check, der bei verbotenen Klassennamen scheitert.
  • CI als finaler Filter. Ein Build, der scheitert, wenn verbotene Patterns auftauchen, sorgt dafür, dass schlechter Code nie in main landet. Für agentische Loops ist das das wirksamste Signal, weil der Agent das Failure liest und sich selbst korrigiert.

Ein praktischer Eskalationspfad

Für die meisten Teams, die vom Default-Stack wegwollen, ist die Reihenfolge:

  1. Schreib eine knackige CLAUDE.md oder AGENTS.md (Stufe 2). 80% des Werts, 20% des Aufwands.
  2. Säe von Hand zwei oder drei Referenzkomponenten im kanonischen Pattern (Stufe 3).
  3. Füge no-restricted-imports für die Libraries hinzu, denen du entkommst (Stufe 5).
  4. Greif zu Skills oder MCP (Stufe 4) nur, wenn der Agent nach 1 bis 3 immer noch driftet.

Das Ziel ist nicht, das Modell beim ersten Versuch perfekt zu machen. Das Ziel ist, jeden Drift sichtbar und korrigierbar zu machen.

Die ehrliche Schlussfolgerung

Der Default-Stack existiert aus echten Gründen. Tailwind passt wirklich gut zur LLM-Token-Ökonomie. shadcn passt wirklich gut zu LLM-getriebenem Editing. React hat den Markt wirklich gewonnen. Nichts davon ist falsch.

Das Problem ist nicht der Stack. Das Problem ist, dass die Wahl von genau den Systemen eingefroren wurde, die den Stack wertvoll gemacht haben. Jeder Default, den wir akzeptieren, ist eine Stimme für den Korpus, auf dem zukünftige Modelle trainieren werden. Jedes Vue-Projekt, das wir aufgeben, weil "die KI in React besser ist", macht die KI im nächsten Jahr noch besser in React.

Wenn du Pluralismus in deinen Werkzeugen willst, musst du etwas dafür ausgeben, ihn zu erhalten. Schreib die erste Svelte-Komponente von Hand. Konfiguriere die AGENTS.md so, dass sie Tailwind verbietet. Veröffentliche deine Komponenten-Registry. Schieb gegen den Pfad des geringsten Widerstands, bewusst, in den Projekten, in denen es zählt.

Die Alternative ist ein Web, das überall gleich aussieht, gleich geschrieben, vom selben Modell, für immer. Das ist ein schlechteres Ergebnis als jede einzelne Technologie-Entscheidung.

Quellen


S
Geschrieben von
Sascha Becker
Weitere Artikel