packages/shared-skills/skills/frontend/references/design/README.md
You are an elite frontend design engineer. Your only job in this skill is to route correctly: pick the right reference file(s), load them into context, then execute with their guidance. The reference files contain the actual design rules — this file just decides which to consult.
taste-skill.md alone is a strong default, but it does not commit to any specific aesthetic. When the user has named a clear visual direction (a brand, a style label, an existing site to mimic), a dedicated reference produces sharper output than the generic default. Loading the wrong reference, or none, is how you produce the bland generic SaaS slop these skills exist to prevent.
The library lives flat in this directory (references/design/, max depth 1) and has two conceptual layers, and most non-trivial tasks load one from each layer:
-skill.md or start with imagegen-.claude.md, notion.md, stripe.md, …).A combined directory of all 81 reference files is at _INDEX.md. Read that index before loading anything unless the routing is obvious — it has the full mood-mapping and stacking rules in one place.
For broader brand/style coverage, load the open-design skill — the local nexu-io/open-design library (150+ design systems).
Use the open-design skill when the request explicitly mentions Open Design, Claude Design alternatives, design-system libraries, or a brand/style that is not covered by this skill's curated reference set. Treat Open Design as the expanded reference library; keep this skill responsible for routing discipline, design-system gating, and frontend execution quality.
Before touching any UI code, before routing to any reference, before even thinking about aesthetics — run this gate.
DESIGN.md?Search for it: Look at project root, then docs/, then src/. Any file named DESIGN.md, design-system.md, or design-tokens.md.
design-system-architecture.md — it defines the exact structure.DESIGN.md at project root following the 7-section structure from the reference.DESIGN.md exists and is committed to context.DESIGN.md into context.DESIGN.md first, then use it.This gate is non-negotiable. No design system = no UI work. Period.
If the project ships React (react in package.json), three dev-only tools are installed by default before any UI implementation. The user opts out, not in.
Grep the entry file (app/layout.tsx, pages/_document.tsx, src/main.tsx, src/index.tsx, app/root.tsx) for react-grab and react-scan. Check package.json and the skills directory for react-doctor traces.
Run from project root:
npx grab@latest init # react-grab — UI element → AI source context
npx react-doctor@latest install # react-doctor — agent-skill install + static scan
npx react-scan@latest init # react-scan — render highlighter
All three CLIs auto-detect the framework and gate the runtime tools on process.env.NODE_ENV === 'development' / import.meta.env.DEV. Read react-dev-tooling-skill.md for manual install snippets per framework (Next.js App/Pages, Vite, Webpack, CRA, Remix, Astro), the *_DISABLE_REACT_DEVTOOLS feature-flag pattern, and verification that the tools do NOT leak to production.
Open the entry file. Each tool must sit behind a NODE_ENV === 'development' or import.meta.env.DEV check. If not, fix the gate before proceeding — the rest of this skill assumes these tools never reach production.
This gate is non-negotiable for React projects. No dev tooling = the agent flies blind on render perf and gets 2× slower edit cycles. Period.
Run through this in order and stop at the first match. Do not skip — earlier rules dominate later ones.
Phrasings: "make it look like Linear", "Stripe-style buttons", "Notion-feel sidebar", "like {brand}'s landing page", or pasting a screenshot of a known brand site.
Action: Open _INDEX.md, find the brand under "Layer B — Design Systems", then load <brand>.md. Use it as the project's design system source of truth (color hex values, type scale, component specs, do/don'ts).
Then also load Layer A — usually taste-skill.md for execution discipline (the design system says what, the taste-skill says how to write the React/CSS without slop).
If the user names a brand not in the index, fall back to Step 2 + a mood-based shortcut from the index.
Map their phrasing to one taste-skill style file:
| User says... | Load |
|---|---|
| "minimal", "clean", "Notion-like", "Linear-like", "editorial", "boring is good" | minimalist-skill.md |
| "brutalist", "raw", "Swiss", "experimental", "industrial", "anti-design", "unstyled" | brutalist-skill.md |
| "premium", "luxury", "calm", "expensive", "spa", "wellness", "boutique", "elegant" | soft-skill.md |
| "Awwwards-level", "wow factor", "magnetic", "scroll-triggered", "high-variance", "cinematic", "make it crazy" | gpt-tasteskill.md |
| Nothing specific — just "make a good UI" | taste-skill.md (default all-rounder) |
You may also load a brand DESIGN.md from Layer B as a concrete reference if the user's mood maps cleanly (see the "Mood-based shortcuts" section in _INDEX.md).
Triggers: "fix the design", "this looks bad", "redesign", "make this better", "improve the UI", "the spacing is off", or the user shares an existing screenshot/codebase and asks for visual upgrades (not new pages).
Action: Load redesign-skill.md. This skill teaches the audit-first workflow (identify the weak spots before touching code). Stack with a Layer B brand if the user wants the redesign to lean toward a specific aesthetic.
Do NOT use this for greenfield work — the audit phase is wasted effort there.
Triggers: "generate the design first then code it", "make a mockup before we build", "show me what it could look like".
Action: Load both:
image-to-code-skill.md (the workflow: generate → analyze → implement)imagegen-frontend-web.md for web, or imagegen-frontend-mobile.md for mobile screensIf the user wants only the imagery (no code), load only the imagegen file.
Triggers: "generate a mockup image", "create a brand kit board", "design reference image", "moodboard".
Action: Load only the relevant imagegen file. Do not load code-generation skills — those will pull the agent toward writing components when the user just wants a picture.
| Want | Load |
|---|---|
| Website mockup image | imagegen-frontend-web.md |
| Mobile app screen images | imagegen-frontend-mobile.md |
| Brand-kit overview (logo + colors + typography + mockups) | imagegen-brandkit.md |
Triggers: "Google Stitch", "compatible with Stitch", "also write a DESIGN.md", "give me the design as a doc".
Action: Add stitch-skill.md on top of whatever you loaded in Steps 1–4.
Triggers (mid-conversation, not initial): "you keep leaving placeholders", "stop with the // TODO", "finish the implementation", "no half-done components".
Action: Add output-skill.md on top of whatever is currently loaded. This stacks cleanly — it is purely about output completeness, not visual style.
minimalist-skill and brutalist-skill simultaneously — they encode opposite spacing and typography philosophies. Pick one.taste-skill.md and gpt-tasteskill.md are also style-skills — do not stack them with minimalist, brutalist, or soft. They are alternative defaults at different intensity levels.output-skill.md and stitch-skill.md stack on top of any style skill. They add discipline and output format, not visual direction.redesign-skill.md replaces a style-skill when the task is auditing, not building. Stack a Layer B brand if the user wants a specific direction.image-to-code-skill.md pairs with one imagegen skill for the full flow.image-to-code-skill.md instead.as any or @ts-ignore to make a borrowed component work. That is type-safety slop. Adapt the component cleanly.Once references are loaded, before writing any UI code:
DESIGN.md was read (or created) in Phase 0. If you skipped it, stop and go back now.package.json. Do not assume framer-motion, gsap, lucide-react, tailwindcss (and which version!) are installed. If missing, output the install command first.@tailwindcss/postcss or the Vite plugin, NOT tailwindcss in postcss.config.js. v3 uses different config syntax. Pick based on what's in package.json.min-h-[100dvh], never h-screen, for full-height heroes — h-screen causes catastrophic jumps on iOS Safari.'use client' leaf component. Don't bleed 'use client' to the page level.DESIGN.md. No orphan hex codes, no magic px values. If you need a new token, update DESIGN.md first.DESIGN.md Section 5.| User asks for... | Load these |
|---|---|
| "Build me a landing page" (no other info) | taste-skill.md |
| "Build me a Linear-style landing page" | linear.app.md + taste-skill.md |
| "Make it Notion-like and minimal" | notion.md + minimalist-skill.md |
| "Premium SaaS hero, like Stripe" | stripe.md + soft-skill.md |
| "Brutalist portfolio" | brutalist-skill.md (+ optional nike.md for tonal reference) |
| "Awwwards-tier scroll experience" | gpt-tasteskill.md |
| "Improve this existing dashboard" | redesign-skill.md (+ Layer B if user names a target aesthetic) |
| "Mockup of a fintech mobile app" | imagegen-frontend-mobile.md (+ revolut.md or stripe.md if specified) |
| "Generate a brand identity board for {company}" | imagegen-brandkit.md |
| "Stop using placeholders" | Add output-skill.md to current stack |
| "Also output a DESIGN.md doc" | Add stitch-skill.md to current stack |
After implementation is complete, before declaring the task done, run a real browser-based Design QA.
Code that "looks correct" in an editor is not verified. Colors render differently, spacing collapses, fonts fail to load, responsive breakpoints break, states are missing. The only way to know is to SEE it in a real browser.
agent-browser skill or the project's dev server + screenshot tool).DESIGN.md palette — no off-brand colors visibleDESIGN.md) works completelyAfter passing QA, write a short summary:
DESIGN.md