Industry design direction
Most generated UI looks templated because the aesthetic was never actually
chosen — it defaulted. Purple-blue gradient, glassmorphic cards, Inter
everywhere, hero-features-CTA. That default is applied identically to a
dental clinic, a metal fabricator, and an NFT marketplace, and it is wrong for
all three in different ways.
This skill exists to make the choice explicit and industry-grounded, before
any component is written. It is the exploration step. Once a direction is
picked, ui-design-system turns it into enforceable tokens.
The five decisions, in this order
Order matters — each one constrains the next, and taking them out of order is
how you end up retrofitting a palette onto a layout that fights it.
Industry profile → references/industry_profiles.md
Find the row matching the product. Match on the profile name or its
keywords: users describe products in their own words ("clinic booking
site"), not in the library's labels ("Healthcare App"). This gives you the
primary style, viable alternates, the page structure, and — the part most
worth reading — the constraint that industry most often gets wrong.
What that style actually is → references/style_library.md
The profile names a style; this defines it — colors, effects, theme
support, performance, the CSS that produces it, and a done-checklist.
Read the "Do NOT use for" line before the "Best for" line: a style
applied to the case it explicitly fails at is worse than a plain default.
Skipping this step is how a named style silently collapses back into
whatever the model already assumed it meant.
Palette → references/color_palettes.md
Same product-type key as the profile. Six roles: Primary, Secondary, CTA,
Background, Text, Border. Take all six; picking only a primary and
improvising the rest is how the neutral tones drift grey and the whole page
flattens.
Type pairing → references/typography_pairings.md
Filter by the Best for line, not by what looks nice in isolation. A
heading/body split is what stops a page reading as one undifferentiated
block — a single family everywhere is the single most reliable tell of
generated UI.
Page structure → references/landing_patterns.md
Use the structure named in the industry profile. Each entry gives section
order, where the primary CTA sits, a color strategy for that structure, and
what actually converts for it.
What the library will not do for you
- It has no opinion about your specific brand. If the user already has
brand colors, their colors win — use the library for the roles the palette
is missing (border, background, CTA-vs-primary separation), not to overrule
a decision they already made.
- Two industries often both fit. A therapy-practice booking site is
plausibly Healthcare App, Mental Health App, or Hyperlocal Services. Read
all the candidates and say which you picked and why — the "most-missed
constraint" line is usually the tiebreaker.
- The profile is one line per industry, not a design system. For dense
dashboards, chat UIs, or trading components, the category skills named in
the description have real depth; this gives you a direction, they give you
the component-level craft.
Accessibility: what is verified and what is not
Every palette's body-text-on-background ratio was computed with the WCAG
2.x relative-luminance formula and clears AA (4.5:1). That is the only pair
verified.
Any other pairing is yours to check — most importantly label text on the
CTA color, which is the pair most likely to fail in practice and the one no
palette table can pre-verify, because it depends on whether you put white or
dark text on that button. Check it before shipping, not after.
Workflow
- Identify the industry from what the user described. If genuinely ambiguous
between two profiles, read both and pick with a stated reason — do not
silently average them into something generic.
- Read the five references in the order above, taking the specific values.
- Present the direction as a short brief: style, six-role palette with hex
values, heading/body fonts with their
@import, and the section order.
State the industry's most-missed constraint explicitly — that line is the
reason the direction is what it is.
- Run the quality gate below before handing it over.
- If the user then wants this enforced across many screens, hand off to
ui-design-system to capture it as tokens. If they want it critiqued for
genericness after building, hand off to ai-generated-ui-craft.
Automated Data-Integrity Gate
references/color_palettes.md opens with a factual claim: every printed
contrast ratio was computed, not guessed, and all 96 palettes clear AA
(4.5:1) for body text. Nothing enforced that claim stays true after the file
gets hand-edited — a nudged hex value can silently invalidate a printed
number that still reads as verified. scripts/verify_contrast.py
re-derives every palette's ratio from its Background/Text hex pair via the
WCAG relative-luminance formula and diffs it against the file's own printed
value:
python scripts/verify_contrast.py # audits references/color_palettes.md
python scripts/verify_contrast.py --demo # no data needed
Run this after any edit to color_palettes.md, and periodically otherwise —
it is the only thing standing between "computed, not claimed" staying true
and quietly becoming false. --demo shows a clean palette passing next to
the same palette with one hand-nudged hex, which fails with ratio_mismatch
and fails_aa_body_text. This is a data-integrity gate, not a design-
judgment one — it has nothing to say about which palette to pick, only
about whether the numbers next to it are still true.
Quality gate
References
references/industry_profiles.md — 95 industry profiles: style, alternates,
page structure, dashboard style, palette direction, most-missed constraint
references/style_library.md — 57 styles defined: colors, effects, theme and
performance support, CSS, token starting points, done-checklists, and an
explicit "do not use for" per style
references/color_palettes.md — 96 six-role palettes with hex values and
computed text/background contrast ratios
references/typography_pairings.md — 57 Google-Fonts pairings with mood,
best-for, @import, and Tailwind config
references/landing_patterns.md — 30 page structures: section order, CTA
placement, color strategy, effects, conversion notes
1---2name: industry-design-direction3description: Pick a concrete visual direction for a website or app in a specific industry — which aesthetic, which palette, which font pairing, which page structure — from a library of 95 industry profiles, 57 defined styles, 96 palettes, 57 font pairings, and 30 landing structures. Trigger for "design a landing page for a dental clinic", "帮我设计一个餐厅网站", "what should a fintech app look like", "给这个 SaaS 产品定一套 配色和字体", "我要做一个电商网站,用什么风格", or whenever someone needs a starting direction for a product whose industry is known but whose look is not. Do NOT trigger once a direction already exists and the job is enforcing it across screens (use `ui-design-system` — that skill operationalizes a chosen aesthetic into tokens; this one chooses it). Do NOT trigger for dense dashboards/terminals (`terminal-software-design`), chat interfaces (`conversational-ui-restraint`), or trading-app components (`trading-ui-patterns`) — those are category skills with far more depth for their category than the one-line profile here. Portable: every refer4---56# Industry design direction78Most generated UI looks templated because the aesthetic was never actually9chosen — it defaulted. Purple-blue gradient, glassmorphic cards, Inter10everywhere, hero-features-CTA. That default is applied identically to a11dental clinic, a metal fabricator, and an NFT marketplace, and it is wrong for12all three in different ways.1314This skill exists to make the choice explicit and industry-grounded, before15any component is written. It is the *exploration* step. Once a direction is16picked, `ui-design-system` turns it into enforceable tokens.1718## The five decisions, in this order1920Order matters — each one constrains the next, and taking them out of order is21how you end up retrofitting a palette onto a layout that fights it.22231. **Industry profile** → `references/industry_profiles.md`24 Find the row matching the product. Match on the profile name *or* its25 keywords: users describe products in their own words ("clinic booking26 site"), not in the library's labels ("Healthcare App"). This gives you the27 primary style, viable alternates, the page structure, and — the part most28 worth reading — the constraint that industry most often gets wrong.29302. **What that style actually is** → `references/style_library.md`31 The profile *names* a style; this defines it — colors, effects, theme32 support, performance, the CSS that produces it, and a done-checklist.33 Read the **"Do NOT use for"** line before the "Best for" line: a style34 applied to the case it explicitly fails at is worse than a plain default.35 Skipping this step is how a named style silently collapses back into36 whatever the model already assumed it meant.37383. **Palette** → `references/color_palettes.md`39 Same product-type key as the profile. Six roles: Primary, Secondary, CTA,40 Background, Text, Border. Take all six; picking only a primary and41 improvising the rest is how the neutral tones drift grey and the whole page42 flattens.43444. **Type pairing** → `references/typography_pairings.md`45 Filter by the *Best for* line, not by what looks nice in isolation. A46 heading/body split is what stops a page reading as one undifferentiated47 block — a single family everywhere is the single most reliable tell of48 generated UI.49505. **Page structure** → `references/landing_patterns.md`51 Use the structure named in the industry profile. Each entry gives section52 order, where the primary CTA sits, a color strategy for that structure, and53 what actually converts for it.5455## What the library will not do for you5657- **It has no opinion about your specific brand.** If the user already has58 brand colors, their colors win — use the library for the *roles* the palette59 is missing (border, background, CTA-vs-primary separation), not to overrule60 a decision they already made.61- **Two industries often both fit.** A therapy-practice booking site is62 plausibly Healthcare App, Mental Health App, or Hyperlocal Services. Read63 all the candidates and say which you picked and why — the "most-missed64 constraint" line is usually the tiebreaker.65- **The profile is one line per industry, not a design system.** For dense66 dashboards, chat UIs, or trading components, the category skills named in67 the description have real depth; this gives you a direction, they give you68 the component-level craft.6970## Accessibility: what is verified and what is not7172Every palette's **body-text-on-background** ratio was computed with the WCAG732.x relative-luminance formula and clears AA (4.5:1). That is the only pair74verified.7576Any other pairing is yours to check — most importantly **label text on the77CTA color**, which is the pair most likely to fail in practice and the one no78palette table can pre-verify, because it depends on whether you put white or79dark text on that button. Check it before shipping, not after.8081## Workflow82831. Identify the industry from what the user described. If genuinely ambiguous84 between two profiles, read both and pick with a stated reason — do not85 silently average them into something generic.862. Read the five references in the order above, taking the specific values.873. Present the direction as a short brief: style, six-role palette with hex88 values, heading/body fonts with their `@import`, and the section order.89 State the industry's most-missed constraint explicitly — that line is the90 reason the direction is what it is.914. Run the quality gate below before handing it over.925. If the user then wants this enforced across many screens, hand off to93 `ui-design-system` to capture it as tokens. If they want it critiqued for94 genericness after building, hand off to `ai-generated-ui-craft`.9596## Automated Data-Integrity Gate9798`references/color_palettes.md` opens with a factual claim: every printed99contrast ratio was computed, not guessed, and all 96 palettes clear AA100(4.5:1) for body text. Nothing enforced that claim stays true after the file101gets hand-edited — a nudged hex value can silently invalidate a printed102number that still reads as verified. `scripts/verify_contrast.py`103re-derives every palette's ratio from its Background/Text hex pair via the104WCAG relative-luminance formula and diffs it against the file's own printed105value:106107```bash108python scripts/verify_contrast.py # audits references/color_palettes.md109python scripts/verify_contrast.py --demo # no data needed110```111112Run this after any edit to `color_palettes.md`, and periodically otherwise —113it is the only thing standing between "computed, not claimed" staying true114and quietly becoming false. `--demo` shows a clean palette passing next to115the same palette with one hand-nudged hex, which fails with `ratio_mismatch`116and `fails_aa_body_text`. This is a data-integrity gate, not a design-117judgment one — it has nothing to say about which palette to *pick*, only118about whether the numbers next to it are still true.119120## Quality gate121122- [ ] Did the industry profile actually change the output, or would this same123 direction have been produced for any product? If the latter, you124 defaulted — go back to step 1.125- [ ] All six palette roles specified, not just a primary?126- [ ] Heading and body are *different* families, with a stated reason for the127 pairing beyond "it looks modern"?128- [ ] Style looked up in `style_library.md`, and its "do NOT use for" line129 checked against this product — not just the style's name repeated?130- [ ] Section order taken from a named structure, not improvised?131- [ ] The industry's most-missed constraint stated out loud, and visibly132 reflected in the direction rather than just quoted?133- [ ] CTA-label contrast checked (the one the library cannot pre-verify)?134- [ ] If the user supplied brand colors, do they still win?135136## References137138- `references/industry_profiles.md` — 95 industry profiles: style, alternates,139 page structure, dashboard style, palette direction, most-missed constraint140- `references/style_library.md` — 57 styles defined: colors, effects, theme and141 performance support, CSS, token starting points, done-checklists, and an142 explicit "do not use for" per style143- `references/color_palettes.md` — 96 six-role palettes with hex values and144 computed text/background contrast ratios145- `references/typography_pairings.md` — 57 Google-Fonts pairings with mood,146 best-for, `@import`, and Tailwind config147- `references/landing_patterns.md` — 30 page structures: section order, CTA148 placement, color strategy, effects, conversion notes