Add teach-impeccable and review commands, dynamic placeholders

New commands:
- /teach-impeccable: One-time setup that gathers UX-focused design
  context (explores codebase first, then asks targeted questions)
- /review: UX design review evaluating hierarchy, clarity, emotional
  resonance (complements technical /audit)

Build system improvements:
- Dynamic {{model}}, {{ask_instruction}}, {{config_file}} placeholders
  per provider (Claude/Gemini/GPT/the model)
- context: fork support for Claude Code sub-agents (audit, extract)
- Skill reference auto-added to design commands

Skill refinements:
- Merged Design Thinking and Context Awareness sections
- Removed redundant patterns and technical questions
- More direct feedback guidance (radical candor)

Website updates:
- 17 commands (was 16)
- Review demo showing UX issues (HIERARCHY, NO PRIMARY, DEAD END)
- teach-impeccable in System group of periodic table

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Paul Bakaus
2026-01-07 16:56:08 -08:00
co-authored by Claude Opus 4.5
parent 8186f2a226
commit 0b9c1846a6
96 changed files with 1315 additions and 646 deletions
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
## Assess Animation Opportunities
+1
View File
@@ -1,6 +1,7 @@
---
name: audit
description: Perform comprehensive audit of interface quality across accessibility, performance, theming, and responsive design. Generates detailed report of issues with severity ratings and recommendations.
context: fork
args:
- name: area
description: The feature or area to audit (optional)
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Increase visual impact and personality in designs that are too safe, generic, or visually underwhelming, creating more engaging and memorable experiences.
## Assess Current State
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality.
## Assess Color Opportunity
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Identify opportunities to add moments of joy, personality, and unexpected polish that transform functional interfaces into delightful experiences.
## Assess Delight Opportunities
+1
View File
@@ -1,6 +1,7 @@
---
name: extract
description: Extract and consolidate reusable components, design tokens, and patterns into your design system. Identifies opportunities for systematic reuse and enriches your component library.
context: fork
args:
- name: target
description: The feature, component, or area to extract from (optional)
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
## Pre-Polish Assessment
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness.
## Assess Current State
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
## Assess Current State
+76
View File
@@ -0,0 +1,76 @@
---
name: teach-impeccable
description: One-time setup that gathers comprehensive design context for your project and saves it to your AI config file. Run once to establish persistent design guidelines.
---
Gather comprehensive design context for this project through a structured conversation, then persist it for all future sessions.
## Gather Design Context
use the AskUserQuestion tool to clarify what you cannot infer. Explore these areas thoroughly:
### 1. Project & Audience
- What is this project? (app, marketing site, dashboard, etc.)
- Who is the primary audience? (developers, consumers, enterprise, etc.)
- What's their technical sophistication? Age range? Key demographics?
- What problem does this solve for them?
### 2. Brand & Identity
- Does an existing brand guide or design system exist? Where?
- What are the brand colors, if any?
- What's the brand personality? (professional, playful, luxurious, approachable, etc.)
- Any fonts already in use or required?
- Logos or visual assets to incorporate?
### 3. Aesthetic Direction
- What's the desired tone? (minimal, bold, elegant, playful, technical, organic, etc.)
- Any reference sites or apps they admire? What specifically about them?
- What should this NOT look like? Any anti-references?
- Light mode, dark mode, or both?
### 4. Technical Constraints
- Framework in use? (React, Vue, vanilla, etc.)
- CSS approach? (Tailwind, CSS modules, styled-components, etc.)
- Component library in use or to avoid?
- Performance budget or requirements?
- Browser/device support requirements?
### 5. Accessibility Requirements
- WCAG compliance level needed? (A, AA, AAA)
- Known accessibility requirements?
- Reduced motion considerations?
### 6. Content & Scope
- What types of content will be displayed?
- Are there existing components to maintain consistency with?
- What's the scope—full redesign or incremental improvements?
## Write Design Context
After gathering responses, create a `## Design Context` section with the collected information, formatted for clarity:
```markdown
## Design Context
### Audience
[Summarize target users, their needs, and context]
### Brand
[Colors, fonts, personality, existing assets]
### Aesthetic Direction
[Tone, references, anti-references, theme preference]
### Technical Stack
[Framework, CSS approach, constraints]
### Accessibility
[Requirements and considerations]
### Design Principles
[Key principles derived from the conversation]
```
Write this section to CLAUDE.md in the project root. If the file exists, append or update the Design Context section. If it doesn't exist, create it with this section.
Confirm completion and remind the user that this context will now inform all future design work with Impeccable.
+74 -74
View File
@@ -1,22 +1,22 @@
---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with comprehensive expertise in typography, color systems, spatial design, responsive layouts, interaction patterns, motion, and UX writing. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics.
license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution.
---
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
## Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction:
Great design requires understanding. First, scan available context—README, existing components, brand guidelines, design tokens—to infer purpose, audience, and constraints. If critical context is missing, use the AskUserQuestion tool to clarify what you cannot infer. Don't guess on fundamentals.
Then commit to a BOLD aesthetic direction:
- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- **Constraints**: Technical requirements (framework, performance, accessibility).
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both workthe key is intentionality, not intensity.
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
@@ -26,82 +26,82 @@ Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
## Frontend Aesthetics Guidelines
Focus on:
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
### Typography
*Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.*
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
**DO**: Use a modular type scale with fluid sizing (clamp)
**DO**: Vary font weights and sizes to create clear visual hierarchy
**DON'T**: Use overused fonts—Inter, Roboto, Arial, Open Sans, system defaults
**DON'T**: Put large icons with rounded corners above every heading—they rarely add value and make sites look templated
**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
### Color & Theme
*Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.*
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes
**DO**: Tint your neutrals toward your brand hue—even a subtle hint creates subconscious cohesion
**DON'T**: Use gray text on colored backgrounds—it looks washed out; use a shade of the background color instead
**DON'T**: Use pure black (#000) or pure white (#fff)—always tint; pure black/white never appears in nature
**DON'T**: Reach for purple-to-blue gradients on white—it's the #1 "AI slop" tell
### Layout & Space
*Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.*
Create visual rhythm through varied spacing—not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
**DO**: Create visual rhythm through varied spacing—tight groupings, generous separations
**DO**: Use fluid spacing with clamp() that breathes on larger screens
**DO**: Use asymmetry and unexpected compositions; break the grid intentionally for emphasis
**DON'T**: Wrap everything in cards
**DON'T**: Nest cards inside cards
**DON'T**: Use modals unless there's truly no better alternative—modals are lazy
**DON'T**: Center everything—left-aligned text with asymmetric layouts feels more designed
**DON'T**: Use the same spacing everywhere—without rhythm, layouts feel monotonous
### Motion
*Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
**DO**: Use motion to convey state changes—entrances, exits, feedback
**DO**: Use exponential easing (ease-out-quart/quint/expo) for natural deceleration
**DO**: For height animations, use grid-template-rows transitions instead of animating height directly
**DON'T**: Animate layout properties (width, height, padding, margin)—use transform and opacity only
**DON'T**: Use bounce or elastic easing—they feel dated and tacky; real objects decelerate smoothly
### Interaction
*Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.*
Make interactions feel fast. Use optimistic UI—update immediately, sync later.
**DO**: Use progressive disclosure—start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions)
**DO**: Design empty states that teach the interface, not just say "nothing here"
**DO**: Make every interactive surface feel intentional and responsive
**DON'T**: Repeat the same information—redundant headers, intros that restate the heading
**DON'T**: Make every button primary—use ghost buttons, text links, secondary styles; hierarchy matters
### Responsive
*Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
**DO**: Use container queries (@container) for component-level responsiveness
**DO**: Adapt the interface for different contexts—don't just shrink it
**DON'T**: Hide critical functionality on mobile—adapt the interface, don't amputate it
### UX Writing
*Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
**DO**: Make every word earn its place
**DON'T**: Repeat information users can already see
---
## Reference Files
## Implementation Principles
For deeper expertise, consult: [typography](reference/typography.md), [color](reference/color-and-contrast.md), [spatial](reference/spatial-design.md), [responsive](reference/responsive-design.md), [interaction](reference/interaction-design.md), [motion](reference/motion-design.md), [ux-writing](reference/ux-writing.md).
Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
## Design Patterns Reference
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
This reference defines what TO do and what NOT to do when creating frontend interfaces. These patterns fight against model bias—the tendency of LLMs to converge on the same predictable choices.
### What TO Do (Patterns)
Focus on intentional, distinctive design choices:
**Typography**:
- Use a modular type scale
- Pair a distinctive display font with a refined body font
**Color & Contrast**:
- Use off-whites and near-blacks for softer, sophisticated feel
- Use the latest CSS has to offer for color and gradients
**Layout & Space**:
- Create visual rhythm through varied spacing
- Use asymmetry and unexpected compositions
- Break the grid intentionally for emphasis
**Motion**:
- Use motion to convey state changes effectively
- Design motion inspired by the real world (easing, staggering, etc)
**Interaction**:
- Make interactions *feel* fast by using patterns like optimistic UI
- Use progressive disclosure of sophistication
- Make every surface intentional, actionable and delightful
### What NOT to Do (Anti-Patterns)
These patterns create generic "AI slop" aesthetics:
**Typography**:
- Don't use overused fonts like Arial or Inter
- You love to put big icons with rounded corners above titles. Resist. They rarely add value and make sites look cheap.
**Color & Contrast**:
- Don't use gray text on colored backgrounds
- Don't use pure gray or black. Always tint - pure black/gray never appears in nature.
**Layout & Space**:
- Don't wrap everything in cards
- Don't nest cards inside cards
- Modals are lazy. Only use modals if there's truly no better alternative
**Motion**:
- Don't animate layout properties (width, height, padding, margin) - use transform instead
- Don't use bounce or elastic easing - they feel dated and tacky; use ease-out-quart/quint/expo
**Interaction**:
- Don't repeat the same information (redundant headers, intro restating heading, etc.)
**Responsive**:
- Don't hide critical functionality on mobile
These anti-patterns are baked into training data from countless generic templates. Without explicit guidance, AI reproduces them. This skill ensures your AI knows both what to do AND what to avoid.
Remember: Claude is capable of extraordinary creative work. Don't hold back—show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
+5 -3
View File
@@ -1,6 +1,6 @@
# Impeccable
The vocabulary you didn't know you needed. 1 skill, 15 commands, and curated anti-patterns for impeccable frontend design.
The vocabulary you didn't know you needed. 1 skill, 17 commands, and curated anti-patterns for impeccable frontend design.
> **Quick start:** Visit [impeccable.style](https://impeccable.style) to download ready-to-use bundles.
@@ -31,11 +31,13 @@ A comprehensive design skill with 7 domain-specific references:
| responsive-design | Mobile-first, fluid design, container queries |
| ux-writing | Button labels, error messages, empty states |
### 15 Commands
### 17 Commands
| Command | What it does |
|---------|--------------|
| `/audit` | Run quality checks, get severity-rated issues |
| `/teach-impeccable` | One-time setup: gather design context, save to config |
| `/audit` | Run technical quality checks (a11y, performance, responsive) |
| `/review` | UX design review: hierarchy, clarity, emotional resonance |
| `/normalize` | Align with design system standards |
| `/polish` | Final pass before shipping |
| `/simplify` | Strip to essence |
+3 -59
View File
@@ -1,6 +1,6 @@
import { readFileSync } from "fs";
import { join, dirname } from "path";
import { fileURLToPath } from "url";
import { readPatterns } from "../scripts/lib/utils.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
@@ -8,64 +8,8 @@ const PROJECT_ROOT = join(__dirname, "..");
export default function handler(req, res) {
try {
const sourceDir = join(PROJECT_ROOT, "source");
const filePath = join(sourceDir, "patterns.md");
const content = readFileSync(filePath, "utf-8");
const frontmatterMatch = content.match(/^---\n([\s\S]+?)\n---/);
if (!frontmatterMatch) {
return res.status(200).json({ patterns: [], antipatterns: [] });
}
const frontmatterText = frontmatterMatch[1];
const patterns = [];
const antipatterns = [];
const lines = frontmatterText.split('\n');
let currentSection = null;
let currentCategory = null;
let inItems = false;
for (const line of lines) {
const trimmed = line.trim();
if (!trimmed) continue;
const indent = line.length - line.trimStart().length;
if (indent === 0 && trimmed === 'patterns:') {
currentSection = 'patterns';
currentCategory = null;
inItems = false;
continue;
}
if (indent === 0 && trimmed === 'antipatterns:') {
currentSection = 'antipatterns';
currentCategory = null;
inItems = false;
continue;
}
if (trimmed.startsWith('- name:') && currentSection) {
currentCategory = { name: trimmed.slice(7).trim(), items: [] };
if (currentSection === 'patterns') {
patterns.push(currentCategory);
} else {
antipatterns.push(currentCategory);
}
inItems = false;
continue;
}
if (trimmed === 'items:' && currentCategory) {
inItems = true;
continue;
}
if (trimmed.startsWith('- ') && inItems && currentCategory && indent >= 6) {
currentCategory.items.push(trimmed.slice(2).trim());
}
}
// Extract patterns from SKILL.md using the shared utility
const { patterns, antipatterns } = readPatterns(PROJECT_ROOT);
res.status(200).json({ patterns, antipatterns });
} catch (error) {
console.error("Error in /api/patterns:", error);
+1
View File
@@ -9,3 +9,4 @@
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
## Assess Animation Opportunities
+1
View File
@@ -1,6 +1,7 @@
---
name: audit
description: Perform comprehensive audit of interface quality across accessibility, performance, theming, and responsive design. Generates detailed report of issues with severity ratings and recommendations.
context: fork
args:
- name: area
description: The feature or area to audit (optional)
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Increase visual impact and personality in designs that are too safe, generic, or visually underwhelming, creating more engaging and memorable experiences.
## Assess Current State
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality.
## Assess Color Opportunity
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Identify opportunities to add moments of joy, personality, and unexpected polish that transform functional interfaces into delightful experiences.
## Assess Delight Opportunities
+1
View File
@@ -1,6 +1,7 @@
---
name: extract
description: Extract and consolidate reusable components, design tokens, and patterns into your design system. Identifies opportunities for systematic reuse and enriches your component library.
context: fork
args:
- name: target
description: The feature, component, or area to extract from (optional)
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
## Pre-Polish Assessment
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness.
## Assess Current State
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
*Apply the frontend-design skill for design principles, if not already in context.*
Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
## Assess Current State
+76
View File
@@ -0,0 +1,76 @@
---
name: teach-impeccable
description: One-time setup that gathers comprehensive design context for your project and saves it to your AI config file. Run once to establish persistent design guidelines.
---
Gather comprehensive design context for this project through a structured conversation, then persist it for all future sessions.
## Gather Design Context
use the AskUserQuestion tool to clarify what you cannot infer. Explore these areas thoroughly:
### 1. Project & Audience
- What is this project? (app, marketing site, dashboard, etc.)
- Who is the primary audience? (developers, consumers, enterprise, etc.)
- What's their technical sophistication? Age range? Key demographics?
- What problem does this solve for them?
### 2. Brand & Identity
- Does an existing brand guide or design system exist? Where?
- What are the brand colors, if any?
- What's the brand personality? (professional, playful, luxurious, approachable, etc.)
- Any fonts already in use or required?
- Logos or visual assets to incorporate?
### 3. Aesthetic Direction
- What's the desired tone? (minimal, bold, elegant, playful, technical, organic, etc.)
- Any reference sites or apps they admire? What specifically about them?
- What should this NOT look like? Any anti-references?
- Light mode, dark mode, or both?
### 4. Technical Constraints
- Framework in use? (React, Vue, vanilla, etc.)
- CSS approach? (Tailwind, CSS modules, styled-components, etc.)
- Component library in use or to avoid?
- Performance budget or requirements?
- Browser/device support requirements?
### 5. Accessibility Requirements
- WCAG compliance level needed? (A, AA, AAA)
- Known accessibility requirements?
- Reduced motion considerations?
### 6. Content & Scope
- What types of content will be displayed?
- Are there existing components to maintain consistency with?
- What's the scope—full redesign or incremental improvements?
## Write Design Context
After gathering responses, create a `## Design Context` section with the collected information, formatted for clarity:
```markdown
## Design Context
### Audience
[Summarize target users, their needs, and context]
### Brand
[Colors, fonts, personality, existing assets]
### Aesthetic Direction
[Tone, references, anti-references, theme preference]
### Technical Stack
[Framework, CSS approach, constraints]
### Accessibility
[Requirements and considerations]
### Design Principles
[Key principles derived from the conversation]
```
Write this section to CLAUDE.md in the project root. If the file exists, append or update the Design Context section. If it doesn't exist, create it with this section.
Confirm completion and remind the user that this context will now inform all future design work with Impeccable.
+74 -74
View File
@@ -1,22 +1,22 @@
---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with comprehensive expertise in typography, color systems, spatial design, responsive layouts, interaction patterns, motion, and UX writing. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics.
license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution.
---
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
## Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction:
Great design requires understanding. First, scan available context—README, existing components, brand guidelines, design tokens—to infer purpose, audience, and constraints. If critical context is missing, use the AskUserQuestion tool to clarify what you cannot infer. Don't guess on fundamentals.
Then commit to a BOLD aesthetic direction:
- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- **Constraints**: Technical requirements (framework, performance, accessibility).
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both workthe key is intentionality, not intensity.
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
@@ -26,82 +26,82 @@ Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
## Frontend Aesthetics Guidelines
Focus on:
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
### Typography
*Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.*
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
**DO**: Use a modular type scale with fluid sizing (clamp)
**DO**: Vary font weights and sizes to create clear visual hierarchy
**DON'T**: Use overused fonts—Inter, Roboto, Arial, Open Sans, system defaults
**DON'T**: Put large icons with rounded corners above every heading—they rarely add value and make sites look templated
**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
### Color & Theme
*Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.*
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes
**DO**: Tint your neutrals toward your brand hue—even a subtle hint creates subconscious cohesion
**DON'T**: Use gray text on colored backgrounds—it looks washed out; use a shade of the background color instead
**DON'T**: Use pure black (#000) or pure white (#fff)—always tint; pure black/white never appears in nature
**DON'T**: Reach for purple-to-blue gradients on white—it's the #1 "AI slop" tell
### Layout & Space
*Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.*
Create visual rhythm through varied spacing—not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
**DO**: Create visual rhythm through varied spacing—tight groupings, generous separations
**DO**: Use fluid spacing with clamp() that breathes on larger screens
**DO**: Use asymmetry and unexpected compositions; break the grid intentionally for emphasis
**DON'T**: Wrap everything in cards
**DON'T**: Nest cards inside cards
**DON'T**: Use modals unless there's truly no better alternative—modals are lazy
**DON'T**: Center everything—left-aligned text with asymmetric layouts feels more designed
**DON'T**: Use the same spacing everywhere—without rhythm, layouts feel monotonous
### Motion
*Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
**DO**: Use motion to convey state changes—entrances, exits, feedback
**DO**: Use exponential easing (ease-out-quart/quint/expo) for natural deceleration
**DO**: For height animations, use grid-template-rows transitions instead of animating height directly
**DON'T**: Animate layout properties (width, height, padding, margin)—use transform and opacity only
**DON'T**: Use bounce or elastic easing—they feel dated and tacky; real objects decelerate smoothly
### Interaction
*Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.*
Make interactions feel fast. Use optimistic UI—update immediately, sync later.
**DO**: Use progressive disclosure—start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions)
**DO**: Design empty states that teach the interface, not just say "nothing here"
**DO**: Make every interactive surface feel intentional and responsive
**DON'T**: Repeat the same information—redundant headers, intros that restate the heading
**DON'T**: Make every button primary—use ghost buttons, text links, secondary styles; hierarchy matters
### Responsive
*Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
**DO**: Use container queries (@container) for component-level responsiveness
**DO**: Adapt the interface for different contexts—don't just shrink it
**DON'T**: Hide critical functionality on mobile—adapt the interface, don't amputate it
### UX Writing
*Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
**DO**: Make every word earn its place
**DON'T**: Repeat information users can already see
---
## Reference Files
## Implementation Principles
For deeper expertise, consult: [typography](reference/typography.md), [color](reference/color-and-contrast.md), [spatial](reference/spatial-design.md), [responsive](reference/responsive-design.md), [interaction](reference/interaction-design.md), [motion](reference/motion-design.md), [ux-writing](reference/ux-writing.md).
Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
## Design Patterns Reference
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
This reference defines what TO do and what NOT to do when creating frontend interfaces. These patterns fight against model bias—the tendency of LLMs to converge on the same predictable choices.
### What TO Do (Patterns)
Focus on intentional, distinctive design choices:
**Typography**:
- Use a modular type scale
- Pair a distinctive display font with a refined body font
**Color & Contrast**:
- Use off-whites and near-blacks for softer, sophisticated feel
- Use the latest CSS has to offer for color and gradients
**Layout & Space**:
- Create visual rhythm through varied spacing
- Use asymmetry and unexpected compositions
- Break the grid intentionally for emphasis
**Motion**:
- Use motion to convey state changes effectively
- Design motion inspired by the real world (easing, staggering, etc)
**Interaction**:
- Make interactions *feel* fast by using patterns like optimistic UI
- Use progressive disclosure of sophistication
- Make every surface intentional, actionable and delightful
### What NOT to Do (Anti-Patterns)
These patterns create generic "AI slop" aesthetics:
**Typography**:
- Don't use overused fonts like Arial or Inter
- You love to put big icons with rounded corners above titles. Resist. They rarely add value and make sites look cheap.
**Color & Contrast**:
- Don't use gray text on colored backgrounds
- Don't use pure gray or black. Always tint - pure black/gray never appears in nature.
**Layout & Space**:
- Don't wrap everything in cards
- Don't nest cards inside cards
- Modals are lazy. Only use modals if there's truly no better alternative
**Motion**:
- Don't animate layout properties (width, height, padding, margin) - use transform instead
- Don't use bounce or elastic easing - they feel dated and tacky; use ease-out-quart/quint/expo
**Interaction**:
- Don't repeat the same information (redundant headers, intro restating heading, etc.)
**Responsive**:
- Don't hide critical functionality on mobile
These anti-patterns are baked into training data from countless generic templates. Without explicit guidance, AI reproduces them. This skill ensures your AI knows both what to do AND what to avoid.
Remember: Claude is capable of extraordinary creative work. Don't hold back—show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
+2
View File
@@ -3,6 +3,8 @@ description: Review a feature and enhance it with purposeful animations, micro-i
argument-hint: [TARGET=<value>]
---
*Apply the frontend-design skill for design principles, if not already in context.*
Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
## Assess Animation Opportunities
+2
View File
@@ -3,6 +3,8 @@ description: Amplify safe or boring designs to make them more visually interesti
argument-hint: [TARGET=<value>]
---
*Apply the frontend-design skill for design principles, if not already in context.*
Increase visual impact and personality in designs that are too safe, generic, or visually underwhelming, creating more engaging and memorable experiences.
## Assess Current State
+2
View File
@@ -3,6 +3,8 @@ description: Add strategic color to features that are too monochromatic or lack
argument-hint: [TARGET=<value>]
---
*Apply the frontend-design skill for design principles, if not already in context.*
Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality.
## Assess Color Opportunity
+2
View File
@@ -3,6 +3,8 @@ description: Add moments of joy, personality, and unexpected touches that make i
argument-hint: [TARGET=<value>]
---
*Apply the frontend-design skill for design principles, if not already in context.*
Identify opportunities to add moments of joy, personality, and unexpected polish that transform functional interfaces into delightful experiences.
## Assess Delight Opportunities
+2
View File
@@ -3,6 +3,8 @@ description: Final quality pass before shipping. Fixes alignment, spacing, consi
argument-hint: [TARGET=<value>]
---
*Apply the frontend-design skill for design principles, if not already in context.*
Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
## Pre-Polish Assessment
+2
View File
@@ -3,6 +3,8 @@ description: Tone down overly bold or visually aggressive designs. Reduces inten
argument-hint: [TARGET=<value>]
---
*Apply the frontend-design skill for design principles, if not already in context.*
Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness.
## Assess Current State
+2
View File
@@ -3,6 +3,8 @@ description: Strip designs to their essence by removing unnecessary complexity.
argument-hint: [TARGET=<value>]
---
*Apply the frontend-design skill for design principles, if not already in context.*
Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
## Assess Current State
+75
View File
@@ -0,0 +1,75 @@
---
description: One-time setup that gathers comprehensive design context for your project and saves it to your AI config file. Run once to establish persistent design guidelines.
---
Gather comprehensive design context for this project through a structured conversation, then persist it for all future sessions.
## Gather Design Context
ask the user directly to clarify what you cannot infer. Explore these areas thoroughly:
### 1. Project & Audience
- What is this project? (app, marketing site, dashboard, etc.)
- Who is the primary audience? (developers, consumers, enterprise, etc.)
- What's their technical sophistication? Age range? Key demographics?
- What problem does this solve for them?
### 2. Brand & Identity
- Does an existing brand guide or design system exist? Where?
- What are the brand colors, if any?
- What's the brand personality? (professional, playful, luxurious, approachable, etc.)
- Any fonts already in use or required?
- Logos or visual assets to incorporate?
### 3. Aesthetic Direction
- What's the desired tone? (minimal, bold, elegant, playful, technical, organic, etc.)
- Any reference sites or apps they admire? What specifically about them?
- What should this NOT look like? Any anti-references?
- Light mode, dark mode, or both?
### 4. Technical Constraints
- Framework in use? (React, Vue, vanilla, etc.)
- CSS approach? (Tailwind, CSS modules, styled-components, etc.)
- Component library in use or to avoid?
- Performance budget or requirements?
- Browser/device support requirements?
### 5. Accessibility Requirements
- WCAG compliance level needed? (A, AA, AAA)
- Known accessibility requirements?
- Reduced motion considerations?
### 6. Content & Scope
- What types of content will be displayed?
- Are there existing components to maintain consistency with?
- What's the scope—full redesign or incremental improvements?
## Write Design Context
After gathering responses, create a `## Design Context` section with the collected information, formatted for clarity:
```markdown
## Design Context
### Audience
[Summarize target users, their needs, and context]
### Brand
[Colors, fonts, personality, existing assets]
### Aesthetic Direction
[Tone, references, anti-references, theme preference]
### Technical Stack
[Framework, CSS approach, constraints]
### Accessibility
[Requirements and considerations]
### Design Principles
[Key principles derived from the conversation]
```
Write this section to AGENTS.md in the project root. If the file exists, append or update the Design Context section. If it doesn't exist, create it with this section.
Confirm completion and remind the user that this context will now inform all future design work with Impeccable.
+74 -74
View File
@@ -1,22 +1,22 @@
---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with comprehensive expertise in typography, color systems, spatial design, responsive layouts, interaction patterns, motion, and UX writing. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics.
license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution.
---
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
## Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction:
Great design requires understanding. First, scan available context—README, existing components, brand guidelines, design tokens—to infer purpose, audience, and constraints. If critical context is missing, ask the user directly to clarify what you cannot infer. Don't guess on fundamentals.
Then commit to a BOLD aesthetic direction:
- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- **Constraints**: Technical requirements (framework, performance, accessibility).
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both workthe key is intentionality, not intensity.
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
@@ -26,82 +26,82 @@ Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
## Frontend Aesthetics Guidelines
Focus on:
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
### Typography
*Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.*
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
**DO**: Use a modular type scale with fluid sizing (clamp)
**DO**: Vary font weights and sizes to create clear visual hierarchy
**DON'T**: Use overused fonts—Inter, Roboto, Arial, Open Sans, system defaults
**DON'T**: Put large icons with rounded corners above every heading—they rarely add value and make sites look templated
**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
### Color & Theme
*Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.*
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes
**DO**: Tint your neutrals toward your brand hue—even a subtle hint creates subconscious cohesion
**DON'T**: Use gray text on colored backgrounds—it looks washed out; use a shade of the background color instead
**DON'T**: Use pure black (#000) or pure white (#fff)—always tint; pure black/white never appears in nature
**DON'T**: Reach for purple-to-blue gradients on white—it's the #1 "AI slop" tell
### Layout & Space
*Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.*
Create visual rhythm through varied spacing—not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
**DO**: Create visual rhythm through varied spacing—tight groupings, generous separations
**DO**: Use fluid spacing with clamp() that breathes on larger screens
**DO**: Use asymmetry and unexpected compositions; break the grid intentionally for emphasis
**DON'T**: Wrap everything in cards
**DON'T**: Nest cards inside cards
**DON'T**: Use modals unless there's truly no better alternative—modals are lazy
**DON'T**: Center everything—left-aligned text with asymmetric layouts feels more designed
**DON'T**: Use the same spacing everywhere—without rhythm, layouts feel monotonous
### Motion
*Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
**DO**: Use motion to convey state changes—entrances, exits, feedback
**DO**: Use exponential easing (ease-out-quart/quint/expo) for natural deceleration
**DO**: For height animations, use grid-template-rows transitions instead of animating height directly
**DON'T**: Animate layout properties (width, height, padding, margin)—use transform and opacity only
**DON'T**: Use bounce or elastic easing—they feel dated and tacky; real objects decelerate smoothly
### Interaction
*Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.*
Make interactions feel fast. Use optimistic UI—update immediately, sync later.
**DO**: Use progressive disclosure—start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions)
**DO**: Design empty states that teach the interface, not just say "nothing here"
**DO**: Make every interactive surface feel intentional and responsive
**DON'T**: Repeat the same information—redundant headers, intros that restate the heading
**DON'T**: Make every button primary—use ghost buttons, text links, secondary styles; hierarchy matters
### Responsive
*Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
**DO**: Use container queries (@container) for component-level responsiveness
**DO**: Adapt the interface for different contexts—don't just shrink it
**DON'T**: Hide critical functionality on mobile—adapt the interface, don't amputate it
### UX Writing
*Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
**DO**: Make every word earn its place
**DON'T**: Repeat information users can already see
---
## Reference Files
## Implementation Principles
For deeper expertise, consult: [typography](reference/typography.md), [color](reference/color-and-contrast.md), [spatial](reference/spatial-design.md), [responsive](reference/responsive-design.md), [interaction](reference/interaction-design.md), [motion](reference/motion-design.md), [ux-writing](reference/ux-writing.md).
Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
## Design Patterns Reference
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
This reference defines what TO do and what NOT to do when creating frontend interfaces. These patterns fight against model bias—the tendency of LLMs to converge on the same predictable choices.
### What TO Do (Patterns)
Focus on intentional, distinctive design choices:
**Typography**:
- Use a modular type scale
- Pair a distinctive display font with a refined body font
**Color & Contrast**:
- Use off-whites and near-blacks for softer, sophisticated feel
- Use the latest CSS has to offer for color and gradients
**Layout & Space**:
- Create visual rhythm through varied spacing
- Use asymmetry and unexpected compositions
- Break the grid intentionally for emphasis
**Motion**:
- Use motion to convey state changes effectively
- Design motion inspired by the real world (easing, staggering, etc)
**Interaction**:
- Make interactions *feel* fast by using patterns like optimistic UI
- Use progressive disclosure of sophistication
- Make every surface intentional, actionable and delightful
### What NOT to Do (Anti-Patterns)
These patterns create generic "AI slop" aesthetics:
**Typography**:
- Don't use overused fonts like Arial or Inter
- You love to put big icons with rounded corners above titles. Resist. They rarely add value and make sites look cheap.
**Color & Contrast**:
- Don't use gray text on colored backgrounds
- Don't use pure gray or black. Always tint - pure black/gray never appears in nature.
**Layout & Space**:
- Don't wrap everything in cards
- Don't nest cards inside cards
- Modals are lazy. Only use modals if there's truly no better alternative
**Motion**:
- Don't animate layout properties (width, height, padding, margin) - use transform instead
- Don't use bounce or elastic easing - they feel dated and tacky; use ease-out-quart/quint/expo
**Interaction**:
- Don't repeat the same information (redundant headers, intro restating heading, etc.)
**Responsive**:
- Don't hide critical functionality on mobile
These anti-patterns are baked into training data from countless generic templates. Without explicit guidance, AI reproduces them. This skill ensures your AI knows both what to do AND what to avoid.
Remember: GPT is capable of extraordinary creative work. Don't hold back—show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
+2
View File
@@ -1,3 +1,5 @@
*Apply the frontend-design skill for design principles, if not already in context.*
Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
## Assess Animation Opportunities
+2
View File
@@ -1,3 +1,5 @@
*Apply the frontend-design skill for design principles, if not already in context.*
Increase visual impact and personality in designs that are too safe, generic, or visually underwhelming, creating more engaging and memorable experiences.
## Assess Current State
+2
View File
@@ -1,3 +1,5 @@
*Apply the frontend-design skill for design principles, if not already in context.*
Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality.
## Assess Color Opportunity
+2
View File
@@ -1,3 +1,5 @@
*Apply the frontend-design skill for design principles, if not already in context.*
Identify opportunities to add moments of joy, personality, and unexpected polish that transform functional interfaces into delightful experiences.
## Assess Delight Opportunities
+2
View File
@@ -1,3 +1,5 @@
*Apply the frontend-design skill for design principles, if not already in context.*
Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
## Pre-Polish Assessment
+2
View File
@@ -1,3 +1,5 @@
*Apply the frontend-design skill for design principles, if not already in context.*
Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness.
## Assess Current State
+2
View File
@@ -1,3 +1,5 @@
*Apply the frontend-design skill for design principles, if not already in context.*
Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
## Assess Current State
+71
View File
@@ -0,0 +1,71 @@
Gather comprehensive design context for this project through a structured conversation, then persist it for all future sessions.
## Gather Design Context
ask the user directly to clarify what you cannot infer. Explore these areas thoroughly:
### 1. Project & Audience
- What is this project? (app, marketing site, dashboard, etc.)
- Who is the primary audience? (developers, consumers, enterprise, etc.)
- What's their technical sophistication? Age range? Key demographics?
- What problem does this solve for them?
### 2. Brand & Identity
- Does an existing brand guide or design system exist? Where?
- What are the brand colors, if any?
- What's the brand personality? (professional, playful, luxurious, approachable, etc.)
- Any fonts already in use or required?
- Logos or visual assets to incorporate?
### 3. Aesthetic Direction
- What's the desired tone? (minimal, bold, elegant, playful, technical, organic, etc.)
- Any reference sites or apps they admire? What specifically about them?
- What should this NOT look like? Any anti-references?
- Light mode, dark mode, or both?
### 4. Technical Constraints
- Framework in use? (React, Vue, vanilla, etc.)
- CSS approach? (Tailwind, CSS modules, styled-components, etc.)
- Component library in use or to avoid?
- Performance budget or requirements?
- Browser/device support requirements?
### 5. Accessibility Requirements
- WCAG compliance level needed? (A, AA, AAA)
- Known accessibility requirements?
- Reduced motion considerations?
### 6. Content & Scope
- What types of content will be displayed?
- Are there existing components to maintain consistency with?
- What's the scope—full redesign or incremental improvements?
## Write Design Context
After gathering responses, create a `## Design Context` section with the collected information, formatted for clarity:
```markdown
## Design Context
### Audience
[Summarize target users, their needs, and context]
### Brand
[Colors, fonts, personality, existing assets]
### Aesthetic Direction
[Tone, references, anti-references, theme preference]
### Technical Stack
[Framework, CSS approach, constraints]
### Accessibility
[Requirements and considerations]
### Design Principles
[Key principles derived from the conversation]
```
Write this section to .cursorrules in the project root. If the file exists, append or update the Design Context section. If it doesn't exist, create it with this section.
Confirm completion and remind the user that this context will now inform all future design work with Impeccable.
+74 -74
View File
@@ -1,22 +1,22 @@
---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with comprehensive expertise in typography, color systems, spatial design, responsive layouts, interaction patterns, motion, and UX writing. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics.
license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution.
---
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
## Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction:
Great design requires understanding. First, scan available context—README, existing components, brand guidelines, design tokens—to infer purpose, audience, and constraints. If critical context is missing, ask the user directly to clarify what you cannot infer. Don't guess on fundamentals.
Then commit to a BOLD aesthetic direction:
- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- **Constraints**: Technical requirements (framework, performance, accessibility).
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both workthe key is intentionality, not intensity.
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
@@ -26,82 +26,82 @@ Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
## Frontend Aesthetics Guidelines
Focus on:
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
### Typography
*Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.*
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
**DO**: Use a modular type scale with fluid sizing (clamp)
**DO**: Vary font weights and sizes to create clear visual hierarchy
**DON'T**: Use overused fonts—Inter, Roboto, Arial, Open Sans, system defaults
**DON'T**: Put large icons with rounded corners above every heading—they rarely add value and make sites look templated
**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
### Color & Theme
*Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.*
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes
**DO**: Tint your neutrals toward your brand hue—even a subtle hint creates subconscious cohesion
**DON'T**: Use gray text on colored backgrounds—it looks washed out; use a shade of the background color instead
**DON'T**: Use pure black (#000) or pure white (#fff)—always tint; pure black/white never appears in nature
**DON'T**: Reach for purple-to-blue gradients on white—it's the #1 "AI slop" tell
### Layout & Space
*Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.*
Create visual rhythm through varied spacing—not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
**DO**: Create visual rhythm through varied spacing—tight groupings, generous separations
**DO**: Use fluid spacing with clamp() that breathes on larger screens
**DO**: Use asymmetry and unexpected compositions; break the grid intentionally for emphasis
**DON'T**: Wrap everything in cards
**DON'T**: Nest cards inside cards
**DON'T**: Use modals unless there's truly no better alternative—modals are lazy
**DON'T**: Center everything—left-aligned text with asymmetric layouts feels more designed
**DON'T**: Use the same spacing everywhere—without rhythm, layouts feel monotonous
### Motion
*Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
**DO**: Use motion to convey state changes—entrances, exits, feedback
**DO**: Use exponential easing (ease-out-quart/quint/expo) for natural deceleration
**DO**: For height animations, use grid-template-rows transitions instead of animating height directly
**DON'T**: Animate layout properties (width, height, padding, margin)—use transform and opacity only
**DON'T**: Use bounce or elastic easing—they feel dated and tacky; real objects decelerate smoothly
### Interaction
*Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.*
Make interactions feel fast. Use optimistic UI—update immediately, sync later.
**DO**: Use progressive disclosure—start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions)
**DO**: Design empty states that teach the interface, not just say "nothing here"
**DO**: Make every interactive surface feel intentional and responsive
**DON'T**: Repeat the same information—redundant headers, intros that restate the heading
**DON'T**: Make every button primary—use ghost buttons, text links, secondary styles; hierarchy matters
### Responsive
*Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
**DO**: Use container queries (@container) for component-level responsiveness
**DO**: Adapt the interface for different contexts—don't just shrink it
**DON'T**: Hide critical functionality on mobile—adapt the interface, don't amputate it
### UX Writing
*Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
**DO**: Make every word earn its place
**DON'T**: Repeat information users can already see
---
## Reference Files
## Implementation Principles
For deeper expertise, consult: [typography](reference/typography.md), [color](reference/color-and-contrast.md), [spatial](reference/spatial-design.md), [responsive](reference/responsive-design.md), [interaction](reference/interaction-design.md), [motion](reference/motion-design.md), [ux-writing](reference/ux-writing.md).
Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
## Design Patterns Reference
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
This reference defines what TO do and what NOT to do when creating frontend interfaces. These patterns fight against model bias—the tendency of LLMs to converge on the same predictable choices.
### What TO Do (Patterns)
Focus on intentional, distinctive design choices:
**Typography**:
- Use a modular type scale
- Pair a distinctive display font with a refined body font
**Color & Contrast**:
- Use off-whites and near-blacks for softer, sophisticated feel
- Use the latest CSS has to offer for color and gradients
**Layout & Space**:
- Create visual rhythm through varied spacing
- Use asymmetry and unexpected compositions
- Break the grid intentionally for emphasis
**Motion**:
- Use motion to convey state changes effectively
- Design motion inspired by the real world (easing, staggering, etc)
**Interaction**:
- Make interactions *feel* fast by using patterns like optimistic UI
- Use progressive disclosure of sophistication
- Make every surface intentional, actionable and delightful
### What NOT to Do (Anti-Patterns)
These patterns create generic "AI slop" aesthetics:
**Typography**:
- Don't use overused fonts like Arial or Inter
- You love to put big icons with rounded corners above titles. Resist. They rarely add value and make sites look cheap.
**Color & Contrast**:
- Don't use gray text on colored backgrounds
- Don't use pure gray or black. Always tint - pure black/gray never appears in nature.
**Layout & Space**:
- Don't wrap everything in cards
- Don't nest cards inside cards
- Modals are lazy. Only use modals if there's truly no better alternative
**Motion**:
- Don't animate layout properties (width, height, padding, margin) - use transform instead
- Don't use bounce or elastic easing - they feel dated and tacky; use ease-out-quart/quint/expo
**Interaction**:
- Don't repeat the same information (redundant headers, intro restating heading, etc.)
**Responsive**:
- Don't hide critical functionality on mobile
These anti-patterns are baked into training data from countless generic templates. Without explicit guidance, AI reproduces them. This skill ensures your AI knows both what to do AND what to avoid.
Remember: the model is capable of extraordinary creative work. Don't hold back—show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
+2
View File
@@ -1,5 +1,7 @@
description = "Review a feature and enhance it with purposeful animations, micro-interactions, and motion effects that improve usability and delight."
prompt = """
→ *Apply the frontend-design skill for design principles, if not already in context.*
Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
## Assess Animation Opportunities
+2
View File
@@ -1,5 +1,7 @@
description = "Amplify safe or boring designs to make them more visually interesting and stimulating. Increases impact while maintaining usability."
prompt = """
→ *Apply the frontend-design skill for design principles, if not already in context.*
Increase visual impact and personality in designs that are too safe, generic, or visually underwhelming, creating more engaging and memorable experiences.
## Assess Current State
+2
View File
@@ -1,5 +1,7 @@
description = "Add strategic color to features that are too monochromatic or lack visual interest. Makes interfaces more engaging and expressive."
prompt = """
→ *Apply the frontend-design skill for design principles, if not already in context.*
Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality.
## Assess Color Opportunity
+2
View File
@@ -1,5 +1,7 @@
description = "Add moments of joy, personality, and unexpected touches that make interfaces memorable and enjoyable to use. Elevates functional to delightful."
prompt = """
→ *Apply the frontend-design skill for design principles, if not already in context.*
Identify opportunities to add moments of joy, personality, and unexpected polish that transform functional interfaces into delightful experiences.
## Assess Delight Opportunities
+2
View File
@@ -1,5 +1,7 @@
description = "Final quality pass before shipping. Fixes alignment, spacing, consistency, and detail issues that separate good from great."
prompt = """
→ *Apply the frontend-design skill for design principles, if not already in context.*
Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
## Pre-Polish Assessment
+2
View File
@@ -1,5 +1,7 @@
description = "Tone down overly bold or visually aggressive designs. Reduces intensity while maintaining design quality and impact."
prompt = """
→ *Apply the frontend-design skill for design principles, if not already in context.*
Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness.
## Assess Current State
+2
View File
@@ -1,5 +1,7 @@
description = "Strip designs to their essence by removing unnecessary complexity. Great design is simple, powerful, and clean."
prompt = """
→ *Apply the frontend-design skill for design principles, if not already in context.*
Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
## Assess Current State
+74
View File
@@ -0,0 +1,74 @@
description = "One-time setup that gathers comprehensive design context for your project and saves it to your AI config file. Run once to establish persistent design guidelines."
prompt = """
Gather comprehensive design context for this project through a structured conversation, then persist it for all future sessions.
## Gather Design Context
ask the user directly to clarify what you cannot infer. Explore these areas thoroughly:
### 1. Project & Audience
- What is this project? (app, marketing site, dashboard, etc.)
- Who is the primary audience? (developers, consumers, enterprise, etc.)
- What's their technical sophistication? Age range? Key demographics?
- What problem does this solve for them?
### 2. Brand & Identity
- Does an existing brand guide or design system exist? Where?
- What are the brand colors, if any?
- What's the brand personality? (professional, playful, luxurious, approachable, etc.)
- Any fonts already in use or required?
- Logos or visual assets to incorporate?
### 3. Aesthetic Direction
- What's the desired tone? (minimal, bold, elegant, playful, technical, organic, etc.)
- Any reference sites or apps they admire? What specifically about them?
- What should this NOT look like? Any anti-references?
- Light mode, dark mode, or both?
### 4. Technical Constraints
- Framework in use? (React, Vue, vanilla, etc.)
- CSS approach? (Tailwind, CSS modules, styled-components, etc.)
- Component library in use or to avoid?
- Performance budget or requirements?
- Browser/device support requirements?
### 5. Accessibility Requirements
- WCAG compliance level needed? (A, AA, AAA)
- Known accessibility requirements?
- Reduced motion considerations?
### 6. Content & Scope
- What types of content will be displayed?
- Are there existing components to maintain consistency with?
- What's the scope—full redesign or incremental improvements?
## Write Design Context
After gathering responses, create a `## Design Context` section with the collected information, formatted for clarity:
```markdown
## Design Context
### Audience
[Summarize target users, their needs, and context]
### Brand
[Colors, fonts, personality, existing assets]
### Aesthetic Direction
[Tone, references, anti-references, theme preference]
### Technical Stack
[Framework, CSS approach, constraints]
### Accessibility
[Requirements and considerations]
### Design Principles
[Key principles derived from the conversation]
```
Write this section to GEMINI.md in the project root. If the file exists, append or update the Design Context section. If it doesn't exist, create it with this section.
Confirm completion and remind the user that this context will now inform all future design work with Impeccable.
"""
+75 -16
View File
@@ -1,16 +1,16 @@
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
## Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction:
Great design requires understanding. First, scan available context—README, existing components, brand guidelines, design tokens—to infer purpose, audience, and constraints. If critical context is missing, ask the user directly to clarify what you cannot infer. Don't guess on fundamentals.
Then commit to a BOLD aesthetic direction:
- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- **Constraints**: Technical requirements (framework, performance, accessibility).
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both workthe key is intentionality, not intensity.
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
@@ -20,26 +20,85 @@ Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
## Frontend Aesthetics Guidelines
Focus on:
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
### Typography
*Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.*
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
**DO**: Use a modular type scale with fluid sizing (clamp)
**DO**: Vary font weights and sizes to create clear visual hierarchy
**DON'T**: Use overused fonts—Inter, Roboto, Arial, Open Sans, system defaults
**DON'T**: Put large icons with rounded corners above every heading—they rarely add value and make sites look templated
**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
### Color & Theme
*Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.*
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes
**DO**: Tint your neutrals toward your brand hue—even a subtle hint creates subconscious cohesion
**DON'T**: Use gray text on colored backgrounds—it looks washed out; use a shade of the background color instead
**DON'T**: Use pure black (#000) or pure white (#fff)—always tint; pure black/white never appears in nature
**DON'T**: Reach for purple-to-blue gradients on white—it's the #1 "AI slop" tell
### Layout & Space
*Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.*
Create visual rhythm through varied spacing—not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
**DO**: Create visual rhythm through varied spacing—tight groupings, generous separations
**DO**: Use fluid spacing with clamp() that breathes on larger screens
**DO**: Use asymmetry and unexpected compositions; break the grid intentionally for emphasis
**DON'T**: Wrap everything in cards
**DON'T**: Nest cards inside cards
**DON'T**: Use modals unless there's truly no better alternative—modals are lazy
**DON'T**: Center everything—left-aligned text with asymmetric layouts feels more designed
**DON'T**: Use the same spacing everywhere—without rhythm, layouts feel monotonous
### Motion
*Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
**DO**: Use motion to convey state changes—entrances, exits, feedback
**DO**: Use exponential easing (ease-out-quart/quint/expo) for natural deceleration
**DO**: For height animations, use grid-template-rows transitions instead of animating height directly
**DON'T**: Animate layout properties (width, height, padding, margin)—use transform and opacity only
**DON'T**: Use bounce or elastic easing—they feel dated and tacky; real objects decelerate smoothly
### Interaction
*Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.*
Make interactions feel fast. Use optimistic UI—update immediately, sync later.
**DO**: Use progressive disclosure—start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions)
**DO**: Design empty states that teach the interface, not just say "nothing here"
**DO**: Make every interactive surface feel intentional and responsive
**DON'T**: Repeat the same information—redundant headers, intros that restate the heading
**DON'T**: Make every button primary—use ghost buttons, text links, secondary styles; hierarchy matters
### Responsive
*Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
**DO**: Use container queries (@container) for component-level responsiveness
**DO**: Adapt the interface for different contexts—don't just shrink it
**DON'T**: Hide critical functionality on mobile—adapt the interface, don't amputate it
### UX Writing
*Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
**DO**: Make every word earn its place
**DON'T**: Repeat information users can already see
---
## Reference Files
## Implementation Principles
For deeper expertise, consult: [typography](reference/typography.md), [color](reference/color-and-contrast.md), [spatial](reference/spatial-design.md), [responsive](reference/responsive-design.md), [interaction](reference/interaction-design.md), [motion](reference/motion-design.md), [ux-writing](reference/ux-writing.md).
Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
Remember: Gemini is capable of extraordinary creative work. Don't hold back—show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
---
+1 -1
View File
@@ -8,7 +8,7 @@ Each skill provides deep expertise in its domain. The skills below are automatic
### frontend-design
**When to use**: Create distinctive, production-grade frontend interfaces with comprehensive expertise in typography, color systems, spatial design, responsive layouts, interaction patterns, motion, and UX writing. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
**When to use**: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics.
@./GEMINI.frontend-design.md
+1 -1
View File
@@ -236,7 +236,7 @@
<section class="platforms-section" id="downloads">
<div class="section-header" data-reveal>
<span class="section-number">05</span>
<h2 class="section-title">One Framework, Every AI Coding Tool</h2>
<h2 class="section-title">Download for Your AI Harness</h2>
<p class="section-subtitle">Same design intelligence, adapted for your workflow. Download and start using in seconds.</p>
</div>
+1
View File
@@ -139,3 +139,4 @@ function setupInteractions() {
}
+18 -14
View File
@@ -25,7 +25,9 @@ const categoryLabels = {
// Short symbols for each command (like element symbols)
const commandSymbols = {
'teach-impeccable': 'Ti',
audit: 'Au',
review: 'Re',
normalize: 'No',
polish: 'Po',
optimize: 'Op',
@@ -44,21 +46,23 @@ const commandSymbols = {
// Atomic numbers (just for visual interest)
const commandNumbers = {
'teach-impeccable': 0,
audit: 1,
normalize: 2,
polish: 3,
optimize: 4,
harden: 5,
clarify: 6,
simplify: 7,
adapt: 8,
extract: 9,
animate: 10,
colorize: 11,
delight: 12,
bolder: 13,
quieter: 14,
onboard: 15
review: 2,
normalize: 3,
polish: 4,
optimize: 5,
harden: 6,
clarify: 7,
simplify: 8,
adapt: 9,
extract: 10,
animate: 11,
colorize: 12,
delight: 13,
bolder: 14,
quieter: 15,
onboard: 16
};
export class PeriodicTable {
+1
View File
@@ -313,3 +313,4 @@ function setupMobileInteractions(commands) {
});
});
}
+1
View File
@@ -13,3 +13,4 @@ export function initLensEffect() {
}
+7 -1
View File
@@ -37,7 +37,9 @@ export const skillReferenceDomains = [
];
export const commandProcessSteps = {
'teach-impeccable': ['Gather', 'Clarify', 'Document', 'Save'],
'audit': ['Scan', 'Document', 'Prioritize', 'Recommend'],
'review': ['Evaluate', 'Critique', 'Prioritize', 'Suggest'],
'normalize': ['Analyze', 'Identify', 'Align', 'Verify'],
'polish': ['Review', 'Refine', 'Verify'],
'optimize': ['Profile', 'Identify', 'Improve', 'Measure'],
@@ -55,7 +57,9 @@ export const commandProcessSteps = {
};
export const commandCategories = {
'teach-impeccable': 'system',
'audit': 'diagnostic',
'review': 'diagnostic',
'normalize': 'quality',
'polish': 'quality',
'optimize': 'quality',
@@ -82,7 +86,9 @@ export const skillRelationships = {
};
export const commandRelationships = {
'audit': { leadsTo: ['normalize', 'harden', 'optimize', 'adapt', 'clarify'], flow: 'Diagnostic: Start here to find issues' },
'teach-impeccable': { flow: 'Setup: One-time project context gathering' },
'audit': { leadsTo: ['normalize', 'harden', 'optimize', 'adapt', 'clarify'], flow: 'Diagnostic: Technical quality audit' },
'review': { leadsTo: ['polish', 'simplify', 'bolder', 'quieter'], flow: 'Diagnostic: UX and design review' },
'normalize': { combinesWith: ['clarify', 'adapt'], flow: 'Quality: Align with design system' },
'polish': { flow: 'Quality: Final pass before shipping' },
'optimize': { flow: 'Quality: Performance improvements' },
+1
View File
@@ -127,3 +127,4 @@ export function setupDemoTabs() {
}
+1
View File
@@ -41,3 +41,4 @@ export default {
};
+1
View File
@@ -21,3 +21,4 @@ export default {
};
+3
View File
@@ -4,6 +4,7 @@ import animate from "./animate.js";
import bolder from "./bolder.js";
import normalize from "./normalize.js";
import audit from "./audit.js";
import review from "./review.js";
import polish from "./polish.js";
import optimize from "./optimize.js";
import harden from "./harden.js";
@@ -21,6 +22,7 @@ export const commandDemos = {
bolder,
animate,
audit,
review,
polish,
optimize,
harden,
@@ -39,3 +41,4 @@ export function getCommandDemo(commandId) {
}
+1
View File
@@ -39,3 +39,4 @@ export default {
};
+47
View File
@@ -0,0 +1,47 @@
// Review command demo - shows design/UX issues being identified
export default {
id: 'review',
caption: 'Confusing design → UX issues identified with fixes',
before: `
<div style="display: flex; flex-direction: column; gap: 10px; width: 100%; max-width: 260px; padding: 12px; background: #fafafa; border-radius: 6px;">
<div style="font-size: 11px; color: #666; text-transform: uppercase; letter-spacing: 0.5px;">Dashboard</div>
<div style="font-size: 11px; color: #666;">Welcome to your dashboard where you can manage things</div>
<div style="display: flex; gap: 6px;">
<button style="flex: 1; padding: 8px; font-size: 11px; background: #4F46E5; color: white; border: none; border-radius: 4px; font-weight: 500;">Create</button>
<button style="flex: 1; padding: 8px; font-size: 11px; background: #4F46E5; color: white; border: none; border-radius: 4px; font-weight: 500;">Import</button>
<button style="flex: 1; padding: 8px; font-size: 11px; background: #4F46E5; color: white; border: none; border-radius: 4px; font-weight: 500;">Export</button>
<button style="flex: 1; padding: 8px; font-size: 11px; background: #4F46E5; color: white; border: none; border-radius: 4px; font-weight: 500;">Settings</button>
</div>
<div style="padding: 10px; background: white; border: 1px solid #e5e5e5; border-radius: 4px;">
<div style="font-size: 10px; color: #999;">Recent Activity</div>
<div style="font-size: 10px; color: #999; margin-top: 4px;">No items to display at this time</div>
</div>
</div>
`,
after: `
<div style="display: flex; flex-direction: column; gap: 10px; width: 100%; max-width: 280px; padding: 12px; background: #fafafa; border-radius: 6px;">
<div style="position: relative;">
<div style="font-size: 11px; color: #666; text-transform: uppercase; letter-spacing: 0.5px;">Dashboard</div>
<div style="position: absolute; top: -6px; right: -4px; background: #7c3aed; color: white; font-size: 8px; padding: 2px 5px; border-radius: 6px; font-weight: 600;">HIERARCHY</div>
</div>
<div style="font-size: 11px; color: #666; background: #fef3c7; padding: 4px 6px; border-radius: 3px; position: relative;">
Welcome to your dashboard where you can manage things
<div style="position: absolute; top: -6px; right: -4px; background: #d97706; color: white; font-size: 8px; padding: 2px 5px; border-radius: 6px; font-weight: 600;">REDUNDANT</div>
</div>
<div style="display: flex; gap: 6px; background: #fee2e2; padding: 6px; border-radius: 4px; position: relative;">
<div style="position: absolute; top: -6px; right: -4px; background: #dc2626; color: white; font-size: 8px; padding: 2px 5px; border-radius: 6px; font-weight: 600;">NO PRIMARY</div>
<button style="flex: 1; padding: 8px; font-size: 11px; background: #4F46E5; color: white; border: none; border-radius: 4px; font-weight: 500;">Create</button>
<button style="flex: 1; padding: 8px; font-size: 11px; background: #4F46E5; color: white; border: none; border-radius: 4px; font-weight: 500;">Import</button>
<button style="flex: 1; padding: 8px; font-size: 11px; background: #4F46E5; color: white; border: none; border-radius: 4px; font-weight: 500;">Export</button>
<button style="flex: 1; padding: 8px; font-size: 11px; background: #4F46E5; color: white; border: none; border-radius: 4px; font-weight: 500;">Settings</button>
</div>
<div style="padding: 10px; background: white; border: 1px solid #fca5a5; border-radius: 4px; position: relative;">
<div style="position: absolute; top: -6px; right: -4px; background: #dc2626; color: white; font-size: 8px; padding: 2px 5px; border-radius: 6px; font-weight: 600;">DEAD END</div>
<div style="font-size: 10px; color: #999;">Recent Activity</div>
<div style="font-size: 10px; color: #999; margin-top: 4px;">No items to display at this time</div>
</div>
</div>
`
};
+1
View File
@@ -3,3 +3,4 @@ export { commandDemos, getCommandDemo } from "./commands/index.js";
export { getSkillDemo, skillDemos } from "./skills/index.js";
@@ -65,3 +65,4 @@ export default {
};
+1
View File
@@ -23,3 +23,4 @@ export function getSkillDemo(skillId) {
}
@@ -76,3 +76,4 @@ export default {
};
+1
View File
@@ -66,3 +66,4 @@ export default {
};
@@ -88,3 +88,4 @@ export default {
};
+1
View File
@@ -59,3 +59,4 @@ export default {
};
+1
View File
@@ -35,3 +35,4 @@ export default {
};
+1
View File
@@ -68,3 +68,4 @@ export default {
};
+1
View File
@@ -162,3 +162,4 @@ export function initHeroEffect() {
}
+1
View File
@@ -15,3 +15,4 @@ export function initScrollReveal() {
}
+1
View File
@@ -122,3 +122,4 @@ export function initHashTracking() {
// Initial check
updateHash();
}
+8 -19
View File
@@ -1,5 +1,5 @@
import path from 'path';
import { cleanDir, ensureDir, writeFile, generateYamlFrontmatter } from '../utils.js';
import { cleanDir, ensureDir, writeFile, generateYamlFrontmatter, replacePlaceholders } from '../utils.js';
/**
* Generate markdown from structured patterns/antipatterns data
@@ -66,10 +66,12 @@ export function transformClaudeCode(commands, skills, distDir, patterns = null)
const frontmatter = generateYamlFrontmatter({
name: command.name,
description: command.description,
...(command.context && { context: command.context }),
...(command.args.length > 0 && { args: command.args })
});
const content = `${frontmatter}\n\n${command.body}`;
const commandBody = replacePlaceholders(command.body, 'claude-code');
const content = `${frontmatter}\n\n${commandBody}`;
const outputPath = path.join(commandsDir, `${command.name}.md`);
writeFile(outputPath, content);
}
@@ -92,22 +94,8 @@ export function transformClaudeCode(commands, skills, distDir, patterns = null)
const frontmatter = generateYamlFrontmatter(frontmatterObj);
let body = skill.body;
// Generate and merge patterns into frontend-design skill (before Domain Reference Files section)
if (skill.name === 'frontend-design' && patterns) {
const patternsMarkdown = generatePatternsMarkdown(patterns);
if (patternsMarkdown) {
const insertPoint = body.indexOf('---\n\n## Domain Reference Files');
if (insertPoint > -1) {
body = body.slice(0, insertPoint) + '\n\n' + patternsMarkdown + '\n\n' + body.slice(insertPoint);
} else {
body += '\n\n' + patternsMarkdown;
}
}
}
const content = `${frontmatter}\n\n${body}`;
const skillBody = replacePlaceholders(skill.body, 'claude-code');
const content = `${frontmatter}\n\n${skillBody}`;
const outputPath = path.join(skillDir, 'SKILL.md');
writeFile(outputPath, content);
@@ -117,7 +105,8 @@ export function transformClaudeCode(commands, skills, distDir, patterns = null)
ensureDir(refDir);
for (const ref of skill.references) {
const refOutputPath = path.join(refDir, `${ref.name}.md`);
writeFile(refOutputPath, ref.content);
const refContent = replacePlaceholders(ref.content, 'claude-code');
writeFile(refOutputPath, refContent);
refCount++;
}
}
+7 -20
View File
@@ -1,5 +1,5 @@
import path from 'path';
import { cleanDir, ensureDir, writeFile, generateYamlFrontmatter } from '../utils.js';
import { cleanDir, ensureDir, writeFile, generateYamlFrontmatter, replacePlaceholders } from '../utils.js';
/**
* Generate markdown from structured patterns/antipatterns data
@@ -77,8 +77,8 @@ export function transformCodex(commands, skills, distDir, patterns = null) {
yamlLines.push('---');
// Transform {{argname}} to $ARGNAME for Codex
let body = command.body;
// First replace our placeholders, then transform remaining {{argname}} to $ARGNAME
let body = replacePlaceholders(command.body, 'codex');
body = body.replace(/\{\{([^}]+)\}\}/g, (match, argName) => {
return `$${argName.toUpperCase()}`;
});
@@ -99,22 +99,8 @@ export function transformCodex(commands, skills, distDir, patterns = null) {
...(skill.license && { license: skill.license })
});
let body = skill.body;
// Generate and merge patterns into frontend-design skill
if (skill.name === 'frontend-design' && patterns) {
const patternsMarkdown = generatePatternsMarkdown(patterns);
if (patternsMarkdown) {
const insertPoint = body.indexOf('---\n\n## Domain Reference Files');
if (insertPoint > -1) {
body = body.slice(0, insertPoint) + '\n\n' + patternsMarkdown + '\n\n' + body.slice(insertPoint);
} else {
body += '\n\n' + patternsMarkdown;
}
}
}
const content = `${frontmatter}\n\n${body}`;
const skillBody = replacePlaceholders(skill.body, 'codex');
const content = `${frontmatter}\n\n${skillBody}`;
const outputPath = path.join(skillDir, 'SKILL.md');
writeFile(outputPath, content);
@@ -124,7 +110,8 @@ export function transformCodex(commands, skills, distDir, patterns = null) {
ensureDir(refDir);
for (const ref of skill.references) {
const refOutputPath = path.join(refDir, `${ref.name}.md`);
writeFile(refOutputPath, ref.content);
const refContent = replacePlaceholders(ref.content, 'codex');
writeFile(refOutputPath, refContent);
refCount++;
}
}
+7 -19
View File
@@ -1,5 +1,5 @@
import path from 'path';
import { cleanDir, ensureDir, writeFile, generateYamlFrontmatter } from '../utils.js';
import { cleanDir, ensureDir, writeFile, generateYamlFrontmatter, replacePlaceholders } from '../utils.js';
/**
* Generate markdown from structured patterns/antipatterns data
@@ -65,8 +65,9 @@ export function transformCursor(commands, skills, distDir, patterns = null) {
// Commands: Body only (Cursor doesn't support command frontmatter/args)
for (const command of commands) {
const commandBody = replacePlaceholders(command.body, 'cursor');
const outputPath = path.join(commandsDir, `${command.name}.md`);
writeFile(outputPath, command.body);
writeFile(outputPath, commandBody);
}
// Skills: Agent Skills standard with SKILL.md in subdirectories
@@ -80,22 +81,8 @@ export function transformCursor(commands, skills, distDir, patterns = null) {
...(skill.license && { license: skill.license })
});
let body = skill.body;
// Generate and merge patterns into frontend-design skill
if (skill.name === 'frontend-design' && patterns) {
const patternsMarkdown = generatePatternsMarkdown(patterns);
if (patternsMarkdown) {
const insertPoint = body.indexOf('---\n\n## Domain Reference Files');
if (insertPoint > -1) {
body = body.slice(0, insertPoint) + '\n\n' + patternsMarkdown + '\n\n' + body.slice(insertPoint);
} else {
body += '\n\n' + patternsMarkdown;
}
}
}
const content = `${frontmatter}\n\n${body}`;
const skillBody = replacePlaceholders(skill.body, 'cursor');
const content = `${frontmatter}\n\n${skillBody}`;
const outputPath = path.join(skillDir, 'SKILL.md');
writeFile(outputPath, content);
@@ -105,7 +92,8 @@ export function transformCursor(commands, skills, distDir, patterns = null) {
ensureDir(refDir);
for (const ref of skill.references) {
const refOutputPath = path.join(refDir, `${ref.name}.md`);
writeFile(refOutputPath, ref.content);
const refContent = replacePlaceholders(ref.content, 'cursor');
writeFile(refOutputPath, refContent);
refCount++;
}
}
+9 -4
View File
@@ -1,5 +1,5 @@
import path from 'path';
import { cleanDir, ensureDir, writeFile } from '../utils.js';
import { cleanDir, ensureDir, writeFile, replacePlaceholders } from '../utils.js';
/**
* Gemini Transformer (Full Featured - TOML + Modular Skills)
@@ -17,8 +17,9 @@ export function transformGemini(commands, skills, distDir, patterns = null) {
// Commands: Transform to TOML
for (const command of commands) {
// Replace named placeholders with {{args}}
let prompt = command.body.replace(/\{\{[^}]+\}\}/g, '{{args}}');
// First replace our placeholders, then replace remaining {{arg}} with {{args}}
let prompt = replacePlaceholders(command.body, 'gemini');
prompt = prompt.replace(/\{\{[^}]+\}\}/g, '{{args}}');
const toml = [
`description = "${command.description.replace(/"/g, '\\"')}"`,
@@ -50,11 +51,15 @@ export function transformGemini(commands, skills, distDir, patterns = null) {
if (skill.references && skill.references.length > 0) {
const refSections = skill.references.map(ref => {
refCount++;
return `\n\n---\n\n## Reference: ${ref.name}\n\n${ref.content}`;
const refContent = replacePlaceholders(ref.content, 'gemini');
return `\n\n---\n\n## Reference: ${ref.name}\n\n${refContent}`;
});
content += refSections.join('');
}
// Replace all placeholders
content = replacePlaceholders(content, 'gemini');
const outputPath = path.join(geminiDir, `GEMINI.${skill.name}.md`);
writeFile(outputPath, content);
}
+92 -58
View File
@@ -122,6 +122,7 @@ export function readSourceFiles(rootDir) {
name: frontmatter.name || name,
description: frontmatter.description || '',
args: frontmatter.args || [],
context: frontmatter.context || null,
body,
filePath
};
@@ -223,84 +224,117 @@ export function writeFile(filePath, content) {
}
/**
* Read and parse patterns.md
* Returns { patterns: [...], antipatterns: [...], body: string }
* Extract patterns from frontend-design SKILL.md
* Parses **DO**: and **DON'T**: lines, grouped by section headings
* Returns { patterns: [...], antipatterns: [...] }
*/
export function readPatterns(rootDir) {
const filePath = path.join(rootDir, 'source/patterns.md');
const skillPath = path.join(rootDir, 'source/skills/frontend-design/SKILL.md');
if (!fs.existsSync(filePath)) {
return { patterns: [], antipatterns: [], body: '' };
if (!fs.existsSync(skillPath)) {
return { patterns: [], antipatterns: [] };
}
const content = fs.readFileSync(filePath, 'utf-8');
const content = fs.readFileSync(skillPath, 'utf-8');
const lines = content.split('\n');
// Split frontmatter and body
const frontmatterRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
const match = content.match(frontmatterRegex);
if (!match) {
return { patterns: [], antipatterns: [], body: content };
}
const [, frontmatterText, body] = match;
// Parse both patterns and antipatterns sections
const patterns = [];
const antipatterns = [];
const lines = frontmatterText.split('\n');
let currentSection = null; // 'patterns' or 'antipatterns'
let currentCategory = null;
let inItems = false;
const patternsMap = {}; // category -> items[]
const antipatternsMap = {}; // category -> items[]
let currentSection = null;
for (const line of lines) {
const trimmed = line.trim();
if (!trimmed) continue;
const indent = line.length - line.trimStart().length;
// Top-level section declaration
if (indent === 0 && trimmed === 'patterns:') {
currentSection = 'patterns';
currentCategory = null;
inItems = false;
continue;
}
if (indent === 0 && trimmed === 'antipatterns:') {
currentSection = 'antipatterns';
currentCategory = null;
inItems = false;
continue;
}
// New category starts with "- name:"
if (trimmed.startsWith('- name:') && currentSection) {
currentCategory = {
name: trimmed.slice(7).trim(),
items: []
};
if (currentSection === 'patterns') {
patterns.push(currentCategory);
} else {
antipatterns.push(currentCategory);
// Track section headings (### Typography, ### Color & Theme, etc.)
if (trimmed.startsWith('### ')) {
currentSection = trimmed.slice(4).trim();
// Normalize "Color & Theme" to "Color & Contrast" for consistency
if (currentSection === 'Color & Theme') {
currentSection = 'Color & Contrast';
}
inItems = false;
continue;
}
// Items array declaration
if (trimmed === 'items:' && currentCategory) {
inItems = true;
// Parse **DO**: lines
if (trimmed.startsWith('**DO**:') && currentSection) {
const item = trimmed.slice(7).trim();
if (!patternsMap[currentSection]) {
patternsMap[currentSection] = [];
}
patternsMap[currentSection].push(item);
continue;
}
// Item within items array (indented with "- ")
if (trimmed.startsWith('- ') && inItems && currentCategory && indent >= 6) {
currentCategory.items.push(trimmed.slice(2).trim());
// Parse **DON'T**: lines
if (trimmed.startsWith("**DON'T**:") && currentSection) {
const item = trimmed.slice(10).trim();
if (!antipatternsMap[currentSection]) {
antipatternsMap[currentSection] = [];
}
antipatternsMap[currentSection].push(item);
continue;
}
}
return { patterns, antipatterns, body: body.trim() };
// Convert maps to arrays in consistent order
const sectionOrder = ['Typography', 'Color & Contrast', 'Layout & Space', 'Motion', 'Interaction', 'Responsive', 'UX Writing', 'Visual Details'];
const patterns = [];
const antipatterns = [];
for (const section of sectionOrder) {
if (patternsMap[section] && patternsMap[section].length > 0) {
patterns.push({ name: section, items: patternsMap[section] });
}
if (antipatternsMap[section] && antipatternsMap[section].length > 0) {
antipatterns.push({ name: section, items: antipatternsMap[section] });
}
}
return { patterns, antipatterns };
}
/**
* Provider-specific placeholders
*/
export const PROVIDER_PLACEHOLDERS = {
'claude-code': {
model: 'Claude',
config_file: 'CLAUDE.md',
ask_instruction: 'use the AskUserQuestion tool to clarify what you cannot infer.'
},
'cursor': {
model: 'the model',
config_file: '.cursorrules',
ask_instruction: 'ask the user directly to clarify what you cannot infer.'
},
'gemini': {
model: 'Gemini',
config_file: 'GEMINI.md',
ask_instruction: 'ask the user directly to clarify what you cannot infer.'
},
'codex': {
model: 'GPT',
config_file: 'AGENTS.md',
ask_instruction: 'ask the user directly to clarify what you cannot infer.'
}
};
/**
* Replace all {{placeholder}} tokens with provider-specific values
*/
export function replacePlaceholders(content, provider) {
const placeholders = PROVIDER_PLACEHOLDERS[provider] || PROVIDER_PLACEHOLDERS['cursor'];
return content
.replace(/\{\{model\}\}/g, placeholders.model)
.replace(/\{\{config_file\}\}/g, placeholders.config_file)
.replace(/\{\{ask_instruction\}\}/g, placeholders.ask_instruction);
}
// Legacy alias for backward compatibility
export function replaceModelPlaceholder(content, provider) {
return replacePlaceholders(content, provider);
}
/**
+3 -69
View File
@@ -2,6 +2,7 @@ import { readdir, readFile } from "fs/promises";
import { basename, join, dirname } from "path";
import { existsSync } from "fs";
import { fileURLToPath } from "url";
import { readPatterns } from "../../scripts/lib/utils.js";
// Get project root directory (works in both Node.js and Bun, including Vercel)
const __filename = fileURLToPath(import.meta.url);
@@ -130,77 +131,10 @@ export async function handleFileDownload(type, provider, id) {
}
}
// Read patterns from source/patterns.md
// Extract patterns from SKILL.md using the shared utility
export async function getPatterns() {
const sourceDir = join(PROJECT_ROOT, "source");
const filePath = join(sourceDir, "patterns.md");
try {
const content = await readFileContent(filePath);
const frontmatterMatch = content.match(/^---\n([\s\S]+?)\n---/);
if (!frontmatterMatch) {
return { patterns: [], antipatterns: [] };
}
const frontmatterText = frontmatterMatch[1];
// Parse patterns and antipatterns from frontmatter
const patterns = [];
const antipatterns = [];
const lines = frontmatterText.split('\n');
let currentSection = null;
let currentCategory = null;
let inItems = false;
for (const line of lines) {
const trimmed = line.trim();
if (!trimmed) continue;
const indent = line.length - line.trimStart().length;
// Top-level section declaration
if (indent === 0 && trimmed === 'patterns:') {
currentSection = 'patterns';
currentCategory = null;
inItems = false;
continue;
}
if (indent === 0 && trimmed === 'antipatterns:') {
currentSection = 'antipatterns';
currentCategory = null;
inItems = false;
continue;
}
// New category starts with "- name:"
if (trimmed.startsWith('- name:') && currentSection) {
currentCategory = {
name: trimmed.slice(7).trim(),
items: []
};
if (currentSection === 'patterns') {
patterns.push(currentCategory);
} else {
antipatterns.push(currentCategory);
}
inItems = false;
continue;
}
// Items array declaration
if (trimmed === 'items:' && currentCategory) {
inItems = true;
continue;
}
// Item within items array (indented with "- ")
if (trimmed.startsWith('- ') && inItems && currentCategory && indent >= 6) {
currentCategory.items.push(trimmed.slice(2).trim());
}
}
return { patterns, antipatterns };
return readPatterns(PROJECT_ROOT);
} catch (error) {
console.error("Error reading patterns:", error);
return { patterns: [], antipatterns: [] };
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
→ *Apply the frontend-design skill for design principles, if not already in context.*
Analyze a feature and strategically add animations and micro-interactions that enhance understanding, provide feedback, and create delight.
## Assess Animation Opportunities
+1
View File
@@ -1,6 +1,7 @@
---
name: audit
description: Perform comprehensive audit of interface quality across accessibility, performance, theming, and responsive design. Generates detailed report of issues with severity ratings and recommendations.
context: fork
args:
- name: area
description: The feature or area to audit (optional)
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
→ *Apply the frontend-design skill for design principles, if not already in context.*
Increase visual impact and personality in designs that are too safe, generic, or visually underwhelming, creating more engaging and memorable experiences.
## Assess Current State
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
→ *Apply the frontend-design skill for design principles, if not already in context.*
Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality.
## Assess Color Opportunity
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
→ *Apply the frontend-design skill for design principles, if not already in context.*
Identify opportunities to add moments of joy, personality, and unexpected polish that transform functional interfaces into delightful experiences.
## Assess Delight Opportunities
+1
View File
@@ -1,6 +1,7 @@
---
name: extract
description: Extract and consolidate reusable components, design tokens, and patterns into your design system. Identifies opportunities for systematic reuse and enriches your component library.
context: fork
args:
- name: target
description: The feature, component, or area to extract from (optional)
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
→ *Apply the frontend-design skill for design principles, if not already in context.*
Perform a meticulous final pass to catch all the small details that separate good work from great work. The difference between shipped and polished.
## Pre-Polish Assessment
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
→ *Apply the frontend-design skill for design principles, if not already in context.*
Reduce visual intensity in designs that are too bold, aggressive, or overstimulating, creating a more refined and approachable aesthetic without losing effectiveness.
## Assess Current State
+107
View File
@@ -0,0 +1,107 @@
---
name: review
description: Evaluate design effectiveness from a UX perspective. Assesses visual hierarchy, information architecture, emotional resonance, and overall design quality with actionable feedback.
context: fork
args:
- name: area
description: The feature or area to review (optional)
required: false
---
Conduct a holistic design review, evaluating whether the interface actually works—not just technically, but as a designed experience. Think like a design director giving feedback.
→ *Apply the frontend-design skill for design principles, if not already in context.*
## Design Review
Evaluate the interface across these dimensions:
### 1. Visual Hierarchy
- Does the eye flow to the most important element first?
- Is there a clear primary action? Can you spot it in 2 seconds?
- Do size, color, and position communicate importance correctly?
- Is there visual competition between elements that should have different weights?
### 2. Information Architecture
- Is the structure intuitive? Would a new user understand the organization?
- Is related content grouped logically?
- Are there too many choices at once? (cognitive overload)
- Is the navigation clear and predictable?
### 3. Emotional Resonance
- What emotion does this interface evoke? Is that intentional?
- Does it match the brand personality?
- Does it feel trustworthy, approachable, premium, playful—whatever it should feel?
- Would the target user feel "this is for me"?
### 4. Discoverability & Affordance
- Are interactive elements obviously interactive?
- Would a user know what to do without instructions?
- Are hover/focus states providing useful feedback?
- Are there hidden features that should be more visible?
### 5. Composition & Balance
- Does the layout feel balanced or uncomfortably weighted?
- Is whitespace used intentionally or just leftover?
- Is there visual rhythm in spacing and repetition?
- Does asymmetry feel designed or accidental?
### 6. Typography as Communication
- Does the type hierarchy clearly signal what to read first, second, third?
- Is body text comfortable to read? (line length, spacing, size)
- Do font choices reinforce the brand/tone?
- Is there enough contrast between heading levels?
### 7. Color with Purpose
- Is color used to communicate, not just decorate?
- Does the palette feel cohesive?
- Are accent colors drawing attention to the right things?
- Does it work for colorblind users? (not just technically—does meaning still come through?)
### 8. States & Edge Cases
- Empty states: Do they guide users toward action, or just say "nothing here"?
- Loading states: Do they reduce perceived wait time?
- Error states: Are they helpful and non-blaming?
- Success states: Do they confirm and guide next steps?
### 9. Microcopy & Voice
- Is the writing clear and concise?
- Does it sound like a human (the right human for this brand)?
- Are labels and buttons unambiguous?
- Does error copy help users fix the problem?
## Generate Review Report
Structure your feedback as a design director would:
### Overall Impression
A brief gut reaction—what works, what doesn't, and the single biggest opportunity.
### What's Working
Highlight 2-3 things done well. Be specific about why they work.
### Priority Issues
The 3-5 most impactful design problems, ordered by importance:
For each issue:
- **What**: Name the problem clearly
- **Why it matters**: How this hurts users or undermines goals
- **Fix**: What to do about it (be concrete)
- **Command**: Which command to use (`/polish`, `/simplify`, `/bolder`, `/quieter`, etc.)
### Minor Observations
Quick notes on smaller issues worth addressing.
### Questions to Consider
Provocative questions that might unlock better solutions:
- "What if the primary action were more prominent?"
- "Does this need to feel this complex?"
- "What would a confident version of this look like?"
**Remember**:
- Be direct—vague feedback wastes everyone's time
- Be specific—"the submit button" not "some elements"
- Say what's wrong AND why it matters to users
- Give concrete suggestions, not just "consider exploring..."
- Prioritize ruthlessly—if everything is important, nothing is
- Don't soften criticism—developers need honest feedback to ship great design
+2
View File
@@ -7,6 +7,8 @@ args:
required: false
---
→ *Apply the frontend-design skill for design principles, if not already in context.*
Remove unnecessary complexity from designs, revealing the essential elements and creating clarity through ruthless simplification.
## Assess Current State
+68
View File
@@ -0,0 +1,68 @@
---
name: teach-impeccable
description: One-time setup that gathers design context for your project and saves it to your AI config file. Run once to establish persistent design guidelines.
---
Gather design context for this project, then persist it for all future sessions.
## Step 1: Explore the Codebase
Before asking questions, thoroughly scan the project to discover what you can:
- **README and docs**: Project purpose, target audience, any stated goals
- **Package.json / config files**: Tech stack, dependencies, existing design libraries
- **Existing components**: Current design patterns, spacing, typography in use
- **Brand assets**: Logos, favicons, color values already defined
- **Design tokens / CSS variables**: Existing color palettes, font stacks, spacing scales
- **Any style guides or brand documentation**
Note what you've learned and what remains unclear.
## Step 2: Ask UX-Focused Questions
{{ask_instruction}} Focus only on what you couldn't infer from the codebase:
### Users & Purpose
- Who uses this? What's their context when using it?
- What job are they trying to get done?
- What emotions should the interface evoke? (confidence, delight, calm, urgency, etc.)
### Brand & Personality
- How would you describe the brand personality in 3 words?
- Any reference sites or apps that capture the right feel? What specifically about them?
- What should this explicitly NOT look like? Any anti-references?
### Aesthetic Preferences
- Any strong preferences for visual direction? (minimal, bold, elegant, playful, technical, organic, etc.)
- Light mode, dark mode, or both?
- Any colors that must be used or avoided?
### Accessibility & Inclusion
- Specific accessibility requirements? (WCAG level, known user needs)
- Considerations for reduced motion, color blindness, or other accommodations?
Skip questions where the answer is already clear from the codebase exploration.
## Step 3: Write Design Context
Synthesize your findings and the user's answers into a `## Design Context` section:
```markdown
## Design Context
### Users
[Who they are, their context, the job to be done]
### Brand Personality
[Voice, tone, 3-word personality, emotional goals]
### Aesthetic Direction
[Visual tone, references, anti-references, theme]
### Design Principles
[3-5 principles derived from the conversation that should guide all design decisions]
```
Write this section to {{config_file}} in the project root. If the file exists, append or update the Design Context section.
Confirm completion and summarize the key design principles that will now guide all future work.
-49
View File
@@ -1,49 +0,0 @@
---
patterns:
- name: Typography
items:
- Use a modular type scale
- Pair a distinctive display font with a refined body font
- name: Color & Contrast
items:
- Use off-whites and near-blacks for softer, sophisticated feel
- Use the latest CSS has to offer for color and gradients
- name: Layout & Space
items:
- Create visual rhythm through varied spacing
- Use asymmetry and unexpected compositions
- Break the grid intentionally for emphasis
- name: Motion
items:
- Use motion to convey state changes effectively
- Design motion inspired by the real world (easing, staggering, etc)
- name: Interaction
items:
- Make interactions *feel* fast by using patterns like optimistic UI
- Use progressive disclosure of sophistication
- Make every surface intentional, actionable and delightful
antipatterns:
- name: Typography
items:
- Don't use overused fonts like Arial or Inter
- You love to put big icons with rounded corners above titles. Resist. They rarely add value and make sites look cheap.
- name: Color & Contrast
items:
- Don't use gray text on colored backgrounds
- Don't use pure gray or black. Always tint - pure black/gray never appears in nature.
- name: Layout & Space
items:
- Don't wrap everything in cards
- Don't nest cards inside cards
- Modals are lazy. Only use modals if there's truly no better alternative
- name: Motion
items:
- Don't animate layout properties (width, height, padding, margin) - use transform instead
- Don't use bounce or elastic easing - they feel dated and tacky; use ease-out-quart/quint/expo
- name: Interaction
items:
- Don't repeat the same information (redundant headers, intro restating heading, etc.)
- name: Responsive
items:
- Don't hide critical functionality on mobile
---
+76 -17
View File
@@ -1,22 +1,22 @@
---
name: frontend-design
description: Create distinctive, production-grade frontend interfaces with comprehensive expertise in typography, color systems, spatial design, responsive layouts, interaction patterns, motion, and UX writing. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics.
license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution.
---
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
## Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction:
Great design requires understanding. First, scan available context—README, existing components, brand guidelines, design tokens—to infer purpose, audience, and constraints. If critical context is missing, {{ask_instruction}} Don't guess on fundamentals.
Then commit to a BOLD aesthetic direction:
- **Purpose**: What problem does this interface solve? Who uses it?
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- **Constraints**: Technical requirements (framework, performance, accessibility).
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both workthe key is intentionality, not intensity.
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
@@ -26,23 +26,82 @@ Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
## Frontend Aesthetics Guidelines
Focus on:
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
### Typography
→ *Consult [typography reference](reference/typography.md) for scales, pairing, and loading strategies.*
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
Choose fonts that are beautiful, unique, and interesting. Pair a distinctive display font with a refined body font.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
**DO**: Use a modular type scale with fluid sizing (clamp)
**DO**: Vary font weights and sizes to create clear visual hierarchy
**DON'T**: Use overused fonts—Inter, Roboto, Arial, Open Sans, system defaults
**DON'T**: Put large icons with rounded corners above every heading—they rarely add value and make sites look templated
**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
### Color & Theme
→ *Consult [color reference](reference/color-and-contrast.md) for OKLCH, palettes, and dark mode.*
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
Commit to a cohesive palette. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
**DO**: Use modern CSS color functions (oklch, color-mix, light-dark) for perceptually uniform, maintainable palettes
**DO**: Tint your neutrals toward your brand hue—even a subtle hint creates subconscious cohesion
**DON'T**: Use gray text on colored backgrounds—it looks washed out; use a shade of the background color instead
**DON'T**: Use pure black (#000) or pure white (#fff)—always tint; pure black/white never appears in nature
**DON'T**: Reach for purple-to-blue gradients on white—it's the #1 "AI slop" tell
### Layout & Space
→ *Consult [spatial reference](reference/spatial-design.md) for grids, rhythm, and container queries.*
Create visual rhythm through varied spacing—not the same padding everywhere. Embrace asymmetry and unexpected compositions. Break the grid intentionally for emphasis.
**DO**: Create visual rhythm through varied spacing—tight groupings, generous separations
**DO**: Use fluid spacing with clamp() that breathes on larger screens
**DO**: Use asymmetry and unexpected compositions; break the grid intentionally for emphasis
**DON'T**: Wrap everything in cards
**DON'T**: Nest cards inside cards
**DON'T**: Use modals unless there's truly no better alternative—modals are lazy
**DON'T**: Center everything—left-aligned text with asymmetric layouts feels more designed
**DON'T**: Use the same spacing everywhere—without rhythm, layouts feel monotonous
### Motion
→ *Consult [motion reference](reference/motion-design.md) for timing, easing, and reduced motion.*
Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
**DO**: Use motion to convey state changes—entrances, exits, feedback
**DO**: Use exponential easing (ease-out-quart/quint/expo) for natural deceleration
**DO**: For height animations, use grid-template-rows transitions instead of animating height directly
**DON'T**: Animate layout properties (width, height, padding, margin)—use transform and opacity only
**DON'T**: Use bounce or elastic easing—they feel dated and tacky; real objects decelerate smoothly
### Interaction
→ *Consult [interaction reference](reference/interaction-design.md) for forms, focus, and loading patterns.*
Make interactions feel fast. Use optimistic UI—update immediately, sync later.
**DO**: Use progressive disclosure—start simple, reveal sophistication through interaction (basic options first, advanced behind expandable sections; hover states that reveal secondary actions)
**DO**: Design empty states that teach the interface, not just say "nothing here"
**DO**: Make every interactive surface feel intentional and responsive
**DON'T**: Repeat the same information—redundant headers, intros that restate the heading
**DON'T**: Make every button primary—use ghost buttons, text links, secondary styles; hierarchy matters
### Responsive
→ *Consult [responsive reference](reference/responsive-design.md) for mobile-first, fluid design, and container queries.*
**DO**: Use container queries (@container) for component-level responsiveness
**DO**: Adapt the interface for different contexts—don't just shrink it
**DON'T**: Hide critical functionality on mobile—adapt the interface, don't amputate it
### UX Writing
→ *Consult [ux-writing reference](reference/ux-writing.md) for labels, errors, and empty states.*
**DO**: Make every word earn its place
**DON'T**: Repeat information users can already see
---
## Reference Files
## Implementation Principles
For deeper expertise, consult: [typography](reference/typography.md), [color](reference/color-and-contrast.md), [spatial](reference/spatial-design.md), [responsive](reference/responsive-design.md), [interaction](reference/interaction-design.md), [motion](reference/motion-design.md), [ux-writing](reference/ux-writing.md).
Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
Remember: {{model}} is capable of extraordinary creative work. Don't hold back—show what can truly be created when thinking outside the box and committing fully to a distinctive vision.