<?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>How to write a DESIGN.md your AI will actually follow</title>
      <dc:creator>Chaos Wang</dc:creator>
      <pubDate>Mon, 31 Aug 2026 03:04:52 +0000</pubDate>
      <link>https://dev.to/voltwake/how-to-write-a-designmd-your-ai-will-actually-follow-4d6k</link>
      <guid>https://dev.to/voltwake/how-to-write-a-designmd-your-ai-will-actually-follow-4d6k</guid>
      <description>&lt;p&gt;A DESIGN.md only works if the machine reading it never has to guess. That is the whole craft of writing one: put orientation before detail, state values instead of adjectives, and cover the components the agent will actually build.&lt;/p&gt;

&lt;p&gt;If you're new to the format, start with &lt;a href="https://dev.to/voltwake/what-is-a-designmd-the-file-that-gives-your-ai-a-design-system-fee"&gt;What is a DESIGN.md?&lt;/a&gt; — this post is the practical sequel: the structure that works, and the mistakes that quietly break it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with orientation, not detail
&lt;/h2&gt;

&lt;p&gt;The first thing in the file should tell the machine what it is looking at: the style's name, a one-line essence — the sentence you would use to describe the look to someone who has never seen it — and the flags that change everything downstream, like whether the style is light or dark.&lt;/p&gt;

