diff --git a/.claude/commands/animate.md b/.claude/commands/animate.md index 6382841f6..6733c4b4d 100644 --- a/.claude/commands/animate.md +++ b/.claude/commands/animate.md @@ -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 diff --git a/.claude/commands/audit.md b/.claude/commands/audit.md index 11db6c75a..72a019ab7 100644 --- a/.claude/commands/audit.md +++ b/.claude/commands/audit.md @@ -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) diff --git a/.claude/commands/bolder.md b/.claude/commands/bolder.md index 186386242..06a4a504b 100644 --- a/.claude/commands/bolder.md +++ b/.claude/commands/bolder.md @@ -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 diff --git a/.claude/commands/colorize.md b/.claude/commands/colorize.md index c25a64187..be6e8b71d 100644 --- a/.claude/commands/colorize.md +++ b/.claude/commands/colorize.md @@ -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 diff --git a/.claude/commands/delight.md b/.claude/commands/delight.md index 8224a2dda..442dd14cf 100644 --- a/.claude/commands/delight.md +++ b/.claude/commands/delight.md @@ -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 diff --git a/.claude/commands/extract.md b/.claude/commands/extract.md index e0d42967a..bc67369d6 100644 --- a/.claude/commands/extract.md +++ b/.claude/commands/extract.md @@ -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) diff --git a/.claude/commands/polish.md b/.claude/commands/polish.md index 806888a10..c76595bea 100644 --- a/.claude/commands/polish.md +++ b/.claude/commands/polish.md @@ -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 diff --git a/.claude/commands/quieter.md b/.claude/commands/quieter.md index f37759a5f..9d3cd7306 100644 --- a/.claude/commands/quieter.md +++ b/.claude/commands/quieter.md @@ -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 diff --git a/.claude/commands/simplify.md b/.claude/commands/simplify.md index f3c3060e6..d6a1cc4cf 100644 --- a/.claude/commands/simplify.md +++ b/.claude/commands/simplify.md @@ -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 diff --git a/.claude/commands/teach-impeccable.md b/.claude/commands/teach-impeccable.md new file mode 100644 index 000000000..d00b1f81b --- /dev/null +++ b/.claude/commands/teach-impeccable.md @@ -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. \ No newline at end of file diff --git a/.claude/skills/frontend-design/SKILL.md b/.claude/skills/frontend-design/SKILL.md index cbd581ae7..5c874961b 100644 --- a/.claude/skills/frontend-design/SKILL.md +++ b/.claude/skills/frontend-design/SKILL.md @@ -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 work—the 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. \ No newline at end of file diff --git a/README.md b/README.md index 214530d29..a5ef4b979 100644 --- a/README.md +++ b/README.md @@ -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 | diff --git a/api/patterns.js b/api/patterns.js index 21f8c8e46..23fe4ae51 100644 --- a/api/patterns.js +++ b/api/patterns.js @@ -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); diff --git a/biome.json b/biome.json index 679d53768..8109374a3 100644 --- a/biome.json +++ b/biome.json @@ -9,3 +9,4 @@ + diff --git a/dist/claude-code/.claude/commands/animate.md b/dist/claude-code/.claude/commands/animate.md index 6382841f6..6733c4b4d 100644 --- a/dist/claude-code/.claude/commands/animate.md +++ b/dist/claude-code/.claude/commands/animate.md @@ -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 diff --git a/dist/claude-code/.claude/commands/audit.md b/dist/claude-code/.claude/commands/audit.md index 11db6c75a..72a019ab7 100644 --- a/dist/claude-code/.claude/commands/audit.md +++ b/dist/claude-code/.claude/commands/audit.md @@ -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) diff --git a/dist/claude-code/.claude/commands/bolder.md b/dist/claude-code/.claude/commands/bolder.md index 186386242..06a4a504b 100644 --- a/dist/claude-code/.claude/commands/bolder.md +++ b/dist/claude-code/.claude/commands/bolder.md @@ -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 diff --git a/dist/claude-code/.claude/commands/colorize.md b/dist/claude-code/.claude/commands/colorize.md index c25a64187..be6e8b71d 100644 --- a/dist/claude-code/.claude/commands/colorize.md +++ b/dist/claude-code/.claude/commands/colorize.md @@ -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 diff --git a/dist/claude-code/.claude/commands/delight.md b/dist/claude-code/.claude/commands/delight.md index 8224a2dda..442dd14cf 100644 --- a/dist/claude-code/.claude/commands/delight.md +++ b/dist/claude-code/.claude/commands/delight.md @@ -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 diff --git a/dist/claude-code/.claude/commands/extract.md b/dist/claude-code/.claude/commands/extract.md index e0d42967a..bc67369d6 100644 --- a/dist/claude-code/.claude/commands/extract.md +++ b/dist/claude-code/.claude/commands/extract.md @@ -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) diff --git a/dist/claude-code/.claude/commands/polish.md b/dist/claude-code/.claude/commands/polish.md index 806888a10..c76595bea 100644 --- a/dist/claude-code/.claude/commands/polish.md +++ b/dist/claude-code/.claude/commands/polish.md @@ -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 diff --git a/dist/claude-code/.claude/commands/quieter.md b/dist/claude-code/.claude/commands/quieter.md index f37759a5f..9d3cd7306 100644 --- a/dist/claude-code/.claude/commands/quieter.md +++ b/dist/claude-code/.claude/commands/quieter.md @@ -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 diff --git a/dist/claude-code/.claude/commands/simplify.md b/dist/claude-code/.claude/commands/simplify.md index f3c3060e6..d6a1cc4cf 100644 --- a/dist/claude-code/.claude/commands/simplify.md +++ b/dist/claude-code/.claude/commands/simplify.md @@ -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 diff --git a/dist/claude-code/.claude/commands/teach-impeccable.md b/dist/claude-code/.claude/commands/teach-impeccable.md new file mode 100644 index 000000000..d00b1f81b --- /dev/null +++ b/dist/claude-code/.claude/commands/teach-impeccable.md @@ -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. \ No newline at end of file diff --git a/dist/claude-code/.claude/skills/frontend-design/SKILL.md b/dist/claude-code/.claude/skills/frontend-design/SKILL.md index cbd581ae7..5c874961b 100644 --- a/dist/claude-code/.claude/skills/frontend-design/SKILL.md +++ b/dist/claude-code/.claude/skills/frontend-design/SKILL.md @@ -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 work—the 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. \ No newline at end of file diff --git a/dist/codex/.codex/prompts/animate.md b/dist/codex/.codex/prompts/animate.md index 4b2db8e68..774fc313e 100644 --- a/dist/codex/.codex/prompts/animate.md +++ b/dist/codex/.codex/prompts/animate.md @@ -3,6 +3,8 @@ description: Review a feature and enhance it with purposeful animations, micro-i argument-hint: [TARGET=] --- +→ *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 diff --git a/dist/codex/.codex/prompts/bolder.md b/dist/codex/.codex/prompts/bolder.md index dd336ab28..9e38c510b 100644 --- a/dist/codex/.codex/prompts/bolder.md +++ b/dist/codex/.codex/prompts/bolder.md @@ -3,6 +3,8 @@ description: Amplify safe or boring designs to make them more visually interesti argument-hint: [TARGET=] --- +→ *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 diff --git a/dist/codex/.codex/prompts/colorize.md b/dist/codex/.codex/prompts/colorize.md index ad5d6588f..8539a290d 100644 --- a/dist/codex/.codex/prompts/colorize.md +++ b/dist/codex/.codex/prompts/colorize.md @@ -3,6 +3,8 @@ description: Add strategic color to features that are too monochromatic or lack argument-hint: [TARGET=] --- +→ *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 diff --git a/dist/codex/.codex/prompts/delight.md b/dist/codex/.codex/prompts/delight.md index 819f8942a..485ad4787 100644 --- a/dist/codex/.codex/prompts/delight.md +++ b/dist/codex/.codex/prompts/delight.md @@ -3,6 +3,8 @@ description: Add moments of joy, personality, and unexpected touches that make i argument-hint: [TARGET=] --- +→ *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 diff --git a/dist/codex/.codex/prompts/polish.md b/dist/codex/.codex/prompts/polish.md index 0c23ae95c..c17ea41bc 100644 --- a/dist/codex/.codex/prompts/polish.md +++ b/dist/codex/.codex/prompts/polish.md @@ -3,6 +3,8 @@ description: Final quality pass before shipping. Fixes alignment, spacing, consi argument-hint: [TARGET=] --- +→ *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 diff --git a/dist/codex/.codex/prompts/quieter.md b/dist/codex/.codex/prompts/quieter.md index fb5208cbb..0a802865a 100644 --- a/dist/codex/.codex/prompts/quieter.md +++ b/dist/codex/.codex/prompts/quieter.md @@ -3,6 +3,8 @@ description: Tone down overly bold or visually aggressive designs. Reduces inten argument-hint: [TARGET=] --- +→ *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 diff --git a/dist/codex/.codex/prompts/simplify.md b/dist/codex/.codex/prompts/simplify.md index ee6a3ee1a..a455c70cf 100644 --- a/dist/codex/.codex/prompts/simplify.md +++ b/dist/codex/.codex/prompts/simplify.md @@ -3,6 +3,8 @@ description: Strip designs to their essence by removing unnecessary complexity. argument-hint: [TARGET=] --- +→ *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 diff --git a/dist/codex/.codex/prompts/teach-impeccable.md b/dist/codex/.codex/prompts/teach-impeccable.md new file mode 100644 index 000000000..5f28590e8 --- /dev/null +++ b/dist/codex/.codex/prompts/teach-impeccable.md @@ -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. \ No newline at end of file diff --git a/dist/codex/.codex/skills/frontend-design/SKILL.md b/dist/codex/.codex/skills/frontend-design/SKILL.md index cbd581ae7..face89adf 100644 --- a/dist/codex/.codex/skills/frontend-design/SKILL.md +++ b/dist/codex/.codex/skills/frontend-design/SKILL.md @@ -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 work—the 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. \ No newline at end of file diff --git a/dist/cursor/.cursor/commands/animate.md b/dist/cursor/.cursor/commands/animate.md index de0c6b251..dfec934d5 100644 --- a/dist/cursor/.cursor/commands/animate.md +++ b/dist/cursor/.cursor/commands/animate.md @@ -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 diff --git a/dist/cursor/.cursor/commands/bolder.md b/dist/cursor/.cursor/commands/bolder.md index 57f14d619..538a409b0 100644 --- a/dist/cursor/.cursor/commands/bolder.md +++ b/dist/cursor/.cursor/commands/bolder.md @@ -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 diff --git a/dist/cursor/.cursor/commands/colorize.md b/dist/cursor/.cursor/commands/colorize.md index 6ad432cf1..b05e491bd 100644 --- a/dist/cursor/.cursor/commands/colorize.md +++ b/dist/cursor/.cursor/commands/colorize.md @@ -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 diff --git a/dist/cursor/.cursor/commands/delight.md b/dist/cursor/.cursor/commands/delight.md index 75cdad20e..f18fa4b75 100644 --- a/dist/cursor/.cursor/commands/delight.md +++ b/dist/cursor/.cursor/commands/delight.md @@ -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 diff --git a/dist/cursor/.cursor/commands/polish.md b/dist/cursor/.cursor/commands/polish.md index 6ec67d9ee..190401277 100644 --- a/dist/cursor/.cursor/commands/polish.md +++ b/dist/cursor/.cursor/commands/polish.md @@ -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 diff --git a/dist/cursor/.cursor/commands/quieter.md b/dist/cursor/.cursor/commands/quieter.md index 8ce58a580..51e3ffc36 100644 --- a/dist/cursor/.cursor/commands/quieter.md +++ b/dist/cursor/.cursor/commands/quieter.md @@ -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 diff --git a/dist/cursor/.cursor/commands/simplify.md b/dist/cursor/.cursor/commands/simplify.md index 7a28ab1ca..5e5462efc 100644 --- a/dist/cursor/.cursor/commands/simplify.md +++ b/dist/cursor/.cursor/commands/simplify.md @@ -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 diff --git a/dist/cursor/.cursor/commands/teach-impeccable.md b/dist/cursor/.cursor/commands/teach-impeccable.md new file mode 100644 index 000000000..56a1f2813 --- /dev/null +++ b/dist/cursor/.cursor/commands/teach-impeccable.md @@ -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. \ No newline at end of file diff --git a/dist/cursor/.cursor/skills/frontend-design/SKILL.md b/dist/cursor/.cursor/skills/frontend-design/SKILL.md index cbd581ae7..588b7524f 100644 --- a/dist/cursor/.cursor/skills/frontend-design/SKILL.md +++ b/dist/cursor/.cursor/skills/frontend-design/SKILL.md @@ -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 work—the 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. \ No newline at end of file diff --git a/dist/gemini/.gemini/commands/animate.toml b/dist/gemini/.gemini/commands/animate.toml index dc44749cb..491cea873 100644 --- a/dist/gemini/.gemini/commands/animate.toml +++ b/dist/gemini/.gemini/commands/animate.toml @@ -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 diff --git a/dist/gemini/.gemini/commands/bolder.toml b/dist/gemini/.gemini/commands/bolder.toml index ed32a7388..51e8ab73b 100644 --- a/dist/gemini/.gemini/commands/bolder.toml +++ b/dist/gemini/.gemini/commands/bolder.toml @@ -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 diff --git a/dist/gemini/.gemini/commands/colorize.toml b/dist/gemini/.gemini/commands/colorize.toml index bae5f8feb..1eed94e7d 100644 --- a/dist/gemini/.gemini/commands/colorize.toml +++ b/dist/gemini/.gemini/commands/colorize.toml @@ -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 diff --git a/dist/gemini/.gemini/commands/delight.toml b/dist/gemini/.gemini/commands/delight.toml index f1c401cfe..86360c2ba 100644 --- a/dist/gemini/.gemini/commands/delight.toml +++ b/dist/gemini/.gemini/commands/delight.toml @@ -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 diff --git a/dist/gemini/.gemini/commands/polish.toml b/dist/gemini/.gemini/commands/polish.toml index d0119f1a2..3520607f3 100644 --- a/dist/gemini/.gemini/commands/polish.toml +++ b/dist/gemini/.gemini/commands/polish.toml @@ -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 diff --git a/dist/gemini/.gemini/commands/quieter.toml b/dist/gemini/.gemini/commands/quieter.toml index a28f9a0f1..04b3545ac 100644 --- a/dist/gemini/.gemini/commands/quieter.toml +++ b/dist/gemini/.gemini/commands/quieter.toml @@ -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 diff --git a/dist/gemini/.gemini/commands/simplify.toml b/dist/gemini/.gemini/commands/simplify.toml index 58ac4ef30..b817bd85f 100644 --- a/dist/gemini/.gemini/commands/simplify.toml +++ b/dist/gemini/.gemini/commands/simplify.toml @@ -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 diff --git a/dist/gemini/.gemini/commands/teach-impeccable.toml b/dist/gemini/.gemini/commands/teach-impeccable.toml new file mode 100644 index 000000000..572e19afa --- /dev/null +++ b/dist/gemini/.gemini/commands/teach-impeccable.toml @@ -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. +""" \ No newline at end of file diff --git a/dist/gemini/GEMINI.frontend-design.md b/dist/gemini/GEMINI.frontend-design.md index 353e2d1eb..e9015cb44 100644 --- a/dist/gemini/GEMINI.frontend-design.md +++ b/dist/gemini/GEMINI.frontend-design.md @@ -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 work—the 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. --- diff --git a/dist/gemini/GEMINI.md b/dist/gemini/GEMINI.md index 21d698030..5dbc834b8 100644 --- a/dist/gemini/GEMINI.md +++ b/dist/gemini/GEMINI.md @@ -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 diff --git a/public/index.html b/public/index.html index 4c8f52846..cddc646bf 100644 --- a/public/index.html +++ b/public/index.html @@ -236,7 +236,7 @@
05 -

One Framework, Every AI Coding Tool

+

Download for Your AI Harness

Same design intelligence, adapted for your workflow. Download and start using in seconds.

diff --git a/public/js/components/art-gallery.js b/public/js/components/art-gallery.js index 483750329..785250c1e 100644 --- a/public/js/components/art-gallery.js +++ b/public/js/components/art-gallery.js @@ -139,3 +139,4 @@ function setupInteractions() { } + diff --git a/public/js/components/framework-viz.js b/public/js/components/framework-viz.js index c7f428cdb..352ddbcb4 100644 --- a/public/js/components/framework-viz.js +++ b/public/js/components/framework-viz.js @@ -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 { diff --git a/public/js/components/glass-terminal.js b/public/js/components/glass-terminal.js index 88673a87b..348bda1e6 100644 --- a/public/js/components/glass-terminal.js +++ b/public/js/components/glass-terminal.js @@ -313,3 +313,4 @@ function setupMobileInteractions(commands) { }); }); } + diff --git a/public/js/components/lens.js b/public/js/components/lens.js index 38ef79c04..c3fc87eb7 100644 --- a/public/js/components/lens.js +++ b/public/js/components/lens.js @@ -13,3 +13,4 @@ export function initLensEffect() { } + diff --git a/public/js/data.js b/public/js/data.js index 048251787..94ee14b33 100644 --- a/public/js/data.js +++ b/public/js/data.js @@ -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' }, diff --git a/public/js/demo-renderer.js b/public/js/demo-renderer.js index 1decfefac..6ab555556 100644 --- a/public/js/demo-renderer.js +++ b/public/js/demo-renderer.js @@ -127,3 +127,4 @@ export function setupDemoTabs() { } + diff --git a/public/js/demos/commands/animate.js b/public/js/demos/commands/animate.js index a5a31906e..f46c79033 100644 --- a/public/js/demos/commands/animate.js +++ b/public/js/demos/commands/animate.js @@ -41,3 +41,4 @@ export default { }; + diff --git a/public/js/demos/commands/bolder.js b/public/js/demos/commands/bolder.js index 8c455211e..1c1791c42 100644 --- a/public/js/demos/commands/bolder.js +++ b/public/js/demos/commands/bolder.js @@ -21,3 +21,4 @@ export default { }; + diff --git a/public/js/demos/commands/index.js b/public/js/demos/commands/index.js index ac2df7f53..212485e2c 100644 --- a/public/js/demos/commands/index.js +++ b/public/js/demos/commands/index.js @@ -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) { } + diff --git a/public/js/demos/commands/normalize.js b/public/js/demos/commands/normalize.js index 6167aa370..58bf16547 100644 --- a/public/js/demos/commands/normalize.js +++ b/public/js/demos/commands/normalize.js @@ -39,3 +39,4 @@ export default { }; + diff --git a/public/js/demos/commands/review.js b/public/js/demos/commands/review.js new file mode 100644 index 000000000..78a95af57 --- /dev/null +++ b/public/js/demos/commands/review.js @@ -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: ` +
+
Dashboard
+
Welcome to your dashboard where you can manage things
+
+ + + + +
+
+
Recent Activity
+
No items to display at this time
+
+
+ `, + + after: ` +
+
+
Dashboard
+
HIERARCHY
+
+
+ Welcome to your dashboard where you can manage things +
REDUNDANT
+
+
+
NO PRIMARY
+ + + + +
+
+
DEAD END
+
Recent Activity
+
No items to display at this time
+
+
+ ` +}; diff --git a/public/js/demos/index.js b/public/js/demos/index.js index cad39aa70..1701b1617 100644 --- a/public/js/demos/index.js +++ b/public/js/demos/index.js @@ -3,3 +3,4 @@ export { commandDemos, getCommandDemo } from "./commands/index.js"; export { getSkillDemo, skillDemos } from "./skills/index.js"; + diff --git a/public/js/demos/skills/color-and-contrast.js b/public/js/demos/skills/color-and-contrast.js index d5cd23be8..306010310 100644 --- a/public/js/demos/skills/color-and-contrast.js +++ b/public/js/demos/skills/color-and-contrast.js @@ -65,3 +65,4 @@ export default { }; + diff --git a/public/js/demos/skills/index.js b/public/js/demos/skills/index.js index ae935e15c..f11caf482 100644 --- a/public/js/demos/skills/index.js +++ b/public/js/demos/skills/index.js @@ -23,3 +23,4 @@ export function getSkillDemo(skillId) { } + diff --git a/public/js/demos/skills/interaction-design.js b/public/js/demos/skills/interaction-design.js index d580afbc3..3432922a1 100644 --- a/public/js/demos/skills/interaction-design.js +++ b/public/js/demos/skills/interaction-design.js @@ -76,3 +76,4 @@ export default { }; + diff --git a/public/js/demos/skills/motion-design.js b/public/js/demos/skills/motion-design.js index 7fecd65df..ec615db8b 100644 --- a/public/js/demos/skills/motion-design.js +++ b/public/js/demos/skills/motion-design.js @@ -66,3 +66,4 @@ export default { }; + diff --git a/public/js/demos/skills/responsive-design.js b/public/js/demos/skills/responsive-design.js index fbbe82062..238f40bf5 100644 --- a/public/js/demos/skills/responsive-design.js +++ b/public/js/demos/skills/responsive-design.js @@ -88,3 +88,4 @@ export default { }; + diff --git a/public/js/demos/skills/spatial-design.js b/public/js/demos/skills/spatial-design.js index 2563b18f9..fd7a440aa 100644 --- a/public/js/demos/skills/spatial-design.js +++ b/public/js/demos/skills/spatial-design.js @@ -59,3 +59,4 @@ export default { }; + diff --git a/public/js/demos/skills/typography.js b/public/js/demos/skills/typography.js index 13acc3c18..5acd6c589 100644 --- a/public/js/demos/skills/typography.js +++ b/public/js/demos/skills/typography.js @@ -35,3 +35,4 @@ export default { }; + diff --git a/public/js/demos/skills/ux-writing.js b/public/js/demos/skills/ux-writing.js index 187c3da27..b04a52336 100644 --- a/public/js/demos/skills/ux-writing.js +++ b/public/js/demos/skills/ux-writing.js @@ -68,3 +68,4 @@ export default { }; + diff --git a/public/js/effects/liquid-canvas.js b/public/js/effects/liquid-canvas.js index 0f77b692e..896f27c29 100644 --- a/public/js/effects/liquid-canvas.js +++ b/public/js/effects/liquid-canvas.js @@ -162,3 +162,4 @@ export function initHeroEffect() { } + diff --git a/public/js/utils/reveal.js b/public/js/utils/reveal.js index d2a8e11bf..96d2b750c 100644 --- a/public/js/utils/reveal.js +++ b/public/js/utils/reveal.js @@ -15,3 +15,4 @@ export function initScrollReveal() { } + diff --git a/public/js/utils/scroll.js b/public/js/utils/scroll.js index b7e62a6ae..c1afd8082 100644 --- a/public/js/utils/scroll.js +++ b/public/js/utils/scroll.js @@ -122,3 +122,4 @@ export function initHashTracking() { // Initial check updateHash(); } + diff --git a/scripts/lib/transformers/claude-code.js b/scripts/lib/transformers/claude-code.js index 00143ce86..2ab6acf0f 100644 --- a/scripts/lib/transformers/claude-code.js +++ b/scripts/lib/transformers/claude-code.js @@ -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++; } } diff --git a/scripts/lib/transformers/codex.js b/scripts/lib/transformers/codex.js index b2fdc110a..a87990b40 100644 --- a/scripts/lib/transformers/codex.js +++ b/scripts/lib/transformers/codex.js @@ -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++; } } diff --git a/scripts/lib/transformers/cursor.js b/scripts/lib/transformers/cursor.js index 9bf56adfb..84fecdd57 100644 --- a/scripts/lib/transformers/cursor.js +++ b/scripts/lib/transformers/cursor.js @@ -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++; } } diff --git a/scripts/lib/transformers/gemini.js b/scripts/lib/transformers/gemini.js index 10dabb97d..34c4099ab 100644 --- a/scripts/lib/transformers/gemini.js +++ b/scripts/lib/transformers/gemini.js @@ -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); } diff --git a/scripts/lib/utils.js b/scripts/lib/utils.js index adf0eeede..0d71f5a58 100644 --- a/scripts/lib/utils.js +++ b/scripts/lib/utils.js @@ -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); } /** diff --git a/server/lib/api-handlers.js b/server/lib/api-handlers.js index 62a516c6b..6ae017d2f 100644 --- a/server/lib/api-handlers.js +++ b/server/lib/api-handlers.js @@ -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: [] }; diff --git a/source/commands/animate.md b/source/commands/animate.md index f54c06f68..106f18163 100644 --- a/source/commands/animate.md +++ b/source/commands/animate.md @@ -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 diff --git a/source/commands/audit.md b/source/commands/audit.md index 011451e82..d1737b5ed 100644 --- a/source/commands/audit.md +++ b/source/commands/audit.md @@ -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) diff --git a/source/commands/bolder.md b/source/commands/bolder.md index 41adc3c20..91474df98 100644 --- a/source/commands/bolder.md +++ b/source/commands/bolder.md @@ -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 diff --git a/source/commands/colorize.md b/source/commands/colorize.md index e4ec55b6c..ef08de495 100644 --- a/source/commands/colorize.md +++ b/source/commands/colorize.md @@ -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 diff --git a/source/commands/delight.md b/source/commands/delight.md index ba5188b3c..0ab67959e 100644 --- a/source/commands/delight.md +++ b/source/commands/delight.md @@ -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 diff --git a/source/commands/extract.md b/source/commands/extract.md index ab41bffd2..b751b6c10 100644 --- a/source/commands/extract.md +++ b/source/commands/extract.md @@ -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) diff --git a/source/commands/polish.md b/source/commands/polish.md index 568d8bfe2..fa63391e0 100644 --- a/source/commands/polish.md +++ b/source/commands/polish.md @@ -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 diff --git a/source/commands/quieter.md b/source/commands/quieter.md index ec9723252..eb9395820 100644 --- a/source/commands/quieter.md +++ b/source/commands/quieter.md @@ -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 diff --git a/source/commands/review.md b/source/commands/review.md new file mode 100644 index 000000000..92eeb877a --- /dev/null +++ b/source/commands/review.md @@ -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 diff --git a/source/commands/simplify.md b/source/commands/simplify.md index ce7ec516e..50d225f10 100644 --- a/source/commands/simplify.md +++ b/source/commands/simplify.md @@ -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 diff --git a/source/commands/teach-impeccable.md b/source/commands/teach-impeccable.md new file mode 100644 index 000000000..a1dc7b4ce --- /dev/null +++ b/source/commands/teach-impeccable.md @@ -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. diff --git a/source/patterns.md b/source/patterns.md deleted file mode 100644 index 8f8c61315..000000000 --- a/source/patterns.md +++ /dev/null @@ -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 ---- diff --git a/source/skills/frontend-design/SKILL.md b/source/skills/frontend-design/SKILL.md index 40d3a6d72..03c1e8f29 100644 --- a/source/skills/frontend-design/SKILL.md +++ b/source/skills/frontend-design/SKILL.md @@ -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 work—the 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.