<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chaos Wang</title>
    <description>The latest articles on DEV Community by Chaos Wang (@voltwake).</description>
    <link>https://dev.to/voltwake</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4089235%2Fdec84972-b00d-41b6-93e9-9084697a0c7d.jpg</url>
      <title>DEV Community: Chaos Wang</title>
      <link>https://dev.to/voltwake</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/voltwake"/>
    <language>en</language>
    <item>
      <title>Why AI-generated design all looks the same</title>
      <dc:creator>Chaos Wang</dc:creator>
      <pubDate>Sat, 22 Aug 2026 06:25:46 +0000</pubDate>
      <link>https://dev.to/voltwake/why-ai-generated-design-all-looks-the-same-3bho</link>
      <guid>https://dev.to/voltwake/why-ai-generated-design-all-looks-the-same-3bho</guid>
      <description>&lt;p&gt;If everything your AI produces looks vaguely the same — clean, competent, and completely forgettable — you are looking at AI slop. It happens for a structural reason, and there is a structural fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is AI slop?
&lt;/h2&gt;

&lt;p&gt;AI slop is the generic, average-looking output that AI tools produce by default — design that is technically fine but has no point of view. In a design context it shows up as the same soft gradients, the same rounded cards, the same purple-to-blue hero, the same safe sans-serif, on site after site and deck after deck.&lt;/p&gt;

&lt;p&gt;The word 'slop' is doing real work: it names the feeling that the output was generated rather than designed. Nothing is wrong with any single element. The problem is that the whole thing is a statistical average — and averages, by definition, belong to no one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI-generated design looks generic
&lt;/h2&gt;

&lt;p&gt;A model trained on millions of designs learns the center of that distribution, not its edges. Ask it for 'a modern, clean, beautiful landing page' and you are asking for the most probable design — which is, almost by definition, the most average one. Researchers call this homogenization: as more people lean on the same models, creative output converges toward a shared mean.&lt;/p&gt;

&lt;p&gt;Generic input compounds the effect. Adjectives like 'modern', 'clean', 'professional', and 'minimal' do not point anywhere specific — every style in the training data claims them — so the model falls back on its default aesthetic. The more open the request, the more average the result.&lt;/p&gt;

&lt;p&gt;This is not a bug that a future model fixes. A model with no instruction to be specific will always reach for the center. Distinctiveness is information you have to add from the outside.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why better prompts don't fix it
&lt;/h2&gt;

&lt;p&gt;Prompting helps at the margin. You can hand the model a reference, name a constraint, or paste an example, and the next output will be a little less generic. But the model still has no internal taste to anchor to — between your instructions it drifts back toward its average, and consistency across many screens collapses.&lt;/p&gt;

&lt;p&gt;You cannot prompt your way into a specific aesthetic the model does not hold. 'Make it look like a high-end fintech product' is still an adjective cluster; ten people will get ten different interpretations, and the same person will get a different one tomorrow. To get a specific look reliably, the specificity has to live outside the prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: give your AI one real design style
&lt;/h2&gt;

&lt;p&gt;The cure for an average is a commitment. Instead of letting the AI blend everything, constrain it to one specific, real, documented design style — a movement or a brand that already has a point of view and a set of rules. Bauhaus has rules. Swiss style has rules. Memphis has rules. A real style forces non-average choices, because it was built around a stance, not around being inoffensive.&lt;/p&gt;

&lt;p&gt;Crucially, the style has to arrive as rules the model can apply — an actual palette, type scale, spacing system, and component logic — not as an adjective. 'Use Bauhaus' is still vague; the primary-color palette, the hard-offset shadows, the strict grid, and the zero-ornament principle are not. When the AI is following a defined system, it is no longer averaging — it is executing.&lt;/p&gt;

&lt;p&gt;This is exactly the gap a curated style library fills. Curio packages real design styles as specs an AI can read and apply directly, so the distinctiveness is supplied from the outside and your AI stops reaching for the mean.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to beat AI slop in practice
&lt;/h2&gt;

&lt;p&gt;Pick a style with a real identity, not an adjective. 'Editorial Swiss grid' or 'Memphis' gives the model something to execute; 'modern and clean' does not.&lt;/p&gt;

&lt;p&gt;Give the AI the style's actual rules — colors, type, spacing, shape language — rather than describing the vibe. Specifics are what survive the gap between prompts.&lt;/p&gt;

