visual-design-system
Give a landing page a distinctive, on-brand look — and make the agent actually
hold to it.
The failure this fixes
AI generators converge on one identical aesthetic: Inter/Poppins type, a
blue-to-purple (indigo/aurora) gradient hero, glassmorphism cards, a centered
mx-auto hero with an "eyebrow pill", a three-card feature grid, and the default
shadcn fingerprint — "AI slop", the "sea of sameness". It gets worse under
iteration: "make it premium" or "be distinctive" ratchets a model toward the
average, because it reads "distinctive" as "add more". And prose brand rules are
followed only probabilistically and silently dropped under deadline — banning a
color in writing has been observed to fail repeatedly while a lint rule fixed it
first try. So this skill does two things: choose constrained, distinctive
budgets, and encode + enforce them mechanically.
When to use / when NOT to use
Use to choose palette / type / spacing, kill the generic AI look, and set up a
machine-readable design system (DESIGN.md, tokens, lint gates) that agents obey.
Not for: choosing the overall look/direction before tokens exist
(landing-page-art-direction — it decides, this skill systematizes), the
shipped deterministic lint hook (ux-guardrails), the words
(landing-page-copywriting), section skeleton (landing-page-structure),
animation (scroll-motion), building components (nextjs-landing-page), full
WCAG compliance work (landing-page-accessibility — this skill treats
contrast only as a floor), or ranking/perf (web-vitals-and-seo).
Workflow
- Set the aesthetic budget (hard constraints beat vibes). Palette: ≤4 roles
— two neutrals + one ink + one accent, accent reserved for links/primary CTA
only. Warm off-white background (
#fafaf9), near-black ink (#1c1917) — never
pure #fff/#000. Type: 1-2 typefaces, ≥16px body floor. Spacing: 8px scale,
~96px between sections. Show the real product, not stock. Full budgets +
the ban-list: references/aesthetic-budgets.md.
- Ban the slop tells explicitly. Write down what NOT to do (blue→purple
gradients, glassmorphism, sparkle icons, three equal-weight cards, centered
eyebrow-pill hero, marquee logo strips) — a Don'ts list built from bad output
you have actually seen is the single highest-leverage artifact.
- Encode it as DESIGN.md. Machine-readable YAML tokens + prose rationale,
tokens defined as roles not raw values, checked into the repo root beside
AGENTS.md. Structure, the 8 sections, and the tokens-vs-prose split:
references/design-md-and-enforcement.md. DESIGN.md is a fast-converging 2026
convention (Google Labs, alpha), not a ratified standard — verify against the
current spec.
- Enforce with deterministic gates. Prose is advisory; a failing lint rule
is not. Fastest path: install the
ux-guardrails hook (this skill set ships
it) — write-time spacing/type/contrast/slop checks wired into Claude Code.
Full CI stack on top: ESLint no-restricted-imports + custom
no-arbitrary-colors; Stylelint declaration-strict-value; TypeScript
discriminated unions for variants; visual-regression (Playwright
toHaveScreenshot()); axe-core in CI. Cap the agent's self-correction loop
and forbid it editing the lint config.
Details: references/design-md-and-enforcement.md.
The rules
- Constrain the brand hard; keep creative exploration separate. Over-specify
the brand tokens (palette, type, spacing) but do not over-specify the
creative direction — heavy prompt specification can suppress a model's design
strengths and produce more monotonous output. Constrain what must be
consistent; leave room to explore what should be distinctive.
- Tokens define roles, not values. "primary" is "the main ink color of the
page", not a hex. Every consumer references the role, so a rebrand is a
one-line edit. Tokens carry what; prose carries when/why. A pure token dump
still yields off-brand output.
- The Don'ts list is the highest-leverage section — one "don't" per real bad
output.
- Enforcement beats persuasion. Consistency you enforce survives the agent;
consistency you request survives until the agent is in a hurry. The agent never
opens Figma — it reads the repo, so the governing spec is tokens-as-code plus a
gate it cannot pass without obeying.
- Layer the instruction files. Behavioral rules → AGENTS.md/CLAUDE.md; visual
spec → a dedicated DESIGN.md loaded only when generating UI (avoids paying the
token tax on every turn). Keep root instruction files lean.
- Contrast floor (defer depth to accessibility skill): body text 4.5:1,
large text and non-text UI 3:1 — a hard gate, not a preference.
Output
A defined palette/type/spacing budget with an explicit ban-list; a DESIGN.md with
role-based tokens, prose rationale, and a Don'ts section; and a wired enforcement
stack (lint + visual + a11y gates) the agent must pass — verified or version-gated
against the current DESIGN.md spec, never citing raw research paths.
References
references/aesthetic-budgets.md - concrete palette/type/spacing budgets, the
warm-neutral token set, and the full AI-slop ban-list.
references/design-md-and-enforcement.md - DESIGN.md structure and the 8
sections, tokens-as-roles, authoring methods, Figma MCP/Code Connect, and the
deterministic enforcement stack with the fact ledger.
1---2name: visual-design-system3description: Sets up a landing page's visual design system - choosing the palette, typography and spacing scale and encoding them as tokens in a DESIGN.md, so generated output stops defaulting to the same purple-gradient look every time. Use when asked to choose colors, fonts, typography, spacing, or design tokens, or to encode brand rules. Not for copy, layout, motion, SEO, or the enforcement gate.4---56# visual-design-system78Give a landing page a distinctive, on-brand look — and make the agent actually9hold to it.1011## The failure this fixes1213AI generators converge on one identical aesthetic: Inter/Poppins type, a14blue-to-purple (indigo/aurora) gradient hero, glassmorphism cards, a centered15`mx-auto` hero with an "eyebrow pill", a three-card feature grid, and the default16shadcn fingerprint — "AI slop", the "sea of sameness". It gets *worse* under17iteration: "make it premium" or "be distinctive" ratchets a model **toward** the18average, because it reads "distinctive" as "add more". And prose brand rules are19followed only probabilistically and silently dropped under deadline — banning a20color in writing has been observed to fail repeatedly while a lint rule fixed it21first try. So this skill does two things: **choose constrained, distinctive22budgets**, and **encode + enforce them mechanically.**2324## When to use / when NOT to use2526Use to choose palette / type / spacing, kill the generic AI look, and set up a27machine-readable design system (DESIGN.md, tokens, lint gates) that agents obey.2829Not for: choosing the overall look/direction before tokens exist30(`landing-page-art-direction` — it decides, this skill systematizes), the31shipped deterministic lint hook (`ux-guardrails`), the words32(`landing-page-copywriting`), section skeleton (`landing-page-structure`),33animation (`scroll-motion`), building components (`nextjs-landing-page`), full34WCAG compliance work (`landing-page-accessibility` — this skill treats35contrast only as a floor), or ranking/perf (`web-vitals-and-seo`).3637## Workflow38391. **Set the aesthetic budget** (hard constraints beat vibes). Palette: ≤4 roles40 — two neutrals + one ink + one accent, accent reserved for links/primary CTA41 only. Warm off-white background (`#fafaf9`), near-black ink (`#1c1917`) — never42 pure `#fff`/`#000`. Type: 1-2 typefaces, ≥16px body floor. Spacing: 8px scale,43 ~96px between sections. Show the real product, not stock. Full budgets +44 the ban-list: `references/aesthetic-budgets.md`.452. **Ban the slop tells explicitly.** Write down what NOT to do (blue→purple46 gradients, glassmorphism, sparkle icons, three equal-weight cards, centered47 eyebrow-pill hero, marquee logo strips) — a Don'ts list built from bad output48 you have actually seen is the single highest-leverage artifact.493. **Encode it as DESIGN.md.** Machine-readable YAML tokens + prose rationale,50 tokens defined as **roles not raw values**, checked into the repo root beside51 AGENTS.md. Structure, the 8 sections, and the tokens-vs-prose split:52 `references/design-md-and-enforcement.md`. DESIGN.md is a fast-converging 202653 convention (Google Labs, alpha), not a ratified standard — verify against the54 current spec.554. **Enforce with deterministic gates.** Prose is advisory; a failing lint rule56 is not. Fastest path: install the `ux-guardrails` hook (this skill set ships57 it) — write-time spacing/type/contrast/slop checks wired into Claude Code.58 Full CI stack on top: ESLint `no-restricted-imports` + custom59 `no-arbitrary-colors`; Stylelint `declaration-strict-value`; TypeScript60 discriminated unions for variants; visual-regression (Playwright61 `toHaveScreenshot()`); axe-core in CI. Cap the agent's self-correction loop62 and forbid it editing the lint config.63 Details: `references/design-md-and-enforcement.md`.6465## The rules6667- **Constrain the brand hard; keep creative exploration separate.** Over-specify68 the *brand tokens* (palette, type, spacing) but do not over-specify the69 *creative direction* — heavy prompt specification can suppress a model's design70 strengths and produce *more* monotonous output. Constrain what must be71 consistent; leave room to explore what should be distinctive.72- **Tokens define roles, not values.** "primary" is "the main ink color of the73 page", not a hex. Every consumer references the role, so a rebrand is a74 one-line edit. Tokens carry *what*; prose carries *when/why*. A pure token dump75 still yields off-brand output.76- **The Don'ts list is the highest-leverage section** — one "don't" per real bad77 output.78- **Enforcement beats persuasion.** Consistency you enforce survives the agent;79 consistency you request survives until the agent is in a hurry. The agent never80 opens Figma — it reads the repo, so the governing spec is tokens-as-code plus a81 gate it cannot pass without obeying.82- **Layer the instruction files.** Behavioral rules → AGENTS.md/CLAUDE.md; visual83 spec → a dedicated DESIGN.md loaded only when generating UI (avoids paying the84 token tax on every turn). Keep root instruction files lean.85- **Contrast floor (defer depth to accessibility skill):** body text 4.5:1,86 large text and non-text UI 3:1 — a hard gate, not a preference.8788## Output8990A defined palette/type/spacing budget with an explicit ban-list; a DESIGN.md with91role-based tokens, prose rationale, and a Don'ts section; and a wired enforcement92stack (lint + visual + a11y gates) the agent must pass — verified or version-gated93against the current DESIGN.md spec, never citing raw research paths.9495## References9697- `references/aesthetic-budgets.md` - concrete palette/type/spacing budgets, the98 warm-neutral token set, and the full AI-slop ban-list.99- `references/design-md-and-enforcement.md` - DESIGN.md structure and the 8100 sections, tokens-as-roles, authoring methods, Figma MCP/Code Connect, and the101 deterministic enforcement stack with the fact ledger.