From jaan-to
Generates production-grade frontend UI components with bold design choices and working code. Accepts component descriptions, requirements, PRD files, or OpenAPI contracts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jaan-to:frontend-designThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Create distinctive, production-grade frontend interfaces.
Create distinctive, production-grade frontend interfaces.
$JAAN_CONTEXT_DIR/tech.md - Tech stack context (optional, auto-imported if exists)
#current-stack, #frameworks, #constraints$JAAN_CONTEXT_DIR/design.md - Design system guidelines (optional)$JAAN_CONTEXT_DIR/brand.md - Brand guidelines (optional)$JAAN_TEMPLATES_DIR/jaan-to-frontend-design.template.md - Output template$JAAN_LEARN_DIR/jaan-to-frontend-design.learn.md - Past lessons (loaded in Pre-Execution)${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md - Language resolution protocol${CLAUDE_PLUGIN_ROOT}/docs/extending/frontend-ui-workflow-reference.md - Shared UI workflow reference (CSF3 format, visual scoring)Component Request: $ARGUMENTS
Accepts any of:
Contract parsing: If --contract present, extract path first, validate file exists and contains openapi: or swagger: key, then parse remaining positional argument as component description or requirements.
If no input provided, ask: "What component should I design and build?"
MANDATORY — Read and execute ALL steps in: ${CLAUDE_PLUGIN_ROOT}/docs/extending/pre-execution-protocol.md
Skill name: frontend-design
Execute: Step 0 (Init Guard) → A (Load Lessons) → B (Resolve Template) → C (Offer Template Seeding)
Also read context files if available:
$JAAN_CONTEXT_DIR/tech.md - Know the tech stack for framework-specific code generation$JAAN_CONTEXT_DIR/design.md - Know the design system patterns$JAAN_CONTEXT_DIR/brand.md - Know brand colors, fonts, toneRead and apply language protocol: ${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md
Override field for this skill: language_frontend-design
Language exception: Generated code output (variable names, code blocks, schemas, SQL, API specs) is NOT affected by this setting and remains in the project's programming language.
ultrathink
Use extended reasoning for:
Analyze the provided input to extract:
--contract: read the spec and extract relevant response schemas to inform data shape in component templates. Use actual field names and types from the spec for realistic mock data.Build initial understanding:
COMPONENT REQUEST
─────────────────
Type: {hero/card/form/modal/button/etc}
Purpose: {what it does}
Context: {where it's used}
Constraints: {technical or design constraints}
Unknown: {areas needing clarification}
If PRD reference:
Read $JAAN_CONTEXT_DIR/tech.md if available:
#current-stack or #frameworks sectionsStorybook detection (check alongside tech stack):
Glob: .storybook/main.* — Storybook installed?Grep: "storybook" package.json — Storybook in devDependencies?Glob: src/**/*.stories.tsx — Existing stories?storybook_available = true (used in Steps 5, 7b, 10.5)If tech.md missing or incomplete:
Ask up to 7 smart questions based on what's unclear from Steps 1-2. Skip questions already answered by the input or context files.
Check settings.yaml (if exists at jaan-to/config/settings.yaml):
design.default_direction, design.palette, design.typographyAsk user to fill gaps or override (use AskUserQuestion):
Infer from context (if still unclear after above):
Check for existing patterns to maintain consistency:
$JAAN_OUTPUTS_DIR/frontend/design/* to see existing components$JAAN_CONTEXT_DIR/design.md (if exists) for:
Decision:
Based on requirements, tech stack, and design direction, outline the component:
For React:
For Vue:
For Vanilla JS/HTML:
Design Elements to Plan:
Present component plan:
COMPONENT DESIGN PLAN
─────────────────────
Name: {ComponentName}
Framework: {React/Vue/Vanilla}
Type: {hero/card/form/etc}
Styling: {Tailwind/CSS Modules/etc}
Scope: Component + Preview (default)
Storybook: {yes — will generate CSF3 story / no — skipping}
Key Features:
- {feature_1}
- {feature_2}
- {feature_3}
Design Choices:
- Layout: {grid/flex/hybrid with rationale}
- Typography: {font families, scale, hierarchy}
- Colors: {palette with purpose and meaning}
- Motion: {animation approach and timing}
- Responsive: {breakpoint strategy and behavior}
Accessibility:
- ARIA labels: {yes/no, which ones}
- Keyboard nav: {tab order, focus management}
- Screen reader: {SR-only text, descriptions}
- Color contrast: {WCAG AA/AAA ratios}
Differentiation:
- What makes this distinctive: {unique design choice}
- How it avoids AI slop: {specific anti-patterns avoided}
Present complete design summary to user.
Use AskUserQuestion:
Do NOT proceed to Phase 2 without explicit approval.
Create production-grade, framework-specific component code:
// Component with TypeScript props (if applicable)
// Clear prop documentation
// State management (if needed)
// Accessibility attributes
// Inline style comments explaining design choices
<!-- Template with semantic HTML -->
<!-- Props with TypeScript (if applicable) -->
<!-- Scoped styles with design tokens -->
<!-- Accessibility attributes -->
<!-- Semantic HTML structure -->
<!-- Progressive enhancement -->
<!-- CSS with custom properties -->
<!-- Minimal JS for interactivity -->
--color-primary, --spacing-unitclamp() for fluid typography, min(), max()transition: all 0.2s ease-in-out@media (prefers-color-scheme: dark)@media (prefers-reduced-motion: reduce)Create standalone HTML preview showing the component in action:
Preview File Structure:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{ComponentName} Preview</title>
<!-- Import framework (CDN) if React/Vue -->
<!-- Import component styles -->
</head>
<body>
<!-- Component demonstration -->
<!-- Multiple states if applicable (default, hover, active, disabled, etc.) -->
<!-- Responsive preview at different viewport widths -->
</body>
</html>
Variants to show:
Skip if storybook_available = false.
When Storybook detected in Step 2, generate a CSF3 story file alongside the component:
Reference: See
${CLAUDE_PLUGIN_ROOT}/docs/extending/frontend-ui-workflow-reference.mdsection "CSF3 Story Format Spec" for the base template and rules.
*.stories.tsx files to match project conventionsMeta<typeof ComponentName> + StoryObj<typeof meta>Story file: {id}-{slug}-stories.tsx
Read template: $JAAN_TEMPLATES_DIR/jaan-to-frontend-design.template.md
Fill all sections:
Before preview, verify all items:
outline: none without replacement)If any check fails, fix before proceeding.
Show complete output to user:
Use AskUserQuestion:
# Source ID generator utility
source "${CLAUDE_PLUGIN_ROOT}/scripts/lib/id-generator.sh"
# Define subdomain directory
SUBDOMAIN_DIR="$JAAN_OUTPUTS_DIR/frontend/design"
mkdir -p "$SUBDOMAIN_DIR"
# Generate next sequential ID
NEXT_ID=$(generate_next_id "$SUBDOMAIN_DIR")
# Create slug from component name (lowercase-kebab-case, max 50 chars)
slug="{component-name-slug}"
# Generate paths
OUTPUT_FOLDER="${SUBDOMAIN_DIR}/${NEXT_ID}-${slug}"
MAIN_FILE="${OUTPUT_FOLDER}/${NEXT_ID}-${slug}.md"
CODE_FILE="${OUTPUT_FOLDER}/${NEXT_ID}-${slug}-code.{jsx|vue|html}"
PREVIEW_FILE="${OUTPUT_FOLDER}/${NEXT_ID}-${slug}-preview.html"
STORIES_FILE="${OUTPUT_FOLDER}/${NEXT_ID}-${slug}-stories.tsx" # if storybook_available
Preview output configuration:
Output Configuration
- ID: {NEXT_ID}
- Folder: $JAAN_OUTPUTS_DIR/frontend/design/{NEXT_ID}-{slug}/
- Files:
- {NEXT_ID}-{slug}.md (documentation)
- {NEXT_ID}-{slug}-code.{ext} (code)
- {NEXT_ID}-{slug}-preview.html (preview)
- {NEXT_ID}-{slug}-stories.tsx (CSF3 stories — if Storybook detected)
Create output folder:
mkdir -p "$OUTPUT_FOLDER"
Write documentation file:
Write filled template to $MAIN_FILE
Write component code file:
Write generated code to $CODE_FILE
Write preview file:
Write standalone preview to $PREVIEW_FILE
Write stories file (if storybook_available):
Write CSF3 stories to $STORIES_FILE
Update subdomain index:
source "${CLAUDE_PLUGIN_ROOT}/scripts/lib/index-updater.sh"
add_to_index \
"$SUBDOMAIN_DIR/README.md" \
"$NEXT_ID" \
"${NEXT_ID}-${slug}" \
"{ComponentName}" \
"{Executive summary — 1-2 sentences}"
Confirm to user:
✓ Component written to: $JAAN_OUTPUTS_DIR/frontend/design/{NEXT_ID}-{slug}/ ✓ Files created:
- {NEXT_ID}-{slug}.md
- {NEXT_ID}-{slug}-code.{ext}
- {NEXT_ID}-{slug}-preview.html ✓ Index updated: $JAAN_OUTPUTS_DIR/frontend/design/README.md
Present follow-up workflow options:
Component generated successfully!
Next Steps:
- Copy code from
{CODE_FILE}to your project- Open
{PREVIEW_FILE}in browser to see live preview- Run
/jaan-to:frontend-visual-verifyto visually verify the component (requires Storybook + Playwright MCP)- Run
/jaan-to:frontend-story-generateto generate additional stories for more component states- Run
/jaan-to:qa-test-cases "{MAIN_FILE}"to generate test cases- Run
/jaan-to:frontend-task-breakdownif you need integration tasks for larger feature
Use AskUserQuestion:
If "Learn from this":
/jaan-to:learn-add frontend-design "{feedback}"tech.md detection$JAAN_OUTPUTS_DIR pathnpx claudepluginhub parhumm/jaan-to --plugin jaan-toGuides the full frontend design lifecycle: context detection, planning, implementation, and visual verification. Use for landing pages, dashboards, components, or any web UI where design quality matters.
Builds accessible, responsive, performant frontend components using design systems, modern CSS, WCAG patterns, and React/Vue/Svelte examples.
Enforces production-grade frontend design with accessibility, responsive layouts, and professional polish. Guides design system generation or adapts to existing systems for React/Vue/Svelte/HTML projects.