&lt;p&gt;Commit to one style and do not blend. Slop often comes from averaging two or three influences; a single committed system reads as intentional. The whole point is a point of view.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is 'AI slop' just an insult, or a real phenomenon?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both the term and the effect are real. 'AI slop' is informal, but it names a measurable tendency — homogenization, the convergence of AI output toward a statistical average. It is a structural property of how models generalize, not a temporary quality problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Won't a more detailed prompt fix the generic look?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only at the margin. A detailed prompt nudges one output, but the model still has no taste to hold between requests, so it drifts back toward its average and consistency breaks down. A concrete, reusable style spec fixes the look reliably; a prompt does not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does using a named style make everything look derivative?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No — a real style is a grammar, not a template. It gives the AI consistent rules to compose with, the way a typeface or a grid does. Distinctiveness comes from committing to a point of view; derivative work comes from averaging several without committing to any.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://designbycurio.com/learn/why-ai-design-looks-generic" rel="noopener noreferrer"&gt;designbycurio.com&lt;/a&gt;. Curio is a design style library for AI agents — 1,000+ real design styles as machine-readable specs your AI can actually follow. If you want the practical follow-up, see &lt;a href="https://designbycurio.com/learn/give-your-ai-design-taste" rel="noopener noreferrer"&gt;How to give your AI design taste&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Your AI doesn't understand design. So I gave it a library it can read.</title>
      <dc:creator>Chaos Wang</dc:creator>
      <pubDate>Sat, 22 Aug 2026 06:18:47 +0000</pubDate>
      <link>https://dev.to/voltwake/your-ai-doesnt-understand-design-so-i-gave-it-a-library-it-can-read-5cg0</link>
      <guid>https://dev.to/voltwake/your-ai-doesnt-understand-design-so-i-gave-it-a-library-it-can-read-5cg0</guid>
      <description>&lt;p&gt;Ask any LLM to "make this landing page look like a high-end Swiss design studio" and you'll get something that &lt;em&gt;gestures&lt;/em&gt; at the idea — a sans-serif font, some whitespace, maybe a red accent because it half-remembers Müller-Brockmann. It looks AI-generated because it is. The model has read a billion words &lt;em&gt;about&lt;/em&gt; design but has no grounded, reusable representation of what "Swiss International Style" actually specifies: the exact grid, the type scale, the spacing ramp, the rules for what you must &lt;em&gt;not&lt;/em&gt; do.&lt;/p&gt;

&lt;p&gt;That gap is the whole problem. Models are great at language and bad at design systems, because a design system isn't language — it's a set of constrained values plus the discipline to apply them consistently. So I built the missing piece: a library of real design styles, turned into something a machine can actually consume.&lt;/p&gt;

&lt;p&gt;It's called &lt;a href="https://designbycurio.com" rel="noopener noreferrer"&gt;Curio&lt;/a&gt;. This post is about the part I think is interesting to other builders: &lt;strong&gt;making design machine-readable, and publishing the catalog for agents instead of for humans.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A design style is just tokens + rules
&lt;/h2&gt;

