DESIGN.md: what it is, how to use it, and how Vercel's differs

DESIGN.md is a machine-readable design contract: tokens in YAML and intent in Markdown so coding agents keep UI on brand across sessions. A Taste Profile is the in-repo package that stops agents inventing around it. One file is not a full on-brand system.

Francois Brill

Francois Brill

Designer + Builder

Oct 15, 2026

Last updated

You can generate a dashboard in an afternoon now. Keeping it on-brand is the part that still fails. The output is close: plausible spacing, a familiar card, a button that looks like a button. Then you put it next to the product you already shipped and it is obviously not yours.

Most tutorials explain the DESIGN.md file format. Google and Stitch own that SERP, and they should. This page is the bridge. DESIGN.md is a contract. It is not a full AI-readable design system. Clearly's Taste Profile is the package that makes the contract hold.

The problem: AI UI that is close, but not yours

Coding agents are good at average. Your product is not average on purpose. That gap is the whole issue.

A Cursor session reads tailwind.config.js, a couple of components, and whatever you pasted into chat. It infers the rest. Cool gray instead of your sand neutrals. rounded-xl everywhere when the brand is 6px. A hero that says "Get started" on a product that never uses that phrase. Each miss is small. Together they read as a different company.

Stateless sessions make it worse. Last week's token rename is gone. The PDF in Notion is gone. The Figma comment that said "never use that blue for body text" is gone. The agent starts over and fills gaps with training-set defaults.

Pasting brand guidelines into chat is describing the brand for one session. Next session, someone paraphrases it differently, or skips it, and the UI drifts again.

A DESIGN.md is the first durable fix: a file the agent can load every time. If you do not have one yet, and the product already ships, reverse-specs is how you get there. That workflow is generate design specs from code. The second failure shows up right after you write it. One file still leaves gaps. Gaps are where agents invent.

Close, then you squint

We asked an agent to add a marketing section "in our brand colors." It returned a clean layout using primary-500. The component compiled. The token does not exist in that repo. The real value is a custom name that went through brand review. The agent had no contract to violate, so it invented a plausible one.

What DESIGN.md is (briefly)

Google Labs open-sourced Stitch's DESIGN.md format so agents can follow a visual identity across tools. The spec is Apache 2.0 at github.com/google-labs-code/design.md. YAML front matter holds tokens. Markdown prose explains intent. Tokens say what exists. Prose says what to reach for.

That is the contract. We are not going to re-tutorial the section order, the CLI, or how to export from Stitch. Google already did that. Read their spec if you need the format.

What this file is good at: giving Claude Code, Cursor, Stitch, and anything else that reads a repo a persistent, structured read on brand and UI constraints.

What this file is not: tokens.css. A component spec. A voice doc. A skill. Governance. If you try to make it all of those, you get the twelve-page PDF problem in one markdown file. We already ran that experiment. It failed for the same reason the PDF failed. The model reads the top, then guesses.

vs Vercel's public design.md

Vercel's public design.md is a portable judgment layer plus a stylesheet and eval loop for on-brand pages built outside the repo. Use it for reports, proposals, and one-offs when the agent cannot read your codebase. An in-repo DESIGN.md with tokens, specs, and voice governs product and marketing UI your team generates in Cursor or Claude Code session after session.

Vercel wrote how their agents build on-brand pages with design.md. It is a good piece. Read it. Their in-repo product-design skill covers work inside their codebases. The public file is for the other case: artifacts that still have to look like Vercel when the agent cannot read the repo. They paired the file with a public stylesheet (so models stop inventing type and spacing) and an eval loop (so guidance earns its place against frozen scenarios).

We are not going to argue with that architecture. It is the right shape for out-of-repo artifacts.

The job on this page is different. SaaS teams generating marketing and product UI inside the repo, session after session, in Cursor and Claude Code. The Taste Profile lives next to the components it governs. Agents should import your Button, not restyle a div until it reminds them of one. Judgment still matters. It is encoded in specs and voice files the session can load, not only in a public prompt.

Same filename. Different job. Their public design.md is a portable judgment layer plus evals. Ours is an in-repo package that makes DESIGN.md enforceable. If you need both, that is normal: a public file for decks and one-offs, a Taste Profile for the product.

Where DESIGN.md sits in the Clearly stack

In an AI-ready design system, DESIGN.md sits at the root of the design-system folder as the editorial source of truth. It does not replace the folder.

Article 1 is the why. Styleguides drift. AI sessions make the drift loud, because every session is stateless and will re-derive your system from whatever it can see. We tried one oversized DESIGN.md (tokens, specs, voice, layout, all in sequence). It worked for trivial tasks. For real work, Claude would correctly reference a color near the top and miss a voice rule hundreds of lines down. Same failure as the PDF, just version-controlled.

