랜딩 - 유도형 판매 페이지 생성은(는) 무엇을 하나요?
유도형 판매 페이지 생성 도구입니다. 이 스킬은 구조, 카운트다운 로직, 유도 질문 흐름을 처리합니다. 디자인 시스템은 UUPM에 위임되며, UUPM이 설치되지 않은 경우 대체 경로를 사용합니다.
런타임 요구 사항: Bash를 실행할 수 있는 환경이 필요합니다. Claude Code는 기본적으로 지원하며, Claude Desktop은 shell MCP가 필요합니다.
워크플로우 개요
단계 1: 유도형 Q&A, 3단계
|
단계 2: 디자인 시스템 처리, UUPM 또는 대체
|
단계 3: 2~3가지 스타일 옵션 제시
|
단계 4: HTML 생성
|
단계 5: generated-pages/{slug}/에 출력
단계 1: 유도형 Q&A
핵심 규칙: 이 흐름 외부의 컨텍스트를 사용하지 마세요
/landing 워크플로우 내에서는 사용자가 현재 제공하는 답변만 사용하세요. 다음을 참조하지 마세요:
- 대화 기록 (이전 주제나 프로젝트)
- 메모리 시스템 (MEMORY.md나 페르소나 파일)
- 기존 프로젝트 폴더의 내용
이유: 각 사용자는 서로 다른 컨텍스트를 가지며, 스킬 동작은 일관되어야 합니다. 도메인을 잘 알고 있더라도 모든 것을 처음부터 채우는 것처럼 행동하세요. 최종 페이지는 AI 가정이 아닌 사용자의 답변에 의해 결정되어야 합니다.
나쁜 예: "이것은 슈퍼 개인 작업 방법(Super Individual Work Method) 강좌인가요?" 이는 메모리를 참조하는 것입니다.
좋은 예: A1과 A2에서만 업계를 유추하세요. "이것이 X 강좌입니까?"라고 묻지 마세요.
상세 질문 목록: references/question-bank.md
세 단계:
- A. 제품 포지셔닝, 4문항 - 제품 유형, 업계, 브랜드 톤, 슬러그
- B. 콘텐츠 채움, 10문항 - 히어로 / 훅 / 소개 / 학습 내용 / 후기(선택) / 대상 / 정보 / 가격 / FAQ / 스피커
- C. 카운트다운 및 CTA, 3~4문항 - 카운트다운 필요 여부를 먼저 묻고, 세부 사항과 CTA 문구를 질문
질문 표시 규칙
각 질문은 다음을 포함해야 합니다:
- 질문 자체
- 좋은 예와 나쁜 예(가드레일 용)
- 답변 입력 필드
- 특수 명령어: 선택 질문의 경우
skip, AI 생성 옵션의 경우generate 3 for me
선택 섹션에 대해 Y/N 먼저 물어보기
- B5a - 학생 후기를 포함할지 여부를 묻습니다. N이면 B5b를 건너뜁니다.
- C0 - 카운트다운 타이머를 포함할지 여부를 묻습니다. N이면 C1-C2를 건너뜁니다.
전문가 모드, 빠른 경로
사용자가 "모든 것을 한 번에 붙여넣겠습니다"라고 말하면, 가드레일 표시를 건너뛰고 전체 카피를 받아 한 번에 분류합니다.
답변 수집
모든 최종 답변을 generated-pages/{slug}/answers.json에 다음 형식으로 저장합니다:
{
"product": { "type": "...", "industry": "...", "tone": ["...", "..."], "slug": "..." },
"content": {
"hero": { "title": "...", "subtitle": "..." },
"hook": "...",
"about": "...",
"learn": ["...", "..."],
"testimonials": [{ "name": "...", "quote": "...", "role": "..." }],
"audience": { "fit": ["..."], "unfit": ["..."] },
"info": [{ "label": "...", "value": "..." }],
"pricing": [{ "plan": "...", "price": "...", "note": "..." }],
"faq": [{ "q": "...", "a": "..." }],
"speaker": { "name": "...", "bio": ["..."], "photo": "..." }
},
"countdown": {
"enabled": true,
"deadline": "2026-04-30T23:59:00+08:00",
"onZero": "ended-state"
},
"cta": { "text": "Register Now", "href": "#" }
}
단계 1.5: DESIGN.md 감지
디자인 시스템 단계로 들어가기 전에, 사용자에게 이미 브랜드 디자인 가이드라인이 있는지 확인합니다:
# 우선순위 순서로 DESIGN.md 검색
DESIGN_FILE=""
for f in \
"$PROJECT_ROOT/DESIGN.md" \
"$PROJECT_ROOT/design.md" \
"$PROJECT_ROOT/.claude/DESIGN.md" \
"$HOME/.claude/DESIGN.md"; do
if [ -f "$f" ]; then
DESIGN_FILE="$f"
break
fi
done
DESIGN.md가 존재하면 직접 적용
DESIGN.md가 발견되면, 그 안의 브랜드 색상, 타이포그래피, 스타일 규칙을 읽고 디자인 시스템으로 직접 사용합니다:
- DESIGN.md의 색상, 타이포그래피, 스타일 섹션을 파싱합니다.
- 사용자에게 확인합니다: "DESIGN.md를 찾았습니다. 브랜드 색상은
#XXX, 폰트는XXX입니다. 이 구성을 사용할까요?" - 사용자가 확인하면, 2단계와 3단계를 건너뛰고 바로 4단계로 이동하여 HTML을 생성합니다.
- 사용자가 거부하면, 정상적으로 2단계로 진행합니다.
DESIGN.md가 없으면 2단계로 진행
UUPM 흐름 또는 대체 흐름 중 하나를 사용합니다.
이 단계가 존재하는 이유: 레슨 3-2는 학생들에게 DESIGN.md를 만들도록 가르칩니다.
/landing이 이를 읽지 않으면 학생이 만든 브랜드 가이드라인을 사용할 수 없어 경험을 해치게 됩니다. 하나의 DESIGN.md가 소셜 카드, 프레젠테이션, 판매 페이지 등 시각적 출력물을 구동해야 합니다.
단계 2: 디자인 시스템 처리 (DESIGN.md가 없을 때만)
상세 흐름: references/uupm-integration.md
UUPM 감지
test -d ~/.claude/skills/ui-ux-pro-max || \
test -d "$PROJECT_ROOT/.claude/skills/ui-ux-pro-max" || \
command -v uipro
어느 하나라도 통과하면 UUPM이 설치된 것이며 흐름이 UUPM 모드로 전환됩니다.
모든 검사가 실패하면 references/uupm-integration.md의 설득 메시지를 표시합니다.
UUPM이 설치되지 않은 경우 분기
| 사용자 응답 | 처리 |
|---|---|
y / yes / ok | npm install -g uipro-cli && uipro init --ai claude --global을 실행한 후, 설치가 완료되면 3단계로 계속 진행 |
n / no / later | 대체 모드 사용, references/fallback-design-rules.md 참조 |
| 설치 실패 | 오류를 표시하고 대체 모드로 계속할지 질문 |
UUPM 모드: 디자인 시스템 생성
A단계 답변에서 쿼리를 빌드합니다:
query="<A2 업계> <A3 톤 키워드>"
slug="<A4>"
python3 ~/.claude/skills/ui-ux-pro-max/scripts/search.py \
"$query" \
--design-system \
--persist \
-p "$slug" \
-f markdown
결과는 design-system/MASTER.md에 기록됩니다. 이를 읽고 색상, 타이포그래피, 패턴, 안티패턴을 파싱합니다.
단계 3: 스타일 옵션 제시
UUPM 모드
UUPM이 권장하는 패턴을 기본 옵션으로 사용합니다. 그런 다음 다른 7가지 랜딩 페이지 스타일 중 호환 가능하면서도 구별되는 2가지 옵션을 선택하여 총 3가지 옵션을 만듭니다.
예를 들어, UUPM이 'Hero-Centric + Social Proof'를 권장하면, 비교 옵션으로 'Conversion-Optimized'와 'Trust & Authority'를 추가합니다.
각 스타일을 미니 프리뷰 카드로 렌더링하고 <div class="cards">를 사용하며, 시각적 동반 UI를 참조하여 사용자가 선택할 수 있도록 합니다.
대체 모드
Claude가 미니멀 vs. 플레이풀 등 2가지 방향을 생성합니다. 각 방향에는 고유한 색상, 타이포그래피, 간격 규칙이 포함됩니다. 사용자가 하나를 선택합니다.
단계 4: HTML 생성
스켈레톤 읽기: templates/base.html
카운트다운 JS 읽기: templates/countdown.js
조립 로직
templates/base.html을 읽습니다.- 조건부 렌더링:
{{#if countdown.enabled}}- 큰 히어로 카운트다운과 하단 스티키 바를 유지하고, 그렇지 않으면 두 섹션을 모두 제거합니다.{{#if testimonials}}- 후기 섹션을 유지하고, 그렇지 않으면 제거합니다.
answers.json의 콘텐츠를 채웁니다.<style>에 디자인 토큰을 주입합니다. UUPM 모드에서는 MASTER.md를 읽고, 대체 모드에서는 세 가지 대체 규칙에서 생성합니다.- 카운트다운이 활성화된 경우에만 countdown.js를 주입합니다.
네비게이션, 필수 및 상단 고정
네비게이션은 필수 요구사항이며 모든 생성된 페이지에 포함되어야 합니다:
- 브랜드: 왼쪽. A4 슬러그에서 파생된 짧은 이름 또는 제품 유형에 기반한 짧은 영어 약어.
- 섹션 링크: 중간. About / Learn / Audience / Pricing / Speaker / FAQ에 링크. 존재하지 않는 선택 섹션에 대한 링크는 포함하지 마십시오.
- 등록 CTA: 오른쪽. 짧은 레이블(예: "Register" 또는 "Buy").
- 스크롤 시 고정. 스크롤 시 JS로
.scrolled클래스를 토글하여 그림자 추가. - 모바일에서 링크 숨기기, 860px 미만.
answers.json에서 유추되는 필수 데이터:
"nav": {
"brandText": "AI Solo Workshop",
"linkAbout": "Workshop",
"linkLearn": "What You Will Learn",
"linkAudience": "Who It Is For",
"linkPricing": "Plans",
"linkSpeaker": "Instructor",
"linkFaq": "FAQ",
"ctaShort": "Register"
}
네비게이션 스타일은 선택한 디자인 시스템(타이포그래피, 색상, 구분선 스타일 포함)을 따라야 합니다. 구조와 링크는 동일하게 유지됩니다.
단일 파일 HTML 전략
- Tailwind CDN 사용:
<script src="https://cdn.tailwindcss.com"></script> - CSS는
<style>에 인라인 - JS는
<script>에 인라인 - 학생이 제공한 이미지 URL 사용
이렇게 하면 학생들이 Framer, Notion, CMS에 복사하여 붙여넣기가 가장 쉽습니다.
단계 5: 출력
generated-pages/{slug}/에 작성:
generated-pages/
└── {slug}/
├── index.html
├── design-system.md # UUPM 모드 전용
└── answers.json
작성 후 사용자를 위해 파일 열기
사용자에게 수동으로 파일을 열라고 말하지 마세요. 대신 사용자를 위해 열어줍니다:
open "generated-pages/{slug}/index.html"
macOS에서는 기본 브라우저에서 파일이 열립니다. open 명령이 없는 Linux 환경 등에서 실패하면 사용자에게 수동으로 여는 방법을 알려줍니다.
사용자에게 보내는 최종 메시지:
판매 페이지가 생성되어 브라우저에서 열렸습니다.
파일 위치:
generated-pages/{slug}/index.html
카피를 수정하고 싶으신가요? HTML을 직접 편집하거나 /landing을 다시 실행하여 답변을 다시 채울 수 있습니다. 기존 answers.json이 읽힙니다.
오류 처리
| 상황 | 동작 |
|---|---|
| npm 권한 오류 | ! sudo npm install -g uipro-cli 제안 후 사용자가 직접 실행하도록 안내 |
| npm 없음 | Node.js를 Homebrew 또는 nvm을 통해 설치하도록 제안 |
| Python3 없음 | brew install python3 제안 |
| UUPM search.py 실패 | 오류를 기록하고 자동으로 대체 모드로 전환 |
| Bash 도구 사용 불가 | 오류를 캐치하고 수동 명령어를 보여주는 방식으로 대체 |
| 동일한 슬러그의 폴더가 이미 존재 | 덮어쓰기, 타임스탬프 추가, 또는 다른 이름 선택 여부 질문 |
범위 외
- 구독 또는 멤버십 페이지, 서비스 상담 페이지
- 보증 또는 환불 섹션
- 다국어 페이지 (현재 영어만 지원)
- 결제 또는 구독과 같은 양식 통합; CTA는 링크만 제공
- 실제 배포
on-zero: new-price동작
트리거 문구
/landing, "make a sales page", "help me make a landing page", "sales page"