&lt;p&gt;The insight is boring and that's why it works. Pick any coherent visual language — Bauhaus, Memphis, the Edo woodblock palette, Stripe's product aesthetic — and you can decompose it into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tokens&lt;/strong&gt;: color families, type families and scale, spacing ramp, radii, shadow/elevation, motion timing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Components&lt;/strong&gt;: how a button, card, input, nav actually look in &lt;em&gt;this&lt;/em&gt; language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rules&lt;/strong&gt;: the "always" and the "never." (Swiss: never center body text, never more than two weights. Memphis: never subtle.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once a style is expressed that way, an AI doesn't have to &lt;em&gt;imagine&lt;/em&gt; the look. It interpolates within a fixed, internally-consistent set of values. The output stops looking like a guess because it isn't one. Each style in Curio is packaged exactly like this — tokens, component specs, and an explicit "avoid" list — as a DESIGN.md file — markdown with YAML frontmatter — that a model can read in one shot (&lt;a href="https://designbycurio.com/learn/what-is-design-md" rel="noopener noreferrer"&gt;what is DESIGN.md?&lt;/a&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# excerpt of a design package an agent consumes&lt;/span&gt;
&lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Swiss International Style&lt;/span&gt;
  &lt;span class="na"&gt;isDark&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ink&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;hex&amp;gt;"&lt;/span&gt;
  &lt;span class="na"&gt;paper&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;hex&amp;gt;"&lt;/span&gt;
  &lt;span class="na"&gt;accent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;hex&amp;gt;"&lt;/span&gt;   &lt;span class="c1"&gt;# values intentionally omitted here&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;family&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Helvetica&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Neue,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Inter,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sans-serif"&lt;/span&gt;
  &lt;span class="na"&gt;scale&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;&amp;lt;px&amp;gt;&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;&amp;lt;px&amp;gt;&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;&amp;lt;px&amp;gt;&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;…&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;   &lt;span class="c1"&gt;# 7-step modular scale&lt;/span&gt;
&lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;always&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;strict&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;baseline&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;grid"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;flush-left,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ragged-right&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;body"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;never&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;centered&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;paragraphs"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;more&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;than&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;two&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;weights"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;decorative&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;type"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The part I didn't expect to care about: publishing for agents
&lt;/h2&gt;

&lt;p&gt;Here's the design decision I keep getting questions about. Curio's primary user isn't a person browsing a gallery — it's the &lt;strong&gt;agent&lt;/strong&gt; acting on a person's behalf. When someone tells their assistant "design my deck like a 1980s arcade," the agent should be able to &lt;em&gt;discover&lt;/em&gt; that a matching style exists and &lt;em&gt;fetch&lt;/em&gt; its tokens, without a human in the loop.&lt;/p&gt;

&lt;p&gt;So the catalog is published the way you'd publish for a crawler that thinks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;a href="https://designbycurio.com/llms.txt" rel="noopener noreferrer"&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/a&gt; at the root — the &lt;a href="https://llmstxt.org" rel="noopener noreferrer"&gt;llmstxt.org&lt;/a&gt; convention — that tells a model what the site is and how to apply a style in four steps.&lt;/li&gt;
&lt;li&gt;An &lt;a href="https://designbycurio.com/llms-full.txt" rel="noopener noreferrer"&gt;&lt;code&gt;llms-full.txt&lt;/code&gt;&lt;/a&gt; with one line per style: name, blurb, URL.&lt;/li&gt;
&lt;li&gt;An open &lt;code&gt;index.json&lt;/code&gt; — the entire catalog as structured data (id, name, tags, color family, era, region, usage), so an agent can filter "give me dark, East-Asian, editorial" without scraping HTML.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This costs almost nothing to maintain (it's generated from the same source the site is built from) and it changes who the product is &lt;em&gt;for&lt;/em&gt;. A human-first directory makes agents scrape and guess. An agent-first directory just answers. If you're building anything an LLM is supposed to consume, I'd push the &lt;code&gt;llms.txt&lt;/code&gt; + open-JSON pattern hard — it's the cheapest "API" you'll ever ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is also an SEO/discovery bet
&lt;/h2&gt;

&lt;p&gt;There's a second reason to publish structured, citable pages: AI search. When someone asks Perplexity or ChatGPT "where do I find design tokens for a Bauhaus look," the answer comes from indexed, structured pages — not from a JS app that renders an empty shell. Every Curio style has a server-rendered page with the spec in the HTML, schema markup, and a stable URL. The same discipline that makes a page good for Googlebot makes it good for an AI engine citing sources. Designing for "the crawler is now a model" turns out to be the same checklist, just with the bar raised.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it's at
&lt;/h2&gt;

&lt;p&gt;Curio has 1,000+ styles right now and grows weekly. Browsing and using it is free; there's a Pro tier for the full set. But honestly, the reason I wrote this is the pattern, not the pitch: &lt;strong&gt;treat design as data, and publish your catalog for the agent, not just the human.&lt;/strong&gt; If you try the &lt;code&gt;llms.txt&lt;/code&gt; approach on your own project I'd love to compare notes — and if the "why does AI design all look the same" problem is your itch too, I wrote up the longer argument &lt;a href="https://designbycurio.com/learn/why-ai-design-looks-generic" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to poke at it: &lt;a href="https://designbycurio.com" rel="noopener noreferrer"&gt;designbycurio.com&lt;/a&gt; — and the &lt;a href="https://designbycurio.com/llms.txt" rel="noopener noreferrer"&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/a&gt; / &lt;a href="https://designbycurio.com/index.json" rel="noopener noreferrer"&gt;&lt;code&gt;index.json&lt;/code&gt;&lt;/a&gt; are right there to read.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>webdev</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
