designpaca/research/references/04-ai-slop-signatures.md
Yun Chan 8808c672dc designpaca 초기 구현 — 스킬 · 설치 CLI · 배포 파이프라인
웹 디자인 파이프라인 스킬과 이를 5개 에이전트에 설치하는 CLI 를 담은 모노레포.

스킬 (packages/skill)
- SKILL.md 261줄 + 참조 문서 16개 3,349줄. progressive disclosure 로
  본문은 절차와 인덱스만, 지식은 references/ 로 분리
- 0~6단계 파이프라인. 규모에 따라 전체·연장·국소 세 경로로 분기
- 하드 게이트 12개는 grep·카운트로 검증 가능한 것만. 취향 판단은 제외
- 미학 프리셋 5종, AI 슬롭 지문 목록, 한글 조판 규칙,
  SVG 필터·three.js·인터랙티브 모션·HTML-in-Canvas 실전 지침

설치 CLI (packages/cli, packages/core)
- npx designpaca 온보딩 TUI. Claude Code · Codex · Cursor · Windsurf · AGENTS.md
- 매니페스트에 설치 시점 해시를 기록해 사용자가 고친 파일은 update 가 건너뛴다
- 타깃별로 본문의 references/ 경로를 실제 설치 위치로 재작성
- AGENTS.md 는 항상 로드되므로 본문 대신 303자 포인터만 주입
- Windsurf 는 12,000자 상한 초과 시 설치를 차단

배포 (build/ci, .forgejo/workflows)
- 태그 v* → 검사·테스트·빌드 → npmjs 배포 + Forgejo 레지스트리 미러
  → draft 릴리스 → Cloudflare Pages. 재실행 멱등

근거 (research/)
- 약 250개 웹 소스 조사 결과와 도그푸딩 검증 2건. 스킬의 모든 수치는 여기서 나온다

테스트 22개 통과 (core 16 · cli 6)
2026-08-20 10:48:00 +09:00

