본문으로 건너뛰기
cccskills
무료GitHub에 공개

design-system

Set shared brand colors, fonts, layout style, and table of contents behavior for markdown-html outputs. A guided setup checks text and link contrast, derives twelve reusable CSS settings, and saves preferences globally or per project.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Captures the user's brand identity once via a 10-question onboarding wizard (primary/accent HEX + heading + body Google Fonts + design style editorial/technical/minimal/playful + default output directory + syntax theme + TOC behavior + optional logo/company), validates body-text and link contrast against WCAG 2.2 AA, derives 12 CSS custom properties in HSL space, and stores the result for every markdown-html converter to consume. Use before any markdown-html conversion. Triggers on first-run onboarding ("set up the brand", "configure markdown-html", "run onboarding"), on explicit reset ("reset the design system", "re-onboard"), and is checked by every converter via config_loader.py before rendering. Refuses to save if body-text contrast fails AA 4.5:1 or the output dir isn't writable. Precedence is project (./.markdown-html/) > global (~/.config/markdown-html/) > built-in defaults; MARKDOWN_HTML_NO_CONFIG=1 bypasses.

설치 방법 보기

이럴 때 유용합니다

  • Setting a shared style for HTML documents and slides
  • Checking text and link color contrast
  • Saving a separate brand style for a project
  • Updating fonts, code themes, or table of contents settings

포함된 파일(8)

  • SKILL.md11.0 KB
  • assets/design_system_schema.json4.6 KB
  • references/design_token_canon.md4.2 KB
  • references/typography_pairing.md5.2 KB
  • references/wcag_accessibility.md4.3 KB
  • scripts/brand_palette_validator.py12.0 KB
  • scripts/config_loader.py4.7 KB
  • scripts/onboard.py9.8 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Design System — Onboarding + Shared Brand Tokens

The design-system skill is the shared brand owner for the markdown-html plugin. Run its onboarding once. Every converter (md-document, md-review, md-slides) reads the resulting config via config_loader.py and applies the same 12 CSS custom properties to its output. Without this, conversions render with placeholder defaults — technically functional but unbranded.

This skill ships exactly three Python tools:

  1. onboard.py — interactive (or --defaults / --set / --show / --reset) wizard.
  2. config_loader.py — importable customization loader with project > global > defaults precedence and MARKDOWN_HTML_NO_CONFIG=1 bypass.
  3. brand_palette_validator.py — WCAG-AA contrast checker + HSL palette deriver.

All three are stdlib-only and contain no LLM calls (deterministic per Path-B discipline).

When to invoke

SymptomAction
User says "convert this markdown to HTML" for the first time in this workspaceRun python3 markdown-html/skills/design-system/scripts/onboard.py
~/.config/markdown-html/design-system.json doesn't exist OR setup_completed_at is nullRefuse conversion, surface onboarding
User wants per-repo brand overridepython3 .../onboard.py --scope project
User wants to change a single field non-interactivelypython3 .../onboard.py --set brand.primary=#FF6B35
User wants to reset and re-onboardpython3 .../onboard.py --reset then re-run
User wants zero-touch defaults (CI, ephemeral session)python3 .../onboard.py --defaults
Headless / containerized run that should ignore saved configMARKDOWN_HTML_NO_CONFIG=1 ...

Onboarding question set (10 questions)

#KeyChoices / ValidatorDefault
1default_output_dirpath; os.access(parent, os.W_OK)./markdown-html-out/
2brand.primaryHEX ^#?[0-9a-fA-F]{6}$#0A1628
3brand.accentHEX or blank (auto-derive)derive from primary
4typography.heading_fontGoogle Font name (12 safe defaults)Inter
5typography.body_fontGoogle Font nameInter
6design_styleeditorial / technical / minimal / playfultechnical
7code_themelight / dark / autoauto
8toc.behaviorsticky-sidebar / collapsible-top / inline / nonesticky-sidebar
9company_namestring (may be empty)""
10logo_urlURL or empty (base64-embedded at render)""

