Communitygithub.com

UI 폴리시 (UI Polish)

증거 기반으로 기존 UI 화면을 다듬습니다. 핸드폰 및 데스크톱 너비로 렌더링하고, 스크린샷이 숨기는 측정값(열 정렬, 필드 너비, 라벨 배치, 탭 대상, 입력 글꼴 크기, 대비, 오버플로, 빈 공간, 기본 작업까지의 거리)을 측정한 후, 간단한 폴리시 루브릭에 따라 화면을 평가하고, 소스를 수정한 다음, 모든 검사가 통과할 때까지 다시 측정합니다.

UI 폴리시 (UI Polish)란 무엇인가요?

이 스킬은 개발자와 AI 에이전트가 UI 화면의 시각적 완성도를 정량적으로 측정하고 자동으로 개선할 수 있도록 설계되었습니다. 스크린샷만으로는 포착하기 어려운 17px 열 정렬 오차, 88px 너비의 필드, 터치 타겟 크기, 라벨 배치, 대비, 오버플로, 데드 스페이스 등 세부 결함을 Playwright 기반 측정 스크립트로 감지합니다. Claude Code, Cursor, Codex 등 모든 터미널 기반 AI 코딩 도구에서 동작하며 Node.js와 Playwright가 필요합니다. 먼저 현재 UI를 측정하고, 내장된 10가지 평가 루브릭으로 시각적 계층 구조, 레이블, 그룹화, 신뢰성 등을 평가한 후, 소스 코드를 수정하고 통과할 때까지 반복 측정합니다. 'polish this UI', 'tighten the details', 'this form looks off', 'make this screen feel finished', 'fix alignment and spacing' 같은 명령에 반응하며, 참조 디자인과 비교하여 일관된 품질을 보장합니다. 마지막으로 전/후 스크린샷, 비교 결과, 평가표, 미해결 브래킷 플레이스홀더를 보고합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aictrl-dev/skills/tree/HEAD/skills/ui-polish

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

UI 폴리시

잘 구성된 화면도 여전히 미완성으로 느껴질 수 있습니다. 17px만 어긋난 두 열의 필드, 390px 폰에서 88px 박스, 각 필드를 따라다니는 단위 단어, 엄지손가락으로 터치할 수 없는 링크 등이 그 예입니다. 사람들은 이런 것들을 즉시 느끼지만, 스크린샷을 검토하는 모델은 거의 보지 못합니다. 이 스킬은 먼저 측정하고, 두 번째로 판단하며, 측정이 통과했다고 말할 때만 결함이 수정되었다고 간주합니다.

입력

누락된 것만 물어보세요.

  1. 대상. URL, HTML 파일, 또는 렌더링되는 URL이 포함된 리포지토리의 컴포넌트. 렌더링할 방법이 필요합니다. 렌더링할 수 없으면 그렇게 말하고 루브릭만 사용하여 모든 측정 검사를 "측정되지 않음"으로 표시합니다.
  2. 범위 (선택 사항). 다듬을 페이지 부분의 CSS 선택자(예: form 또는 main). 기본값: main, 없으면 body.
  3. 참조 (선택 사항). 사용자가 더 낫다고 생각하는 화면(URL, 파일 또는 스크린샷). 이것도 측정하고 디자인 방향으로 사용하십시오. 브랜드, 콘텐츠 또는 주장은 절대 복사하지 마십시오.

워크플로

1. 현재 화면 측정

번들된 스크립트를 실행합니다(Node 및 Playwright with Chromium 필요; 프로젝트에 없으면 npm i -D playwright && npx playwright install chromium으로 설치):

