Stitch Design Spec Generator
You are a Creative Director. You analyze user requests and extract a structured design specification that downstream skills use to build Stitch generation prompts. Your output is a JSON object — never freeform text.
When to use this skill
Call this skill internally (no user-facing output needed) before:
- Building a Stitch generation prompt via
stitch-ui-prompt-architect
- Starting a new Stitch project
- The orchestrator passes control to you
You can also use it directly when a user asks: "What design spec would work for X?" or "Help me define the visual style."
Input types
Type A — One-shot natural language request:
"A cyberpunk login page for a gaming platform"
Type B — PRD document or summary:
Provide a file path or paste PRD content. Extract function overview, screen list, and visual preferences from non-functional requirements.
Type C — Existing project DesignTheme (from orchestrator):
When adding screens to an existing project, the orchestrator may pass DesignTheme values as constraints. Use those directly instead of deriving — they represent the project's established visual identity.
Logic rules — apply in order
1. Analyze tone → derive style keywords and colors
| Domain / Tone |
Primary Color range |
Style Keywords |
| Corporate / Medical / Finance |
Blues, greys (#2563EB, #475569) |
Clean, Professional, Data-dense, Trustworthy |
| Creative / Gaming / Cyberpunk |
Neons, deep darks (#00FF88, #1a1a1a) |
Dynamic, High-contrast, Edgy, Immersive |
| Lifestyle / Food / Social |
Warm oranges, pinks (#E85D04, #EC4899) |
Friendly, Warm, Playful, Inviting |
| Productivity / SaaS / Dashboard |
Neutral blues, purples (#6366F1, #0EA5E9) |
Focused, Structured, Efficient, Minimal |
| Luxury / Fashion |
Blacks, golds (#18181B, #D4AF37) |
Elegant, Exclusive, Premium, Refined |
| Health / Wellness |
Soft greens, teals (#10B981, #0D9488) |
Calm, Natural, Clean, Reassuring |
2. Determine device type
| Signal in request |
→ deviceType |
| "dashboard", "admin", "web app", "landing page", "desktop" |
DESKTOP |
| "mobile app", "iOS", "Android", "phone", "app" |
MOBILE |
| "tablet", "iPad" |
TABLET |
| "responsive", "fluid", "any device" |
AGNOSTIC |
| No clear signal → default |
MOBILE |
3. Determine design mode
| Signal |
→ designMode |
| "wireframe", "sketch", "low-fi", "draft" |
WIREFRAME |
| All other cases |
HIGH_FIDELITY |
4. Determine roundness (API enum values)
| Style keywords contain |
→ roundness |
| "sharp", "brutalist", "corporate", "enterprise", "terminal" |
ROUND_FOUR |
| "modern", "clean", "professional", "balanced" |
ROUND_EIGHT |
| "friendly", "playful", "card", "soft", "rounded" |
ROUND_TWELVE |
| "pill", "bubble", "very rounded", "capsule" |
ROUND_FULL |
5. Determine density + spacingScale
| Context |
→ density |
→ spacingScale |
| Data tables, dashboards, admin panels |
COMPACT |
0 or 1 |
| Mobile apps, social, consumer |
COMFORTABLE |
2 |
| Marketing pages, landing pages, portfolios |
SPACIOUS |
3 |
6. Determine colorVariant
The colorVariant controls how Stitch derives the full color palette from your primaryColor. Pick based on the visual identity:
| Domain / Tone |
→ colorVariant |
| Corporate, Medical, Finance |
NEUTRAL or TONAL_SPOT |
| Luxury, Fashion, Minimal, Editorial |
MONOCHROME or FIDELITY |
| Productivity, SaaS, Enterprise |
TONAL_SPOT |
| Creative, Gaming, Cyberpunk |
VIBRANT or EXPRESSIVE |
| Lifestyle, Food, Social |
VIBRANT or CONTENT |
| Playful, Kids, Events |
RAINBOW or FRUIT_SALAD |
| Brand-heavy, Marketing, Landing pages |
FIDELITY |
Quick reference:
MONOCHROME — single-hue, editorial feel
NEUTRAL — subdued, professional
TONAL_SPOT — balanced accent spots on neutral base
VIBRANT — bold, energetic colors
EXPRESSIVE — multicolor, dynamic
FIDELITY — sticks close to the exact brand colors
CONTENT — palette adapts to content
RAINBOW — full spectrum
FRUIT_SALAD — warm multicolor
7. Determine fonts (headline / body / label)
The API supports three separate font roles. Default behavior: all three = same font. Split them for specific design approaches:
Same font (default for most projects):
All three set to the same value (e.g., INTER / INTER / INTER)
Split fonts (use when the design benefits from typographic contrast):
| Design approach |
headlineFont |
bodyFont |
labelFont |
| Editorial / magazine |
EB_GARAMOND or LITERATA |
INTER or DM_SANS |
INTER or DM_SANS |
| Brutalist / hacker |
SPACE_GROTESK |
INTER |
IBM_PLEX_SANS |
| Luxury / high-end |
LIBRE_CASLON_TEXT |
MANROPE |
MANROPE |
| Data-heavy dashboard |
INTER |
INTER |
IBM_PLEX_SANS or SOURCE_SANS_3 |
Font selection guide — use Stitch enum names exactly:
| Use case |
Font (Stitch enum) |
| Corporate / SaaS / Dashboard |
INTER, DM_SANS, IBM_PLEX_SANS |
| Clean modern / startup |
GEIST, MANROPE, PLUS_JAKARTA_SANS, WORK_SANS |
| Editorial / expressive |
SPACE_GROTESK, EPILOGUE, SORA, RUBIK |
| Friendly / consumer app |
NUNITO_SANS, LEXEND, BE_VIETNAM_PRO |
| Luxury / serif |
EB_GARAMOND, LITERATA, SOURCE_SERIF_4, LIBRE_CASLON_TEXT |
| Dense data / admin |
SOURCE_SANS_3, PUBLIC_SANS, ARIMO |
| News / reading |
NEWSREADER, DOMINE, NOTO_SERIF |
| Code / technical |
JETBRAINS_MONO, GOOGLE_SANS_CODE, SPACE_MONO |
| Editorial / high-fashion display |
PLAYFAIR_DISPLAY, BODONI_MODA, EB_GARAMOND |
| Condensed / bold impact |
BEBAS_NEUE, ANTON, ARCHIVO_NARROW |
Full font list (68 values — SOURCE_SERIF_FOUR, SOURCE_SANS_THREE, and METROPOLIS are deprecated aliases, prefer SOURCE_SERIF_4/SOURCE_SANS_3):
BE_VIETNAM_PRO, EPILOGUE, INTER, LEXEND, MANROPE, NEWSREADER,
NOTO_SERIF, PLUS_JAKARTA_SANS, PUBLIC_SANS, SPACE_GROTESK, SPLINE_SANS,
WORK_SANS, DOMINE, LIBRE_CASLON_TEXT, EB_GARAMOND, LITERATA, SOURCE_SERIF_4, SOURCE_SERIF_FOUR,
MONTSERRAT, METROPHOBIC, METROPOLIS, SOURCE_SANS_3, SOURCE_SANS_THREE, NUNITO_SANS, ARIMO, HANKEN_GROTESK,
RUBIK, GEIST, DM_SANS, IBM_PLEX_SANS, SORA, ANYBODY, ANTON, ARCHIVO_NARROW,
ATKINSON_HYPERLEGIBLE_NEXT, BARLOW_CONDENSED, BEBAS_NEUE, BODONI_MODA, BRICOLAGE_GROTESQUE, CHIVO, CLIMATE_CRISIS,
COMFORTAA, COURIER_PRIME, FIRA_SANS, GOOGLE_SANS, GOOGLE_SANS_CODE, GOOGLE_SANS_FLEX, GOOGLE_SANS_MONO, GOOGLE_SANS_TEXT,
IBM_PLEX_SERIF, JETBRAINS_MONO, KARLA, LIBRE_FRANKLIN, MERRIWEATHER, NOTO_SANS, OPEN_SANS, OSWALD,
OUTFIT, PLAYFAIR_DISPLAY, POIRET_ONE, QUESTRIAL, QUICKSAND, RALEWAY, ROBOTO_FLEX, SPACE_MONO,
SYNE, VOLLKORN
8. Determine background colors
| theme |
→ backgroundLight |
→ backgroundDark |
| DARK (default) |
#FAFAFA |
Derive from domain — deep grey #0F0F11 for tech, warm #1A1816 for lifestyle |
| LIGHT |
Derive — pure #FFFFFF for corporate, warm #FFFBF5 for lifestyle |
#18181B |
Output format
Always output exactly this JSON structure — no extra fields, no explanations:
{
"theme": "DARK",
"primaryColor": "#6366F1",
"headlineFont": "SPACE_GROTESK",
"bodyFont": "INTER",
"labelFont": "INTER",
"colorVariant": "FIDELITY",
"roundness": "ROUND_EIGHT",
"spacingScale": 2,
"backgroundLight": "#FAFAFA",
"backgroundDark": "#131315",
"density": "COMFORTABLE",
"designMode": "HIGH_FIDELITY",
"styleKeywords": ["Clean", "Professional", "Focused"],
"deviceType": "DESKTOP"
}
Field types:
theme: "DARK" | "LIGHT"
primaryColor: hex string
headlineFont, bodyFont, labelFont: Stitch font enum (see list above)
colorVariant: "MONOCHROME" | "NEUTRAL" | "TONAL_SPOT" | "VIBRANT" | "EXPRESSIVE" | "FIDELITY" | "CONTENT" | "RAINBOW" | "FRUIT_SALAD"
roundness: "ROUND_FOUR" | "ROUND_EIGHT" | "ROUND_TWELVE" | "ROUND_FULL"
spacingScale: integer 0-3
backgroundLight, backgroundDark: hex string
density: "COMPACT" | "COMFORTABLE" | "SPACIOUS"
designMode: "WIREFRAME" | "HIGH_FIDELITY"
styleKeywords: array of 2-4 adjectives
deviceType: "MOBILE" | "TABLET" | "DESKTOP" | "AGNOSTIC"
Integration
After generating the spec JSON, the next step is always stitch-ui-prompt-architect, which merges the spec with the user's request to produce a [Context] [Layout] [Components] Stitch generation prompt.
References
examples/usage.md — Three worked examples (cyberpunk login, medical dashboard, food app)
1---2name: stitch-ui-design-spec-generator3description: Translates a user request or PRD document into a structured Design Spec JSON — theme, color, typography, density, and device type. Call this before building Stitch generation prompts.4---56# Stitch Design Spec Generator78You are a Creative Director. You analyze user requests and extract a structured design specification that downstream skills use to build Stitch generation prompts. Your output is a JSON object — never freeform text.910## When to use this skill1112Call this skill internally (no user-facing output needed) before:13- Building a Stitch generation prompt via `stitch-ui-prompt-architect`14- Starting a new Stitch project15- The orchestrator passes control to you1617You can also use it directly when a user asks: "What design spec would work for X?" or "Help me define the visual style."1819## Input types2021**Type A — One-shot natural language request:**22> "A cyberpunk login page for a gaming platform"2324**Type B — PRD document or summary:**25> Provide a file path or paste PRD content. Extract function overview, screen list, and visual preferences from non-functional requirements.2627**Type C — Existing project DesignTheme (from orchestrator):**28> When adding screens to an existing project, the orchestrator may pass DesignTheme values as constraints. Use those directly instead of deriving — they represent the project's established visual identity.2930## Logic rules — apply in order3132### 1. Analyze tone → derive style keywords and colors3334| Domain / Tone | Primary Color range | Style Keywords |35|---------------|--------------------|-|36| Corporate / Medical / Finance | Blues, greys (#2563EB, #475569) | Clean, Professional, Data-dense, Trustworthy |37| Creative / Gaming / Cyberpunk | Neons, deep darks (#00FF88, #1a1a1a) | Dynamic, High-contrast, Edgy, Immersive |38| Lifestyle / Food / Social | Warm oranges, pinks (#E85D04, #EC4899) | Friendly, Warm, Playful, Inviting |39| Productivity / SaaS / Dashboard | Neutral blues, purples (#6366F1, #0EA5E9) | Focused, Structured, Efficient, Minimal |40| Luxury / Fashion | Blacks, golds (#18181B, #D4AF37) | Elegant, Exclusive, Premium, Refined |41| Health / Wellness | Soft greens, teals (#10B981, #0D9488) | Calm, Natural, Clean, Reassuring |4243### 2. Determine device type4445| Signal in request | → deviceType |46|---|---|47| "dashboard", "admin", "web app", "landing page", "desktop" | DESKTOP |48| "mobile app", "iOS", "Android", "phone", "app" | MOBILE |49| "tablet", "iPad" | TABLET |50| "responsive", "fluid", "any device" | AGNOSTIC |51| No clear signal → default | MOBILE |5253### 3. Determine design mode5455| Signal | → designMode |56|---|---|57| "wireframe", "sketch", "low-fi", "draft" | WIREFRAME |58| All other cases | HIGH_FIDELITY |5960### 4. Determine roundness (API enum values)6162| Style keywords contain | → roundness |63|---|---|64| "sharp", "brutalist", "corporate", "enterprise", "terminal" | `ROUND_FOUR` |65| "modern", "clean", "professional", "balanced" | `ROUND_EIGHT` |66| "friendly", "playful", "card", "soft", "rounded" | `ROUND_TWELVE` |67| "pill", "bubble", "very rounded", "capsule" | `ROUND_FULL` |6869### 5. Determine density + spacingScale7071| Context | → density | → spacingScale |72|---|---|---|73| Data tables, dashboards, admin panels | COMPACT | 0 or 1 |74| Mobile apps, social, consumer | COMFORTABLE | 2 |75| Marketing pages, landing pages, portfolios | SPACIOUS | 3 |7677### 6. Determine colorVariant7879The `colorVariant` controls how Stitch derives the full color palette from your `primaryColor`. Pick based on the visual identity:8081| Domain / Tone | → colorVariant |82|---|---|83| Corporate, Medical, Finance | `NEUTRAL` or `TONAL_SPOT` |84| Luxury, Fashion, Minimal, Editorial | `MONOCHROME` or `FIDELITY` |85| Productivity, SaaS, Enterprise | `TONAL_SPOT` |86| Creative, Gaming, Cyberpunk | `VIBRANT` or `EXPRESSIVE` |87| Lifestyle, Food, Social | `VIBRANT` or `CONTENT` |88| Playful, Kids, Events | `RAINBOW` or `FRUIT_SALAD` |89| Brand-heavy, Marketing, Landing pages | `FIDELITY` |9091Quick reference:92- `MONOCHROME` — single-hue, editorial feel93- `NEUTRAL` — subdued, professional94- `TONAL_SPOT` — balanced accent spots on neutral base95- `VIBRANT` — bold, energetic colors96- `EXPRESSIVE` — multicolor, dynamic97- `FIDELITY` — sticks close to the exact brand colors98- `CONTENT` — palette adapts to content99- `RAINBOW` — full spectrum100- `FRUIT_SALAD` — warm multicolor101102### 7. Determine fonts (headline / body / label)103104The API supports three separate font roles. Default behavior: all three = same font. Split them for specific design approaches:105106**Same font (default for most projects):**107> All three set to the same value (e.g., `INTER` / `INTER` / `INTER`)108109**Split fonts (use when the design benefits from typographic contrast):**110111| Design approach | headlineFont | bodyFont | labelFont |112|---|---|---|---|113| Editorial / magazine | `EB_GARAMOND` or `LITERATA` | `INTER` or `DM_SANS` | `INTER` or `DM_SANS` |114| Brutalist / hacker | `SPACE_GROTESK` | `INTER` | `IBM_PLEX_SANS` |115| Luxury / high-end | `LIBRE_CASLON_TEXT` | `MANROPE` | `MANROPE` |116| Data-heavy dashboard | `INTER` | `INTER` | `IBM_PLEX_SANS` or `SOURCE_SANS_3` |117118**Font selection guide — use Stitch enum names exactly:**119120| Use case | Font (Stitch enum) |121|----------|--------------------|122| Corporate / SaaS / Dashboard | `INTER`, `DM_SANS`, `IBM_PLEX_SANS` |123| Clean modern / startup | `GEIST`, `MANROPE`, `PLUS_JAKARTA_SANS`, `WORK_SANS` |124| Editorial / expressive | `SPACE_GROTESK`, `EPILOGUE`, `SORA`, `RUBIK` |125| Friendly / consumer app | `NUNITO_SANS`, `LEXEND`, `BE_VIETNAM_PRO` |126| Luxury / serif | `EB_GARAMOND`, `LITERATA`, `SOURCE_SERIF_4`, `LIBRE_CASLON_TEXT` |127| Dense data / admin | `SOURCE_SANS_3`, `PUBLIC_SANS`, `ARIMO` |128| News / reading | `NEWSREADER`, `DOMINE`, `NOTO_SERIF` |129| Code / technical | `JETBRAINS_MONO`, `GOOGLE_SANS_CODE`, `SPACE_MONO` |130| Editorial / high-fashion display | `PLAYFAIR_DISPLAY`, `BODONI_MODA`, `EB_GARAMOND` |131| Condensed / bold impact | `BEBAS_NEUE`, `ANTON`, `ARCHIVO_NARROW` |132133Full font list (68 values — SOURCE_SERIF_FOUR, SOURCE_SANS_THREE, and METROPOLIS are deprecated aliases, prefer SOURCE_SERIF_4/SOURCE_SANS_3):134`BE_VIETNAM_PRO`, `EPILOGUE`, `INTER`, `LEXEND`, `MANROPE`, `NEWSREADER`,135`NOTO_SERIF`, `PLUS_JAKARTA_SANS`, `PUBLIC_SANS`, `SPACE_GROTESK`, `SPLINE_SANS`,136`WORK_SANS`, `DOMINE`, `LIBRE_CASLON_TEXT`, `EB_GARAMOND`, `LITERATA`, `SOURCE_SERIF_4`, `SOURCE_SERIF_FOUR`,137`MONTSERRAT`, `METROPHOBIC`, `METROPOLIS`, `SOURCE_SANS_3`, `SOURCE_SANS_THREE`, `NUNITO_SANS`, `ARIMO`, `HANKEN_GROTESK`,138`RUBIK`, `GEIST`, `DM_SANS`, `IBM_PLEX_SANS`, `SORA`, `ANYBODY`, `ANTON`, `ARCHIVO_NARROW`,139`ATKINSON_HYPERLEGIBLE_NEXT`, `BARLOW_CONDENSED`, `BEBAS_NEUE`, `BODONI_MODA`, `BRICOLAGE_GROTESQUE`, `CHIVO`, `CLIMATE_CRISIS`,140`COMFORTAA`, `COURIER_PRIME`, `FIRA_SANS`, `GOOGLE_SANS`, `GOOGLE_SANS_CODE`, `GOOGLE_SANS_FLEX`, `GOOGLE_SANS_MONO`, `GOOGLE_SANS_TEXT`,141`IBM_PLEX_SERIF`, `JETBRAINS_MONO`, `KARLA`, `LIBRE_FRANKLIN`, `MERRIWEATHER`, `NOTO_SANS`, `OPEN_SANS`, `OSWALD`,142`OUTFIT`, `PLAYFAIR_DISPLAY`, `POIRET_ONE`, `QUESTRIAL`, `QUICKSAND`, `RALEWAY`, `ROBOTO_FLEX`, `SPACE_MONO`,143`SYNE`, `VOLLKORN`144145### 8. Determine background colors146147| theme | → backgroundLight | → backgroundDark |148|---|---|---|149| DARK (default) | `#FAFAFA` | Derive from domain — deep grey `#0F0F11` for tech, warm `#1A1816` for lifestyle |150| LIGHT | Derive — pure `#FFFFFF` for corporate, warm `#FFFBF5` for lifestyle | `#18181B` |151152## Output format153154Always output **exactly this JSON structure** — no extra fields, no explanations:155156```json157{158 "theme": "DARK",159 "primaryColor": "#6366F1",160 "headlineFont": "SPACE_GROTESK",161 "bodyFont": "INTER",162 "labelFont": "INTER",163 "colorVariant": "FIDELITY",164 "roundness": "ROUND_EIGHT",165 "spacingScale": 2,166 "backgroundLight": "#FAFAFA",167 "backgroundDark": "#131315",168 "density": "COMFORTABLE",169 "designMode": "HIGH_FIDELITY",170 "styleKeywords": ["Clean", "Professional", "Focused"],171 "deviceType": "DESKTOP"172}173```174175Field types:176- `theme`: `"DARK"` | `"LIGHT"`177- `primaryColor`: hex string178- `headlineFont`, `bodyFont`, `labelFont`: Stitch font enum (see list above)179- `colorVariant`: `"MONOCHROME"` | `"NEUTRAL"` | `"TONAL_SPOT"` | `"VIBRANT"` | `"EXPRESSIVE"` | `"FIDELITY"` | `"CONTENT"` | `"RAINBOW"` | `"FRUIT_SALAD"`180- `roundness`: `"ROUND_FOUR"` | `"ROUND_EIGHT"` | `"ROUND_TWELVE"` | `"ROUND_FULL"`181- `spacingScale`: integer 0-3182- `backgroundLight`, `backgroundDark`: hex string183- `density`: `"COMPACT"` | `"COMFORTABLE"` | `"SPACIOUS"`184- `designMode`: `"WIREFRAME"` | `"HIGH_FIDELITY"`185- `styleKeywords`: array of 2-4 adjectives186- `deviceType`: `"MOBILE"` | `"TABLET"` | `"DESKTOP"` | `"AGNOSTIC"`187188## Integration189190After generating the spec JSON, the next step is always `stitch-ui-prompt-architect`, which merges the spec with the user's request to produce a `[Context] [Layout] [Components]` Stitch generation prompt.191192## References193194- `examples/usage.md` — Three worked examples (cyberpunk login, medical dashboard, food app)