design-polish
npx skills add https://github.com/vp-k/flutter-craft --skill design-polish
Agent 安装分布
Skill 文档
ëìì¸ í´ë¦¬ì± ì¤í¬
ëìì¸ ë í¼ë°ì¤ ì¬ì´í¸ìì í¸ë ë를 ê²ìíê³ , íì¬ íë¡ì í¸ì ë¹êµíì¬ ê°ì ìì ëì¶í©ëë¤. WCAG 기본 ì ê·¼ì± ì²´í¬ë¥¼ í¬í¨í©ëë¤.
ì¸ì
--apply: (ìµì ) ê°ì ìì ì½ëì ì§ì ì ì©--wcag-only: (ìµì ) WCAG ì ê·¼ì± ì²´í¬ë§ ìí--no-wcag: (ìµì ) WCAG ì²´í¬ ìëµ- $1: (ìµì ) ë í¼ë°ì¤ ì¬ì´í¸ (미ì§ì ì íë¡ì í¸ ì íì ë§ê² ìë ì í)
- $2: (ìµì ) ê¸°ë¥ í¤ìë (미ì§ì ì ì ì²´ ëìì¸ í´ë¦¬ì±)
ì¬ì© ìì
/design-polish # ì ì²´ ìë í´ë¦¬ì± + WCAG ì²´í¬
/design-polish --apply # í´ë¦¬ì± + ì½ë ì ì©
/design-polish --wcag-only # WCAG ì ê·¼ì± ì²´í¬ë§
/design-polish mobbin # Mobbinìì ê²ì
/design-polish godly hero # Godlyìì hero ê²ì
/design-polish --apply godly hero # hero í´ë¦¬ì± + ì½ë ì ì©
ì¤í íë¡ì° ê°ì
ì ì ì¡°ê±´ íì¸
â
0ë¨ê³: íë¡ì í¸ ë¶ì + íì¬ ì¤í¬ë¦°ì· ìº¡ì² [Glob, Read, Bash]
â
1ë¨ê³: WCAG ì ê·¼ì± ì²´í¬ (axe-core) [Bash, Read]
â
2ë¨ê³: ë í¼ë°ì¤ ì¬ì´í¸ ì í
â
3ë¨ê³: í¸ë ë ê²ì â ë í¼ë°ì¤ ìº¡ì² [WebSearch, Bash]
â
4ë¨ê³: Gap ë¶ì (ì´ë¯¸ì§ ë¹êµ + ì ê·¼ì± ë¹êµ) [Read]
â
5ë¨ê³: ê°ì ì ëì¶
â
6ë¨ê³: ê²°ê³¼ ì¶ë ¥
â
7ë¨ê³: ì½ë ì ì© (--apply ì) [Edit]
ì ì ì¡°ê±´ íì¸
ì¤í ì ë¤ì ì¡°ê±´ì íì¸í©ëë¤:
1. ê°ë° ìë² ì¤í íì¸
# Mac/Linux - ìë² ìí íì¸
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000
# Windows PowerShell - ìë² ìí íì¸
try { (Invoke-WebRequest -Uri http://localhost:3000 -UseBasicParsing -TimeoutSec 5).StatusCode } catch { 0 }
ìë í¬í¸ ê°ì§ (ìë²ê° 3000ì´ ìë ì ìì):
# Mac/Linux - ì¤í ì¤ì¸ ê°ë° ìë² í¬í¸ íì§
lsof -i -P | grep LISTEN | grep -E ':(3000|5173|8080|4200)'
# Windows PowerShell - ì¤í ì¤ì¸ ê°ë° ìë² í¬í¸ íì§
Get-NetTCPConnection -State Listen | Where-Object { $_.LocalPort -in 3000,5173,8080,4200 }
ìë²ê° ì¤í ì¤ì´ ìëë©´ ì¬ì©ììê² ìë´:
“ê°ë° ìë²ë¥¼ 먼ì ì¤íí´ì£¼ì¸ì. (ì: npm run dev)”
2. íë¬ê·¸ì¸ ìì¡´ì± íì¸
# íë¬ê·¸ì¸ ëë í 리ìì npm install ì¤í ì¬ë¶ íì¸
ls ~/.claude/plugins/marketplaces/design-polish/node_modules/puppeteer
ìì¼ë©´ ìë´:
“íë¬ê·¸ì¸ ìì¡´ì±ì ì¤ì¹í´ì£¼ì¸ì: cd ~/.claude/plugins/marketplaces/design-polish && npm install”
3. Node.js íì¸
node --version
0ë¨ê³: íë¡ì í¸ ë¶ì
ì¬ì© ë구: Glob, Read, Bash
íë¡ì í¸ ì í ê°ì§
- ëë í 리 구조:
src/,components/,pages/,app/ë± - íë ììí¬: React, Vue, Flutter, Next.js, Nuxt ë±
- ì¤íì¼ë§: CSS, Tailwind, styled-components, CSS Modules, SCSS ë±
ëìì¸ íì¼ íì§
| ì í | í¨í´ |
|---|---|
| ì»´í¬ëí¸ | **/*.tsx, **/*.jsx, **/*.js, **/*.vue, **/*.svelte, **/*.dart |
| ì¤íì¼ | **/*.css, **/*.scss, **/tailwind.config.* |
| ë ì´ìì | **/layout.*, **/App.*, **/page.*, **/_app.* |
íì¬ ëìì¸ ì¤í¬ë¦°ì· 캡ì²
Bashë¡ ìº¡ì² ì¤í¬ë¦½í¸ ì¤í:
# ìº¡ì² ì¤í¬ë¦½í¸ ì¤í (${CLAUDE_PLUGIN_ROOT}ë íë¬ê·¸ì¸ ì¤ì¹ ê²½ë¡ë¡ ìë ì¹íë¨)
node "${CLAUDE_PLUGIN_ROOT}/scripts/capture.cjs" / /about /pricing
# í¬í¸ ë³ê²½ì
BASE_URL=http://localhost:5173 node "${CLAUDE_PLUGIN_ROOT}/scripts/capture.cjs" /
ì ì¥ ìì¹: .design-polish/screenshots/current-*.png
ìº¡ì² í Readë¡ ì´ë¯¸ì§ ë¶ì
Read(".design-polish/screenshots/current-main.png")
ë¶ì í목:
- ë ì´ìì 구조
- ìì íë í¸
- íì´í¬ê·¸ëí¼
- ì»´í¬ëí¸ ì¤íì¼
1ë¨ê³: WCAG ì ê·¼ì± ì²´í¬
ì¬ì© ë구: Bash, Read
ì²´í¬ ì¤í
# WCAG ì²´í¬ í¬í¨ 캡ì²
node "${CLAUDE_PLUGIN_ROOT}/scripts/capture.cjs" --wcag /
ì²´í¬ í목 (axe-core 기ë°)
| ì¹´í ê³ ë¦¬ | ì²´í¬ í목 | WCAG ê¸°ì¤ |
|---|---|---|
| ìì ëë¹ | í ì¤í¸-ë°°ê²½ ëë¹ | 4.5:1 (AA) |
| ìì ëë¹ | ëí í ì¤í¸ ëë¹ | 3:1 (AA) |
| ìì ëë¹ | UI ì»´í¬ëí¸ ëë¹ | 3:1 |
| í ì¤í¸ í¬ê¸° | ìµì í ì¤í¸ í¬ê¸° | 12px ì´ì ê¶ì¥ |
| í°ì¹ íê² | ìµì íê² í¬ê¸° | 44x44px (모ë°ì¼) |
| ë§í¬ | ë§í¬ êµ¬ë¶ | ë°ì¤ ëë 3:1 ëë¹ |
ê²°ê³¼ ì ì¥
.design-polish/
âââ screenshots/
â âââ current-main.png
âââ accessibility/
âââ wcag-report.json
ê²°ê³¼ íì¸
Read(".design-polish/accessibility/wcag-report.json")
2ë¨ê³: ë í¼ë°ì¤ ì¬ì´í¸ ì í
ì¬ì© ë구: íë¨ ë¡ì§
$1 미ì§ì ì ìë ì í
| íë¡ì í¸ ì í | íë¨ ê¸°ì¤ | ì°ì ì¬ì´í¸ | ëì²´ ì¬ì´í¸ |
|---|---|---|---|
| ì± UI/UX | Flutter, React Native, 모ë°ì¼ ì°ì | Mobbin | Page Flows, Refero |
| 모ë ì¹/SaaS | Next.js, Nuxt, ëìë³´ë | Godly | Dark Mode Design, Awwwards |
| ê°ê°ì /ìì ì | í¬í¸í´ë¦¬ì¤, ê°¤ë¬ë¦¬, ìí¸ í¤ìë | SiteInspire | Savee, Behance |
| ëë©íì´ì§ | ë¨ì¼ íì´ì§, ë§ì¼í ì¤ì¬ | Lapa Ninja | Httpster |
| UI ëí ì¼ | ì»´í¬ëí¸ ì¤ì¬, ë²í¼/ì¹´ë ë± | Dribbble | – |
3ë¨ê³: í¸ë ë ê²ì
ì¬ì© ë구: WebSearch, Bash
3-1. WebSearchë¡ ë í¼ë°ì¤ ê²ì
ê¸°ë¥ ë¨ì ê²ì (ì ì¢ ë³ X)
ì¬ë°ë¥¸ ê²ì:
- site:mobbin.com onboarding flow
- site:godly.website hero section
- site:dribbble.com dashboard UI 2024
ì못ë ê²ì:
- "ê¸ìµ ì± ëìì¸"
- "ê²ì ì± UI"
3-2. ê²ì ê²°ê³¼ìì URL ì¶ì¶
WebSearch ê²°ê³¼ìì ì ì©í ë í¼ë°ì¤ URLì 2-3ê° ì ì .
3-3. Bashë¡ ë í¼ë°ì¤ 캡ì²
# ë¨ì¼ ë í¼ë°ì¤ 캡ì²
node "${CLAUDE_PLUGIN_ROOT}/scripts/capture.cjs" ref "https://dribbble.com/shots/..." hero
# ì¬ë¬ ê° ìº¡ì² (ë¸ë¼ì°ì ì¬ì¬ì©ì¼ë¡ í¨ì¨ì )
node "${CLAUDE_PLUGIN_ROOT}/scripts/capture.cjs" ref "https://site1.com" ref1 "https://site2.com" ref2
ì ì¥ ìì¹: .design-polish/screenshots/reference-*.png
ê²ì ì¤í¨ì (ìë ì²ë¦¬)
- ëì²´ ì¬ì´í¸ë¡ ì¬ìë: ì íì ëì²´ ì¬ì´í¸ ììëë¡
- site: ì ê±°: ì¼ë° ì¹ ê²ìì¼ë¡ ì í
- í¤ìë ì¼ë°í: ì) “checkout” â “ecommerce flow”
4ë¨ê³: Gap ë¶ì
ì¬ì© ë구: Read
Readë¡ ì´ë¯¸ì§ ë¹êµ ë¶ì
Read(".design-polish/screenshots/current-main.png")
Read(".design-polish/screenshots/reference-hero.png")
ë¶ì ìì
| ìì | ë¶ì í목 |
|---|---|
| ë ì´ìì | 그리ë, ì¬ë°±, ì ë³´ ê³ì¸µ, CTA ìì¹ |
| íì´í¬ê·¸ëí¼ | í°í¸, í¬ê¸°, íê°, ì¨ì´í¸ |
| ìì | íë í¸, ëë¹, ë¤í¬ëª¨ë ì§ì |
| ì¸í°ëì | í¸ë², ì í, ì ëë©ì´ì , ë¡ë© |
| ì»´í¬ëí¸ | ë²í¼, ì¹´ë, ì ë ¥, 모ë¬, í ì¤í¸ |
| ìí | ë¡ë©/ì±ê³µ/ì¤í¨/ë¹ ìí ì²ë¦¬ |
| ì ê·¼ì± | WCAG ìë° í목, í°ì¹ íê², í¬ì»¤ì¤ íì |
íë«í¼ë³ ì¶ê° 기ì¤
| íë«í¼ | íµì¬ ê¸°ì¤ |
|---|---|
| ì¹ | ì¤ìº ê°ë¥ì±, ì ë³´ ë°ë, ë°ìí |
| ì± | ìì§ ëë¬ ë²ì, ì ì¤ì², ë¤ì´í°ë¸ í¨í´ |
5ë¨ê³: ê°ì ì ëì¶
ì°ì ìì ë¶ë¥
| ì°ì ìì | ê¸°ì¤ | ìì |
|---|---|---|
| Critical | WCAG ìë° (ì¬ê°) | ëë¹ ë¶ì¡±, í°ì¹ íê² ë¯¸ë¬ |
| High | ì¬ì©ì±/ì ê·¼ì± ë¬¸ì , ëª íí í¸ë ë ë¤ì²ì§ | CTA ë¶ëª í, ë¤ë¹ê²ì´ì |
| Medium | ìê°ì ê°ì 기í | ì¬ë°± ì¡°ì , ì ëë©ì´ì ì¶ê° |
| Low | ì íì í´ë¦¬ì± | ë§ì´í¬ë¡ ì¸í°ëì |
6ë¨ê³: ê²°ê³¼ ì¶ë ¥
ì¶ë ¥ íì
## íë¡ì í¸ ìì½
[íë ììí¬], [ì¤íì¼ë§ ë°©ì] ê¸°ë° [íë¡ì í¸ ì í]
## WCAG ì ê·¼ì± ì²´í¬
| í목 | ìí | ì¸ë¶ì¬í |
|------|------|----------|
| ìì ëë¹ | X 3ê±´ ìë° | btn-primary: 3.2:1 (íì: 4.5:1) |
| í°ì¹ íê² | O íµê³¼ | |
| í
ì¤í¸ í¬ê¸° | ! 1ê±´ 주ì | caption: 11px |
## í¸ë ë ìì½
- [íµì¬ í¸ë ë 1]
- [íµì¬ í¸ë ë 2]
- [íµì¬ í¸ë ë 3]
## Gap ë¶ì
| ìì | íì¬ | í¸ë ë | Gap |
|------|------|--------|-----|
| ë ì´ìì | ... | ... | ... |
| íì´í¬ê·¸ëí¼ | ... | ... | ... |
| ìì | ... | ... | ... |
| ì¸í°ëì
| ... | ... | ... |
| ì»´í¬ëí¸ | ... | ... | ... |
| ì ê·¼ì± | 3ê±´ ìë° | WCAG AA ì¤ì | ìì ëë¹ ìì íì |
## ê°ì ì
### Critical (ì ê·¼ì±)
- [ ] btn-primary ìì ëë¹ ìì (src/components/Button.tsx)
### High
- [ ] [ê°ì ì + ëì íì¼]
### Medium
- [ ] [ê°ì ì + ëì íì¼]
### Low
- [ ] [ê°ì ì + ëì íì¼]
7ë¨ê³: ì½ë ì ì© (–apply ìµì ìë§)
ì¬ì© ë구: Edit
ì ì© ìì
- Critical (ì ê·¼ì±) ì°ì ììë¶í° ìì°¨ ì ì©
- High ì°ì ìì ì ì©
- ê° ìì í íì¼ ì ì¥
- ì ì© ê²°ê³¼ ìì½ ì¶ë ¥
ì ì©íì§ ìë ê²
- ì ë¼ì´ë¸ë¬ë¦¬ ì¤ì¹ íìí ë³ê²½
- ëê·ëª¨ 구조 ë³ê²½ (리í©í ë§ ìì¤)
- ë¸ë ì´í¹ ì²´ì¸ì§
ì ì© ê²°ê³¼ ì¶ë ¥
## ì ì© ìë£
| íì¼ | ë³ê²½ ë´ì© |
|------|----------|
| src/components/Button.tsx | ìì ëë¹ ìì (4.5:1 ì´ì) |
| src/components/Button.tsx | hover ì¤íì¼ ì¶ê° |
| src/styles/global.css | ì¬ë°± ì¡°ì |
## 미ì ì© (ìë íì)
- [ ] Framer Motion ì¤ì¹ íì (ì ëë©ì´ì
)
ë í¼ë°ì¤ ì¬ì´í¸ 목ë¡
ì¤ì ìë¹ì¤ UX íë¦
| ì¬ì´í¸ | URL | í¹ì§ |
|---|---|---|
| Mobbin | mobbin.com | ì¤ ìë¹ì¤ ì¤í¬ë¦°ì·, íë¡ì°ë³ ì 리 |
| Page Flows | pageflows.com | ìì ê¸°ë° íë¡ì°, ì¸í°ëì ì°¸ê³ |
| Refero | refero.design | ì¤ì ìë¹ì¤ UI ìì 모ì |
모ë ì¹ í¸ë ë (Tech & SaaS)
| ì¬ì´í¸ | URL | í¹ì§ |
|---|---|---|
| Godly | godly.website | ë¤í¬ 모ë, ë§ì´í¬ë¡ ì¸í°ëì |
| Dark Mode Design | darkmodedesign.com | ë¤í¬ 모ë UI íë ì´ì |
| Awwwards | awwwards.com | ì°½ìì /기ì ì ì¹ì¬ì´í¸ |
ê°ê°ì & ìì ì ìê°
| ì¬ì´í¸ | URL | í¹ì§ |
|---|---|---|
| SiteInspire | siteinspire.com | ë ì´ìì, ìê°, ë¶ì기 |
| Savee | savee.it | 무ëë³´ëì© ìê°ì ìê·¹ |
| Behance | behance.net | ë¸ëë©, Case Study |
ëë© íì´ì§ & ë§ì¼í
| ì¬ì´í¸ | URL | í¹ì§ |
|---|---|---|
| Lapa Ninja | lapa.ninja | ëë© íì´ì§ ë í¼ë°ì¤ ìµë¤ |
| Httpster | httpster.net | ì¬íí íì´í¬ê·¸ëí¼ |
UI ëí ì¼
| ì¬ì´í¸ | URL | í¹ì§ |
|---|---|---|
| Dribbble | dribbble.com | ë²í¼, ì¹´ë ë± ëí ì¼ |