Develop a DESIGN.md
Use this prompt to take a project from "we have no visual identity" (or "our
identity lives in someone's head") to a committed DESIGN.md that any coding
agent can read and apply consistently. The process combines the grill-me
skill (to extract brand decisions from the user) with the prototype skill
(to make those decisions concrete and comparable before writing anything
down).
What a DESIGN.md is
A DESIGN.md is a single markdown file describing a project's visual language
in a form AI coding agents can act on. It sits between a Figma export (too
specific) and a traditional brand book (too loose). The reference
specification is google-labs-code/design.md:
- YAML frontmatter — machine-readable, normative design tokens:
name, description, colors, typography, rounded, spacing, and
components. Tokens may reference other tokens with {path.to.token}
syntax (e.g. backgroundColor: "{colors.primary}").
- Markdown body — human-readable rationale in
## sections, in this
order: Overview, Colors, Typography, Layout, Elevation & Depth, Shapes,
Components, Do's and Don'ts. Prose explains why tokens exist and gives
agents semantic anchors ("graphite ground", "signal red reserved for
irreversible actions") for decisions the tokens don't cover.
- We extend the spec with two Focus sections after Do's and Don'ts:
Voice & Tone (a concrete writing rulebook — numbered rules, banned
words, before/after rewrites — see Phase 3) and Agent Prompt Guide
(reusable snippets for prompting future UI work).
A good DESIGN.md is specific enough that two different agents produce visually
consistent UI, and flexible enough to cover situations it never mentions.
See The-Focus-AI/focus-ai-brand for a house example of the genre.
Inputs to gather first (research, don't ask)
Before interviewing the user, discover what already exists. Facts are your
job; only decisions belong to the user.
- Existing materials: current site/app screenshots, logos, prior decks,
CSS/Tailwind config, any
focus-ai-brand or other brand skill installed
in the repo.
- The audience and product surface: what does this project ship (marketing
site, dashboard, CLI docs, PDF reports)? Which surfaces will consume the
DESIGN.md?
- Competitor/aspiration references if the user has named any.
Then sort every Phase 1 decision branch into one of two bins — this
determines how it gets asked:
- Evidenced — the repo already embodies the decision (a palette shipped
in
globals.css, a prior design verdict in an ADR). Present these as
one-line confirmations with the evidence attached ("the palette in
globals.css is warm-grey + orange — keep it?"). These resolve in four
words.
- Open — nothing in the repo has a point of view (typically typography
and positioning nuance). Never ask these as abstract adjective questions;
route them to Phase 2 where the user reacts to rendered artifacts. Taste
questions need something to look at.
Phase 1 — Grill the brand (grill-me)
Unattended-session rule. The interview is the point of this phase —
never silently substitute repo evidence for it. If the user may not be
present, ask the first grill question and stop. If the task explicitly
requires delivering autonomously, label every choice a veto-able
recommendation and lead the final report with the decision log (what was
assumed and why), not the deliverable. Evidence tells you what exists; only
the user can tell you what it should feel like.
Run the grill-me skill. Interview one question at a time, always with your
recommended answer, until shared understanding is reached. Plain-prose
questions and screenshot reactions beat structured option dialogs; accept
short answers ("keep it", "V1 but denser") as confirmations. Walk these
branches in order — later branches depend on earlier answers:
- Positioning — What is this product, for whom, and what should someone
feel in the first five seconds? What one word must the UI never evoke?
- Personality — Pick 3–5 personality traits (e.g. precise, warm,
playful, authoritative). For each, ask for a brand the user thinks
embodies it. Voice stays fixed; tone adapts per surface.
- Atmosphere — Light or dark default? Dense or airy? Editorial or
utilitarian? Rounded or sharp? Flat or elevated?
- Color feelings — Not hex values yet: warm vs cool, muted vs vivid,
one accent or several, any colors that are off-limits (cliché, competitor,
accessibility). (Typography is deliberately not asked here — it is an
open-bin taste decision that resolves in Phase 2 against rendered
compositions, not adjectives.)
- Voice rulebook — Beyond traits: which writing creed governs the copy
(Orwell's six rules, Strunk & White's "omit needless words", or the
user's own)? Which words are banned outright (e.g. leverage, seamless,
supercharge, excited to announce)? How do errors speak — apologetic,
factual, or instructive? Are contractions, jokes, and exclamation marks
allowed, and where?
- Non-negotiables — Accessibility floor (WCAG AA minimum), existing
logo/colors that must be honored, print/PDF needs, dark-mode requirement.
Ask density per surface explicitly — mobile and desktop may want
opposite answers (kneeboard-dense phone, spacious desktop is a real
pattern).
Confirm branch-by-branch as you go; a final all-at-once summary gate is
optional and usually redundant. Do not start Phase 2 with any branch
unresolved unless it is explicitly parked as "decide against artifacts."
Phase 2 — Prototype contrasting directions (prototype)
Run the prototype skill, UI branch. This is throwaway code that answers one
question: "Which visual direction is right?"
Pick the venue by what the round is testing:
- Visual-language rounds (which direction, which type treatment):
build a self-contained static HTML specimen and publish it where the user
can click through on any device (an artifact, a static host). No dev
server, instant republish, fastest possible react-and-revise loop.
- Integration rounds (does the chosen direction survive contact with
real chrome and real data): an in-repo route behind the project's dev
server, judged against actual app conventions.
Rules for the variants:
- Build a single-route specimen page with 3–4 contrasting design
directions, switchable via URL parameter (
?variant=a|b|c|d). Contrasting
means genuinely different interpretations of the Phase 1 answers, not one
design with different accent colors.
- Typography is decided here, as a composition question. Type variants
must differ in layout signature, grid, spacing rhythm, and detailing —
four font families swapped onto an identical layout is the same design
four times, and the user will (rightly) reject the whole round. A
typeface only reads as a direction when the composition around it
changes too.
- Draw faces and moves from
references/creative-typography.md:
anchor each variant in a different personality group (editorial drama,
characterful grotesk, weird display, mono-led), never a system-stack or
AI-default face as display, and give every variant a named signature
move. The reference's "checkable anti-boring rules" belong in the final
DESIGN.md's typography section.
- Specimens mock faces from descriptions, and say so. Early rounds
don't need font files: use the approximation recipes in the typography
note (each face described sharply enough to fake its silhouette — family
stack, weight, case, tracking, leading together, not just a family
swap), and print the approximation in the specimen's own chrome
("rendered in fallback; spec face is Le Murmure"). A silent fallback is
a wrong answer the user can't see they're approving. Only a
high-fidelity final round embeds the real woff2 — into the published
specimen or the project's repo, never into standards. The DESIGN.md
itself always names the real face, its license, and its mock recipe, so
any agent can approximate it without the file.
- Never propose the AI-default looks unless the user explicitly asks for
one: warm cream ground + serif display + terracotta/clay accent (the
ubiquitous "Claude look"), near-black with a lone acid-green pop, or a
purple-to-blue gradient hero on white. If a variant drifts toward one of
these, replace it before showing the user.
- Each variant must render the same realistic content so directions are
comparable: full type scale specimen, color roles in use, buttons in all
states, a form, a card, a nav, and one representative product screen with
real-feeling copy (no lorem ipsum).
- Display the variant's would-be tokens (colors, fonts, radii, spacing scale)
visibly on the page — the prototype should expose its own state.
- One command to run via the project's task runner. In-memory only, no
persistence, no tests, no polish.
- Commit the prototype to a throwaway branch with a note linking back to
this effort.
Then grill again, briefly: which variant wins, what to steal from the losers,
what still feels wrong. Iterate the variants until the user says "that's it."
Two or three rounds is normal; more means Phase 1 missed a decision — go back
and grill that branch.
Phase 3 — Distill into DESIGN.md
Write DESIGN.md at the project root from the winning prototype:
- Extract the exact values from the winning variant into YAML frontmatter
tokens. Name tokens by purpose (
button-primary-hover), not by abstract
level (blue-500).
- Write the prose sections in spec order. Every rule in the prose should
trace to either a Phase 1 decision or something observed in the prototype
("the dense table variant lost — default to airy spacing").
- Do's and Don'ts: capture what the losing variants got wrong as explicit
don'ts, with the on-brand alternative beside each.
- Voice & Tone — write it as a rulebook, not a mood board, in the
tradition of Orwell's six rules and Strunk & White. It must contain:
- The 3–5 personality traits, each with one sentence on what it forbids
(a trait that forbids nothing is decoration).
- 5–8 numbered writing rules, imperative and checkable, e.g. "Never
use a long word where a short one will do", "Cut every qualifier:
very, really, just, simply", "Verbs first: say what happened, not how
you feel about it", "Errors state what failed and the next step — no
apologies, no mascots". End with an escape hatch in Orwell's spirit:
"Break any of these rules sooner than write anything barbarous."
- A banned-word list with replacements (leverage → use,
utilize → use, seamless → cut it, prior to → before,
excited to announce → cut it and state the thing).
- At least five before/after rewrite pairs, one per surface:
marketing headline, empty state, error message, release note, and
button label. The "before" should be a plausible off-brand sentence,
not a strawman.
- A per-surface tone table: how the fixed voice flexes across marketing,
product UI, docs, and errors (e.g. jokes allowed in empty states,
never in errors).
- Agent Prompt Guide: 2–3 reusable prompt snippets for generating new UI
under this system.
Phase 4 — Validate
- Check every
{token} reference resolves and no token is orphaned; check
text/background pairs meet WCAG AA contrast. Write these checks as small
scripts and keep them as standing artifacts next to the DESIGN.md —
they re-run on every future edit, not just at birth.
- The real test: open a fresh agent session, give it only
DESIGN.md, and
ask it to build a small page that the prototype never showed. The test
must include a data-absent trap — an empty state, a missing feed, a
zero-count list. Happy-path renders hide exactly the gaps that matter;
what the fresh agent invents when the data is gone tells you which rules
the file is missing. If the result would pass the user's squint test next
to the winning variant, ship it; if not, add the missing rule and retest.
- Commit
DESIGN.md; delete or archive the prototype branch. Main keeps
only the validated decision.
Outputs — more than the file
Prototyping a design surfaces product decisions, not just visual ones: a
specimen cell will invent a capability the product doesn't have yet (a
cached forecast, an offline pack, a share flow). Don't let those evaporate.
End the process with three deliverables:
DESIGN.md — validated, committed.
- A decision log — each branch's verdict and who made it (user answer
vs evidenced-from-repo vs autonomous recommendation), so the next agent
knows what is settled versus assumed.
- A tickets-discovered list — every product capability the prototypes
implied but the codebase lacks, ready for
to-tickets or the issue
tracker.
1---2name: develop-design-md3description: Take a project from "no visual identity" to a committed, validated DESIGN.md — brand interview, contrasting rendered prototypes, distilled tokens plus a voice rulebook, then a fresh-agent validation pass. Produces the file plus a decision log and a list of product tickets the prototypes surfaced. Use when a project needs a brand, a design system, a visual direction, or a DESIGN.md. Triggers on: "design system", "DESIGN.md", "brand this", "visual identity", "what should this look like", "pick a look", "style guide", "design tokens", "voice and tone".4---56# Develop a DESIGN.md78Use this prompt to take a project from "we have no visual identity" (or "our9identity lives in someone's head") to a committed `DESIGN.md` that any coding10agent can read and apply consistently. The process combines the `grill-me`11skill (to extract brand decisions from the user) with the `prototype` skill12(to make those decisions concrete and comparable before writing anything13down).1415## What a DESIGN.md is1617A `DESIGN.md` is a single markdown file describing a project's visual language18in a form AI coding agents can act on. It sits between a Figma export (too19specific) and a traditional brand book (too loose). The reference20specification is [google-labs-code/design.md](https://github.com/google-labs-code/design.md):2122- **YAML frontmatter** — machine-readable, normative design tokens:23 `name`, `description`, `colors`, `typography`, `rounded`, `spacing`, and24 `components`. Tokens may reference other tokens with `{path.to.token}`25 syntax (e.g. `backgroundColor: "{colors.primary}"`).26- **Markdown body** — human-readable rationale in `##` sections, in this27 order: Overview, Colors, Typography, Layout, Elevation & Depth, Shapes,28 Components, Do's and Don'ts. Prose explains *why* tokens exist and gives29 agents semantic anchors ("graphite ground", "signal red reserved for30 irreversible actions") for decisions the tokens don't cover.31- We extend the spec with two Focus sections after Do's and Don'ts:32 **Voice & Tone** (a concrete writing rulebook — numbered rules, banned33 words, before/after rewrites — see Phase 3) and **Agent Prompt Guide**34 (reusable snippets for prompting future UI work).3536A good DESIGN.md is specific enough that two different agents produce visually37consistent UI, and flexible enough to cover situations it never mentions.38See `The-Focus-AI/focus-ai-brand` for a house example of the genre.3940## Inputs to gather first (research, don't ask)4142Before interviewing the user, discover what already exists. Facts are your43job; only decisions belong to the user.44451. Existing materials: current site/app screenshots, logos, prior decks,46 CSS/Tailwind config, any `focus-ai-brand` or other brand skill installed47 in the repo.482. The audience and product surface: what does this project ship (marketing49 site, dashboard, CLI docs, PDF reports)? Which surfaces will consume the50 DESIGN.md?513. Competitor/aspiration references if the user has named any.5253Then sort every Phase 1 decision branch into one of two bins — this54determines how it gets asked:5556- **Evidenced** — the repo already embodies the decision (a palette shipped57 in `globals.css`, a prior design verdict in an ADR). Present these as58 one-line confirmations with the evidence attached ("the palette in59 `globals.css` is warm-grey + orange — keep it?"). These resolve in four60 words.61- **Open** — nothing in the repo has a point of view (typically typography62 and positioning nuance). Never ask these as abstract adjective questions;63 route them to Phase 2 where the user reacts to rendered artifacts. Taste64 questions need something to look at.6566## Phase 1 — Grill the brand (grill-me)6768**Unattended-session rule.** The interview is the point of this phase —69never silently substitute repo evidence for it. If the user may not be70present, ask the first grill question and stop. If the task explicitly71requires delivering autonomously, label every choice a veto-able72recommendation and lead the final report with the decision log (what was73assumed and why), not the deliverable. Evidence tells you what exists; only74the user can tell you what it should feel like.7576Run the `grill-me` skill. Interview one question at a time, always with your77recommended answer, until shared understanding is reached. Plain-prose78questions and screenshot reactions beat structured option dialogs; accept79short answers ("keep it", "V1 but denser") as confirmations. Walk these80branches in order — later branches depend on earlier answers:81821. **Positioning** — What is this product, for whom, and what should someone83 feel in the first five seconds? What one word must the UI never evoke?842. **Personality** — Pick 3–5 personality traits (e.g. precise, warm,85 playful, authoritative). For each, ask for a brand the user thinks86 embodies it. Voice stays fixed; tone adapts per surface.873. **Atmosphere** — Light or dark default? Dense or airy? Editorial or88 utilitarian? Rounded or sharp? Flat or elevated?894. **Color feelings** — Not hex values yet: warm vs cool, muted vs vivid,90 one accent or several, any colors that are off-limits (cliché, competitor,91 accessibility). (Typography is deliberately *not* asked here — it is an92 open-bin taste decision that resolves in Phase 2 against rendered93 compositions, not adjectives.)945. **Voice rulebook** — Beyond traits: which writing creed governs the copy95 (Orwell's six rules, Strunk & White's "omit needless words", or the96 user's own)? Which words are banned outright (e.g. leverage, seamless,97 supercharge, excited to announce)? How do errors speak — apologetic,98 factual, or instructive? Are contractions, jokes, and exclamation marks99 allowed, and where?1006. **Non-negotiables** — Accessibility floor (WCAG AA minimum), existing101 logo/colors that must be honored, print/PDF needs, dark-mode requirement.102 Ask density per surface explicitly — mobile and desktop may want103 opposite answers (kneeboard-dense phone, spacious desktop is a real104 pattern).105106Confirm branch-by-branch as you go; a final all-at-once summary gate is107optional and usually redundant. Do not start Phase 2 with any branch108unresolved unless it is explicitly parked as "decide against artifacts."109110## Phase 2 — Prototype contrasting directions (prototype)111112Run the `prototype` skill, UI branch. This is throwaway code that answers one113question: **"Which visual direction is right?"**114115Pick the venue by what the round is testing:116117- **Visual-language rounds** (which direction, which type treatment):118 build a self-contained static HTML specimen and publish it where the user119 can click through on any device (an artifact, a static host). No dev120 server, instant republish, fastest possible react-and-revise loop.121- **Integration rounds** (does the chosen direction survive contact with122 real chrome and real data): an in-repo route behind the project's dev123 server, judged against actual app conventions.124125Rules for the variants:126127- Build a single-route specimen page with 3–4 **contrasting** design128 directions, switchable via URL parameter (`?variant=a|b|c|d`). Contrasting129 means genuinely different interpretations of the Phase 1 answers, not one130 design with different accent colors.131- **Typography is decided here, as a composition question.** Type variants132 must differ in layout signature, grid, spacing rhythm, and detailing —133 four font families swapped onto an identical layout is the same design134 four times, and the user will (rightly) reject the whole round. A135 typeface only reads as a direction when the composition around it136 changes too.137- Draw faces and moves from `references/creative-typography.md`:138 anchor each variant in a different personality group (editorial drama,139 characterful grotesk, weird display, mono-led), never a system-stack or140 AI-default face as display, and give every variant a named signature141 move. The reference's "checkable anti-boring rules" belong in the final142 DESIGN.md's typography section.143- **Specimens mock faces from descriptions, and say so.** Early rounds144 don't need font files: use the approximation recipes in the typography145 note (each face described sharply enough to fake its silhouette — family146 stack, weight, case, tracking, leading together, not just a family147 swap), and print the approximation in the specimen's own chrome148 ("rendered in fallback; spec face is Le Murmure"). A silent fallback is149 a wrong answer the user can't see they're approving. Only a150 high-fidelity final round embeds the real woff2 — into the published151 specimen or the project's repo, never into standards. The DESIGN.md152 itself always names the real face, its license, and its mock recipe, so153 any agent can approximate it without the file.154- **Never propose the AI-default looks** unless the user explicitly asks for155 one: warm cream ground + serif display + terracotta/clay accent (the156 ubiquitous "Claude look"), near-black with a lone acid-green pop, or a157 purple-to-blue gradient hero on white. If a variant drifts toward one of158 these, replace it before showing the user.159- Each variant must render the same realistic content so directions are160 comparable: full type scale specimen, color roles in use, buttons in all161 states, a form, a card, a nav, and one representative product screen with162 real-feeling copy (no lorem ipsum).163- Display the variant's would-be tokens (colors, fonts, radii, spacing scale)164 visibly on the page — the prototype should expose its own state.165- One command to run via the project's task runner. In-memory only, no166 persistence, no tests, no polish.167- Commit the prototype to a throwaway branch with a note linking back to168 this effort.169170Then grill again, briefly: which variant wins, what to steal from the losers,171what still feels wrong. Iterate the variants until the user says "that's it."172Two or three rounds is normal; more means Phase 1 missed a decision — go back173and grill that branch.174175## Phase 3 — Distill into DESIGN.md176177Write `DESIGN.md` at the project root from the winning prototype:1781791. Extract the exact values from the winning variant into YAML frontmatter180 tokens. Name tokens by purpose (`button-primary-hover`), not by abstract181 level (`blue-500`).1822. Write the prose sections in spec order. Every rule in the prose should183 trace to either a Phase 1 decision or something observed in the prototype184 ("the dense table variant lost — default to airy spacing").1853. Do's and Don'ts: capture what the losing variants got wrong as explicit186 don'ts, with the on-brand alternative beside each.1874. Voice & Tone — write it as a **rulebook, not a mood board**, in the188 tradition of Orwell's six rules and Strunk & White. It must contain:189 - The 3–5 personality traits, each with one sentence on what it forbids190 (a trait that forbids nothing is decoration).191 - **5–8 numbered writing rules**, imperative and checkable, e.g. "Never192 use a long word where a short one will do", "Cut every qualifier:193 very, really, just, simply", "Verbs first: say what happened, not how194 you feel about it", "Errors state what failed and the next step — no195 apologies, no mascots". End with an escape hatch in Orwell's spirit:196 "Break any of these rules sooner than write anything barbarous."197 - A **banned-word list** with replacements (leverage → use,198 utilize → use, seamless → cut it, prior to → before,199 excited to announce → cut it and state the thing).200 - **At least five before/after rewrite pairs**, one per surface:201 marketing headline, empty state, error message, release note, and202 button label. The "before" should be a plausible off-brand sentence,203 not a strawman.204 - A per-surface tone table: how the fixed voice flexes across marketing,205 product UI, docs, and errors (e.g. jokes allowed in empty states,206 never in errors).2075. Agent Prompt Guide: 2–3 reusable prompt snippets for generating new UI208 under this system.209210## Phase 4 — Validate211212- Check every `{token}` reference resolves and no token is orphaned; check213 text/background pairs meet WCAG AA contrast. Write these checks as small214 scripts and keep them as **standing artifacts** next to the DESIGN.md —215 they re-run on every future edit, not just at birth.216- The real test: open a fresh agent session, give it only `DESIGN.md`, and217 ask it to build a small page that the prototype never showed. The test218 **must include a data-absent trap** — an empty state, a missing feed, a219 zero-count list. Happy-path renders hide exactly the gaps that matter;220 what the fresh agent invents when the data is gone tells you which rules221 the file is missing. If the result would pass the user's squint test next222 to the winning variant, ship it; if not, add the missing rule and retest.223- Commit `DESIGN.md`; delete or archive the prototype branch. Main keeps224 only the validated decision.225226## Outputs — more than the file227228Prototyping a design surfaces product decisions, not just visual ones: a229specimen cell will invent a capability the product doesn't have yet (a230cached forecast, an offline pack, a share flow). Don't let those evaporate.231End the process with three deliverables:2322331. `DESIGN.md` — validated, committed.2342. A **decision log** — each branch's verdict and who made it (user answer235 vs evidenced-from-repo vs autonomous recommendation), so the next agent236 knows what is settled versus assumed.2373. A **tickets-discovered list** — every product capability the prototypes238 implied but the codebase lacks, ready for `to-tickets` or the issue239 tracker.