Hard rules

  1. WCAG AA body-text contrast must pass. brand_palette_validator.validate() runs after every change. Body text on bg must reach 4.5:1; link on bg must reach 4.5:1. If either fails, onboard.py refuses to save (exit code 4) and tells the user to pick a darker primary, blank brand.bg/brand.text to let derivation pick a safe pair, or override brand.text directly. Canon: WCAG 2.2 §1.4.3.
  2. Output directory must be writable. onboard.py walks up the path to find an existing ancestor and checks os.W_OK. Empty or unwritable path → exit code 3. The orchestrator's output_path_resolver.py honors the same rule per-conversion.
  3. Customization must change behavior, not sit as decoration. Every consumer (md-document, md-review, md-slides) must read the config and render differently when the user changes design_style, brand.primary, code_theme, or toc.behavior. Decorative-only fields fail the design discipline.
  4. Precedence is fixed. Project > global > defaults. The deep-merge preserves nested keys (e.g. you can override brand.primary in a project config without losing typography.heading_font from global).
  5. Bypass env exists for a reason. MARKDOWN_HTML_NO_CONFIG=1 is for headless CI, ephemeral test containers, and the autoresearch-style evaluator loops. Never set it silently for an interactive user.

Derived 12-token palette

Once the user's brand is captured, brand_palette_validator.derive_palette() produces 12 CSS custom properties stored under derived_palette in the same config file. Every converter inlines these into its <style> block.

TokenPurposeDerivation
--md-bgDocument backgroundPrimary if dark, near-neutral if vibrant
--md-surfaceCard / callout / blockquote backgroundBg ± 4-6% luminance
--md-borderHairline dividers, table bordersBg ± 8-12% luminance
--md-textBody textOff-white on dark bg, near-black on light bg
--md-text-mutedCaptions, metadata, footersrgba(text, 0.68)
--md-accentPrimary CTA, callout headers, link emphasisPrimary if vibrant, hue-shifted lighter if dark
--md-accent-softAccent backgrounds, hover statesrgba(accent, 0.14)
--md-code-bgInline code, fenced block bgBg ± 4-5% luminance
--md-linkHyperlinksIteratively walked to reach 4.5:1 contrast on bg
--md-link-hoverHover stateLink ± 6-8% luminance
--md-successOK / approved / passedGreen anchored, luminance-matched
--md-warnCaution / nit / TODOAmber anchored, luminance-matched

Forcing-question library (Matt Pocock grill-with-docs pattern)

One question per turn, recommended answer, canon citation.

  1. What's your brand primary color? Recommended: a HEX you already use in your product or docs — not a stock blue. Canon: Aarron Walter, Designing for Emotion (color carries brand affect).
  2. Should accent be derived or set? Recommended: derive on first run (hue-shift + lighten produces a coherent companion); set explicitly only if your brand kit specifies one. Canon: Adobe Spectrum, Color Foundations.
  3. Editorial, technical, minimal, or playful? Recommended: technical for engineering specs/reports, editorial for long-read narratives, minimal for sparse reference docs, playful for marketing/landing content. Canon: Ellen Lupton, Thinking with Type (style serves the rhetorical purpose).
  4. Sticky-sidebar TOC, or inline? Recommended: sticky-sidebar for documents over 800 words, inline for short reads. Canon: Nielsen-Norman, Table of Contents Best Practices (2023).
  5. Save to global or per-project? Recommended: global by default (consistent across your work); use --scope project only when this repo has a different brand. Canon: research-ops onboarding pattern, research-ops/CLAUDE.md §8.

Customization in use (worked example)

# First-run onboarding (interactive, walks all 10 questions)
python3 markdown-html/skills/design-system/scripts/onboard.py

# Zero-touch defaults for CI / first-test
python3 .../onboard.py --defaults

# Change just the primary color and design style
python3 .../onboard.py --set brand.primary=#FF6B35 --set design_style=editorial

# Per-repo override
python3 .../onboard.py --scope project --set design_style=minimal

# Reset and re-onboard
python3 .../onboard.py --reset
python3 .../onboard.py

# Inspect the effective config (project > global > defaults)
python3 .../config_loader.py --show
python3 .../config_loader.py --status

# Bypass saved config (returns DEFAULTS only)
MARKDOWN_HTML_NO_CONFIG=1 python3 .../config_loader.py --show

# Spot-check WCAG contrast before committing to a brand
python3 .../brand_palette_validator.py --primary "#FF6B35" --accent "#00D4AA"

Assumptions

  1. User has at least one brand HEX they want consistent across their HTML conversions.
  2. User accepts a 1-2 minute one-time setup.
  3. User is OK with Google Fonts as the typography source (CDN, no local font hosting).
  4. WCAG 2.2 AA is the accessibility floor (4.5:1 body, 3:1 large/UI). AAA (7:1) is out of scope.