Article 2 is the folder. Foundations, tokens, atoms, molecules, organisms. Each tier has a job. DESIGN.md names the brand and the token vocabulary. tokens.css is the runtime. Specs are contracts for components. Voice lives in its own file so it does not have to be rediscovered in a paragraph the model may not load.

This page will not walk the tree again. The point for this query is simpler: one file alone fails because agents invent in whatever you did not name. Unnamed spacing. Unspecced organism. Unwritten "don't." Each gap is a drift entry.

An AI-readable design system is the structure that removes those gaps. DESIGN.md is the front door, not the building.

Taste Profile: the package agents cannot invent around

Pasting guidelines describes the brand. A Taste Profile is the spec the AI reads so it cannot invent a new one.

On Clearly projects, that package is DESIGN.md plus tokens, component specs, voice, and optional SKILL.md, sitting inside the five-tier folder. Tokens stop the agent picking a nearby hex. Specs stop it rebuilding a Button from vibes when one already exists. Voice stops "Get started" on a brand that does not talk like that. The optional skill is how the methodology loads without stuffing CLAUDE.md until the model skims it.

That is Clearly's packaging language. It is already how we talk about the gap on the Claude Code design skills hub. It is not tasteprofile.io, which is a hosted product. Same two words. Different object. If you came here from a Taste Profile search, this page is about the in-repo bundle, not that app.

Article 5 is the spec half of the package. A spec is a contract, not a museum placard. If a fresh session cannot decide whether to use a component, configure it, avoid documented mistakes, and write copy in the right voice, the spec has not earned its place. We will not rewrite that article here. The Taste Profile is what you get when those contracts exist and the agent is pointed at them.

If AI UI still looks "close" and never yours, you do not need another prompt. You need the brand encoded so agents cannot invent around it.

Google / Stitch DESIGN.mdClearly Taste ProfileVercel public design.md
JobMachine-readable brand and UI contractPackage the contract with tokens, specs, voice, optional SKILL.md so agents cannot invent around brandPortable judgment for pages built outside the repo
LivesA file you keep in the project (or export from Stitch)In-repo five-tier folderPublic URL, plus a public stylesheet and an eval loop
Enough alone?No, not for product UI in a real codebaseThat is the point of the packageFor Vercel's out-of-repo artifacts, with the stylesheet and evals beside it
Who it is forAnyone whose agents need a shared visual identity formatSaaS eng and design-system leads generating UI in Cursor, Claude Code, v0Teams generating reports, proposals, and one-offs that still have to look like the brand

How to load it (light)

How to use DESIGN.md in an AI-ready design system is mostly a pointer problem. The file does nothing if the agent never opens it, and it still fails if you dump the whole system into always-on context so the model skims.

Claude Code. Put the path in CLAUDE.md. Facts belong there: where the design system lives, which file is normative, what is off limits. Do not paste the token table into CLAUDE.md. Point at DESIGN.md and the folder.

Cursor. Same idea as a project rule: before generating UI, read DESIGN.md and the relevant spec. Do not invent tokens, radii, or component APIs that are not in those files.

## Design system
Before generating UI, read `src/design-system/DESIGN.md` and the matching
spec under `src/design-system/specs/`. Prefer existing components. Do not
invent tokens, radii, or copy voice that are not in those files.

Adjust the path to wherever the folder actually lives. The instruction is the load-bearing part: file and folder, not file alone.

For marketing site pages (resources, landing pages, blog), the same pointer pattern applies. The fuller workflow — pull request previews, protected main, who approves merges — is edit your website with AI agents.

When you need installable structure (audit, plan, confirm, scaffold in place, non-destructive), that is a skill, not a longer CLAUDE.md. The hub is Claude Code design skills for design systems. The packaging story is article 7. This page will not copy the install steps. Clone ClearlyDesign/design-skills if you want the open scaffold this afternoon.

DESIGN.md for your marketing site

The same file is not just for product UI. On a code-based marketing site (Next.js, Astro, static), DESIGN.md lets the team edit pages through Claude or Cursor without breaking the brand. You keep a sections library, tokens, and voice in the repo. Every change goes through a PR preview someone can approve before it ships.

That is how we run clearly.design: agents read the contract and the component specs, then patch MDX and React sections in place. No parallel Webflow layer. No "export the hero as PNG." The site stays one codebase.

If you want that workflow spelled out step by step, read edit your website with AI agents. If you are still on Webflow, Framer, or WordPress and the blocker is migration, the offer is Webflow, Framer, or WordPress to custom.

When the scaffold is enough vs when to partner

