design-system — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited design-system (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill turns "design system for a fintech onboarding app" into concrete Figma output: a Variable collection for tokens, Paint Styles, Text Styles, and a Components page scaffold with buttons/inputs/cards using those tokens. It refuses to give generic defaults — every recommendation is sourced from the bundled reference data and justified out loud.
If the designer also asks for a radical / 2030 / anti-SaaS aesthetic, layer the radical-2030 skill on top of this one. This skill is aesthetically neutral; radical-2030 biases the style selection toward the forward-looking end of the catalog.
All files are in ${CLAUDE_SKILL_DIR}/data/. Read them with standard shell tools when you need them; do not paste the full CSVs into the conversation.
| File | Rows | Purpose |
|---|---|---|
products.csv | 161 | Product type → primary/secondary style, landing pattern, dashboard style, color focus |
ui-reasoning.csv | 161 | Product type → recommended_pattern, style_priority, color_mood, typography_mood, key_effects, anti_patterns |
styles.csv | 85 | Style catalog + era_2030: yes/no/neutral flag + AI prompt keywords + design system variables |
colors.csv | 161 | Per-product-type palette: primary, on-primary, secondary, accent, background, foreground, card, muted, border, destructive |
typography.csv | 57 | Heading + body font pairings with Google Fonts URLs and mood tags |
ux-figma.md | — | Distilled UX rules that matter for Figma output (the 99-rule set filtered to what a static frame can express) |
Useful one-liners (run from the skill dir):
# Palette for fintech
python3 -c "import csv; [print(r) for r in csv.DictReader(open('data/colors.csv')) if 'fintech' in r['Product Type'].lower()]"
# Styles flagged era_2030=yes, sorted by No
python3 -c "import csv; [print(r['No'], r['Style Category']) for r in csv.DictReader(open('data/styles.csv')) if r['era_2030']=='yes']"
# Reasoning rule for a given product type
python3 -c "import csv; [print(r) for r in csv.DictReader(open('data/ui-reasoning.csv')) if r['UI_Category']=='Fintech']"Follow this exact order. Don't skip steps and don't generate before reading.
From the designer's brief, pick the single closest match in products.csv (column Product Type). If they say "budgeting app" → Fintech or Personal Finance. If they say "language learning app" → EdTech / Language. If you're not sure, ask — don't guess, because every subsequent step cascades from this choice.
Read the matching row in ui-reasoning.csv. This gives:
Recommended_Pattern — the landing / dashboard / app spineStyle_Priority — the default style(s) for this product typeColor_Mood — the brief for how colors should feelTypography_Mood — the brief for how typography should feelKey_Effects — the interaction vocabulary (hover durations, transitions,shadow usage, parallax, etc.)
Anti_Patterns — what to avoid for this product typeTwo different rules depending on whether radical-2030 is loaded:
Without `radical-2030` — use Style_Priority from step 2 as the candidate pool. Pull the matching row(s) from styles.csv.
With `radical-2030` — Style_Priority is a 2022-defaults signal and is precisely what radical-2030 exists to override. Do NOT use it as the pool. Instead:
styles.csv to era_2030 == "yes" — that is the candidate pool.Keywords / AI Prompt Keywordsand the reasoning row's Color_Mood + Typography_Mood + the product type's own keywords.
Style_Priority defaults were discardedand why, so the designer can see the override is deliberate.
era_2030 == "no" regardless of signal fit.In both cases, from the selected style row pull:
Primary Colors and Secondary ColorsEffects & AnimationDesign System Variables (the variable names and default values)AI Prompt Keywords (useful for describing the aesthetic out loud)Pull the matching row from colors.csv. The columns map 1:1 onto shadcn-style semantic tokens but translate cleanly to Figma Variables:
Primary + On Primary → color/primary + color/on-primarySecondary + On SecondaryAccent + On AccentBackground + Foreground → color/surface + color/on-surfaceCard + Card ForegroundMuted + Muted ForegroundBorder, Destructive + On Destructive, RingVerify contrast before accepting: primary/on-primary ≥ 4.5:1 for text.
Scan typography.csv for a pairing whose Mood/Style Keywords overlap the Typography_Mood from step 2 and the style's mood from step 3. Take the Heading Font + Body Font + the Google Fonts URL.
Build in this order (skip any already present — query op:"find" to check):
FinPal / tokens). Createone mode for light, one for dark. Use variable op:"create-collection", then create-mode, then create for each token.
(0, 4, 8, 12, 16, 999 for pill), and elevation levels (0, 1, 2, 3).
brand gradient, an ambient-depth fill). Use style op:"create-paint".
fontFamily = heading font for h*, body font for body/label/caption. Use style op:"create-text".
page op:"create" name:"Components"). Scaffold theminimum useful set, all bound to the variables from step 1:
disabled — see variant-component-setup)
mcp__mercury__batch calls of ≤40 opseach (see mercury-gotchas). Export the Components page at the end and visually confirm.
One terse paragraph: "Product type: X. Style: Y (reason: Z). Palette: [brief]. Typography: [heading] + [body]. Scaffolded variables + 4 components on Components page. Ready to build screens."
tab-metaphors, ambient-depth).
data informs recommendations; all output is vanilla Figma nodes.
layer (Tailwind classes, shadcn components, React examples). The underlying intelligence — product-type reasoning, palette/type/style curation — is what got ported.
Designer: "design system for a fintech onboarding app" (radical-2030 loaded)
You:
products.csvthe 2022 defaults that radical-2030 overrides), Color_Mood: "trust + bold contrast", Typography_Mood: "precise, data-forward"
era_2030=yes. Rank by overlap with "trust + bold contrast + precise + data-forward" → winner: HUD / Sci-Fi FUI (edge-aligned, monospace, data-as-ornament matches data-forward; high-contrast matches trust + bold contrast). Runner-up: Swiss Modernism 2.0. Cite: "Flat Design and Glassmorphism discarded per radical-2030."
a HUD-appropriate accent (acid lime or radioactive amber on near-black surface) — or pick from the style's own Primary Colors column
Space Grotesk" or similar
the accent + data-grid hairlines, Text Styles (mono for data, display for headings), 4 components (button / input / card / data-row)
radical-2030). Near-black + acid-lime accent. JetBrains Mono + Space Grotesk. Scaffolded — ready for screens."
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.