skills/design-system-generator/SKILL.md
Generates production-ready design tokens from natural language descriptions. Outputs Tailwind configs, CSS custom properties, and DTCG W3C tokens from 24 trends + 31 AI-ready styles with 2800+ component examples.
npx skillsauth add curiositech/windags-skills design-system-generatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Transform natural language descriptions into production-ready design tokens. Powered by 24 design trends, 31 AI-ready styles, and 2,800+ component examples.
If trend match confidence >= 80%:
→ Generate immediately with primary trend
If confidence 60-79%:
→ Show top 2 matches, ask user to choose
→ Example: "Swiss-modern (65%) vs. Hyperminimalism (62%) - which feels right?"
If confidence < 60%:
→ Use vibe-matcher skill first for emotional clarity
→ Re-run trend matching with vibe context
If 2+ trends score within 10% of each other:
├─ Business/professional context?
│ → Prefer: swiss-modern, hyperminimalism, dark-mode
├─ Creative/agency context?
│ → Prefer: neobrutalism, maximalism, experimental-navigation
├─ Tech/developer context?
│ → Prefer: terminal-aesthetic, glassmorphism, web3-crypto
└─ Consumer app context?
→ Prefer: claymorphism, botanical-organic, gamified-design
If user mentions specific framework:
├─ "Next.js", "React", "Vite" → generate-tailwind.ts
├─ "Vue", "Angular", "vanilla" → generate-css-vars.ts
└─ "Figma", "Style Dictionary" → generate-tokens.ts (DTCG)
If no framework mentioned:
→ Ask: "What's your tech stack?" or generate all three formats
If trend has accessibility warnings (glassmorphism, claymorphism):
→ Generate standard tokens first
→ Run contrast checker
→ If violations found:
├─ Adjust color values to meet WCAG AA
├─ Document overrides in comments
└─ Warn user about visual changes
If user mentions theming:
├─ "dark mode" → Generate with --scope=.dark
├─ "multiple brands" → Generate with --scope=[data-theme="name"]
└─ "component library" → Use :root scope (default)
If existing design system mentioned:
→ Generate with theme.extend structure only
Detection: User says "too bright", "too colorful", "more subtle" Symptoms: High saturation values, neon/electric colors in conservative context Fix: Re-run with lower-energy trend (swiss-modern instead of neobrutalism)
# Wrong
npx ts-node generate-tailwind.ts neobrutalism # Generates #FF5252, #00E676
# Fixed
npx ts-node generate-tailwind.ts swiss-modern # Generates #374151, #6B7280
Detection: Tailwind purge warnings, CSS custom property undefined errors Symptoms: Missing quotes in font names, invalid CSS values, circular references Fix: Validate output before deployment
# Check Tailwind compilation
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch
# Check CSS syntax
npx stylelint tokens.css
Detection: Lighthouse audit < 90, WAVE tool errors Symptoms: Text invisible on backgrounds, pale borders, low-contrast buttons Fix: Run contrast audit before finalizing
# Audit generated tokens
npx ts-node scripts/check-contrast.ts swiss-modern
# → Warning: text-gray-400 on bg-white = 2.1:1 (needs 4.5:1)
Detection: Developer confusion, "primary" color isn't prominent Symptoms: brutal-red is actually orange, glass-white is gray Fix: Check trend mapping accuracy
# Verify semantic alignment
npx ts-node scripts/preview-tokens.ts neobrutalism
# Opens browser with all colors labeled
Detection: Theme switching doesn't work, colors persist incorrectly Symptoms: Dark mode shows light colors, component themes interfere Fix: Use explicit scoping
/* Wrong - leaks to global */
:root { --color-primary: #FF0000; }
/* Fixed - scoped properly */
[data-theme="brand-a"] { --color-primary: #FF0000; }
[data-theme="brand-b"] { --color-primary: #00FF00; }
Input: "Clean dashboard for developers, needs to feel professional but not boring"
Step 1: Trend Matching
npx ts-node scripts/match-trend.ts "clean dashboard for developers professional"
Result: swiss-modern (78%), terminal-aesthetic (45%)
Decision: 78% confidence is good, but "not boring" suggests terminal-aesthetic could add personality. Check both.
Step 2: Preview Both Options
Expert insight: For developer tools, terminal-aesthetic creates better brand differentiation while maintaining professionalism.
Step 3: Generate Tailwind Config
npx ts-node generate-tailwind.ts terminal-aesthetic > tailwind.tokens.ts
Step 4: Quality Check
// Generated output includes:
colors: {
'terminal-green': '#00E676',
'terminal-dark': '#0D1117',
'terminal-gray': '#21262D'
}
Step 5: Accessibility Verification
Result: Professional developer aesthetic with personality, fully accessible.
Pre-deployment checklist for generated tokens:
npx tailwindcss builds without warnings or errors❌ DO NOT use for:
vibe-matcher skill insteaddesign-system-documenter for optimizationcomponent-template-generator with these tokenscolor-theory-palette-harmony-expert for strategic color workweb-design-expert for motion design✅ Perfect for:
Delegation Rules:
vibe-matcher first, then return heredesign-system-documenter for analysiscomponent-template-generator with generated tokenscolor-theory-palette-harmony-expert for theory, then return heretools
Building resilient distributed systems with circuit breakers, retries with full-jitter exponential backoff, retry budgets (per-request 3-attempt + per-client 10% ratio per Google SRE), deadline propagation, and the cascading-failure math (4 layers × 3 retries = 64x amplification). Grounded in Resilience4j, Microsoft Cloud Patterns, AWS Architecture Blog (Marc Brooker), and Google SRE Book.
testing
Designing HTTP cache headers that work correctly across browsers, CDNs, and shared proxies — `Cache-Control` directives per RFC 9111, `stale-while-revalidate` and `stale-if-error` per RFC 5861, the Vary header for varying responses, and surrogate keys for tag-based purging. Grounded in IETF RFCs and Cloudflare/Fastly docs.
development
Use when designing or fixing a Content Security Policy on a real site, choosing between nonce-based and hash-based CSP, adding strict-dynamic, debugging "Refused to execute inline script" errors, deploying CSP in report-only mode first, configuring report-to / report-uri, or auditing an existing policy for unsafe-inline / unsafe-eval / wildcards. Triggers: "CSP blocks legitimate inline script", strict-dynamic, nonce-{RANDOM}, sha256-{HASH}, object-src none, base-uri none, frame-ancestors, Trusted Types, X-Content-Security-Policy obsolete, report-only vs enforced. NOT for general HTTP security headers (HSTS, COOP/COEP), Trusted Types deep dive, CORS configuration, or building a WAF.
tools
Choosing and operating an HTTP API versioning strategy that doesn't break clients — Stripe's date-based pinned versions, the Deprecation/Sunset header pair (RFC 9745 + RFC 8594), URI vs header vs media-type approaches, and the version-transformer pattern. Grounded in Stripe's published architecture and IETF RFCs.