&lt;p&gt;Most specs put this in a small structured block at the top (YAML frontmatter is the common convention, and the one Google's open DESIGN.md spec uses). An agent reads that block first and interprets every later section through it. A file that opens with fifty color values and no orientation makes the model reconstruct the intent — which is exactly the guessing you are trying to eliminate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&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;&amp;lt;style name&amp;gt;&lt;/span&gt;
&lt;span class="na"&gt;essence: &amp;lt;one sentence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;the look, to someone who has never seen it&amp;gt;&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="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  State values, not adjectives
&lt;/h2&gt;

&lt;p&gt;"Warm, minimal, editorial" means something different to every model on every run. "Background &lt;code&gt;&amp;lt;hex&amp;gt;&lt;/code&gt;, ink &lt;code&gt;&amp;lt;hex&amp;gt;&lt;/code&gt;, one accent &lt;code&gt;&amp;lt;hex&amp;gt;&lt;/code&gt;, body type at &lt;code&gt;&amp;lt;px&amp;gt;&lt;/code&gt; with a 1.5 line height, spacing on an &lt;code&gt;&amp;lt;px&amp;gt;&lt;/code&gt; rhythm" means the same thing every time. Tokens are the contract; adjectives are decoration.&lt;/p&gt;

&lt;p&gt;Name your tokens by role, not by appearance: &lt;code&gt;background&lt;/code&gt;, &lt;code&gt;ink&lt;/code&gt;, &lt;code&gt;accent&lt;/code&gt;, &lt;code&gt;line&lt;/code&gt; — not "light gray" or "blue". Role names survive theme changes and tell the agent where a value belongs, not just what it is.&lt;/p&gt;

&lt;p&gt;Keep prose in the file, but give it a job: explain why the values are what they are and how they combine. "The accent is reserved for one action per screen" is prose an agent can obey. "The palette feels calm" is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cover the components the agent will build
&lt;/h2&gt;

&lt;p&gt;Tokens alone underdetermine a UI. Two styles can share a palette and still look nothing alike, because the difference lives in component logic: are buttons filled or outlined, sharp or rounded? Do cards float on shadows or sit inside hairline borders? Is emphasis done with weight, size, or color?&lt;/p&gt;

&lt;p&gt;Write these as short declarative rules for the handful of components that appear everywhere — buttons, cards, inputs, navigation. Then add usage bounds: where the style fits and where it does not. An agent that knows a style is built for editorial pages will not force it onto a dense dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mistakes that quietly break a spec
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Adjectives without values.&lt;/strong&gt; The most common failure: a beautifully written mood description with no numbers. The agent nods along and then invents its own palette.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dumping the whole brand book.&lt;/strong&gt; A DESIGN.md is a working spec, not an archive. If the file takes longer to read than the screen takes to build, the agent will skim — and skimming is guessing with confidence. Keep it to what changes the output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No usage bounds.&lt;/strong&gt; A spec that never says where the style should &lt;em&gt;not&lt;/em&gt; go gets applied everywhere, badly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Letting it rot.&lt;/strong&gt; The file is plain text in your repo; treat it like code. When the design changes, the DESIGN.md changes in the same commit — otherwise the agent faithfully applies last quarter's design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inconsistent internal references.&lt;/strong&gt; If the type section says one scale and a component example implies another, the agent has to pick one — and it will not tell you which it picked.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;How long should it be?&lt;/strong&gt; As short as it can be while still deciding every visual question the agent will face. In practice that is usually a page or two: one orientation block, the core token sections, component rules for the recurring elements, and usage bounds. If a section would not change what the AI builds, cut it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where does the file live?&lt;/strong&gt; The project root, next to README.md — that is where coding agents look first, and it follows the convention the name implies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One file or several?&lt;/strong&gt; One. The point of the format is that an agent reads the whole design system in a single pass. The moment the spec is spread across files, you are relying on the agent to find and reconcile them — reintroducing the guessing the format exists to remove.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need YAML frontmatter?&lt;/strong&gt; It is the convention Google's open spec uses and the easiest block for a machine to parse, so it is a good default. But the deeper rule is orientation-before-detail: whatever the syntax, the file should open with what the style &lt;em&gt;is&lt;/em&gt; before it lists values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Or skip the writing: pick a ready-made one
&lt;/h2&gt;

&lt;p&gt;Writing a DESIGN.md is worth it for a design system you own. But if what you want is an established style — Bauhaus, Swiss International, a contemporary brand-grade look — writing the file means reverse-engineering a whole movement's rules yourself, and getting them subtly wrong is the default outcome.&lt;/p&gt;

&lt;p&gt;That is the case for a library. &lt;a href="https://designbycurio.com/gallery" rel="noopener noreferrer"&gt;Curio&lt;/a&gt; ships hundreds of real design styles, each already encoded as a complete DESIGN.md — researched, structured, and ready for your AI to apply over MCP, a share link, or a download. Pick the style; the file is already written.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published as &lt;a href="https://designbycurio.com/learn/how-to-write-design-md" rel="noopener noreferrer"&gt;How to Write a DESIGN.md&lt;/a&gt; on Curio. Related: &lt;a href="https://designbycurio.com/learn/design-md-example" rel="noopener noreferrer"&gt;a complete DESIGN.md example&lt;/a&gt; · &lt;a href="https://designbycurio.com/learn/google-stitch-design-md" rel="noopener noreferrer"&gt;Google Stitch's DESIGN.md, explained&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>What is a DESIGN.md? The file that gives your AI a design system</title>
      <dc:creator>Chaos Wang</dc:creator>
      <pubDate>Tue, 25 Aug 2026 16:28:24 +0000</pubDate>
      <link>https://dev.to/voltwake/what-is-a-designmd-the-file-that-gives-your-ai-a-design-system-fee</link>
      <guid>https://dev.to/voltwake/what-is-a-designmd-the-file-that-gives-your-ai-a-design-system-fee</guid>
      <description></description>
      <category>ai</category>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>How to give your AI design taste</title>
      <dc:creator>Chaos Wang</dc:creator>
      <pubDate>Mon, 24 Aug 2026 06:30:58 +0000</pubDate>
      <link>https://dev.to/voltwake/how-to-give-your-ai-design-taste-4672</link>
      <guid>https://dev.to/voltwake/how-to-give-your-ai-design-taste-4672</guid>
      <description>&lt;p&gt;AI has no design taste of its own. What you can do is supply taste from the outside — and some ways of doing that work far better than others.&lt;/p&gt;

&lt;h2&gt;
  
  
  What 'taste' means for an AI
&lt;/h2&gt;

&lt;p&gt;Taste, in design, is a consistent set of intentional choices — a point of view applied the same way across every screen. An AI has none of this by default. Left alone it returns the average of its training data, which reads as competent but anonymous.&lt;/p&gt;

&lt;p&gt;So 'giving your AI taste' is not about unlocking something inside the model. It is about feeding it a specific point of view from outside, in a form it can apply consistently. The question is only which form works best.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lever 1 — better prompts (weakest)
&lt;/h2&gt;

&lt;p&gt;The first lever is the prompt itself: be specific, name constraints, show one example. This is real but limited. The instruction shapes a single output and then evaporates; across many screens the model drifts back to its default, so consistency is hard to hold.&lt;/p&gt;

&lt;p&gt;Prompts are the right tool for a one-off and the wrong tool for a system. If you need ten slides or twenty components to feel like one product, the prompt is too thin a thread to carry the taste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lever 2 — reference images and examples
&lt;/h2&gt;

&lt;p&gt;The second lever is showing, not telling: paste a screenshot, link a site you like, give a few examples to imitate. This lands better than adjectives because it points at something concrete.&lt;/p&gt;

&lt;p&gt;But references are lossy. The model infers what it thinks matters from a picture, and different runs infer differently — it might copy the color but miss the spacing logic, or borrow the type but not the grid. You get closer to the look without ever pinning it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lever 3 — a machine-readable design spec (strongest)
&lt;/h2&gt;

&lt;p&gt;The strongest lever is to hand the AI an actual design system in a form it can read: the real colors, type scale, spacing rhythm, shape language, and component rules, written down. Now the AI is not guessing at taste from a picture or an adjective — it is applying a defined system, value by value, the same way every time.&lt;/p&gt;

&lt;p&gt;This is what closes the consistency gap. A spec does not evaporate between prompts and it does not have to be re-inferred from an image; it is the same input the model can apply to slide one and slide forty. The clearest form of this is a DESIGN.md — a single machine-readable file that carries a complete style, ready for an AI to consume.&lt;/p&gt;

&lt;p&gt;Curio exists to supply exactly this lever: each design style packaged as a spec your AI can apply directly, so you are not relying on prompt-luck for a consistent, intentional look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it together
&lt;/h2&gt;

&lt;p&gt;Use the levers in order of strength. Start from a real design spec as the backbone, lean on references where the spec is silent, and reserve prompts for the small, local adjustments. The spec carries the taste; the prompt carries the task.&lt;/p&gt;

&lt;p&gt;The practical move: pick one documented style, give your AI its spec, and keep every screen on that same system. Taste, for an AI, is just specificity supplied consistently from outside.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Can't I just tell the AI to 'use good design'?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No — 'good design' is an adjective, and to a model an adjective resolves to its average. Every style in the training data claims to be good, clean, and modern, so the instruction points nowhere specific and you get the mean. Taste has to be supplied as concrete, consistent rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference images or a design spec — which is better?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A spec, for anything beyond a one-off. References are lossy and re-inferred differently each run, so consistency suffers. A spec is the same deterministic input every time, complete and reusable across many screens — which is exactly what a consistent look requires.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What format does the AI actually consume?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A machine-readable spec it can parse and apply — for Curio styles, a DESIGN.md: one file holding the full palette, type, spacing, and component logic. You hand it over by download, share link, or an MCP connection, and the AI applies the values directly.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://designbycurio.com/learn/give-your-ai-design-taste" 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. Related: &lt;a href="https://designbycurio.com/learn/why-ai-design-looks-generic" rel="noopener noreferrer"&gt;Why AI-generated design all looks the same&lt;/a&gt; and &lt;a href="https://designbycurio.com/learn/what-is-design-md" rel="noopener noreferrer"&gt;What is DESIGN.md?&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>ux</category>
    </item>
    <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>
