Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add YuqingNicole/variant-design-skill
Or install specific skill: npx add-skill https://github.com/YuqingNicole/variant-design-skill
# Description
AI-driven interactive design generation and style analysis with Impeccable design system. Two modes โ (1) Generate: 3 distinct, fully-animated design variations from a prompt with scroll reveals, micro-interactions, animated charts, and functional JS patterns; (2) Analyze: audit existing sites for style consistency, extract design tokens, generate style-matched new pages, and produce migration plans. Built-in scenario materials (10 domains), design system references (typography, color, spatial, motion, micro-interactions, interaction, responsive, UX writing, style audit), interactive pattern library, and anti-AI-slop quality gates. Triggers on: "design options for X", "show me variations", "vary this design", "audit", "analyze my site", "check consistency", "match this style", "extract tokens", "new page matching my site", "migrate", "add motion", "dramatize", "make interactive".
# SKILL.md
name: variant-design
description: AI-driven interactive design generation and style analysis with Impeccable design system. Two modes โ (1) Generate: 3 distinct, fully-animated design variations from a prompt with scroll reveals, micro-interactions, animated charts, and functional JS patterns; (2) Analyze: audit existing sites for style consistency, extract design tokens, generate style-matched new pages, and produce migration plans. Built-in scenario materials (10 domains), design system references (typography, color, spatial, motion, micro-interactions, interaction, responsive, UX writing, style audit), interactive pattern library, and anti-AI-slop quality gates. Triggers on: "design options for X", "show me variations", "vary this design", "audit", "analyze my site", "check consistency", "match this style", "extract tokens", "new page matching my site", "migrate", "add motion", "dramatize", "make interactive".
Variant Design
Solve the blank canvas problem. Prompt โ 3 fully-formed distinct designs โ vary โ export.
About
Inspired by the Variant design community โ a space where designers share divergent takes on the same brief. This skill brings that practice into Claude Code: every prompt yields three designs that feel like they came from different studios, then lets you iterate with one-word actions.
Built on the Impeccable design system โ a comprehensive set of design references covering typography, color theory, spatial design, motion, interaction patterns, responsive design, and UX writing. Every design decision is grounded in these principles.
Supports: Interactive HTML (default) ยท React + Framer Motion ยท 10 domain reference libraries ยท 39 palettes ยท design system references ยท micro-interaction library ยท interactive pattern library ยท style audit & token extraction ยท variation actions
CLI Workflow (Claude Code)
This skill runs inside Claude Code โ a terminal. Design decisions must account for the fact that the user cannot see the output without opening a browser. Every step of the workflow should minimize friction between "idea" and "eyes on pixels."
Output Convention
File naming: variant-[scenario]-[variation].html (e.g., variant-dashboard-A.html)
Output directory: Write to ./variant-output/ in the current working directory. Create the directory if it doesn't exist. This keeps design files separate from project source code.
variant-output/
โโโ variant-dashboard-A.html
โโโ variant-dashboard-B.html
โโโ variant-dashboard-C.html
โโโ tokens/
โโโ dashboard-A-tokens.css (when user extracts tokens)
Iteration files: On variation actions, overwrite the same file (e.g., variant-dashboard-A.html) rather than creating variant-dashboard-A-v2.html. The user is iterating on one design, not collecting versions. Git handles history.
Auto-Preview
After every file write, immediately open it in the user's default browser:
# macOS
open variant-output/variant-dashboard-A.html
# Linux
xdg-open variant-output/variant-dashboard-A.html
This is non-negotiable. The user should never have to manually find and open the file. When iterating (Vary subtle, Remix colors, etc.), the browser tab auto-refreshes because the file is overwritten โ just re-run open to bring it to focus.
Live Preview Server (Optional)
If the user asks for live preview or says "watch mode", start a lightweight file server with auto-reload:
# Using Python (available on most systems)
cd variant-output && python3 -c "
import http.server, socketserver, os, time, threading
class ReloadHandler(http.server.SimpleHTTPRequestHandler):
def end_headers(self):
self.send_header('Cache-Control', 'no-store')
super().end_headers()
def do_GET(self):
if self.path == '/_poll':
self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(str(os.path.getmtime('.')).encode())
return
super().do_GET()
with socketserver.TCPServer(('', 3333), ReloadHandler) as httpd:
print('Preview: http://localhost:3333')
httpd.serve_forever()
" &
Then inject a tiny auto-reload script at the bottom of every generated HTML:
<script>
// Auto-reload in dev (remove for production)
(async function poll() {
try {
const r = await fetch('/_poll');
const t = await r.text();
if (window._lastMod && t !== window._lastMod) location.reload();
window._lastMod = t;
} catch(e) {}
setTimeout(poll, 800);
})();
</script>
Only include this script when the preview server is running. Remove it on export.
Compact CLI Output
Terminal space is precious. Keep text responses short and structured:
On initial generation (3 variations):
โฆ Detected: coffee brand landing page โ loading food-beverage.md + micro-interactions.md
A โ Terroir Warm Fraunces + Instrument Sans Minimal/Editorial
B โ Espresso Dark DM Serif Display + DM Sans Dark/Premium
C โ Fresh Market Crimson Pro + Plus Jakarta Warm/Human
Interactions: scroll reveal, counter animation, card lift, filter chips, lightbox
Files written:
variant-output/variant-coffee-A.html โ opened in browser
variant-output/variant-coffee-B.html
variant-output/variant-coffee-C.html
Pick a variation to iterate, or an action:
Reshape โ Vary strong ยท Distill ยท Shuffle layout ยท Change style
Tune โ Vary subtle ยท Remix colors ยท Mix (A+B)
Animate โ Add motion ยท Dramatize ยท Make interactive
Refine โ Polish ยท Critique ยท See other views
Export โ Extract tokens
On iteration:
โฆ Variation A โ Vary subtle ยท iteration 2
Changed: tightened spacing to 4pt grid, added tabular-nums on stats,
hover now lifts 4pxโ6px with shadow, scroll stagger 60msโ80ms
variant-output/variant-coffee-A.html โ updated & opened
Next action?
Never dump the full HTML in the chat. Write to file, open in browser, show a 2-3 line summary of what changed. The user reads code in their editor, not in the terminal.
Quick Triggers
Support shorthand prompts for fast iteration in the terminal:
| User types | Expands to |
|---|---|
A vary strong |
Apply "Vary strong" to Variation A |
B remix colors |
Apply "Remix colors" to Variation B |
C โ mobile |
Show Variation C as mobile viewport |
pick A |
Select Variation A as the winner, archive B and C |
A + B colors |
Mix: A's layout with B's color palette |
tokens A |
Extract design tokens from Variation A to CSS file |
open B |
Re-open Variation B in browser |
dark mode A |
Generate dark โ light toggle variant of A |
compare |
Open all 3 variations side-by-side (writes a comparison HTML) |
Comparison View
When the user says "compare" or wants to see all variations together, generate a single variant-output/_compare.html that displays all 3 side-by-side in iframes:
<style>
body { margin:0; display:grid; grid-template-columns:1fr 1fr 1fr; height:100vh; gap:2px; background:#111; }
iframe { width:100%; height:100%; border:none; }
.label { position:absolute; top:8px; left:12px; background:#111; color:#fff; padding:4px 12px;
font:12px/1 monospace; border-radius:4px; z-index:10; }
.frame { position:relative; }
</style>
<div class="frame"><span class="label">A</span><iframe src="variant-coffee-A.html"></iframe></div>
<div class="frame"><span class="label">B</span><iframe src="variant-coffee-B.html"></iframe></div>
<div class="frame"><span class="label">C</span><iframe src="variant-coffee-C.html"></iframe></div>
Framework Export
When the user says "export to [framework]", transform the winning variation into the target structure:
| Target | Action |
|---|---|
export to next |
Create app/page.tsx + app/globals.css with tokens + public/ for images |
export to vite |
Create src/App.jsx + src/index.css + index.html |
export to astro |
Create src/pages/index.astro + src/styles/tokens.css |
export to static |
Clean HTML (remove dev scripts), optimize images, inline critical CSS |
Always ask which variation to export if the user hasn't picked one yet.
Clipboard Mode
If the user says "copy" or "clipboard", copy the HTML to system clipboard instead of (or in addition to) writing the file:
# macOS
cat variant-output/variant-coffee-A.html | pbcopy
Useful for pasting into CodePen, Claude.ai artifacts, or other tools.
Project Context Initialization
On first use in a project, gather design context to ground all future generations. Ask the user:
- Users & Purpose โ Who uses this? What problem does it solve? What's the core task?
- Brand & Personality โ Existing brand colors? Tone (playful / serious / technical / warm)? Any sites you admire?
- Aesthetic Preferences โ Light or dark? Minimal or dense? Any direction from the aesthetic table you're drawn to?
- Constraints โ Framework requirements? Accessibility standards beyond baseline? Target devices?
If the user can't answer, infer from their codebase: scan for existing color variables, font imports, component patterns, and README/brand docs. Confirm inferences before proceeding.
Persist context as a comment block at the top of generated files or in the conversation โ reference it in every subsequent generation to ensure consistency across variations.
Site Analysis Mode
When the user points to existing code (file paths, a directory, or says "analyze/audit/check my site"), switch from generation mode to analysis mode. Load references/design-system/style-audit.md for the full methodology.
Triggers
| User says | Action |
|---|---|
| "analyze my site" / "audit this" / "check consistency" | Full style audit โ report |
| "match this style" / "follow existing design" / "extend my site" | Extract tokens โ generate matching pages |
| "extract tokens" (on existing files, not a generated variation) | Token extraction โ CSS custom properties file |
| "what's wrong with this design" / "review my CSS" | Style consistency check โ findings list |
| "migrate" / "consolidate" / "clean up" | Audit โ token generation โ migration plan |
| "add a [page] to my site" / "new page matching my existing design" | Extract โ match โ generate |
Analysis Workflow
Step 1: Scan โ Read the files the user points to. If no specific files given, scan for:
# Auto-detect entry points
find . -name "*.html" -o -name "*.css" -o -name "*.tsx" -o -name "*.jsx" \
-o -name "*.vue" -o -name "*.svelte" | head -20
# Also check for:
# - tailwind.config.* (Tailwind projects)
# - globals.css / index.css / app.css (common entry CSS)
# - tokens.css / variables.css / theme.* (existing token files)
Step 2: Extract โ Pull all design primitives following the Token Extraction schema in style-audit.md: colors, typography, spacing, components, transitions. Group by semantic role.
Step 3: Detect โ Run all consistency checks from style-audit.md Section 2. For each finding, record severity (error/warning/info), the specific values, file locations, and a concrete fix.
Step 4: Report โ Present findings using the compact terminal format from style-audit.md Section 3. Score out of 100. List priority fixes.
Step 5: Act โ Based on what the user wants:
- Audit only: Stop after the report. Offer to generate a token file or migration plan.
- Extract tokens: Generate a tokens.css file consolidating all values (see style-audit.md Section 4).
- Generate matching page: Lock extracted tokens as constraints, generate new pages that match (see below).
- Migration plan: Generate phased checklist for consolidating the codebase (see style-audit.md Section 6).
Style-Matched Generation
When generating new pages for an existing project, the workflow changes:
- Extract first โ Always analyze existing code before generating. Never guess the style.
- Lock tokens โ All generated code must use
var(--*)referencing the existing token system. If no token system exists, generate one first and get user approval. - Match patterns โ Study existing component shapes (card radius, shadow, padding), interaction patterns (transition durations, hover effects), layout patterns (container width, grid), and naming conventions (BEM, Tailwind, CSS modules).
- Show diff from existing โ In the Summary Card, note which tokens/patterns are being reused vs. which are new additions.
- Flag deviations โ If the design system principles (from Impeccable) conflict with the existing style, flag it: "Your existing buttons have no hover state โ I've added one following your color palette. OK?"
Summary Card for style-matched generation:
โฆ New page: /pricing โ matching existing site style
Reusing: --bg, --surface, --card, --border, --text, --muted, --accent
Reusing: Plus Jakarta Sans 400/600, 4 font sizes, 8px grid
Reusing: .card (24px padding, 8px radius, 1px border)
Reusing: .btn (100px radius, 200ms transition)
New additions:
+ Pricing toggle (monthly/annual) โ uses existing .btn style
+ FAQ accordion โ uses existing .card + new grid height animation
+ Comparison table โ new component, follows existing spacing/color
File: variant-output/pricing-matched.html โ opened in browser
Quick Triggers for Analysis
| User types | Action |
|---|---|
audit |
Full style audit on current project |
audit src/styles/ |
Audit specific directory |
tokens |
Extract tokens from existing code โ CSS file |
match |
Enter style-matched generation mode |
new page pricing |
Generate /pricing page matching existing style |
migrate |
Generate migration plan for token consolidation |
compare old new |
Side-by-side: existing page vs. redesigned version |
Smart Prompt Handling
Before generating, apply these three rules in order:
- Confirm scenario detection. State the detected scenario and aesthetic direction. Ask the user to confirm before proceeding: "I'm reading this as a [scenario] with [direction] vibes โ correct?"
- Resolve vague prompts โ max 2 questions. If the prompt lacks enough signal to differentiate 3 variations (e.g. "design something cool"), ask at most 2 clarifying questions. Focus on: (a) what it's for / who uses it, (b) any aesthetic leaning. If the user says "surprise me," pick 3 maximally divergent directions and proceed.
- Never generate blind. Do not produce code until you have either (a) user confirmation of the scenario, or (b) answers to your clarifying questions, or (c) an explicit "surprise me."
Scenario Detection โ Load Reference
Identify the scenario and load the corresponding reference file before designing:
| User asks about... | Also matches | Load |
|---|---|---|
| Dashboard, analytics, metrics, monitoring, data viz | ๅๅฐ, admin panel, management system, backoffice, CRM, internal tool | references/dashboard.md |
| Editorial, magazine, journalism, news, article | blog post, report, white paper, newsletter | references/editorial.md |
| Landing page, SaaS, product page, startup, B2B | website, ๅฎ็ฝ, corporate site, personal site, portfolio, agency | references/saas.md |
| E-commerce, shopping, product, fintech card, consumer | store, shop, marketplace, cart, checkout | references/ecommerce.md |
| Education, learning app, quiz, language, science | lesson, flashcard, tutorial, training, course | references/education.md |
| Generative art, music tool, 3D, creative tool, synthesizer | tool, studio, editor, canvas, sequencer, DAW | references/creative.md |
| Mobile app, iOS, Android, onboarding, home screen | app, ๅบ็จ, ็้ข, UI screen | references/mobile.md |
| Portfolio, personal site, showcase, case study | designer portfolio, developer site, freelancer, agency, ไฝๅ้ | references/portfolio.md |
| Restaurant, recipe, food, coffee, bakery, menu | cafรฉ, bar, cocktail, wine, tea, meal planning, ้คๅ , ่ๅ | references/food-beverage.md |
| Fashion, clothing, beauty, lookbook, interior design | streetwear, luxury brand, skincare, cosmetics, furniture, ๆถๅฐ, ๆ่ฃ | references/fashion.md |
| Unsure / general | Use aesthetic directions table below + references/palettes.md |
Always also load the relevant design system references from references/design-system/ based on what matters most for the design:
| Design challenge | Load |
|---|---|
| Font selection, type scale, hierarchy | references/design-system/typography.md |
| Color palette, dark mode, contrast | references/design-system/color-and-contrast.md |
| Layout, spacing, grids, visual hierarchy | references/design-system/spatial-design.md |
| Animations, transitions, loading states | references/design-system/motion-design.md |
| Micro-interactions, scroll reveals, hover effects | references/design-system/micro-interactions.md |
| Functional interactions (filter, drag, charts, forms) | references/interactive-patterns.md |
| Forms, states, focus, keyboard nav | references/design-system/interaction-design.md |
| Style audit, token extraction, consistency checks | references/design-system/style-audit.md |
| Mobile-first, breakpoints, fluid design | references/design-system/responsive-design.md |
| Labels, errors, empty states, microcopy | references/design-system/ux-writing.md |
For initial generation, load at minimum: typography, color-and-contrast, spatial-design, and micro-interactions. Load interactive-patterns when the design involves filtering, forms, charts, galleries, or drag-and-drop. Load others as the design demands.
Core Workflow
1. Parse โ Detect โ Load
Identify scenario, load domain reference file + relevant design system references, pick 3 starter prompts and palettes. Study the Real Community Examples for composition patterns and what makes each design work โ extract the principle, not the surface style.
2. Generate 3 Distinct Variations
Each variation = a different studio's interpretation. Never two in the same direction.
Universal aesthetic directions:
| Direction | Feel | Signature |
|---|---|---|
| Minimal / Editorial | Type-driven, generous space | One strong font, minimal color |
| Bold / Expressive | High contrast, graphic | Dominant color block |
| Dark / Premium | Moody, atmospheric | Deep bg, elevated surfaces (not shadows) |
| Warm / Human | Rounded, approachable | Soft palette, organic forms |
| Data / Technical | Dense, systematic | Grid, monospace, tight |
| Neo-brutalist | Raw, unconventional | Bold outlines, broken grid |
| Luxury / Silence | Maximum negative space | One image, sparse text |
For each variation, define before coding:
- Starter prompt (from reference or custom)
- Color palette (from reference or palettes.md) โ use OKLCH for perceptually uniform colors where possible
- Typography: display font + body font (see banned fonts list below)
- Layout pattern (from reference) โ consult spatial-design.md for grid and hierarchy principles
- Motion strategy โ consult motion-design.md for timing and easing
- Interaction plan โ which micro-interactions and interactive patterns from micro-interactions.md and interactive-patterns.md to include (minimum 3 micro-interactions + domain-specific patterns)
- One signature detail that makes this variation unforgettable
3. Implement & Present
Working code โ HTML (default) or React. Real content, no lorem ipsum. Visually complete.
Write each variation to a separate file following the CLI Output Convention (see "CLI Workflow" section). Never dump full HTML into the chat โ write to variant-output/ and open in browser.
Present a compact Summary Card in the terminal for each variation:
A โ [Name] ยท [Direction] ยท [Palette] ยท [Fonts]
Layout: [pattern] ยท Signature: [detail] ยท Interactions: [list]
Then show the file paths and open the first variation in the browser. The user reads the design in the browser, not in the terminal.
4. AI Slop Test (Quality Gate)
Before presenting, run this check on each variation:
If you showed this interface to someone and said "AI made this," would they believe you immediately? If yes, redesign.
A distinctive interface should make someone ask "how was this made?" not "which AI made this?" Review the Anti-Patterns table below โ they are the fingerprints of AI-generated work.
Interactivity gate: Before presenting, also verify: Does this page move? Scroll down โ do elements animate in? Hover a card โ does it respond? Click a button โ does it give feedback? If anything is dead on interaction, fix it before presenting.
After passing, show a one-line confidence signal: e.g. "Passed: distinctive fonts, OKLCH palette, tinted neutrals, WCAG AA, scroll reveals, counter animation, card hover lift, no AI slop patterns detected."
5. Offer Variation Actions
After presenting, always offer grouped by intent:
Which direction resonates? Pick an action:
Reshape โ Vary strong ยท Distill ยท Shuffle layout ยท Change style
Tune โ Vary subtle ยท Remix colors ยท Mix (e.g. "Mix A + B")
Animate โ Add motion ยท Dramatize ยท Make interactive
Refine โ Polish ยท Critique ยท See other views
Export โ Extract tokensCan't decide? Say "Mix A + B" or "A's layout + C's colors".
Variation Action Definitions
Vary strong
Amplify current direction to maximum. More contrast, stronger type, bolder color, more dramatic composition. Consult references/design-system/typography.md for scale ratios and references/design-system/color-and-contrast.md for high-contrast palette construction.
Before โ After example:
- Body text 16px, heading 32px โ Body 15px, heading 72px (ratio 1.25 โ 1.5+)
- Accent used on buttons only โ Accent dominates hero section, bleeds into nav
- Subtle 200ms fade-in โ Dramatic 600ms staggered reveal with scale transform
Vary subtle
Tighten spacing, refine hierarchy, soften where needed. Same direction, higher craft. Focus on vertical rhythm, optical alignment, and micro-interactions per references/design-system/spatial-design.md and references/design-system/motion-design.md.
Before โ After example:
- Inconsistent padding (16/20/24px) โ Locked to 4pt grid (16/24/32px)
- Generic hover (opacity change) โ Contextual hover (card lifts 2px, button darkens accent)
- Missing OpenType โ tabular-nums on data, font-kerning: normal on headlines
Distill
Strip the design to its absolute essence. Inspired by the Impeccable distill philosophy โ ruthless simplification reveals what truly matters.
Process:
1. Identify the single core purpose of the interface
2. For each element, ask: "Does removing this break the core purpose?" If no, remove it.
3. Simplify across all dimensions:
- Information: Reduce visible options, use progressive disclosure (<details>, hover reveals)
- Visual: Fewer colors (aim for 2โ3 total), fewer type sizes, remove decorative elements
- Layout: Collapse sections, merge related content, eliminate redundant containers
- Interaction: Fewer clicks to complete the primary task, remove confirmation steps where undo works
- Content: Shorter headlines, tighter copy, remove introductory paragraphs that restate the heading
4. Verify: Can a new user complete the core task faster? If not, you removed the wrong things.
Before โ After example:
- 5-section landing page โ 2 sections: hero with value prop + single CTA
- Dashboard with 12 metric cards โ 3 key metrics large + "Show all" expandable
- Nav with 8 items โ 4 primary + overflow menu
Change style
Extract structure/layout DNA, replace entire visual language with a different direction from the table above.
Remix colors
Keep all shapes, type, layout. Generate 3 palettes using OKLCH color space (per references/design-system/color-and-contrast.md):
1. Analogous to current โ shift hue ยฑ30ยฐ, adjust chroma
2. Complementary contrast โ opposite hue, rebalanced lightness
3. Unexpected/left-field โ completely different mood
Always tint neutrals toward the brand hue. Never use pure gray, pure black (#000), or pure white (#fff).
Before โ After example (palette 3, unexpected):
- Dark indigo tech dashboard โ Warm cream editorial palette with rust accent
- All neutrals shift from cool blue-gray โ warm stone-tinted
Add motion
Layer additional micro-interactions and animations onto the current design. Consult references/design-system/micro-interactions.md for the full pattern library.
Process:
1. Audit current interactions โ list what already moves and what's dead
2. Add missing baseline: scroll reveals on all sections, card hover lifts, button press feedback
3. Add 2-3 domain-appropriate enhancements from the "Picking Micro-Interactions by Domain" table
4. Wire up any static data displays: counter animations for numbers, bar/donut animations for charts
5. Verify reduced motion fallbacks exist for every new animation
Before โ After example:
- Static hero โ Staggered entrance (title 100ms โ subtitle 250ms โ CTA 400ms โ image 300ms)
- Cards appear instantly โ Scroll-triggered fade-up with 80ms stagger
- Numbers display as-is โ Count up from 0 with easeOutExpo on scroll into view
- Image gallery static โ Lightbox on click with keyboard navigation
Dramatize
Push existing interactions to their cinematic maximum. Not just "add hover" โ make the page feel like a directed experience.
Process:
1. Replace subtle scroll reveals with more expressive entrances (word-by-word text reveal, curtain reveal, scale-from-zero)
2. Add parallax layers to hero sections (foreground moves faster than background)
3. Upgrade hover effects: card lift โ tilt-3D, link underline โ magnetic cursor pull
4. Add page-level choreography: scroll progress bar, sticky header morph, section transitions
5. Include a "hero moment" โ one interaction that makes the user pause (e.g., counter hitting a big number, image comparison slider, infinite marquee of client logos)
Before โ After example:
- Simple fade-in on scroll โ Staggered word reveal + parallax background + scroll progress bar
- Card hover lifts 4px โ Card tilts toward cursor in 3D perspective with glow
- Static hero โ Curtain reveal on page load + magnetic CTA button + background parallax
Make interactive
Add functional interaction patterns that turn the design from a visual into a working prototype. Consult references/interactive-patterns.md for full implementations.
Process:
1. Identify what should be functional: Is there a form? Add validation + multi-step. Gallery? Add lightbox. Products? Add filtering. Data? Add live charts.
2. Add the most impactful interaction from interactive-patterns.md for this domain (see "Picking Patterns by Domain" table)
3. Wire up navigation: tabs work, accordions expand, drawers slide, modals open with proper focus trap
4. Add data interactions: sorting, filtering, search โ with animated transitions between states
5. Add feedback loops: toast on action, copy-to-clipboard confirmation, form submission success state
Before โ After example:
- Static product grid โ Filter by category with animated show/hide + sort by price with FLIP animation
- Image gallery โ Lightbox with keyboard nav (โโ Esc) + zoom on hover + dot indicators
- Contact form โ Multi-step with progress bar, floating labels, real-time validation, submitโloadingโsuccess
- Dashboard metrics โ Animated bar chart on scroll, donut chart that draws in, sparklines that trace, flash-on-update for live data
Shuffle layout
Same content + style. Rearrange structure: try full-bleed โ asymmetric grid โ editorial columns โ card masonry. Consult references/design-system/spatial-design.md for grid systems and visual hierarchy principles.
Before โ After example:
- Centered hero + 3-column grid โ Full-bleed left-aligned hero + asymmetric 2-column with oversized feature
Polish
Apply Impeccable design system refinements systematically:
- Typography (references/design-system/typography.md): vertical rhythm, modular scale, OpenType features (tabular-nums for data, proper fractions), font-display: swap, size-adjust fallback metrics
- Spatial (references/design-system/spatial-design.md): squint test, hierarchy through multiple dimensions, optical alignment (text negative margin -0.05em, icon center offsets)
- Interaction (references/design-system/interaction-design.md): all 8 interactive states (default/hover/focus/active/disabled/loading/error/success), focus-visible rings, proper form design (visible labels, blur validation, aria-describedby errors)
- Motion (references/design-system/motion-design.md): 100/300/500 rule, ease-out-expo for enters, exit at 75% of enter duration, staggered animations with CSS custom properties
- UX Writing (references/design-system/ux-writing.md): specific button labels (verb + object), error formula (what โ why โ fix), empty states that teach the interface, link text with standalone meaning
- Clarify copy: Scan all visible text โ replace vague labels with specific ones, remove redundant intros, ensure every word earns its place. "Submit" โ "Create account". "Error" โ "Email needs to be in [email protected] format."
Critique
Systematic audit against design system principles. Score each dimension and provide specific fixes:
- Typography: Is hierarchy clear? Scale ratio consistent? Fonts distinctive? Vertical rhythm locked?
- Color: WCAG contrast passing? Neutrals tinted? 60-30-10 balance? No pure black/white?
- Layout: Passes squint test? Varied spacing creates rhythm? Cards justified? No nested cards?
- Motion: Durations appropriate (100/300/500)? Ease-out for enters? Reduced motion respected? Only transform+opacity animated?
- Interaction: All 8 states designed? Focus rings present? Touch targets โฅ44px? Skeleton > spinner?
- Responsive: Mobile-first? Content-driven breakpoints? Input method detected (
pointer/hover)? Safe areas? - Writing: Specific button labels? Helpful errors (what/why/fix)? Empty states that teach? No redundant copy?
- Resilience: Text truncation handled? Long content graceful? Loading/error states present? i18n-ready spacing?
Extract tokens
Export the design's token system in the requested format:
CSS Custom Properties (default):
:root {
/* Primitives */
--blue-500: oklch(55% 0.2 260);
--stone-100: oklch(95% 0.01 60);
/* Semantic */
--color-primary: var(--blue-500);
--color-surface: var(--stone-100);
/* Typography */
--font-display: 'Fraunces', serif;
--font-body: 'Instrument Sans', sans-serif;
--text-xs: clamp(0.7rem, 0.65rem + 0.25vw, 0.75rem);
--text-base: clamp(0.95rem, 0.9rem + 0.25vw, 1.0625rem);
--text-xl: clamp(1.5rem, 1rem + 2.5vw, 3rem);
/* Spacing */
--space-xs: 4px; --space-sm: 8px; --space-md: 16px;
--space-lg: 24px; --space-xl: 48px; --space-2xl: 96px;
/* Motion */
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
--duration-instant: 100ms;
--duration-fast: 200ms;
--duration-normal: 350ms;
}
JSON (for design tools / Figma): Same structure as flat key-value JSON.
Tailwind config: Extend theme with colors, fontFamily, spacing, transitionTimingFunction.
See other views
Render additional views with full design system compliance:
- Empty state โ not just "No items." Design as an onboarding moment:
- Acknowledge briefly ("No projects yet")
- Explain the value of filling it ("Create your first project to start tracking progress")
- Provide a clear primary action (prominent CTA button)
- Add visual interest (illustration, icon, or subtle pattern โ never a sad face)
-
If applicable, show a preview of what it will look like when populated
-
Data-filled state โ realistic volume: 3โ7 items for lists, 6โ12 months of data for charts, edge cases included (one very long name, one empty optional field)
-
Mobile viewport โ not a shrunk desktop. Per
references/design-system/responsive-design.md: - Rethink for thumb zones (primary actions bottom-right for right-handed)
- Touch targets โฅ44px with padding
- Navigation collapses to hamburger + drawer or bottom tab bar
- Tables transform to cards with
data-labelattributes -
Use
@media (pointer: coarse)for larger tap areas -
Dark โ Light toggle โ per
references/design-system/color-and-contrast.md: - Dark mode uses lighter surfaces for depth (no shadows)
- Desaturate accent colors slightly for dark backgrounds
- Reduce font weight (light text on dark appears heavier)
-
Never pure black (#000) background โ use oklch(12-18% ...) tinted
-
Onboarding flow โ per Impeccable onboard principles:
- Show Don't Tell: inline demos > text instructions
- Make It Optional: skip button always visible, no forced tours
- Time to Value: reach the "aha moment" in โค3 steps
- Context Over Ceremony: teach at the moment of need, not upfront
-
Respect User Intelligence: no condescending language, allow power-user shortcuts
-
Hover / active / focus states โ all interactive elements with visible state changes
Mix
Combine two variations into one. Accepts forms like "Mix A + B" or "A's layout + C's colors."
Process:
1. Use the first-named variation as the structural base (layout, hierarchy, component structure)
2. Layer the second variation's visual language (palette, typography, motion, signature details)
3. When elements conflict (e.g. both have a distinctive nav pattern), explicitly state the trade-off and pick the one that better serves the content
4. Label result as "Mix [A+B]" and present with a Summary Card showing which parts came from where
Variation Loop
Track iteration count internally (reset per variation). After any variation action:
1. Overwrite the same file (e.g. variant-output/variant-coffee-A.html) โ don't create new files for iterations
2. Re-open in browser โ run open / xdg-open so the user sees the update immediately
3. Show a 2-3 line diff summary in the terminal โ what changed, not the full code
4. Offer the grouped action menu again โ the loop never ends until the user moves on
5. If the user has iterated 3+ times on the same direction, proactively suggest: "Want to branch? I can apply this to one of the other variations."
6. At iteration 2: Ask a direction-check โ "Still feeling this direction, or want to pivot?"
7. At iteration 4: Show a change summary โ "Over 4 rounds: [list key changes]. Want to keep refining or export?"
8. At iteration 5+: Suggest convergence โ "You've refined this 5 times โ it's looking solid. Ready to export, or one more pass?"
Design Principles
Grounded in the Impeccable design system. Consult individual references for deep implementation guidance.
Content & Intent
- Real content wins. Plausible headlines, real data values, actual copy. Makes designs feel alive.
- Commit fully. Half-executed aesthetics look worse than simple ones. Bold maximalism and refined minimalism both work โ the key is intentionality, not intensity.
- Never converge. If A is dark, B cannot also be dark. Each must feel like a different studio.
- Match type to domain. Don't default to generic app UI โ load the right reference.
Typography (โ references/design-system/typography.md)
- Distinctive display + reliable body. Use Google Fonts
@import, always specify weights. - Banned display fonts: Inter, Roboto, Arial, Open Sans, Lato, Montserrat, system-ui, system defaults.
- Better alternatives: Instrument Sans, Plus Jakarta Sans, Outfit, Onest, Figtree, Urbanist, Fraunces, Newsreader, Lora.
- Modular scale: Use fewer sizes with more contrast (5-size system: xs/sm/base/lg/xl+). Popular ratios: 1.25, 1.333, 1.5.
- Fluid type: Use
clamp(min, preferred, max)for responsive sizing. Not for buttons/labels. - Vertical rhythm: Line-height as base unit for all vertical spacing.
- OpenType features:
tabular-numsfor data tables,diagonal-fractionsfor recipes,all-small-capsfor abbreviations. - Never mix more than 2 typefaces. One well-chosen family in multiple weights often suffices.
Color (โ references/design-system/color-and-contrast.md)
- Use OKLCH for perceptually uniform palettes. Reduce chroma as you approach white/black.
- Tint your neutrals toward the brand hue โ even chroma 0.01 creates subconscious cohesion.
- 60-30-10 rule: 60% neutral, 30% secondary, 10% accent. Accent colors work because they're rare.
- Never pure black/white. Always tint. Pure black/white never appears in nature.
- Never gray on color. Gray text on colored backgrounds looks washed out โ use a darker shade of the background color.
- Two-layer tokens: Primitive (
--blue-500) + semantic (--color-primary: var(--blue-500)). Dark mode redefines semantic only.
Layout & Space (โ references/design-system/spatial-design.md)
- 4pt base grid (not 8pt โ too coarse). Scale: 4, 8, 12, 16, 24, 32, 48, 64, 96px.
- Use
gapinstead of margins for sibling spacing. - Squint test: Blur your eyes โ can you identify the most important element, second most, and clear groupings?
- Hierarchy through multiple dimensions: Combine size, weight, color, position, and space (2-3 at once).
- Cards are not required. Spacing and alignment create grouping naturally. Never nest cards inside cards.
- Container queries for component-level responsiveness.
Motion (โ references/design-system/motion-design.md)
- 100/300/500 rule: 100-150ms instant feedback, 200-300ms state changes, 300-500ms layout changes, 500-800ms entrances.
- Ease-out-expo (
cubic-bezier(0.16, 1, 0.3, 1)) for elements entering. Exit at 75% of enter duration. - Only animate
transformandopacity. For height: usegrid-template-rows: 0fr โ 1fr. - Stagger with CSS custom properties:
animation-delay: calc(var(--i) * 50ms). Cap total stagger time. - Reduced motion is not optional. Always include
@media (prefers-reduced-motion: reduce). - Never bounce/elastic easing. Real objects decelerate smoothly.
Interaction (โ references/design-system/interaction-design.md)
- Design all 8 states: default, hover, focus, active, disabled, loading, error, success.
- Focus rings: Never
outline: nonewithout replacement. Use:focus-visible. - Forms: Visible labels (not just placeholders), validate on blur, errors below fields with
aria-describedby. - Skeleton screens > spinners. Optimistic UI for low-stakes actions.
- Undo > confirm dialogs. Users click through confirmations mindlessly.
- Modals only as last resort. Prefer native
<dialog>when needed. Consider Popover API for non-modal overlays.
UX Writing (โ references/design-system/ux-writing.md)
- Specific button labels: "Save changes" not "OK", "Create account" not "Submit".
- Error formula: What happened โ Why โ How to fix. Never blame the user.
- Empty states are opportunities: Acknowledge, explain value, provide clear action.
- Link text must standalone: "View pricing plans" not "Click here".
Code Export
- Interactive HTML: Single-file, embedded CSS + JavaScript. Alive by default. Default.
- React: Functional components, Tailwind or CSS modules โ state assumptions upfront.
Interactive HTML Output Spec (Default)
Every HTML output must feel alive โ static mockups are not acceptable. Follow this checklist:
Baseline (every output):
- CSS custom properties for all colors โ use OKLCH where supported with hex fallback: --accent: oklch(65% 0.2 250); /* fallback: #6366F1 */
- Semantic token layer: --color-primary, --color-surface, --color-text mapping to primitives
- Google Fonts via @import in <style> โ always specify weights used, include font-display: swap
- Responsive: mobile-first, breakpoints at 640px and 1024px. Use clamp() for fluid values
- No frameworks by default โ vanilla CSS + HTML + JS. CDN Tailwind only if user asks
- @media (prefers-reduced-motion: reduce) block for all animations
- Minimum visual completeness: populated data, real copy, working nav state
Interactivity baseline (every output โ non-negotiable):
- Page load animation: Staggered entrance for hero elements (title โ subtitle โ CTA โ image) using animation-delay. See design-system/micro-interactions.md โ Page Load.
- Scroll reveal: All below-fold sections use IntersectionObserver to fade/slide in on scroll. Apply data-reveal to sections, data-reveal-stagger to card grids.
- Hover states: Every button, card, link, and image has visible hover feedback โ card lift, image zoom, link underline animation, button press scale. Not just opacity changes.
- Focus rings: :focus-visible on all interactive elements with 2-3px offset ring.
- Smooth scroll: html { scroll-behavior: smooth; } for anchor links.
- At least 3 micro-interactions from design-system/micro-interactions.md appropriate to the domain (see the "Picking Micro-Interactions by Domain" table).
Enhanced interactivity (add when relevant to the design):
- Sticky header that shrinks/blurs on scroll โ for any page with navigation
- Dark mode toggle with animated icon transition โ for any page with [data-theme] tokens
- Counter animation โ for any stat/metric displays (KPIs, hero numbers, pricing)
- Scroll progress bar โ for long-form editorial, case studies, documentation
- Infinite marquee โ for client logos, skills, testimonials
- Image zoom on hover โ for any image gallery, product grid, portfolio
- Accordion with animated height โ for FAQ, menu sections, sidebar filters
- Tab switching with indicator slide โ for any tabbed interface
- Toast notifications โ for any form submission, copy action, save confirmation
- Floating labels โ for any form with text inputs
Domain-specific interactivity (consult references/interactive-patterns.md):
- Dashboard: Live clock, animated charts (bar/donut/sparkline), flash-on-update metrics, sortable tables
- SaaS Landing: Scroll-driven parallax hero, animated counters in social proof, comparison slider for pricing
- E-commerce: Filter chips with animated show/hide, image carousel with scroll-snap, product image lightbox
- Portfolio: Masonry grid with animated layout, lightbox gallery, tilt-on-hover cards, cursor effects
- Food & Beverage: Image lightbox for dishes, accordion menus, step-by-step recipe checkboxes
- Fashion: Full-screen image carousel, countdown timer (for drops), before/after comparison slider
- Editorial: Word-by-word text reveal, scroll progress bar, parallax images, reading time estimate
- Education: Multi-step form with progress, drag-to-sort for quizzes, animated progress bars
- Mobile: Slide drawer navigation, snap-scroll carousel, pull-to-refresh hint, swipeable cards
Always load these references before coding:
- references/design-system/micro-interactions.md โ animation patterns and JS snippets
- references/interactive-patterns.md โ functional interaction patterns (filter, drag, charts, forms)
React Output Spec
- Functional components only โ no class components
- Declare color tokens as
const theme = { ... }with OKLCH values and hex fallbacks - Google Fonts: add a
<link>in the returned JSX or instruct user to add toindex.html - Prefer inline styles for one-off values; extract repeated patterns to a
stylesobject - State assumptions upfront in a comment block: which components are stateful, what props to pass
- If Tailwind: use
@applyfor repeated patterns; if CSS modules: one.module.cssper component - Use
useEffectsparingly โ CSS animations and transitions preferred for entrances and states; JS for scroll observers and data-driven interactions - Prop defaults must be realistic content (no
undefined, no "Lorem ipsum") - Include interaction hooks:
useScrollReveal,useCounter,useThemeToggleas custom hooks where reusable - Framer Motion: Allowed and encouraged for React outputs. Use
motion.div,AnimatePresence,useInViewfor scroll reveals,layoutprop for animated filtering/sorting
Multi-Screen / Flow Support
When a user asks for a flow (onboarding, checkout, wizard, multi-step form):
1. Render all screens side-by-side horizontally, each in a 390px frame with label above
2. Use a shared currentStep state variable to show/hide screens if making it interactive
3. Annotate transitions: "โ swipe left to advance" or "โ tab triggers step 2"
4. Each screen must be visually complete โ never leave a screen empty as placeholder
5. Apply onboarding principles: show don't tell, make skip visible, reach "aha" in โค3 steps
Performance Baseline
Every output must meet these minimums:
- Images:
loading="lazy"on below-fold images,width/heightattributes to prevent CLS,srcsetfor responsive images, WebP/AVIF format preference - Fonts:
font-display: swap, subset to used character ranges when possible, preconnect to Google Fonts origin:<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - CSS: No
@importfor CSS files (blocks render) โ only for Google Fonts in<style>. Usecontent-visibility: autofor off-screen sections - Animation: Only
transformandopacity(GPU-composited). Nowill-changeunless animation is imminent. UseIntersection Observerfor scroll-triggered animations โ never scroll event listeners - Layout: No layout thrashing (read then write, never interleave). Avoid forced synchronous reflows
Production Hardening Checklist
Apply when the design will be used in real products:
Text resilience:
- All text containers handle overflow: overflow: hidden; text-overflow: ellipsis for single-line, -webkit-line-clamp for multi-line
- Test with 2ร expected content length โ does the layout survive?
- Test with 0 content โ does the empty state make sense?
- Headings: overflow-wrap: break-word to prevent horizontal scroll on mobile
i18n readiness:
- No fixed-width containers for text โ allow 30% expansion for German/French
- Use logical properties: margin-inline-start not margin-left (RTL support)
- Numbers: use Intl.NumberFormat for locale-aware formatting
- Dates: use Intl.DateTimeFormat โ never hardcode date formats
Error & edge states:
- Network failure: show last-known data with "Unable to update" banner, not a blank screen
- Slow connection: skeleton screens appear within 200ms if data isn't ready
- Invalid data: graceful degradation (show "--" for missing numbers, not NaN/undefined)
Input robustness:
- Debounce search/filter inputs (300ms)
- Prevent double-submit on forms (disable button after first click, re-enable on error)
- Paste handling: strip formatting on paste into plain-text inputs
Integration Quick-Start
After exporting, append a brief guide so users know how to own the code:
Making it yours:
- Colors: Edit the--color-*CSS custom properties in:rootโ all colors flow from these tokens
- Fonts: Swap the Google Fonts@importURL and update--font-display/--font-body
- Spacing: Adjust--space-*tokens to scale the entire layout proportionally
- New pages: Copy the HTML structure, keep the same<style>block โ the token system ensures visual consistency
- Dark mode: Redefine--color-*semantic tokens inside@media (prefers-color-scheme: dark)โ primitives stay unchanged
- Framework migration: The CSS custom properties work in any framework. For React/Vue, map tokens to your theme object
Anti-Patterns (AI Slop Fingerprints)
Avoid these in every output โ they are the telltale signs of AI-generated design:
| Anti-pattern | Instead |
|---|---|
| Two variations in the same aesthetic direction | Ensure A/B/C feel like different studios โ re-check the direction table |
Inter, Roboto, Arial, system-ui as display fonts |
Distinctive fonts: Instrument Sans, Fraunces, Outfit, Newsreader |
| Hardcoded hex values in CSS rules | CSS custom properties with OKLCH: color: var(--text) |
| Lorem ipsum or placeholder text | Real, domain-plausible content |
| Generic "Feature 1 / Feature 2 / Feature 3" copy | Specific feature names that match the domain |
| Five or more colors used at similar weight | 60-30-10: one dominant color used with conviction |
| Cards with identical sizes and equal visual weight | Vary card sizes to create rhythm and hierarchy |
| Hover states missing on interactive elements | Every button, link, and card needs hover + focus-visible |
| Mobile layouts that are just desktop shrunk down | Rethink for thumb zones, touch targets, and vertical flow |
| Gradient abuse (5+ color gradient backgrounds) | One solid color or a two-stop gradient maximum |
| Purple-to-blue gradients, cyan-on-dark, neon accents | Intentional palette from OKLCH, tinted neutrals |
| Glassmorphism everywhere (blur, glow borders) | Purposeful decorative elements that reinforce brand |
| Big rounded icons above every heading | They rarely add value โ use typography for hierarchy |
| Cards nested inside cards | Flatten hierarchy โ use spacing and dividers |
| Everything centered | Left-aligned with asymmetric layouts feels more designed |
| Same spacing everywhere | Varied spacing creates rhythm โ tight groups, generous separations |
| Gradient text on headings/metrics | Decorative, not meaningful โ use solid color with weight |
| Dark mode as default with glowing accents | Earn dark mode: different surface depths, desaturated accents, no shadows |
| Bounce/elastic easing | Exponential ease-out โ real objects decelerate smoothly |
outline: none without replacement |
:focus-visible with 2-3px offset ring |
| Modals for everything | Consider alternatives: inline expansion, drawers, popovers |
| Pure black (#000) or pure white (#fff) | Always tint โ pure extremes don't exist in nature |
| Gray text on colored backgrounds | Use darker shade of the background color |
| Empty state = "No data" text only | Design as onboarding moment: acknowledge, explain value, CTA |
| Text that overflows its container | overflow-wrap: break-word, text-overflow: ellipsis, line-clamp |
| Static page with no animations or interactions | Every page needs: entrance animation, scroll reveals, hover states, โฅ3 micro-interactions |
| Scroll reveal on ALL elements simultaneously | Stagger children with 60-80ms delay; animate sections independently |
JavaScript in <script> but nothing actually moves |
Wire up scroll observer, counters, lightbox โ code must produce visible motion |
Hover effects limited to opacity: 0.8 |
Use card lift, image zoom, underline slide, color shift โ see micro-interactions.md |
| Charts/numbers that appear fully rendered | Animate bar growth, counter count-up, donut draw on scroll into view |
Accessibility Baseline
Apply to every output โ non-negotiable:
- Text contrast minimum: 4.5:1 for body, 3:1 for large text (โฅ24px bold or โฅ18.5px normal)
- All interactive elements: minimum 44ร44px touch/click target (use pseudo-elements if visual size is smaller)
- Focus rings: never outline: none without a custom visible :focus-visible replacement
- Don't convey meaning by color alone โ pair with icon, label, or pattern
- Avoid pure white on pure black for long-form text โ slightly off-white/off-black (#F0EDE8 on #111) reduces eye strain
- @media (prefers-reduced-motion: reduce) โ preserve functional animations (progress, loading), remove spatial movement
- Use rem/em for font sizes, never px for body text โ respect browser settings
- Minimum 16px body text on all viewports
- Keyboard navigation: logical tab order, skip links for nav-heavy pages, roving tabindex for component groups
- ARIA: landmarks (main, nav, aside), live regions for dynamic content, aria-describedby for form errors
# README.md
variant-design
English | ไธญๆ
Solve the blank canvas problem. Prompt โ 3 fully-formed distinct designs โ vary โ export.
A Claude Code skill inspired by the Variant design community, powered by the Impeccable design system. Give it a prompt, get three divergent design directions โ each from a different studio's aesthetic โ then iterate with one-word actions.
Sample output
Three variations from a single prompt โ each feels like a different studio:
| A โ Editorial | B โ Dark Dashboard | C โ SaaS Landing |
|---|---|---|
![]() |
![]() |
![]() |
What it does
Generate Mode (default)
- Detects your scenario โ dashboard, SaaS landing page, editorial, e-commerce, mobile app, creative tool, education, portfolio, food & beverage, fashion & lifestyle
- Loads design system references โ typography, color theory (OKLCH), spatial design, motion, micro-interactions, interaction, responsive, UX writing
- Generates 3 distinct variations โ each pulls from a different aesthetic direction with full interactivity (scroll reveals, animated charts, hover effects, functional JS)
- Runs an AI Slop Test โ quality gate that catches generic AI aesthetic fingerprints before presenting
- Ships working code โ Interactive HTML by default, or React + Framer Motion. Real content, no lorem ipsum
- Offers variation actions โ push further, polish, critique, swap styles, remix colors, shuffle layouts, add motion, dramatize, make interactive
Analyze Mode (existing sites)
- Scans your existing code โ reads HTML, CSS, JSX, Vue, Svelte files for design tokens
- Extracts design primitives โ colors, fonts, spacing, components, transitions, breakpoints
- Detects inconsistencies โ near-duplicate colors, off-grid spacing, missing hover states, contrast failures, font scale issues
- Generates a style report โ scored audit with severity levels and priority fix list
- Produces tokens โ consolidated CSS custom properties file from scattered hardcoded values
- Generates style-matched pages โ new pages that follow your existing design system exactly
- Creates migration plans โ phased checklist for consolidating an inconsistent codebase
audit โ Full style consistency report
tokens โ Extract tokens from existing CSS
match โ Generate new pages matching your existing style
new page pricing โ Add /pricing page following your current design
migrate โ Phased plan to consolidate design tokens
compare old new โ Side-by-side existing vs. redesigned
Installation
Claude Code (recommended)
claude skill install https://github.com/YuqingNicole/variant-design-skill
Or add manually to your project's SKILL.md โ copy the contents of SKILL.md into your existing skill file.
Other Claude interfaces
Claude.ai (web/desktop): Paste the contents of SKILL.md into a Project's custom instructions, or drop it at the top of a conversation as a system prompt.
API / custom integrations: Include SKILL.md as a system message before your user turn.
Usage
Basic triggers
The simplest way โ just describe what you want:
design a dashboard for a crypto trading terminal
show me 3 directions for a SaaS landing page
give me UI options for a wellness app
Directed triggers โ lock in a style or reference a site
You can be more specific by naming an aesthetic direction, a palette, or even an existing site you want to match:
developer tools homepage, code-first hero with CLI snippet, dark Data/Technical direction
landing page for an AI agent tool โ Dark Indigo palette, Geist font, Code-First layout from saas.md
3 variations for a food delivery app โ one Warm/Human, one Bold/Expressive, one Neo-brutalist
reproduce the visual style of [site you described] โ dark navy, monospace, swim lane diagrams
Tip: the more constraints you name (direction + palette + layout pattern), the more targeted the output. The more open the prompt, the more divergent the three variations will be.
Anatomy of a directed prompt
[what it is] + [domain] + [aesthetic direction or palette] + [layout hint] + [any signature detail]
Examples:
| Goal | Prompt |
|---|---|
| Match a specific site's vibe | "developer tool landing page โ dark Data/Technical, CLI code hero, Dark Indigo palette" |
| Explore freely | "landing page for a mindfulness app" |
| One fixed + two free | "3 directions for a finance dashboard โ one must be Amber Finance dark terminal" |
| Multi-screen flow | "3-screen onboarding flow for a meditation app, Wellness Soft palette" |
Variation actions
After seeing the initial 3 variations, iterate with:
| Action | What happens |
|---|---|
| Vary strong | Push current direction to its extreme |
| Vary subtle | Polish and refine, same aesthetic |
| Distill | Strip to essence โ remove everything non-essential |
| Change style | Keep layout, swap entire visual language |
| Remix colors | 3 alternative palettes using OKLCH: analogous / complementary / unexpected |
| Shuffle layout | Same content + style, different composition |
| Add motion | Layer micro-interactions and animations onto current design |
| Dramatize | Push interactions to cinematic maximum (parallax, 3D tilt, curtain reveal) |
| Make interactive | Add functional patterns: filtering, charts, drag-and-drop, form validation |
| Polish | Refine against design system: typography, spacing, interactions, motion, copy |
| Critique | Systematic audit against all 8 design system dimensions |
| Extract tokens | Export design tokens as CSS / JSON / Tailwind config |
| See other views | Mobile / dark mode / empty state / onboarding / hover states |
| Mix | Combine two variations: "Mix A + B" or "A's layout + C's colors" |
Quick iteration shorthand
In Claude Code you can use shorthand for fast iteration:
A vary strong โ Push Variation A to maximum
B remix colors โ 3 new palettes for Variation B
C โ mobile โ Show C as mobile viewport
pick A โ Select A as winner
A + B colors โ Mix A layout with B palette
tokens A โ Extract CSS tokens from A
compare โ Side-by-side view of all 3
open B โ Re-open B in browser
What you'll see
Files are written to variant-output/ and auto-opened in your browser โ you never need to manually find or open files. Each variation comes with a compact Summary Card in the terminal (direction, palette, fonts, interactions). Actions are grouped into Reshape / Tune / Animate / Refine / Export categories.
On iteration, the same file is overwritten and re-opened โ your browser tab refreshes automatically. The terminal shows a 2-3 line summary of what changed, not the full code.
Reference library
Domain references
Scenario-specific materials (starter prompts, palettes, typography, layouts, real community examples):
| File | Domain |
|---|---|
references/dashboard.md |
Data dashboards, analytics, monitoring, trading terminals |
references/editorial.md |
Magazines, journalism, long-form, news |
references/saas.md |
SaaS landing pages, B2B, developer tools |
references/ecommerce.md |
E-commerce, consumer apps, fintech cards |
references/education.md |
Learning apps, quizzes, language tools |
references/creative.md |
Generative art, music tools, creative software |
references/mobile.md |
iOS/Android apps, onboarding, home screens |
references/portfolio.md |
Designer portfolios, developer showcases, freelancer sites |
references/food-beverage.md |
Restaurants, recipes, coffee brands, bakeries, cocktail bars |
references/fashion.md |
Fashion brands, streetwear, beauty, interior design, lifestyle |
references/palettes.md |
Universal palette library โ 39 palettes ร 7+ aesthetic directions (incl. Pinterest trends) |
references/interactive-patterns.md |
Filtering, drag-and-drop, charts, lightbox, carousels, multi-step forms |
Design system references (Impeccable)
Foundational design principles loaded for every generation:
| File | Covers |
|---|---|
references/design-system/typography.md |
Modular scale, fluid type, font pairing, OpenType features, vertical rhythm |
references/design-system/color-and-contrast.md |
OKLCH color space, tinted neutrals, 60-30-10 rule, dark mode, WCAG contrast |
references/design-system/spatial-design.md |
4pt grid, container queries, squint test, hierarchy through multiple dimensions |
references/design-system/motion-design.md |
100/300/500 rule, ease-out-expo, stagger, reduced motion, perceived performance |
references/design-system/interaction-design.md |
8 interactive states, focus-visible, forms, modals, keyboard navigation |
references/design-system/responsive-design.md |
Mobile-first, content-driven breakpoints, input detection, safe areas |
references/design-system/ux-writing.md |
Button labels, error formulas, empty states, voice vs tone, accessibility |
references/design-system/micro-interactions.md |
Scroll reveals, hover effects, counters, parallax, page transitions, toasts |
references/design-system/style-audit.md |
Token extraction, consistency detection, audit reports, migration plans |
Design principles
- Real content wins. Plausible headlines, real data, actual copy. Makes designs feel alive.
- Commit fully. Half-executed aesthetics look worse than simple ones.
- Never converge. If A is dark, B cannot also be dark. Each must feel like a different studio.
- Typography first. Distinctive display font + reliable body. Never Inter, Roboto, Arial, system-ui.
- Color = one bold OKLCH choice. One dominant color used with conviction beats five timid colors. Always tint neutrals.
- No AI slop. No purple gradients, no glassmorphism, no bounce easing, no centered-everything layouts.
Contributing
PRs welcome. Each domain reference file follows a consistent 6-section schema:
- Starter Prompts (domain-grouped)
- Color Palettes (CSS custom properties)
- Typography Pairings
- Layout Patterns
- Signature Details
- Real Community Examples
Design system references follow the Impeccable style structure with principles, code examples, and anti-patterns.
Examples
The examples/ directory contains runnable demos:
| File | What it demonstrates |
|---|---|
examples/coffee-brand-interactive.html |
Full interactive landing page: curtain reveal, staggered entrance, scroll reveals, animated counters, product filter, card hover lift, image zoom, SVG donut chart, flavor bar animation, toast notifications, mobile hamburger menu, back-to-top, reduced motion fallbacks |
Open any example directly in your browser to see the interactions in action.
Built with Claude Code Skills. Design system powered by Impeccable.
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.


