agentsclimarketplace

Stitch ui design spec generator

Skill gabelul/stitch-kit/skills/stitch-ui-design-spec-generator

Your coding agent designs terrible UI. stitch-kit wires it into Google Stitch MCP and teaches it the whole pipeline — ideation, screen generation, design systems, production components.

Install
npx -y skills add gabelul/stitch-kit --skill stitch-ui-design-spec-generator

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

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.

SKILL.md

8.9 KB, as published. Nobody here has run it

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 / TonePrimary Color rangeStyle Keywords
Corporate / Medical / FinanceBlues, greys (#2563EB, #475569)Clean, Professional, Data-dense, Trustworthy
Creative / Gaming / CyberpunkNeons, deep darks (#00FF88, #1a1a1a)Dynamic, High-contrast, Edgy, Immersive
Lifestyle / Food / SocialWarm oranges, pinks (#E85D04, #EC4899)Friendly, Warm, Playful, Inviting
Productivity / SaaS / DashboardNeutral blues, purples (#6366F1, #0EA5E9)Focused, Structured, Efficient, Minimal
Luxury / FashionBlacks, golds (#18181B, #D4AF37)Elegant, Exclusive, Premium, Refined
Health / WellnessSoft 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 → defaultMOBILE

3. Determine design mode

Signal→ designMode
"wireframe", "sketch", "low-fi", "draft"WIREFRAME
All other casesHIGH_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 panelsCOMPACT0 or 1
Mobile apps, social, consumerCOMFORTABLE2
Marketing pages, landing pages, portfoliosSPACIOUS3

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, FinanceNEUTRAL or TONAL_SPOT
Luxury, Fashion, Minimal, EditorialMONOCHROME or FIDELITY
Productivity, SaaS, EnterpriseTONAL_SPOT
Creative, Gaming, CyberpunkVIBRANT or EXPRESSIVE
Lifestyle, Food, SocialVIBRANT or CONTENT
Playful, Kids, EventsRAINBOW or FRUIT_SALAD
Brand-heavy, Marketing, Landing pagesFIDELITY

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 approachheadlineFontbodyFontlabelFont
Editorial / magazineEB_GARAMOND or LITERATAINTER or DM_SANSINTER or DM_SANS
Brutalist / hackerSPACE_GROTESKINTERIBM_PLEX_SANS
Luxury / high-endLIBRE_CASLON_TEXTMANROPEMANROPE
Data-heavy dashboardINTERINTERIBM_PLEX_SANS or SOURCE_SANS_3

Font selection guide — use Stitch enum names exactly:

Use caseFont (Stitch enum)
Corporate / SaaS / DashboardINTER, DM_SANS, IBM_PLEX_SANS
Clean modern / startupGEIST, MANROPE, PLUS_JAKARTA_SANS, WORK_SANS
Editorial / expressiveSPACE_GROTESK, EPILOGUE, SORA, RUBIK
Friendly / consumer appNUNITO_SANS, LEXEND, BE_VIETNAM_PRO
Luxury / serifEB_GARAMOND, LITERATA, SOURCE_SERIF_4, LIBRE_CASLON_TEXT
Dense data / adminSOURCE_SANS_3, PUBLIC_SANS, ARIMO
News / readingNEWSREADER, DOMINE, NOTO_SERIF
Code / technicalJETBRAINS_MONO, GOOGLE_SANS_CODE, SPACE_MONO
Editorial / high-fashion displayPLAYFAIR_DISPLAY, BODONI_MODA, EB_GARAMOND
Condensed / bold impactBEBAS_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)#FAFAFADerive from domain — deep grey #0F0F11 for tech, warm #1A1816 for lifestyle
LIGHTDerive — 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)

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.