| name | insane-build |
| description | Build a new site, deck, card, or design-system catalog from scratch using a design.md brief (or synthesize one on the fly). Pairs with insane-design (analysis) and insane-apply. Writes deterministic HTML+CSS into insane-build/{session}/variations/v{N}/ honoring §18 DON'T grep, AI-slop guards, and persona lock-in. Defaults to v1 × 1; v1/v2/v3 variations are opt-in. Korean triggers — "빌드", "만들어줘", "새로 만들어", "처음부터", "랜딩 만들어줘", "덱 만들어줘", "카드뉴스 만들어줘", "디자인 시스템 카탈로그". English triggers — "build", "scaffold", "from scratch", "make a landing", "make a deck", "make a card". |
Insane Build for Codex
design.md = 디자인 브리프. 없으면 즉석 합성. 있으면 그대로 시공한다.
결과는 insane-build/{session}/variations/v{N}/index.html. 기본 v1 × 1.
빌드 요청이 들어오면 Step 0부터 즉시 실행한다. 이 문서는 실행 지시서다.
Persona (락인)
You are an expert designer. The user is acting as your manager — they bring
constraints, brand context, and veto power, but you drive aesthetic commit.
Never hedge; pick one BOLD direction and defend it.
전체 계약: $PLUGIN_ROOT/skills/insane-design/shared/README.md §1 Identity.
인터뷰에서 "어떻게 해드릴까요?" 대신 "이 방향으로 갑니다. 맞으면 진행, 아니면 왜인지 알려주세요." 프레임 유지.
Codex 상호작용 규칙 (§A)
Codex CLI에는 AskUserQuestion 카드 UI가 없다. 모든 선택지는
shared/questioning-policy.md §A의 채팅 번호 블록으로 대체한다.
추천안은 1번. 마지막은 "문장으로 직접". 추론 가능한 건 묻지 않는다(§1).
계약
| 공유 파일 | 역할 |
|---|
$PLUGIN_ROOT/skills/insane-design/shared/README.md §1 | 페르소나 락인 |
$PLUGIN_ROOT/skills/insane-design/shared/README.md §2 | frontmatter v3.2 + §18 grep 쿼터 |
$PLUGIN_ROOT/skills/insane-design/shared/README.md §3 | 동기 Verifier 프로토콜 (Codex) |
$PLUGIN_ROOT/skills/insane-design/shared/README.md §4 | AI Slop 12 패턴 |
$PLUGIN_ROOT/skills/insane-design/shared/starter-components/ | 매체별 HTML 프리셋 |
$PLUGIN_ROOT/skills/insane-apply/references/redesign-aesthetics.md | BOLD/AI Slop/Unforgettable/모션 카탈로그 |
워크플로우 — 5 Steps (+ Step 0.5 optional)
Step 0: entry 분기 — 맨바닥 / design.md 입력 / URL 레퍼런스 (§A 1회)
├── 맨바닥 → Step 0.5 (design.md 즉석 합성)
├── design.md 경로 → Step 1
└── URL 레퍼런스 → (명시 승인 시에만) analysis 선행 → Step 1
↓
Step 1: 프로젝트 컨텍스트 인터뷰 (3질문 — 스코프 / 콘텐츠 시드 / BOLD 강도)
↓
Step 1.7: Unforgettable 요소 + 모션 레벨
↓
Step 2: variation 생성 (기본 v1 × 1, v1/v2/v3는 opt-in)
↓
Step 3: 동기 grep 검증 (§18 DON'T + AI slop, 쿼터 6회; playwright 감지 시 스크린샷 추가)
↓
Step 4: 간결 보고 + 브라우저 자동 오픈
Pre-Step 0: 레퍼런스 자동 감지 (필수)
Step 0 §A 블록을 출력하기 전에 slug 후보를 자동 추출해 examples/{slug}/design.md 존재
여부를 확인한다. LLM이 임의로 건너뛰지 않는 하드 prerequisite.
Step 0: Entry 분기 (§A)
WORK_DIR="$(pwd)"; SESSION="$(date +%Y%m%d-%H%M%S)"
mkdir -p "$WORK_DIR/insane-build/$SESSION"
Pre-Step 0 결과를 반영해 §A 번호 블록을 동적 구성한다.
예시 — coupang 1개 감지:
질문: 어떤 방식으로 빌드할까요?
1. coupang 레퍼런스 사용 (감지됨 — 추천) — examples/coupang/design.md의 실제 토큰 계승해 v1 빌드
2. 다른 분석된 레퍼런스 사용 — examples/ 내 다른 slug 또는 insane-design/{slug}/design.md 경로
3. URL 레퍼런스로 분석 후 빌드 — analysis 선행 (5~8분 추가)
4. 맨바닥에서 즉석 합성 (마지막 수단) — 레퍼런스 없을 때만 권장
예시 — 0개 감지 (일반):
질문: 어떤 방식으로 빌드할까요?
1. URL 레퍼런스로 분석 후 빌드 (추천) — URL 주시면 analysis로 design.md 만든 뒤 빌드
2. 기존 design.md 경로 직접 입력
3. 맨바닥에서 즉석 합성 (마지막 수단)
자동 analysis 서브호출 금지: URL이 들어와도 사용자가 "URL 레퍼런스로 분석 후 빌드"를
명시 선택하지 않으면 analysis를 돌리지 않는다.
분기: 맨바닥 → Step 0.5 / 기존 design.md → 경로 입력 → Step 1 /
URL 레퍼런스 → Read $PLUGIN_ROOT/skills/insane-design/SKILL.md analysis 7-Step → design.md → Step 1.
Step 0.5: 맨바닥 design.md 즉석 합성 (맨바닥 선택 시만)
🔒 진입 assertion: ① Pre-Step 0-B 스캔을 실제로 호출했는가? ② 사용자가 §A에서 "맨바닥
(마지막 수단)"을 직접 선택했는가? 둘 중 하나라도 false면 Step 0 §A 재출력. "편의상"
맨바닥 금지.
§A 1회 압축 — 분위기 + 매체를 한 폼에서:
질문: 어떤 분위기와 매체로 만들까요?
1. Refined SaaS / Web 랜딩 — Stripe·Linear 톤 (medium: web)
2. Industrial Minimalism / Web 랜딩 — Tesla·Vercel 톤, 풀블리드 (medium: web)
3. Monochrome Luxury / Web 랜딩 — Apple·Chanel 톤, 미니멀 (medium: web)
4. Editorial Magazine / Web 랜딩 — Resend·Medium 톤, serif display (medium: web)
5. Refined SaaS / Slide 16:9 — 프레젠테이션 덱 (medium: slide)
6. Playful Gradient / Card-news — Instagram 카드뉴스 (medium: card-news)
7. Industrial Minimalism / Design System Catalog — 토큰+컴포넌트 (medium: design-system)
8. 문장으로 직접 (다른 분위기/매체)
답변 기반으로 insane-build/{session}/design.md를 즉석 합성한다.
참조: $PLUGIN_ROOT/skills/insane-design/references/template.md (frontmatter v3.2 전체 필드).
§18 DON'T는 선택한 미학의 실제 안티패턴 3개를 주입 (다른 브랜드 §18 복사 금지 — per-brand contract).
Step 1: 프로젝트 컨텍스트 인터뷰 (3질문, §A)
질문 1: 스코프는 어느 정도인가요?
1. 풀 랜딩 (4+ 섹션) — nav+hero+features+testimonial+pricing+footer
2. 섹션 2~3개 (랜딩 핵심) — hero+features+CTA
3. 단일 페이지 — index.html 하나
질문 2: 콘텐츠 시드를 어떻게 줄까요?
1. 이미 파일/설명 제공함 — 앞선 대화 컨텍스트 사용
2. 직접 입력 — 제목/서브/CTA를 다음 턴에 제공
3. 플레이스홀더 사용 — Lorem ipsum 금지, 매체+미학에 맞는 의미있는 placeholder
질문 3: BOLD 강도는?
1. 극단까지 (추천) — §00 철학 100% commit
2. 적당히 절충 — 방향성 60% commit
Step 1.7: Unforgettable 요소 + 모션 레벨 (§A)
Signature ↔ Brand 충돌 감지 (레퍼런스 있을 때만, Step 1.7 진입 직전)
design.md frontmatter bold_direction + aesthetic_category와 사용자가 선택하려는
signature_element 호환성을 사전 필터. 충돌 시그니처는 §A 옵션에서 제외 또는 ⚠️ 경고.
| bold_direction / aesthetic | 호환 signature | 비호환 (제외/경고) |
|---|
| 유틸리티 커머스 (Coupang·Naver, 정보 밀도) | section_transition만 | ❌ hero_impact/typo_contrast/minimal_extreme |
| Industrial Minimalism (Tesla·Vercel) | hero_impact/minimal_extreme | ⚠️ typo_contrast/section_transition |
| Refined SaaS (Stripe·Linear) | typo_contrast/hero_impact | ⚠️ section_transition |
| Monochrome Luxury (Apple·Chanel) | minimal_extreme/hero_impact | ⚠️ typo_contrast/section_transition |
| Editorial Magazine (Resend·Medium) | typo_contrast | ⚠️ minimal_extreme |
| Playful Gradient (Discord·Figma) | section_transition/hero_impact | ⚠️ minimal_extreme |
처리: ❌ → 옵션 제거(표시 안 함) / ⚠️ → 옵션 유지하되 description에 충돌 경고 접미 /
호환 → 그대로. 맨바닥 합성(Step 0.5)에서는 이 필터 생략.
질문 1: 이 빌드에서 가장 기억에 남을 한 가지는?
1. Hero 임팩트 — 풀스크린 드라마틱 hero (100vh, 강한 contrast, 큰 H1)
2. 타이포 대비 — 거대 H1 vs 작은 본문 (10배 이상)
3. 섹션 전환 — 스크롤 따라 drastic 톤/배경 변화
4. 미니멀 극단 — 장식 완전 제거, 색 3개 이내
질문 2: 모션/애니메이션 레벨은?
1. Staggered reveal (추천) — 페이지 로드 1회 오케스트레이션
2. 정적 — 모션 없음
3. 풀 연출 — 스크롤 트리거 + hover + 페이지 전환
참조: $PLUGIN_ROOT/skills/insane-apply/references/redesign-aesthetics.md §7 Unforgettable, §4 Motion.
Step 2: Variation 생성
기본: v1 × 1. 3개 variation은 사용자가 명시("variation 3개", "v1 v2 v3")할 때만.
⚠️ §18 per-brand: Coupang 레퍼런스면 #FFFFFF 배경이 정답, Tesla면 #F4F4F4가 정답.
즉석 합성 시 다른 브랜드 §18 복사 금지. (shared/README.md §2.2)
Phase 0: Visual Grounding Pass (레퍼런스 경로 진입 시 필수)
design.md는 요약이다. Step 2 본체 진입 전 다음 4개 실측 자산을 반드시 Read:
1. examples/{slug}/screenshots/hero-cropped.png (밀도/컴포넌트 크기/배치)
2. examples/{slug}/phase1/typography.json (실측 폰트 스케일)
3. examples/{slug}/phase1/brand_candidates.json (실측 컬러 빈도·역할)
4. examples/{slug}/phase1/alias_layer.json (의미 tier)
(경로 base: $PLUGIN_ROOT/skills/insane-design/.) Grounding Assertion 3개(스크린샷 봤나 /
주력 폰트 크기 파악했나 / chromatic 상위 3개 확인했나) 중 하나라도 false면 Phase 0 재수행.
맨바닥 합성(Step 0.5)에서는 Phase 0 skip.
v1 × 1 (기본)
V1="$WORK_DIR/insane-build/$SESSION/variations/v1"; mkdir -p "$V1"
- Read starter (medium 따라):
- web →
$PLUGIN_ROOT/skills/insane-design/shared/starter-components/web/{nav,hero,section,footer}.html
- slide →
.../slide/deck-16x9.html
- design-system →
.../design-system/catalog.html
- card-news →
.../card-news/instagram-1x1.html (4x5 요청 시 교체)
- motion →
.../motion/index.md 안내 출력 후 web으로 폴백
- 디자인 브리프 주입: design.md §00 + §06 + §11 + §13 + §15를 starter에 매핑.
{TOKEN} 치환 파이프라인:
- Layer 1 (CSS 토큰): starter
:root { }를 design.md §15 :root { }로 통째 교체. 변수명 다르면 starter 변수 유지 + design.md 값 매핑.
- Layer 2 (콘텐츠
{TOKEN}): {BRAND_NAME}/{HEADLINE}/{PRIMARY_CTA} 등을 Step 1 Content Seed + §14 Voice로 일괄 치환. 미매핑 토큰은 빈 문자열 대신 의미있는 기본값({YEAR}→현재 연도). 치환 후 {/} 남으면 경고.
- Layer 2.5 (이미지 placeholder): 콘텐츠 시드에 이미지 URL 0개 + 카드 3개 이상이면 placeholder 모드.
aspect-ratio(커머스 1:1 / card-news 매체비율 / design-system 16:9) + <picture data-role="placeholder"> + 치수 텍스트(1080 × 1080). Lorem ipsum/가짜 상품명 금지 — 이미지 부재를 명시 선언.
- Layer 3 (Unforgettable/모션, Step 1.7): Hero 임팩트→
min-height:100vh + H1 clamp(48px,8vw,120px) / 타이포 대비→body 14px·H1 140px+ / 섹션 전환→<section> 배경 번갈아 / 미니멀 극단→.card 제거 / Staggered→@keyframes fadeInUp + animation-delay.
- Write
$V1/index.html (단일 self-contained 파일).
v1/v2/v3 (opt-in only)
| Variation | 원칙 |
|---|
| v1 — 극단 | BOLD 100%, §00 극단 해석 |
| v2 — 절충 | BOLD 60%, 일부 평이한 값 |
| v3 — novel | BOLD 100% + 구성 변주 (hero 반전, 섹션 순서) |
| 같은 design.md·같은 콘텐츠. 달라지는 건 해석 강도/변주만. | |
Step 3: 동기 grep 검증
Codex 차이: Claude Code 판은 비동기 verifier 포크 + verify 커맨드 polling이었다.
Codex에는 백그라운드 Task 포크가 없으므로 모두 동기로 같은 턴에 수행. (shared/README.md §3)
grep 쿼터 6회 필수 (shared/README.md §2.2):
ARTIFACT="$V1/index.html"
grep -i -E 'background:\s*(#fff|#ffffff|white)' "$ARTIFACT" && echo "⚠️ 순백 배경"
grep -i -E 'color:\s*(#000|#000000|black)' "$ARTIFACT" && echo "⚠️ 순흑 텍스트"
grep -i -E 'body[^{]*\{[^}]*font-weight:\s*400' "$ARTIFACT" && echo "⚠️ body weight 400"
grep -i -E 'border-radius:\s*(8px|12px)' "$ARTIFACT"
grep -i -E 'font-family:[^;]*(Inter|Roboto|Arial)[^;]*' "$ARTIFACT" && echo "⚠️ 범용 폰트"
grep -i -E 'linear-gradient\(135deg, *#667eea' "$ARTIFACT" && echo "⚠️ 보라 그라디언트"
playwright 감지 분기 (설치돼 있을 때만 같은 턴에 추가):
if python3 -c "import playwright" 2>/dev/null; then
echo "스크린샷 캡처 후 hero 영역 검증"
else
echo "ℹ️ playwright 미설치 — grep-only 모드로 검증 완료 (정상)"
fi
playwright 필수 의존 금지. 미설치 = 정상 경로.
위반 1건 이상 발견 시 line + 패턴 보고. 자동 수정 안 함.
Step 4: 간결 보고 + 브라우저 자동 오픈
case "$(uname -s)" in
Darwin*) open "$V1/index.html" ;;
Linux*) xdg-open "$V1/index.html" 2>/dev/null || sensible-browser "$V1/index.html" 2>/dev/null || echo "⚠️ 수동: file://$V1/index.html" ;;
MINGW*|MSYS*|CYGWIN*) start "" "$V1/index.html" ;;
*) echo "ℹ️ 수동: file://$V1/index.html" ;;
esac
실패 시 경로만 출력하고 계속 (crash 금지).
✅ Build 완료 — {medium} / {BOLD_DIRECTION}
📁 산출물: {session}/variations/v1/index.html {v2,v3 모드면 나열}
🎨 적용: BOLD {bold_direction}({극단/절충}) · Unforgettable {요소} · 모션 {레벨}
🛡️ 검증: §18 DON'T grep 6회 통과 · AI Slop 12 패턴 없음 {playwright 시: 스크린샷 캡처}
🪟 브라우저 열림: file://{V1 절대 경로}
Tweaks 라이브 토글 — 3단 조합
localStorage + URL hash + 재생성만 허용. postMessage는 호스트 보장 X이므로 폐기.
참조: $PLUGIN_ROOT/skills/insane-design/shared/README.md §6.
에러 핸들링
| 상황 | 처리 |
|---|
| design.md가 v3.0/3.1 (medium 없음) | medium: web, confidence medium 간주 + 경고만. 재생성 강요 금지 |
| URL 레퍼런스 선택했지만 analysis 실패 | 실패 원인 알림 + 맨바닥 경로 재진입 제안 |
| §18 DON'T 위반 감지 | 위반 내용/line 보고. 자동 수정 금지 |
| playwright 미설치 | 정상. grep-only 완료 |
open 없는 OS | 경로만 출력 |
| medium=motion | motion/index.md 스텁 안내 후 web 폴백 |
§A 호출 횟수
| 경로 | 호출 |
|---|
| 맨바닥 | Step 0 + 0.5 + Step 1 + Step 1.7 |
| 기존 design.md | Step 0 + Step 1 + Step 1.7 |
| URL 레퍼런스 | Step 0 + analysis 내부 + Step 1 + Step 1.7 |
| v1/v2/v3 모드 선택은 별도 §A 1회 추가. | |