Install any skill in seconds. Free to start, no credit card required.
Get Started Free →시각 + 브랜드 일관성 리뷰. HTML/MD/JSX artifact를 받아 brand DESIGN.md 대비 typo hierarchy, 색 budget, radius scale, 컴포넌트 state, 모바일 반응형 검수. severity BLOCK/WARN/FYI + line ref 출력. 'UI 리뷰', '디자인 검토', 'DESIGN.md 대비 검수' 류 트리거.
.claude/skills/kwakseongjae-omd-designer-review/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 94% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 79% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 232% | 0% |
<!-- omd:installed-skill — managed by omd install-skills. Do not edit; rerun the command to refresh. -->
artifact를 받아 brand의 DESIGN.md 기준으로 visual / brand consistency를 audit한다. read-write가 아니라 advisory — 직접 수정하지 않고 review report만 emit.
구조는 mastepanoski/claude-skills ui-design-review에서 차용.
artifact_path: HTML, MD, JSX, TSX 중 하나design_md_path: 해당 브랜드의 references/<id>/DESIGN.md 또는 프로젝트 루트 DESIGN.mdviewport: mobile | desktop | both (default: both)이 두 입력이 없으면 BLOCK으로 즉시 종료.
§ Typography 스펙 readDESIGN.md § Color의 brand saturated tokens 추출.
§ Radius 토큰 read (예: 0, 4, 8, 12, 16, 9999)border-radius 추출각 interactive 요소가 다음 state를 갖춰야:
누락 → BLOCK (focus는 a11y 필수)
§ Spacing 토큰padding: 13px) → WARN| Severity | 의미 | 후속 조치 | |---|---|---| | BLOCK | a11y 또는 hard rule 위반. 출간 불가. | writer로 revision round 1 | | WARN | best practice 위반. 출간 가능하나 권장 수정. | writer가 판단 후 fix | | FYI | 정보성. 의도일 수 있음. | 무시 가능 |
<work_dir>/.reviews/designer-review-round-<N>.md:
markdown# Designer review — round <N> **Date:** <ISO> **Artifact:** <path> **DESIGN.md:** <path> **Viewport:** mobile | desktop | both ## Summary - BLOCK: <count> - WARN: <count> - FYI: <count> ## Issues ### [BLOCK] Focus state missing on primary CTA - **Location:** `components/SignupForm.tsx:42` - **Rule:** § Component states — focus is mandatory - **Evidence:** `<button className="bg-blue-500 hover:bg-blue-600">` — focus 클래스 없음 - **Fix suggestion:** add `focus-visible:ring-2 focus-visible:ring-blue-300` ### [WARN] Color budget exceeded on mobile hero - **Location:** `index.ko.md:34-41` - **Rule:** § Color budget — max 2 saturated / viewport - **Evidence:** 3 saturated brand 사용 (red-500, blue-500, green-500) - **Fix suggestion:** green-500을 gray-700 또는 텍스트로 대체 ... ## Verdict - **PASS** (BLOCK=0, WARN≤3) — 출간 OK - **REVISION** (BLOCK=0, WARN>3) — 권장 수정 후 재리뷰 옵션 - **BLOCK** (BLOCK≥1) — 출간 불가, writer revision round 시작
artifact가 HTML/JSX이고 browser-harness가 가용하면 mobile 320px + desktop 1280px 스크린샷을 캡쳐해 .reviews/screenshots/에 저장. 텍스트 audit과 함께 첨부.
Anti-pattern: 이전 review에서 읽은 DESIGN.md를 캐싱해 재사용 → memory hallucination 위험.
→ 매 호출마다 DESIGN.md를 다시 read. 읽은 timestamp를 report 헤더에 명시.
somewhere in the file 금지)input에 prior_report_path 포함되면:
Round 2에도 UNRESOLVED BLOCK 있으면 orchestrator로 BLOCK escalation.
review report를 emit한 후에 이번 run의 finding들을 한 번 스캔해, 반복 패턴을 취향 후보로 제안한다. report 자체는 advisory 그대로 — 이 phase가 유일하게 쓰기를 일으킬 수 있는 지점이고, 그것도 사용자가 동의한 경우에만.
.omd/preferences.md가 존재하면 read해서, finding이 status: pending 엔트리의 scope와 같은 축이면 1회여도 후보 (반복의 증거가 이미 파일에 있으므로).omd/preferences.md가 없으면 조건 2는 생략 — 파일을 만들지 않는다.
후보가 1개 이상이면 단 한 번 묻는다: "이 패턴, 취향으로 기록할까요?"
선택된 후보는 omd:remember 스킬의 기록 절차를 그대로 수행해 기록한다 — 포맷을 손으로 흉내 내 직접 append하지 말 것 (writer는 omd:remember 하나; id 생성·scope 매핑·frontmatter 생성·heading 규칙 전부 그 절차를 따른다):
signal: review / confidence: inferred / status: pendingsource_context: 이번 review report 경로 (예: .reviews/designer-review-round-1.md)status: pending으로만 기록. DESIGN.md 반영은 평소의 fold-in 임계/게이트(omd:learn)가 결정> 수동 검증: 같은 artifact에서 radius WARN 2건이 나오는 review를 돌리면, report 출력 후 "이 패턴, 취향으로 기록할까요?" 질문이 정확히 1회 뜨고, 동의 시 .omd/preferences.md에 signal: review / confidence: inferred / status: pending 엔트리 1개가 append되어야 한다 (DESIGN.md는 변경 없음).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | pass→fail | 12,505 | 5,236 | -58% | 1 | 1 | 0% | 2,633 | 2,549 | -3% | 0 | 0 | — |
case-07 | fail→pass | 10,326 | 3,741 | -64% | 1 | 1 | 0% | 1,552 | 2,806 | +81% | 0 | 0 | — |
case-08 | fail→pass | 9,711 | 5,037 | -48% | 1 | 1 | 0% | 1,588 | 3,076 | +94% | 0 | 0 | — |
case-01 | fail→fail | 4,985 | 6,028 | +21% | 1 | 1 | 0% | 285 | 2,652 | +831% | 0 | 0 | — |
case-02 | fail→fail | 5,105 | 6,358 | +25% | 1 | 1 | 0% | 290 | 2,767 | +854% | 0 | 0 | — |
case-03 | fail→fail | 5,104 | 6,272 | +23% | 1 | 1 | 0% | 275 | 2,585 | +840% | 0 | 0 | — |
case-04 | fail→fail | 4,072 | 7,489 | +84% | 1 | 1 | 0% | 159 | 2,967 | +1766% | 0 | 0 | — |
case-05 | pass→pass | 25,867 | 13,754 | -47% | 1 | 1 | 0% | 5,700 | 4,581 | -20% | 0 | 0 | — |
case-09 | fail→pass | 12,792 | 12,327 | -4% | 1 | 1 | 0% | 2,179 | 3,904 | +79% | 0 | 0 | — |
case-10 | fail→fail | 6,846 | 5,230 | -24% | 1 | 1 | 0% | 1,260 | 2,444 | +94% | 0 | 0 | — |
case-11 | fail→fail | 13,313 | 4,624 | -65% | 1 | 1 | 0% | 2,362 | 2,451 | +4% | 0 | 0 | — |
case-12 | fail→pass | 9,630 | 11,787 | +22% | 1 | 1 | 0% | 1,633 | 3,866 | +137% | 0 | 0 | — |
case-22 | fail→pass | 6,435 | 6,095 | -5% | 1 | 1 | 0% | 962 | 3,193 | +232% | 0 | 0 | — |
case-13 | fail→pass | 11,318 | 8,863 | -22% | 1 | 1 | 0% | 2,087 | 3,812 | +83% | 0 | 0 | — |
case-14 | fail→fail | 9,754 | 20,566 | +111% | 1 | 1 | 0% | 1,604 | 3,354 | +109% | 0 | 0 | — |
case-15 | fail→pass | 10,748 | 31,183 | +190% | 1 | 1 | 0% | 1,839 | 4,355 | +137% | 0 | 0 | — |
case-16 | fail→pass | 8,619 | 14,178 | +64% | 1 | 1 | 0% | 1,541 | 3,790 | +146% | 0 | 0 | — |
case-17 | fail→fail | 13,277 | 55,993 | +322% | 1 | 1 | 0% | 2,521 | 8,584 | +240% | 0 | 0 | — |
case-18 | fail→fail | 11,072 | 85,916 | +676% | 1 | 1 | 0% | 1,706 | 2,454 | +44% | 0 | 0 | — |
case-19 | pass→fail | 9,551 | 15,387 | +61% | 1 | 1 | 0% | 1,695 | 2,501 | +48% | 0 | 0 | — |
case-20 | fail→fail | 16,636 | 3,779 | -77% | 1 | 1 | 0% | 3,010 | 2,422 | -20% | 0 | 0 | — |
case-21 | fail→fail | 3,420 | 5,217 | +53% | 1 | 1 | 0% | 128 | 2,405 | +1779% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 9 counted toward the lift figure. The other 13 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 9 comparable cases. 6 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.