Stay on the open skill when one repo needs an AI-ready folder and you can encode brand yourself: flavor, adapter, tokens, the "don'ts" you already know. design-system-scaffold will not invent taste. It will not invent ownership. It will put a structure in place so the next session has something to read.

Partner when the actual gap is the package, the process, or the surface area.

Taste Profile. Someone still has to make the calls a designer makes without being asked, then write them so an agent cannot dodge them. That is encoding, not scaffolding.

Governance. Who can add a component. What happens when a squad ships a one-off. How DESIGN.md, tokens, and specs stay in sync after a rebrand. The folder will not invent that. The commercial path for that process is AI UI brand governance.

Multi-repo. One marketing site is a good skill run. Five products, three stacks, one company feel is a Taste Profile rollout. Adapters help. They do not hold the thread. When the two surfaces are the marketing site and the product, and the question is recognition rather than a new file format, that decision is marketing site and product UI consistency.

If that is the work, we are a design partner for SaaS, not a request queue. Prototype-first. Slack and Looms. Standard $4,995/mo and Advanced $7,495/mo, pause or cancel. Confirm live pricing on clearly.design before you buy. If the scoped job is an AI-ready design system for a team shipping with Cursor, Claude Code, or v0, that offer is $8-12K and 2-4 weeks.

Book a call if the file would only name the easy part, and the hard part is still sitting with a founder. Point agents at the contract either way. Just do not pretend the contract is the system.

Frequently asked questions

What is DESIGN.md?
DESIGN.md is a machine-readable design contract popularized by Google Labs / Stitch. YAML front matter holds tokens. Markdown prose explains why those values exist and how to apply them. The open spec lives at https://github.com/google-labs-code/design.md. It tells agents brand and UI constraints. It is not, by itself, a full on-brand design system.
Why isn't DESIGN.md enough to keep AI-generated UI on-brand?
Agents invent in the gaps. A single file can name colors and miss voice, radii, and which component to import. We tried one oversized DESIGN.md. Claude would hit a token near the top and skip a rule three hundred lines down. An AI-readable design system puts DESIGN.md at the root of a five-tier folder with tokens, specs, and voice as separate jobs. The structure is at https://clearly.design/articles/ai-ready-ds-2-five-tier-design-system-structure.
What is Clearly's Taste Profile, and is it tasteprofile.io?
No. tasteprofile.io is a hosted product. Clearly's Taste Profile is packaging language for the in-repo bundle agents cannot invent around: DESIGN.md, tokens, component specs, voice, and optional SKILL.md inside the five-tier AI-ready folder. Same phrase, different thing. We already use it that way on https://clearly.design/resources/claude-code-design-skills.
How is this different from Vercel's public design.md?
Vercel's is a public file, plus a stylesheet and evals, for on-brand pages built outside the repo (reports, proposals, one-offs). An in-repo DESIGN.md with tokens, specs, and voice governs product and marketing UI your team generates in Cursor or Claude Code. Read https://vercel.com/blog/how-our-agents-build-on-brand-pages-with-design-md and https://vercel.com/design.md. Clearly's Taste Profile is that in-repo package. Same filename, different job. We are not competing with their public file.
Can I use DESIGN.md on a marketing website?
Yes. On a code-based marketing site (Next.js, Astro, static), the same DESIGN.md file lets your team edit pages through Claude or Cursor without breaking brand: a sections library, tokens and voice in the repo, and a PR preview to approve. That is how we run clearly.design. For the full workflow, see https://clearly.design/resources/edit-your-website-with-ai-agents. If you are still on Webflow, Framer, or WordPress, the migration path is https://clearly.design/resources/webflow-framer-wordpress-to-custom.
How do I use DESIGN.md with Claude Code or Cursor?
Point CLAUDE.md or a Cursor rule at the file and the folder. Tell the agent to read DESIGN.md and the relevant spec before generating UI, and not to invent tokens or component APIs that are not there. Do not paste the whole system into always-on context. When you need installable scaffold structure, use Clearly's open design-skills repo instead of growing CLAUDE.md. Install steps live at https://clearly.design/resources/claude-code-design-skills.
When is a DESIGN.md scaffold enough, and when should we partner?
Scaffold when one repo needs an AI-ready folder and you can encode brand yourself. Partner when the gap is a Taste Profile (judgment encoded so agents cannot invent a new brand), governance, or the same system across several repos. Clearly Design is a prototype-first design partner at Standard $4,995/mo and Advanced $7,495/mo. The AI-ready systems project is at https://clearly.design/projects/design-systems-ai.

Need DESIGN.md, or a Taste Profile that actually holds?

We'll tell you honestly whether pointing agents at a file is enough, or whether tokens, specs, voice, and multi-repo rollout need a partner.