Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Convert design prototypes (HTML, CSS, Figma exports) into production-ready components. Analyzes prototype structure, extracts design tokens, identifies reusable patterns, and generates typed React components. Adapts to existing project tech stack with React + TypeScript as default.
.claude/skills/aiskillstore-prototype-to-production/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 108% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 74% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 8% | 0% |
Convert design prototypes into production-ready, typed components by analyzing structure, extracting patterns, and generating clean code.
.superdesign/design_iterations/*.html) to production code┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Analyze │──▶│ Detect │──▶│ Decompose │──▶│ Generate │
│ Input │ │ Tech Stack │ │ Components │ │ Code │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
▼ ▼ ▼ ▼
Identify type package.json Atomic design TypeScript
& structure scan + patterns methodology componentsDetect prototype type and structure:
| Input Type | Detection Method | Key Patterns | |------------|------------------|--------------| | Super-design | Path: .superdesign/design_iterations/*.html | Flowbite, Tailwind CDN, theme CSS references | | Generic HTML | Any .html file | Standard HTML structure, inline/external CSS | | Figma Export | Figma-specific class names | figma-, absolute positioning, frame naming |
Super-design analysis:
Read prototype file → Extract theme CSS reference →
Identify component regions (header, main, footer) →
Map flowbite components to equivalentsScan target project to determine output format:
package.json for frameworks:react / react-dom → React componentsvue → Vue SFCssvelte → Svelte components@angular/core → Angular componentstsconfig.json exists → TypeScript outputtypescript in dependencies → TypeScript outputtailwindcss → Tailwind classesstyled-components / @emotion/react → CSS-in-JSDefault: React + TypeScript + Tailwind CSS
Apply atomic design methodology:
┌─────────────────────────────────────────────────────────┐
│ ORGANISMS (Complex compositions) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MOLECULES (Simple compositions) │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ ATOMS (Primitive elements) │ │ │
│ │ │ Button, Input, Label, Icon, Badge, Avatar │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ FormField, SearchBar, Card, MenuItem │ │
│ └─────────────────────────────────────────────────────┘ │
│ Header, Sidebar, ProductGrid, CommentThread │
└─────────────────────────────────────────────────────────┘Component identification checklist:
Extract from prototype CSS/styles:
json{ "colors": { "primary": "extracted-from-buttons", "secondary": "extracted-from-secondary-elements", "background": "extracted-from-body/container", "text": "extracted-from-body-text" }, "typography": { "fontFamily": "extracted-from-font-family", "fontSize": { "base": "16px", "lg": "18px", "xl": "20px" } }, "spacing": { "derived-from-padding-margin-patterns": true }, "borderRadius": "extracted-from-rounded-elements" }
> See templates/design-tokens-extract.json for full template
For each identified component:
> See templates/component-base.tsx and templates/component-with-variants.tsx
Provide clear instructions for:
typescriptinterface ComponentProps { /** Primary variant for emphasis */ variant?: 'primary' | 'secondary' | 'outline'; /** Size affects padding and font-size */ size?: 'sm' | 'md' | 'lg'; /** Disables interaction */ disabled?: boolean; /** Additional CSS classes */ className?: string; /** Content */ children: React.ReactNode; }
Every component must include:
<button> not <div>)| Type | Convention | Example | |------|------------|---------| | Components | PascalCase | ProductCard.tsx | | Props types | PascalCase + Props | ProductCardProps | | CSS classes | kebab-case | product-card-container | | Design tokens | camelCase | primaryColor |
> See references/conversion-patterns.md for comprehensive HTML → React patterns
| HTML Pattern | React Equivalent | |--------------|------------------| | class="..." | className="..." | | onclick="..." | onClick={handler} | | for="..." | htmlFor="..." | | <input value=""> | <input value="" onChange={...}> | | Inline styles | Tailwind classes or styled objects |
| Template | Purpose | |----------|---------| | component-base.tsx | Basic component with types and accessibility | | component-with-variants.tsx | Component with variant/size system | | design-tokens-extract.json | Token extraction structure |
Input (super-design HTML):
html<button class="bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700"> Submit </button>
Output (React + TypeScript):
typescriptinterface ButtonProps { variant?: 'primary' | 'secondary'; children: React.ReactNode; onClick?: () => void; } export const Button = ({ variant = 'primary', children, onClick }: ButtonProps) => { return ( <button className={cn( 'px-4 py-2 rounded-lg transition-colors', variant === 'primary' && 'bg-blue-600 text-white hover:bg-blue-700' )} onClick={onClick} > {children} </button> ); };
When converting super-design outputs:
Super-design folder structure:
.superdesign/
└── design_iterations/
├── theme_1.css # Theme tokens
├── chat_ui_1.html # Prototype iteration 1
└── chat_ui_2.html # Prototype iteration 2| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 62,965 | 78,934 | +25% | 1 | 1 | 0% | 352 | 2,221 | +531% | 0 | 0 | — |
case-02 | fail→fail | 76,109 | 82,060 | +8% | 1 | 1 | 0% | 4,447 | 3,540 | -20% | 0 | 0 | — |
case-03 | fail→fail | 35,663 | 25,614 | -28% | 1 | 1 | 0% | 2,313 | 3,643 | +58% | 0 | 0 | — |
case-04 | pass→pass | 46,360 | 31,260 | -33% | 1 | 1 | 0% | 4,045 | 4,384 | +8% | 0 | 0 | — |
case-05 | fail→pass | 20,027 | 15,988 | -20% | 1 | 1 | 0% | 3,527 | 4,021 | +14% | 0 | 0 | — |
case-06 | fail→pass | 16,359 | 23,284 | +42% | 1 | 1 | 0% | 1,546 | 3,217 | +108% | 0 | 0 | — |
case-07 | fail→pass | 9,270 | 6,605 | -29% | 1 | 1 | 0% | 1,731 | 3,010 | +74% | 0 | 0 | — |
case-08 | pass→pass | 9,558 | 7,249 | -24% | 1 | 1 | 0% | 728 | 2,806 | +285% | 0 | 0 | — |
case-09 | pass→pass | 18,482 | 9,659 | -48% | 1 | 1 | 0% | 2,440 | 2,757 | +13% | 0 | 0 | — |
case-10 | fail→fail | 11,765 | 10,323 | -12% | 1 | 1 | 0% | 1,402 | 3,441 | +145% | 0 | 0 | — |
case-11 | pass→pass | 19,047 | 23,068 | +21% | 1 | 1 | 0% | 1,939 | 3,784 | +95% | 0 | 0 | — |
case-12 | pass→pass | 22,472 | 16,584 | -26% | 1 | 1 | 0% | 3,697 | 4,153 | +12% | 0 | 0 | — |
case-13 | fail→pass | 13,622 | 17,283 | +27% | 1 | 1 | 0% | 2,264 | 3,532 | +56% | 0 | 0 | — |
case-14 | pass→pass | 20,668 | 21,941 | +6% | 1 | 1 | 0% | 3,475 | 7,316 | +111% | 0 | 0 | — |
case-15 | pass→pass | 10,853 | 7,518 | -31% | 1 | 1 | 0% | 1,099 | 2,463 | +124% | 0 | 0 | — |
case-16 | pass→pass | 18,726 | 14,233 | -24% | 1 | 1 | 0% | 2,591 | 4,556 | +76% | 0 | 0 | — |
case-17 | pass→pass | 18,552 | 10,611 | -43% | 1 | 1 | 0% | 2,425 | 4,051 | +67% | 0 | 0 | — |
case-18 | pass→pass | 16,859 | 13,648 | -19% | 1 | 1 | 0% | 2,562 | 3,537 | +38% | 0 | 0 | — |
case-19 | pass→pass | 21,174 | 25,232 | +19% | 1 | 1 | 0% | 3,204 | 5,139 | +60% | 0 | 0 | — |
case-20 | pass→pass | 10,591 | 10,152 | -4% | 1 | 1 | 0% | 2,151 | 3,847 | +79% | 0 | 0 | — |
case-21 | pass→pass | 12,507 | 18,479 | +48% | 1 | 1 | 0% | 2,398 | 3,870 | +61% | 0 | 0 | — |
case-22 | fail→fail | 13,028 | 10,593 | -19% | 1 | 1 | 0% | 2,421 | 3,900 | +61% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +18 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.