npx claudepluginhub parhumm/jaan-to --plugin jaan-toThis skill uses the workspace's default tool permissions.
> Create distinctive, production-grade frontend interfaces.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
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 path