Non-goals

  • Not a full design-token system (Style Dictionary, Theo). Twelve tokens, not a hundred.
  • Not a custom-font hosting solution. Google Fonts only.
  • Not a dark/light mode switcher in the converters. code_theme: auto handles the prefers-color-scheme case for syntax highlighting; layout palette is single-mode per onboarding.
  • Not an accessibility audit suite (use axe-core / pa11y for that). We enforce contrast only.
  • Does not transform existing CSS — the derived palette is injected into freshly generated HTML.

Distinct from

  • marketing/landing/skills/landing/scripts/brand_palette_validator.py — that script's derive_palette() produces 8 tokens shaped for hero-page rendering (--navy, --teal, --card-bg, --card-border). This script produces 12 tokens shaped for document rendering (sticky surface, hairline border, code bg, link, link-hover, success, warn). Same WCAG + HSL math, different token taxonomy.
  • research-ops/skills/clinical-research/scripts/onboard.py — same pattern (interactive + --defaults/--set/--show/--reset/--scope), different question set (clinical alpha/power/dropout vs. brand palette/typography/layout).

Output artifact

~/.config/markdown-html/design-system.json (global) or ./.markdown-html/design-system.json (project). JSON schema lives at assets/design_system_schema.json.

Anti-patterns (do not)

  • ❌ Skip onboarding and run a converter with placeholder defaults — output looks unbranded.
  • ❌ Pick a vibrant brand primary as brand.bg directly (low text contrast). Use it as accent instead.
  • ❌ Set MARKDOWN_HTML_NO_CONFIG=1 silently for an interactive user — they'll wonder why their tokens disappeared.
  • ❌ Encode brand semantics in derived_palette outside the 12-token taxonomy. Add a new token only with a deliberate name + purpose + derivation rule.

References

  • WCAG 2.2 — §1.4.3 (contrast), §1.4.4 (resize), §1.4.11 (non-text contrast)
  • Aarron Walter — Designing for Emotion (A Book Apart)
  • Ellen Lupton — Thinking with Type
  • Adobe Spectrum — Color Foundations
  • Nielsen-Norman — Table of Contents Best Practices (2023)
  • research-ops onboarding pattern: research-ops/CLAUDE.md §8
  • Brand palette math source: marketing/landing/skills/landing/scripts/brand_palette_validator.py

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Audit web applications for accessibility issues against WCAG 2.2 Level A and AA, the web accessibility standards. Get framework-specific code fixes, contrast checks, verification steps, and reports, with options for automated checks in development pipelines.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Audit a web application before release
  • Fix contrast and keyboard navigation issues
  • Prepare accessibility reports for stakeholders
alirezarezvani/claude-skills2.8만2026년 8월 30일 업데이트

Plan A/B tests that compare page variations, from headlines to pricing layouts. Define a hypothesis, choose success metrics, calculate sample size and duration, and prepare launch checks and results reports to support decisions.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Comparing landing page headlines
  • Testing signup button changes
  • Planning pricing page experiments
alirezarezvani/claude-skills2.8만2026년 8월 30일 업데이트

Create paid ad headlines and body copy tailored to each platform's character limits. Use existing performance data to develop variations, explore new messaging angles, and check copy for length, quality, and potential rejection risks.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Creating Google RSA headlines
  • Writing Meta and LinkedIn ad copy
  • Developing variations of successful ads
alirezarezvani/claude-skills2.8만2026년 8월 30일 업데이트

Review code changes from three critical perspectives: production failures, maintainability, and security. Get a consolidated report that ranks findings by severity and provides merge guidance, helping examine assumptions that an ordinary self-review may overlook.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Reviewing a pull request before merging
  • Getting a second opinion on AI-written code
  • Checking authentication or data access code
alirezarezvani/claude-skills2.8만2026년 8월 30일 업데이트

aeo

무료

Audit and improve content intended for citation in AI answers. Review evidence, author information, and structure, generate revised content and structured metadata, and keep a local record of observed citations across AI services.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Audit existing articles for evidence and credibility gaps
  • Revise article structure and references for AI answers
  • Record citations observed across AI services
alirezarezvani/claude-skills2.8만2026년 8월 30일 업데이트

Create signed records for consequential agent actions such as deployments, deletions, and payments. Decide which actions need evidence, record the agent, action, target, and policy, then verify the resulting certificate offline to detect later changes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Creating signed records for production deployments
  • Preserving evidence of deletions and payments
  • Recording access grants for later review
alirezarezvani/claude-skills2.8만2026년 8월 30일 업데이트

alirezarezvani의 스킬 모두 보기

이 스킬의 문제 신고