node <skill-dir>/scripts/measure.cjs <file-or-url> --out ui-polish/before [--scope "<selector>"] [--primary "<selector>"] [--hide "<selector>,…"] [--profile form|content]
  • 핸드폰(390×844) 및 데스크톱(1366×900)으로 렌더링하며(오류 발견 시 exit 1, 사용법 오류 시 2, 실행 실패 시 3), measure.json을 --out 디렉토리(현재 디렉토리 기준)에 쓰고, 뷰포트당 두 개의 스크린샷(<viewport>.png (첫 번째 화면) 및 <viewport>-scope.png (스크롤 아래 포함한 전체 범위))을 생성하며, 각 발견 사항을 선택자와 함께 출력합니다. 원인이 동일한 요소는 카운트와 예시 선택자가 포함된 하나의 발견 사항으로 처리되며, 핸드폰과 데스크톱에서 동일한 발견 사항은 한 번만 출력되고 viewports에 둘 다 포함됩니다(병합된 발견 사항을 뷰포트별로 필터링할 때는 viewport가 아닌 viewports 사용).
  • 스크립트는 기본적으로 꺼져 있어 정적 레이아웃이 측정됩니다. JavaScript로만 렌더링되는 페이지에는 --js를 추가하십시오. --offline은 대상 페이지를 제외한 모든 네트워크 요청을 차단합니다(밀폐형). --assets-only는 원격 폰트, 스타일시트 및 이미지도 로드하도록 허용하며, 저장된 복사본이 폰트를 필요로 할 때 해당 호스트에 접속합니다.
  • --hide는 측정 및 캡처 전에 쿠키 배너나 채팅 런처와 같은 오버레이에 display: none을 설정하여 스크린샷을 가리거나 발견 사항을 추가하지 않도록 합니다. 일치하는 항목이 없는 --hide 선택자는 경고를 출력합니다.
  • --profile content는 기사 및 기타 긴 형식의 페이지용입니다. 폼 단계용 검사(type-scale, action-distance, action-below-fold, dead-space)를 건너뜁니다. 기본값은 form입니다.
  • 한 번 실행에 여러 대상(measure.cjs <page1> <page2> … --out dir)은 각각 dir/<slug>/에 저장되며, dir/summary.json은 여러 페이지에서 반복되는 발견 사항을 페이지 목록과 함께 한 줄로 병합합니다. 공유 컴포넌트는 한 번만 수정하십시오. 페이지별 비교(--compare before/<slug>/measure.json after/<slug>/measure.json).
  • 검사 및 임계값, 그리고 각각의 일반적인 수정 방법은 reference/checks.md에 있습니다. 오류는 실행을 실패하게 합니다. 경고는 수정 또는 명시된 사유가 필요합니다.
  • 사유는 매 실행마다가 아니라 한 번만 명시하십시오. 현재 디렉토리(또는 --config <file>)에 있는 ui-polish.config.json은 허용된 결정을 나열합니다(예: { "ignore": [{ "check": "text-size", "selector": ".eyebrow", "reason": "브랜드 키커 레이블" }] }). 일치하는 발견 사항은 사유와 함께 accepted로 이동하며, 자체 섹션에 출력되고 종료 코드에 영향을 주지 않습니다. 소유자가 내린 결정만 기록하십시오. 숫자를 통과시키기 위해 결정을 추가하지 마십시오.

참조가 주어진 경우, 동일한 방식으로 ui-polish/reference에 측정하십시오.

2. 살펴보기

스크린샷(-scope.png는 전체 범위를 보여줌)을 열고 reference/rubric.md의 10개 항목을 모두 살펴보십시오. 항목당 한 행(및 항목 10의 하위 검사당 한 행)의 평가표를 작성하십시오: 통과, 실패 또는 해당 없음, 발견된 문제 및 수정 방법. 화면에 있는 것만 평가하십시오. 측정은 루브릭의 증거이지 대체물이 아닙니다. 측정된 발견 사항이 0개인 화면도 계층 구조, 레이블 및 단위, 그룹화 또는 신뢰성에서 실패할 수 있으며, 사람들이 가장 먼저 알아차리는 실패는 대개 이런 것입니다.

3. 수정 계획 세우기

측정된 모든 발견 사항과 실패한 각 루브릭 항목에 대한 수정 방법을, 해당 요소별로 그룹화하여 나열하십시오. 각 발견 사항을 개별적으로 패치하는 것보다 여러 발견 사항을 동시에 제거하는 구조적 수정(예: 2열 그리드에서 필드 위의 레이블은 정렬, 동일 너비, 필드 채움, 레이블 배치 및 접근 가능한 이름을 함께 해결)을 선호하십시오. 화면을 사용하는 사람에게 미치는 영향 순서로 정렬하십시오.

4. 소스에 수정 적용