267 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 04 — "AI가 만든 티" 시그니처 목록 (금지 목록)
> **이 문서가 `designpaca`의 핵심이다.**
> 아래 항목은 전부 **구체적 패턴**이다. "generic하다", "심심하다" 같은 말은 쓰지 않는다.
> 각 항목은 `패턴 → 왜 문제인가 → 대신 무엇을 하나` 구조다.
>
> **총 101개 시그니처** — A 컬러 13 · B 타이포 15 · C 레이아웃 14 · D 컴포넌트 16 ·
> E 모션 9 · F 카피 14 · G 이미지 9 · H 품질 11 (+ I 코드 지문 grep 목록, J 자가 채점표)
>
> **사용법**: 작업 완료 전 이 문서를 훑고, 걸린 항목의 ID를 나열한 뒤 전부 해소해야 한다.
> 3개 이상 걸리면 그 디자인은 폐기하고 다시 시작한다.
---
## 0. 근거: 이건 인상이 아니라 실측이다
Adrian Krebs가 **Show HN 랜딩페이지 1,590개**를 Playwright로 렌더한 뒤
DOM·computed style 기반 결정론적 규칙 16개로 채점한 결과:
| 등급 | 기준 | 비율 | 개수 |
|---|---|---|---|
| Heavy slop | 4개 이상 패턴 검출 | **22%** | 347 |
| Mild slop | 23개 | **32%** | 508 |
| Clean | 01개 | 46% | 735 |
개별 패턴 검출률 (일부 공개치):
| 패턴 | 검출률 |
|---|---|
| CTA 버튼이 보라 계열 (indigo/violet) | **10.7%** |
| 헤드라인 전체 대문자 | **10.5%** |
| 번호 매긴 단계 시퀀스 (1·2·3) | **9.4%** |
> Krebs 본인의 결론: *"슬롭 페이지가 나쁜 건 아니다. 그냥 영감이 없을 뿐이다. 전환은 잘 될 수도 있다.
> 다만 지금 Show HN에 올라오는 것의 절반 이상은 '의견 없는 채팅 인터페이스가 만들었다'는 시각적 지문을 갖고 있다."**
즉 이 문서의 목표는 "예쁘게"가 아니라 **지문 제거**다.
---
## A. 컬러 시그니처
| ID | 시그니처 (구체적으로) | 왜 문제인가 | 대신 무엇을 하나 |
|---|---|---|---|
| **A-01** | **다크 모드를 기본값으로.** 브리프에 없는데 `bg-slate-900` / `#0B0B0F` 배경으로 시작 | AI 툴(v0·Cursor·Bolt)의 가장 흔한 반사 반응. 단일 시그니처 중 검출 빈도 1위 | 라이트를 기본으로 설계하고 다크는 **토큰으로 파생**. 다크가 필요하면 브리프에 근거를 대라 |
| **A-02** | **보라→파랑 그라디언트 히어로.** `#6366f1 → #a855f7`, `#8b5cf6 → #3b82f6`, Tailwind `from-purple-600 to-blue-500` | Tailwind 기본 팔레트의 indigo/violet은 "결정하지 않았다"의 신호. 수십만 개 튜토리얼의 기본값 | 브랜드 색 1개를 정하고 **단색 + 중립**으로 간다. 그라디언트를 쓸 거면 같은 hue 내 명도 변화(예: `#1B4332 → #2D6A4F`) |
| **A-03** | **"VibeCode Purple"** — 라벤더-퍼플 (`#a78bfa`, `#c4b5fd` 계열)이 어디에나 | 텍스트→랜딩 생성기의 출력 지문. 색을 고른 게 아니라 안 고른 것 | 보라를 쓰지 마라. 꼭 필요하면 채도를 낮추고 온도를 바꿔라 (`#6B5B95` 같은 탁한 보라) |
| **A-04** | **네온 온 다크** — 시안(`#22d3ee`) / 바이올렛(`#a855f7`)이 검정 위에서 발광 | "사이버펑크 기본값". 게이밍·개발자 툴 브리프가 아닌데 나오면 즉시 티가 남 | 다크가 필요하면 **저채도 액센트 1개**. 발광 대신 **명도 차이**로 위계를 만들어라 |
| **A-05** | **컬러 글로우 / 박스섀도.** `box-shadow: 0 0 80px rgba(139,92,246,.5)` 같은 큰 컬러 그림자 | 깊이감을 색으로 가짜로 만든 것. 실제 광원 논리가 없음 | 그림자는 중립색으로, 작게. `0 1px 2px rgba(0,0,0,.06)` + `0 8px 24px rgba(0,0,0,.08)` 2단 구성 |
| **A-06** | **방사형 그라디언트 헤일로** — 히어로 뒤 떠 있는 보라·파랑 원형 발광 오브 | 구성을 못 잡았을 때의 회피 수단. 정보를 담지 않는 픽셀 | 배경은 비워두거나 **실제 콘텐츠**(제품 스크린샷, 타입)로 채워라 |
| **A-07** | **순백 `#ffffff` / 순흑 `#000000`** 배경·텍스트 | 아무 결정도 하지 않았다는 뜻. 대비 눈부심과 텍스트 번짐도 유발 | 오프화이트 `#FAFAF7` / 잉크 `#111014` 처럼 살짝 틀어라. 브랜드 hue를 24% 섞으면 더 좋다 |
| **A-08** | **Tailwind 기본 토큰 그대로**`slate-900`, `gray-500`, `indigo-600`, `emerald-500` | 수학적으로 정돈됐지만 **누구나 알아본다**. 이건 팔레트가 아니라 미결정 상태 | `tailwind.config`의 색을 **교체**하라(확장이 아니라). `ink-900`, `ember-600` 같은 프로젝트 고유 이름 |
| **A-09** | **의미 없는 색 이름 토큰**`purple-500`을 코드 전체에서 직접 호출 | 브랜드가 바뀌면 전부 다시 찾아야 함. 색이 역할을 못 가짐 | `--color-action-primary`, `--color-surface-elevated`, `--color-text-secondary` 같은 **의미 토큰** |
| **A-10** | **다크 테마에서 본문 대비가 겨우 통과하거나 미달**`#0f172a``#94a3b8` | Krebs가 별도 패턴으로 잡을 만큼 흔한 기능적 결함 | 본문 4.5:1(WCAG) 또는 APCA **Lc ≥ 75** 확보. 다크에서는 순백 대신 `#E8E6E3` 정도로 눈부심 완화 |
| **A-11** | **그라디언트 텍스트** — 헤드라인·지표 숫자에 `background-clip: text` 그라디언트 | 가독성과 스캔성을 깎으면서 정보는 0. 스크린샷·OG 이미지에서도 깨짐 | 단색. 강조가 필요하면 **크기·굵기·여백**으로 |
| **A-12** | **크림/베이지 배경(`#FDF8F3`, `#F5F0E8`)을 "고급스러움"의 기본값으로** | 202526년 들어 새로 생긴 슬롭. 보라의 대체 기본값이 됐다 | 크림을 쓸 거면 **왜 크림인지** 브리프와 연결하고, 텍스트·액센트를 그에 맞춰 재설계하라 |
| **A-13** | **색상 hue 4개 이상** 사용 | 결정을 못 한 상태의 전형 | hue 3개 이하. 면적 배분 60(지배)/30(중립)/10(강조) |
---
## B. 타이포그래피 시그니처
| ID | 시그니처 | 왜 문제인가 | 대신 |
|---|---|---|---|
| **B-01** | **Inter를 이유 없이 기본값으로.** 특히 중앙 정렬 히어로 헤드라인에 | AI 인터페이스의 기본 서체. Krebs 16패턴 1번 항목 | Satoshi / Switzer / DM Sans / Work Sans. Inter는 **초고밀도 다국어 UI 같은 명확한 이유**가 있을 때만 |
| **B-02** | **Space Grotesk + Instrument Serif + Geist 조합** | 이 셋의 반복 조합이 생성 지문으로 특정됨 | 셋 중 하나만 쓰거나, 파운드리를 바꿔라 (Fontshare, Velvetyne) |
| **B-03** | **헤드라인 한 단어만 세리프 이탤릭** — 나머지는 sans (`Build <em>better</em> products`) | 가장 널리 퍼진 "성의 표시" 관용구. 지금은 성의가 아니라 지문 | 강조는 **줄바꿈·크기·색·여백**으로. 굳이 서체를 섞으려면 문장 전체 단위로 |
| **B-04** | **페이지 전체에 폰트 패밀리 1개** | 위계를 크기로만 만들게 되어 밋밋해짐 | 디스플레이 1 + 본문 1의 2개 조합. 성격 차이를 크게 (세리프+그로테스크 등) |
| **B-05** | **타입 스케일이 평평함** — 16 / 18 / 20 / 24처럼 단계 간 비율이 1.15 미만 | 위계가 안 서고 모든 게 똑같이 중요해 보임 | 비율 1.25 또는 1.333. **최대/본문 비 4배 이상** (17 → 68) |
| **B-06** | **타입 스케일 단계가 8개 이상** | 통제 실패. 값이 우연히 결정됐다는 뜻 | 35단계로 제한하고 각 단계에 역할 이름을 붙여라 |
| **B-07** | **모든 섹션 라벨이 대문자 + 자간 넓힘** (`FEATURES`, `HOW IT WORKS`) | 검출률 10.5%. 얻지 않은 권위를 빌리는 장치 | 라벨을 없애거나, 소문자로 쓰거나, **라벨 없이 헤드라인만**으로 섹션을 구분 |
| **B-08** | **히어로 = 작은 pill 배지 + 그 아래 거대 헤드라인** (`✨ Now in beta` + H1) | Krebs 16패턴 중 "badge above H1". 가장 알아보기 쉬운 구조 지문 | 배지를 지워라. 정말 필요한 정보면 문장 안에 넣거나 내비 옆에 둬라 |
| **B-09** | **`_01_ _02_ _03_` 형식의 작은 번호 섹션 라벨** | 에디토리얼 흉내인데 실제 구조는 없음 | 번호가 **순서를 의미할 때만** 쓴다. 장식용 번호는 삭제 |
| **B-10** | **본문 letter-spacing 0.05em 이상** | 글자 그룹이 흩어져 단어 인식이 느려짐 | 본문 자간 0. 대문자 소형 라벨에만 +0.08em |
| **B-11** | **대형 헤드라인에 과도한 음수 자간** (-0.06em 이상) | 글자가 서로 먹힘. "디자인한 척"의 부작용 | -0.02em ~ -0.04em 범위. **한글은 음수 자간 금지** |
| **B-12** | **line-height 1.3 미만의 본문** | 답답하고 읽기 어려움 | 영문 본문 1.51.7, **한글 본문 1.61.8** |
| **B-13** | **본문 12px 이하** | 접근성 실패이자 밀도를 못 잡은 신호 | 본문 최소 14px, 권장 1618px |
| **B-14** | **한글 폰트를 지정하지 않아 시스템 기본으로 떨어짐** (맑은 고딕 / Apple SD 산돌고딕) | 한국어 사이트에서 즉시 미완성으로 읽힘 | `Pretendard` 또는 `본고딕` 명시. `word-break: keep-all` 함께 설정 |
| **B-15** | **모노스페이스를 장식으로 사용** — 코드가 아닌 라벨·캡션에 `font-mono` | "테크 느낌"의 저비용 흉내 | 모노스페이스는 **코드·데이터·식별자**에만. 톤이 필요하면 그로테스크의 폭 좁은 컷을 써라 |
---
## C. 레이아웃 · 구조 시그니처
| ID | 시그니처 | 왜 문제인가 | 대신 |
|---|---|---|---|
| **C-01** | **표준 페이지 골격**: 히어로 → 3열 피처 → 로고월 → 요금제 → FAQ → 푸터 | shadcn/ui 예제, Tailwind UI 스크린샷, Vercel 템플릿의 순서 그대로. 구조를 설계하지 않았다는 증거 | 섹션 순서를 **브리프의 설득 논리**로 재배열. 예: 문제 제시 → 실제 사용 화면 → 반론 처리 → 가격. FAQ를 쓸 거면 실제로 받은 질문으로 |
| **C-02** | **중앙 정렬 히어로 (텍스트 가운데 + CTA 2개 + 아래 스크린샷)** | 가장 안전해서 가장 흔한 구조 | 비대칭 그리드(5:7, 7:5), 좌측 정렬 대형 타입, 또는 텍스트를 화면 하단 3분의 1로 내리기 |
| **C-03** | **정확히 3열, 균등 폭 피처 카드** | 콘텐츠가 3개여서가 아니라 **3이 예쁘게 떨어져서** 3인 것 | 항목 수를 콘텐츠가 정하게 하라. 2개면 2개, 5개면 5개. 폭도 중요도에 따라 다르게 |
| **C-04** | **아이콘이 카드 상단 중앙에 있는 피처 카드** (둥근 사각 아이콘 타일 + 제목 + 2문장) | "universal AI feature-card template". 가장 확실한 단일 지문 | 아이콘을 없애고 **숫자·스크린샷·실제 UI 조각**으로 대체. 아이콘을 쓸 거면 좌측 인라인 배치 |
| **C-05** | **카드 좌측 34px 컬러 스트립** (`border-l-4 border-purple-500`) | 텍스트의 em-dash에 맞먹는 신뢰도의 AI 지문 | 좌측 스트립 삭제. 구분이 필요하면 배경 톤 차이 또는 여백 |
| **C-06** | **카드 안의 카드 안의 카드 (cardocalypse)** | 시각적 소음. 깊이가 정보와 무관 | 중첩 최대 1단계. 안쪽은 카드가 아니라 **구분선 또는 여백** |
| **C-07** | **번호 매긴 1·2·3 단계 섹션** | 검출률 9.4% | 단계가 실제로 순서일 때만. 그 경우에도 번호 대신 **화면 캡처 3장**이 낫다 |
| **C-08** | **지표 배너 행** (`10,000+ users · 99.9% uptime · 4.9★`) | 근거 없는 숫자 34개 나열. 검증 불가라 신뢰를 오히려 깎음 | 숫자 **1개**만, 출처와 함께. 없으면 쓰지 마라 |
| **C-09** | **모든 여백이 같은 값** — 전부 `p-6`, 전부 `gap-4` | 리듬이 없어 강약이 사라짐 | 8pt 그리드 위에서 46종의 여백 값. 섹션 간 : 요소 간 = 대략 1:5 |
| **C-10** | **섹션마다 같은 상하 패딩** (`py-20` 반복) | 페이지가 균질해져 어디가 중요한지 알 수 없음 | 중요한 섹션에 더 많은 여백. 여백이 곧 강조다 |
| **C-11** | **벤토 그리드를 기본 선택지로** | 2026년 기준 벤토는 표준이라 차별화가 아니다. "고민 안 했음"의 새 신호 | 벤토는 **타일 크기 차이가 정보 위계를 반영할 때만**. 아니면 단순 리스트가 낫다 |
| **C-12** | **콘텐츠가 뷰포트 가장자리에 붙음** — 컨테이너 패딩 없이 텍스트가 화면 끝에 닿음 | 모바일에서 특히 조악해 보임 | 모바일 1624px, 데스크톱 2480px 좌우 패딩 |
| **C-13** | **본문 컬럼이 화면 전체 폭** — 1440px에 한 줄 텍스트 | 영문 100자 이상 줄이 되어 읽기가 무너짐 | 텍스트 컬럼 `max-width: 65ch` (영문) / 국문은 2540자 폭 |
| **C-14** | **푸터가 링크 4열 + 소셜 아이콘 + 카피라이트** 로만 구성 | AI가 가장 성의 없이 만드는 곳 | 푸터에 실제 정보를 넣어라 (연락처, 주소, 사업자 정보, 뉴스레터). 링크가 4개뿐이면 4열로 만들지 마라 |
---
## D. 컴포넌트 시그니처
| ID | 시그니처 | 왜 문제인가 | 대신 |
|---|---|---|---|
| **D-01** | **`rounded-2xl shadow-lg p-6` 를 손대지 않고 그대로 사용** | shadcn/ui 기본값. AI 에이전트가 복붙하도록 설계된 값 | radius를 하나의 어휘로 통일하되 **프로젝트 고유값**으로 (예: 4px 또는 12px). 큰 그림자 대신 1px 보더 + 배경 톤 차이 |
| **D-02** | **모든 요소가 동일한 border-radius 16px** | radius가 결정이 아니라 기본값임을 드러냄 | radius 어휘 2개 (예: 컨테이너 12px, 인터랙티브 요소 8px). 혹은 0으로 통일하고 각을 살려라 |
| **D-03** | **radius 24px 이상의 과도하게 둥근 카드** | 블롭처럼 보이며 정보 밀도를 낮춤 | 1216px 이하 |
| **D-04** | **1px 회색 보더 + 넓게 퍼진 그림자의 동시 사용** | 두 가지 깊이 표현을 겹친 것. 광원 논리 없음 | 하나만 선택. 보더로 갈 거면 그림자 제거 |
| **D-05** | **글래스모피즘을 전면에 사용** (`backdrop-blur` 카드 다수) | 실기기에서 **FPS 1530% 하락**. 2022년 유행의 잔재 | 내비게이션 바·모달 정도로 제한. 카드에는 쓰지 마라 |
| **D-06** | **이모지를 아이콘 대신 사용** — 사이드바·피처 카드의 🚀 ⚡ 🎯 ✨ | Krebs 16패턴 중 "emoji icons in nav". 즉각적인 아마추어 신호 | 아이콘 세트 하나를 정해 일관되게 (Lucide, Phosphor, Radix). 이모지는 카피 안에서만 |
| **D-07** | **버튼이 항상 2개, 나란히** (`Get started` + `Learn more`) | 주 행동이 무엇인지 정하지 못했다는 뜻 | 주 CTA **1개**. 보조는 텍스트 링크로 격하 |
| **D-08** | **CTA 버튼이 보라·인디고 계열** | 검출률 10.7%로 단일 최다 | 브랜드 색. 없으면 중립 대비가 가장 강한 색(잉크/화이트 반전) |
| **D-09** | **로고월** — 회색조 로고 68개 일렬 배치 | 로고를 나열하는 것 자체가 신호를 못 만듦. 대부분 가짜거나 무관 | 실제 고객이면 **한 곳의 사례를 문장으로**. 없으면 섹션 자체를 삭제 |
| **D-10** | **아바타가 이니셜 원형인 텍스트 후기 3개** | 검증 불가한 후기는 신뢰를 깎는다 | 실명 + 직함 + **원문 링크**(리뷰 플랫폼, 트윗). 없으면 넣지 마라 |
| **D-11** | **아코디언 FAQ 6개, 질문이 전부 가상** ("How does it work?") | 실제로 받은 질문이 아니라 채운 것 | 실제 문의 3개. 답변에 구체적 숫자·조건 포함 |
| **D-12** | **요금제 3열 카드 + 가운데에 "Most popular" 배지** | 가장 재현율 높은 SaaS 템플릿 | 표 형식 비교, 단일 가격, 또는 **가격 계산기**. 3열 카드가 필수는 아니다 |
| **D-13** | **펄스 애니메이션 상태 점** (초록 원이 깜빡이며 "All systems operational") | 정적 정보에 장식 애니메이션을 붙인 것 | 상태가 실제로 바뀔 때만 애니메이션. 아니면 정적 점 |
| **D-14** | **자동 스크롤 마퀴** — 로고·후기·태그가 끝없이 흐름 | 콘텐츠를 가리고 읽기를 방해하며 주의를 강탈 | 정적 그리드. 정말 많으면 페이지네이션 |
| **D-15** | **hover 시 아무 변화 없거나, 전 요소가 동일하게 `scale(1.02)`** | 인터랙션을 설계하지 않았다는 신호 | 요소마다 다른 반응 (링크는 밑줄, 카드는 배경 톤, 버튼은 명도). hover는 **가장 먼저** 설계한다 |
| **D-16** | **장식용 깜빡이는 커서** — 편집 불가능한 히어로 카피 뒤의 `|` | 타이핑 흉내. 정보 없음 | 삭제 |
---
## E. 모션 시그니처
| ID | 시그니처 | 왜 문제인가 | 대신 |
|---|---|---|---|
| **E-01** | **모든 요소에 동일한 fade-in-up** (`opacity 0→1`, `translateY 20px→0`, 전부 같은 delay) | 모션 언어가 없다는 뜻. 페이지가 계속 "떠오르기만" 함 | 모션은 **중요한 것에만**. 나머지는 즉시 노출. 순차 등장이 필요하면 stagger 4060ms |
| **E-02** | **인터페이스 요소에 bounce / elastic 이징** | 2010년대 감성. 즉시 촌스러움 | `ease-out` 또는 `cubic-bezier(0.2, 0, 0, 1)` |
| **E-03** | **이미지 hover 시 `scale` 또는 `rotate`** | 생성 UI의 반복 지문 | 이미지 자체는 두고 **캡션·오버레이·보더**를 변화시켜라 |
| **E-04** | **duration이 전부 300ms** | 마이크로와 연출을 구분하지 못함 | 마이크로 100200 / 트랜지션 200400 / 연출 6001200ms |
| **E-05** | **스크롤 reveal 실패 시 콘텐츠가 `opacity: 0`으로 남음** | JS 실패·prefers-reduced-motion 시 빈 페이지가 됨 | 기본 상태를 visible로 두고 JS가 **숨긴 뒤 보여주는** 방식. 또는 CSS scroll-driven animation |
| **E-06** | **`prefers-reduced-motion` 미대응** | 접근성 실패이자 성의 없음의 증거 | 미디어 쿼리로 모션 제거 경로를 반드시 제공 |
| **E-07** | **패럴랙스를 전 섹션에 적용** | 스크롤 감각이 어긋나고 성능이 떨어짐 | 한 섹션에만, 이동량 작게 (1020px) |
| **E-08** | **히어로에 Spline / 3D 씬을 이유 없이 삽입** | JS 런타임 **800KB2MB**. 모바일 4G에서 Core Web Vitals 실패 | 3D는 브리프가 요구할 때만. 필요하면 정적 렌더 이미지 + 미세 모션으로 대체 |
| **E-09** | **로딩 화면 / 프리로더 카운터** | 실제로 로딩할 게 없는데 대기를 만듦 | 삭제. 진짜 무거우면 스켈레톤 |
---
## F. 카피 · 문장 시그니처
**AI 티는 시각보다 문장에서 먼저 난다.** 이 섹션이 가장 치명적이다.
| ID | 시그니처 | 왜 문제인가 | 대신 |
|---|---|---|---|
| **F-01** | **`It's not X, it's Y` / `단순한 X가 아니라 Y입니다`** 구문 | ChatGPT의 최대 지문. 400단어 글에 3번씩 나옴. 독자가 즉시 이탈 | 그냥 Y를 말해라. 대조가 필요하면 구체적 비교 대상을 실명으로 |
| **F-02** | **`Streamline / Empower / Supercharge / Unlock / Leverage / Seamless / Elevate`** | 아무 제품에나 붙는 동사. 정보량 0 | 제품이 실제로 하는 동작 동사 (`정산한다`, `병합한다`, `4일을 6시간으로 줄인다`) |
| **F-03** | **`world-class / cutting-edge / enterprise-grade / best-in-class / state-of-the-art`** | 자기 평가 형용사는 증거가 아니다 | 증거로 대체 — 인증명, 벤치마크 수치, 고객사 실명 |
| **F-04** | **`Build the future of X` / `Your all-in-one platform` / `Scale without limits`** 류 히어로 헤드라인 | 경쟁사 이름으로 바꿔도 성립함 | **경쟁사 치환 테스트**를 통과하는 문장으로. 예: Stripe의 "Financial infrastructure for the internet" |
| **F-05** | **em-dash(—) 과다 사용**, 특히 한 문단에 2회 이상 | AI 문장 리듬의 대표 지문 | 마침표로 끊거나 쉼표로. 한국어에서는 특히 부자연스럽다 |
| **F-06** | **스타카토 3연타** (`No fluff. No filler. No BS.` / `빠르게. 정확하게. 간단하게.`) | 리듬으로 내용 없음을 감추는 장치 | 한 문장으로 구체적으로 |
| **F-07** | **`In today's fast-paced digital landscape...`** 로 시작하는 도입 | 아무 말도 하지 않는 문단 | 첫 문장부터 본론. 도입 문단 삭제 |
| **F-08** | **헤지 표현** (`may help you`, `can potentially`, `~할 수 있습니다`) | 확신 없음이 곧 신뢰 없음 | 단정하거나, 조건을 명시하라 (`10명 이하 팀에서는`) |
| **F-09** | **레이블·서브레이블·헬퍼텍스트가 같은 말을 3번** (`이메일` / `이메일 주소` / `이메일 주소를 입력하세요`) | 화면 소음 | 하나만 남긴다 |
| **F-10** | **CTA가 `Get Started` / `Learn More` / `시작하기`** | 무엇이 시작되는지 알 수 없음 | 결과를 말하는 CTA (`무료로 30일 써보기`, `가격표 보기`, `데모 예약`) |
| **F-11** | **숫자가 전부 어림수** (`10,000+ users`, `99.9% uptime`, `50% faster`) | 검증 불가한 숫자는 없느니만 못함 | 정확한 수치와 측정 조건 (`평균 응답 240ms, 2026년 7월 p95 기준`) |
| **F-12** | **모든 헤딩이 명사구로 통일** (`Powerful Features`, `Simple Pricing`) | 헤딩이 정보를 전달하지 않음 | 헤딩에 주장을 담아라 (`엑셀 없이 정산이 끝난다`) |
| **F-13** | **`~를 통해`, `~에 대한`, `~에 있어서` 번역투** (한국어) | 영문 AI 카피를 기계 번역한 티 | 능동 한국어로. `~로`, `~의`, `~에서` |
| **F-14** | **이모지로 시작하는 불릿 리스트** (`✅ 빠른 속도`) | 정보 위계를 이모지로 대체한 것 | 일반 불릿 또는 없애고 문장으로 |
**F 섹션 통합 테스트 — 경쟁사 치환**: 카피에서 제품·회사 이름을 경쟁사 이름으로 바꿔 읽는다.
**여전히 자연스러우면 그 카피는 아무것도 말하지 않은 것이다.**
---
## G. 이미지 · 아이콘 · 일러스트 시그니처
| ID | 시그니처 | 왜 문제인가 | 대신 |
|---|---|---|---|
| **G-01** | **랩탑 앞에서 웃는 다국적 팀 스톡 사진** (밝은 오픈 오피스) | 방문자는 스톡을 알아보고, **신뢰도가 실제로 하락**한다는 실측이 있음 | 실제 팀 사진, 실제 작업 공간, 또는 사진 없이 타입으로 |
| **G-02** | **떠 있는 3D 추상 블롭 / 기하 도형** | 콘텐츠 부재를 덮는 장식. 브랜드와 무관 | 제품 실제 화면, 데이터 시각화, 또는 여백 |
| **G-03** | **AI 생성 일러스트** — "약간 지나치게 매끄럽고 지나치게 대칭인" | 손 개수·글자 깨짐 같은 결함이 아니어도 톤에서 티가 남 | 일관된 일러스트 시스템을 직접 정의하거나, 일러스트를 아예 쓰지 않는다 |
| **G-04** | **일반 SVG 도형을 조합한 히어로 그래픽** | 플레이스홀더 클립아트처럼 읽힘 | 제품 UI 조각을 실제로 렌더해 보여줘라 |
| **G-05** | **손으로 그린 듯한 조악한 SVG 마스코트** | 의도된 러프함이 아니라 그냥 못 그린 것으로 읽힘 | 마스코트를 쓸 거면 제대로 만들거나 쓰지 마라 |
| **G-06** | **아이콘 세트가 섞임** — 라인·필·이모지가 한 화면에 | 시스템이 없다는 증거 | 세트 하나 고정. 굵기·크기·광학 정렬 통일 |
| **G-07** | **`src`가 비어 있거나 깨진 이미지 태그** | 생성 코드가 검증 없이 배포된 흔적 | 배포 전 이미지 로드 전수 확인 |
| **G-08** | **모든 이미지가 같은 종횡비의 둥근 사각형** | 그리드를 이미지에 강제한 것 | 콘텐츠에 맞는 비율. 풀블리드 1장을 섞으면 리듬이 생긴다 |
| **G-09** | **반복 그라디언트 줄무늬를 표면 장식으로** | 의미 없는 텍스처 | 실제 질감(필름 그레인, 종이 스캔) 또는 무지 |
---
## H. 품질 · 접근성 결함 (AI 생성물에서 특히 잦음)
| ID | 시그니처 | 왜 문제인가 | 대신 |
|---|---|---|---|
| **H-01** | **헤딩 레벨 건너뜀** (h1 → h3) | 문서 아웃라인 파손. 스크린리더·SEO 영향 | 순차적 헤딩. 크기는 CSS로 조절 |
| **H-02** | **본문 대비 WCAG AA 미달** (본문 4.5:1, 대형 3:1 미만) | 기능적 결함 | 대비 검증을 빌드에 포함. APCA Lc ≥ 75 |
| **H-03** | **포커스 링 제거** (`outline: none`만 있고 대체 없음) | 키보드 사용자가 조작 불가 | `:focus-visible`에 명확한 링. 브랜드 색으로 예쁘게 만들어도 된다 |
| **H-04** | **`p-2` 미만의 좁은 패딩으로 텍스트가 컨테이너에 붙음** | 조악함의 직접 원인 | 최소 1216px 내부 패딩 |
| **H-05** | **잡히지 않은 스크립트 에러**로 인터랙션 파손 | 검증 없이 생성·배포된 흔적 | 콘솔 클린 상태를 배포 조건으로 |
| **H-06** | **터치 타깃 44×44px 미만** | 모바일에서 못 누름 | 최소 44px, 간격 8px 이상 |
| **H-07** | **폼에 `label` 없이 placeholder만** | 입력 시작하면 라벨이 사라짐. 접근성 실패 | 항상 `label`. placeholder는 예시용 |
| **H-08** | **`alt` 속성 없거나 `image`, `photo` 같은 무의미한 값** | 스크린리더·SEO 실패 | 이미지가 전달하는 정보를 문장으로. 장식이면 `alt=""` |
| **H-09** | **다크/라이트 전환 시 일부 컴포넌트만 대응** | 토큰 없이 하드코딩했다는 증거 | 색은 전부 토큰 경유. 하드코딩 hex 금지 |
| **H-10** | **모바일에서 가로 스크롤 발생** | 폭 계산 없이 고정값을 쓴 결과 | `max-width: 100%`, `overflow-x: hidden`은 증상 은폐이므로 원인을 찾아라 |
| **H-11** | **폰트 로딩 시 FOIT (텍스트가 안 보이는 구간)** | 체감 성능 하락 | `font-display: swap` + 서브셋 + preload |
---
## I. 코드 지문 (grep으로 잡을 수 있는 것)
배포 전 아래 문자열을 검색해서 걸리면 재검토한다.
```
# 색
indigo-|violet-|purple-|fuchsia-
#6366f1|#818cf8|#a855f7|#8b5cf6|#c4b5fd|#a78bfa|#22d3ee
from-purple|to-blue-|from-violet|via-purple
bg-slate-900|bg-gray-900|text-gray-400
#ffffff|#000000 (배경/텍스트로 사용된 경우)
# 컴포넌트 기본값
rounded-2xl|rounded-3xl
shadow-lg|shadow-xl|shadow-2xl
border-l-4|border-t-4
backdrop-blur
# 타이포
font-family:.*Inter
Space Grotesk|Instrument Serif|Geist
uppercase tracking-wide(r|st)?
# 카피
Get Started|Learn More|Empower|Streamline|Supercharge|Seamless
world-class|cutting-edge|enterprise-grade|best-in-class
It's not .* it's
— (한 문단에 2개 이상)
# 이모지 아이콘 (JSX/HTML 텍스트 노드 안)
🚀|⚡|✨|🎯|🔥|💡|✅
```
---
## J. 자가 채점표
작업 완료 전 이 표를 채워라.
| 카테고리 | 걸린 항목 ID | 조치 |
|---|---|---|
| A 컬러 | | |
| B 타이포 | | |
| C 레이아웃 | | |
| D 컴포넌트 | | |
| E 모션 | | |
| F 카피 | | |
| G 이미지 | | |
| H 품질 | | |
**판정 기준**
| 걸린 개수 | 판정 |
|---|---|
| 01 | 통과 |
| 23 | 해당 항목만 수정 후 재검 |
| **4 이상** | **폐기하고 02번 문서 §6 절차부터 다시** (Krebs 기준 "heavy slop") |
---
## K. 한 줄 요약
> AI 티는 **못 만들어서** 나는 게 아니라 **결정을 안 해서** 난다.
> 보라 그라디언트, Inter, 3열 아이콘 카드, `rounded-2xl shadow-lg`, "Get Started"는 전부 **미결정의 기본값**이다.
> 각 축마다 하나씩 **의도적으로 다른 값을 고르고, 그 이유를 한 문장으로 말할 수 있으면** 지문은 사라진다.