{"slug": "your-ai-doesn-t-understand-design-so-i-gave-it-a-library-it-can-read", "title": "Your AI doesn't understand design. So I gave it a library it can read.", "summary": "A developer built Curio, a library that makes design styles machine-readable so AI agents can consume them. The catalog is published as structured data, including llms.txt and index.json, allowing agents to fetch design tokens without human intervention. The project aims to bridge the gap between language models and design systems by encoding visual styles into tokens, component specs, and avoid lists.", "body_md": "Ask any LLM to \"make this landing page look like a high-end Swiss design studio\" and you'll get something that *gestures* 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 *about* 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 *not* do.\n\nThat 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.\n\nIt's called [Curio](https://designbycurio.com). This post is about the part I think is interesting to other builders: **making design machine-readable, and publishing the catalog for agents instead of for humans.**\n\nThe 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:\n\nOnce a style is expressed that way, an AI doesn't have to *imagine* 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 ([what is DESIGN.md?](https://designbycurio.com/learn/what-is-design-md)).\n\n```\n# excerpt of a design package an agent consumes\nmeta:\n  name: Swiss International Style\n  isDark: false\ncolor:\n  ink: \"<hex>\"\n  paper: \"<hex>\"\n  accent: \"<hex>\"   # values intentionally omitted here\ntype:\n  family: \"Helvetica Neue, Inter, sans-serif\"\n  scale: [<px>, <px>, <px>, …]   # 7-step modular scale\nrules:\n  always: [\"strict baseline grid\", \"flush-left, ragged-right body\"]\n  never:  [\"centered paragraphs\", \"more than two weights\", \"decorative type\"]\n```\n\nHere's the design decision I keep getting questions about. Curio's primary user isn't a person browsing a gallery — it's the **agent** acting on a person's behalf. When someone tells their assistant \"design my deck like a 1980s arcade,\" the agent should be able to *discover* that a matching style exists and *fetch* its tokens, without a human in the loop.\n\nSo the catalog is published the way you'd publish for a crawler that thinks:\n\n`llms.txt`\n\n`llms-full.txt`\n\n`index.json`\n\n— 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.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 *for*. 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 `llms.txt`\n\n+ open-JSON pattern hard — it's the cheapest \"API\" you'll ever ship.\n\nThere'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.\n\nCurio 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: **treat design as data, and publish your catalog for the agent, not just the human.** If you try the `llms.txt`\n\napproach 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 [here](https://designbycurio.com/learn/why-ai-design-looks-generic).\n\nIf you want to poke at it: [designbycurio.com](https://designbycurio.com) — and the [ llms.txt](https://designbycurio.com/llms.txt) /\n\n`index.json`", "url": "https://wpnews.pro/news/your-ai-doesn-t-understand-design-so-i-gave-it-a-library-it-can-read", "canonical_source": "https://dev.to/voltwake/your-ai-doesnt-understand-design-so-i-gave-it-a-library-it-can-read-5cg0", "published_at": "2026-08-22 06:18:47+00:00", "updated_at": "2026-08-22 06:44:09.594865+00:00", "lang": "en", "topics": ["ai-agents", "ai-products", "developer-tools", "generative-ai"], "entities": ["Curio", "Müller-Brockmann", "Stripe", "Perplexity", "ChatGPT"], "alternates": {"html": "https://wpnews.pro/news/your-ai-doesn-t-understand-design-so-i-gave-it-a-library-it-can-read", "markdown": "https://wpnews.pro/news/your-ai-doesn-t-understand-design-so-i-gave-it-a-library-it-can-read.md", "text": "https://wpnews.pro/news/your-ai-doesn-t-understand-design-so-i-gave-it-a-library-it-can-read.txt", "jsonld": "https://wpnews.pro/news/your-ai-doesn-t-understand-design-so-i-gave-it-a-library-it-can-read.jsonld"}}