실제 소스를 편집하십시오: 리포지토리의 컴포넌트와 스타일, 또는 HTML 파일. 규칙:

  • 작업과 콘텐츠 유지. 동일한 질문, 동일한 입력 및 단위, 동일한 작업, 동일한 브랜드. 검사를 통과시키기 위해 기능을 제거하지 마십시오.
  • 아무것도 발명하지 마십시오. 화면이 단어로 명시하지 않은 사실(단계 수, 시간, 가격, 임상, 법적 또는 개인정보 보호 주장)을 추가하지 마십시오. 코드에서 계산한 값(진행 표시줄의 aria-valuenow, CSS 너비, 경로 이름)도 명시된 것이 아닙니다. 역시 대괄호로 표시하십시오. 디자인에 그러한 문구가 필요하면 대괄호로 된 플레이스홀더(질문 [n] / [N], [~3]분, [질문하는 이유: …])를 사용하고 소유자가 작성할 수 있도록 목록을 작성하십시오.
  • 기존 시스템 사용. 프로젝트의 토큰, 컴포넌트 및 간격 척도를 재사용하고, 맞는 값이 없을 때만 새 값을 추가하십시오.
  • 작동 상태 유지. 모든 컨트롤은 이전에 수행한 작업을 계속 수행해야 하며(그리고 깨진 부분은 작동하도록), 키보드 포커스를 계속 볼 수 있어야 합니다.

5. 통과할 때까지 다시 측정

node <skill-dir>/scripts/measure.cjs <file-or-url> --out ui-polish/after [same options]
node <skill-dir>/scripts/measure.cjs --compare ui-polish/before/measure.json ui-polish/after/measure.json

비교 단계는 또한 소유자가 검토해야 할 모든 새 문구를 나열하며, 새 문구에 [대괄호] 밖에 숫자가 포함된 경우 invented-number로 실패합니다(예: "Step 2 of [5]": 2는 명시된 적이 없음).

오류가 없고, 모든 남은 경고가 수정되거나 명시된 사유가 있고, 그리고 모든 실패한 루브릭 항목이 수정되거나 명시된 사유가 있을 때까지 4-5단계를 최대 3회 반복하십시오. 매 라운드마다 새 스크린샷으로 루브릭을 다시 평가하십시오. 오류가 0개라고 끝난 것이 아닙니다. 36px 탭 대상 또는 후행 레이블과 같은 경고는 이 스킬이 존재하는 이유인 세부 사항입니다. 매 라운드마다 새 스크린샷을 여십시오. 검사가 통과했지만 화면이 더 안 좋아 보일 수 있으며 이는 퇴보로 간주합니다.

6. 보고

  • 핸드폰 및 데스크톱에서의 전후 스크린샷.
  • 비교 출력: 수정됨, 남음(사유 포함), 새로 생김, 및 허용됨(설정의 사유 포함).
  • 전후 루브릭 평가표, 실패 상태로 남은 항목에 대한 이유 포함.
  • 소유자가 채워야 할 모든 대괄호 플레이스홀더.
  • 폴리시보다는 제품 결정이 필요한 모든 것(design-review 또는 소유자에게 전달).

주의사항

  • 스크린샷은 기하학을 숨깁니다. 17px 열 오프셋이나 390px 화면의 88px 필드는 사람에게는 명백하지만 축소된 스크린샷에서는 보이지 않습니다. 기하학은 숫자를, 균형과 계층 구조는 눈을 신뢰하십시오.
  • 후행 단위 단어는 일반적으로 열 정렬 불량의 원인입니다. "Feet"와 "Stones"는 너비가 다르므로 그 이후의 모든 것이 이동합니다. 필드 위에 레이블을 배치하십시오.
  • 대용량 파일의 작은 편집은 계속 작습니다. 소스가 대용량 생성 파일인 경우, 속성별로 패치하는 대신 폼의 마크업과 스타일을 블록으로 편집하십시오. 그렇지 않으면 레이아웃이 변경되지 않습니다.
  • 숫자가 통과할 때 멈추는 것이 전형적인 실패입니다. 기하학은 폴리시의 절반에 불과합니다. 나머지 절반은 루브릭입니다(실제 제목, 필드당 링크 대신 하나의 모드 전환, 민감한 질문에 대한 이유, 방향).
  • 하나의 토큰, 많은 발견 사항. 모든 페이지에서 반복되는 작은 텍스트 또는 탭 대상 발견 사항은 일반적으로 하나의 디자인 시스템 토큰 또는 컴포넌트에서 비롯됩니다. 페이지별로 분류하는 대신 해당 위치에서 수정하거나 소유자의 결정을 ui-polish.config.json에 기록하십시오.
  • 통과 검사가 목표가 아닙니다. 하나의 명확한 제목, 그룹화된 필드 및 가까운 기본 작업이 있는 집중된 화면이 목표입니다. 검사를 사용하여 도달했음을 증명하십시오.

만든이: aictrl.dev. 이 스킬은 워크플로를 가르칩니다. aictrl은 이를 운영화합니다 — 사용자의 백로그, 팀 표준 및 코드베이스 지식 그래프에 기반하여. 작동 방식 보기 →

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