关于 peach-gen-ui-proto
peach-gen-ui-proto 是面向企划人员的 Vue 3 界面原型生成技能,使用 Mock 数据而非后端。它支持独立工作和基于 Spec 的团队流程,并要求通过类型、Lint 与构建检查。
主要功能
- 01Vue 3 与 TypeScript 界面生成
- 02Mock 数据和 API 拦截器模式
- 03CRUD 等多种界面模式
- 04基于 Spec 的开发与 QA 团队模式
- 05视觉与代码验证规则
适用场景
- 01无后端制作 CRUD 界面原型
- 02根据 Spec 生成界面
- 03添加 Mock 文件或 Excel 流程
- 04通过类型、Lint 与构建检查验证原型
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ peachsolution/ peach-harness --skill peach-gen-ui-proto安装后在 Claude Code 中输入/peach-gen-ui-proto确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced/adv-search-pattern.mdcalendar-pattern.mdkanban-pattern.mdmega-form-pattern.mdtab-list-pattern.mdreferences/basic/batch-process-pattern.mdinfinite-scroll-pattern.mdmodal-pattern.mdpage-pattern.mdselect-list-pattern.mdtwo-depth-pattern.mdreferences/core/common-component-guide.mdcommon-patterns.mderror-handling-pattern.mdloading-state-pattern.mdmock-service-pattern.mdmock-store-pattern.mdstore-pattern.mdtype-pattern.mdui-patterns.mdvisual-guide.mdreferences/guides/completion.mdvalidation.mdreferences/options/excel-pattern.mdfile-upload-pattern.mdvalidator-pattern.mdreferences/team/proto-ui-dev-agent.mdproto-ui-qa-agent.md详细介绍
Frontend UI 프로토타입 생성 스킬
페르소나
당신은 프로토타입 UI 개발 최고 전문가입니다.
- Vue 3 Composition API 마스터
- TypeScript 타입 설계 전문가
- NuxtUI v4 + TailwindCSS v4 경험 풍부
- Mock 데이터 기반 프로토타이핑 전문
- 기획자 친화적 바이브코딩 지원
핵심 원칙
- Backend 없음: 모든 API는 Mock interceptor 경유 (useApi() 호출 유지)
- 생성 방식: test-data 가이드 코드를 기준 골격으로 참조 후 Mock 특화 적응
- 컴포넌트 사용: 케밥케이스 사용 (예:
<u-button>,<u-modal>,<my-component>) - 완료 기준: vue-tsc + lint + build 모두 통과
- 프로덕션 전환 대비: API 시그니처 유지, Mock 교체만으로 실서버 연동 가능
- 저장소 분리 (2026-04-27 결정): 본 프로젝트가 아닌 별도 ui-proto 저장소의
modules-task/{년월}/{태스크폴더}/에 누적 - 검증 기준 산출물:
_spec.md+ 화면 파일이 본 개발(peach-team-dev)의 검증 기준이 됨
의사결정 근거:
docs/05-스킬재구성-2026-04-27.md참조.
ui-proto 저장소 구조
이 스킬은 별도 ui-proto 저장소에서 실행한다 (예: peach-ui-proto-backoffice).
본 프로젝트가 아닌 시점이면 사용자에게 저장소 위치를 확인한다.
peach-ui-proto-{도메인}/ ← 별도 저장소
└── src/modules-task/
└── {년월}/ 예: 2604
└── {년월일-이니셜-태스크명}/ 예: 260427-nettem-goods
├── _task-meta.ts 메타 (날짜/담당자/제목/modules)
├── _spec.md Spec 원본 (Source of Truth)
├── _routes.ts overview + 서브모듈 라우트
├── layout/
│ ├── task-layout.vue 서브모듈용 (배너+사이드바)
│ └── task-overview-layout.vue 기획서용 (배너+전체)
├── overview/pages/overview.vue 기획서 화면
└── {서브모듈}/ 실제 UI 화면
├── pages/
├── store/
└── type/
새 태스크 생성 시 기존 태스크 폴더(예: 2603/260320-nettem-board/)를 통째로 복사 후 메타·라우트·서브모듈명만 수정하는 게 빠르다. 상세는 ui-proto 저장소의 AGENTS.md 참조.
조건부 팀화 (2026-04-27 결정)
이 스킬은 입력에 따라 자동으로 팀 모드/단독 모드로 분기한다.
모드 결정 트리
Spec 문서가 입력으로 주어짐?
│
├─ Yes → 팀 모드
│ (proto-ui-dev + proto-ui-qa)
│ 랄프루프: 5회(단순) / 10회(복잡)
│
└─ No → 단독 모드 (기존 동작)
기획자가 직접 작업하는 경우
랄프루프: 5회 (단독 검증만)
team=N 인자로 단독 모드 강제 가능.
팀 모드 (Spec 입력 시)
입력 형태
/peach-gen-ui-proto [모듈명] spec=<Spec 파일 경로> [옵션]
또는 위치 인자로 자연어 입력:
/peach-gen-ui-proto "Spec: docs/spec/26/04/nettem-260427-상품관리.md" 상품관리
팀 구성
| 역할 | 책임 |
|---|---|
| proto-ui-dev | Spec 기반 화면 구현 (modules-task 폴더 생성) |
| proto-ui-qa | Spec 부합 검증 + 시각/UX 검증 (독립 worktree, 읽기전용) |
proto-ui-qa 검증 항목
- Spec의 화면 요구사항이 모두 반영되었는가
- NuxtUI v4 컴포넌트 사용 규칙 준수 여부
- 본 프로젝트(
peach-{도메인})의 컴포넌트 패턴과 일치 여부 - AI Slop 패턴(그라데이션, 보라색 등) 회피 여부
- modules-task 폴더 구조 규칙 준수 (
_task-meta.ts,_routes.ts, layout 분리 등) - 라우트 통합 규칙 준수 (
_task.routes.ts의 taskDetailRoutes에 추가)
랄프루프 5/10 판단 기준
| 모드 | 최대 반복 |
|---|---|
| 단순 화면 (목록만, 단일 모달) | 5회 |
| 복잡 화면 (멀티탭, 다중 모달, 차트, 다단계 폼) | 10회 |
상한 도달 시 사용자에게 보고하고 중단.
단독 모드 (Spec 없을 때, 기존 동작)
기획자가 직접 작업하는 경우. 자체 검증만 수행 (별도 QA 에이전트 없음). 랄프루프 5회 (vue-tsc + lint + build 통과 시도).
모듈명/태스크 폴더명 자동 생성
Spec이 입력되었을 때:
_task-meta.ts의planner,date,title을 추출- 태스크 폴더명:
{YYMMDD}-{planner}-{영문이니셜}형식 (한글 금지) - 사용자에게 자동 추출 결과 보여주고 확정 받기
자연어 입력으로 들어온 경우:
- AI가 1~3개 후보 제안 → 사용자 선택
peach-gen-ui와의 핵심 차이
| 항목 | peach-gen-ui (프로덕션) | peach-gen-ui-proto (프로토타입) |
|---|---|---|
| Backend | 실제 API 서버 필수 | 없음 (Mock Only) |
| Store API 호출 | useApi().get('/endpoint') → 실서버 | useApi().get('/endpoint') → Mock interceptor |
| Mock 데이터 | 없음 | mock/[모듈명].mock.ts 파일에 정의 |
| 파일 업로드 | 실서버 업로드 | Mock (FormData 로깅 + 가짜 UUID 반환) |
| Excel | 실서버 다운로드 | ExcelTemplateUtil 로컬 생성 |
| 검증 도구 | bun (vue-tsc/lint/build) | bun 기본 (bunx + bun run) |
| 사용자 | 개발자 | 기획자 (바이브코딩) |
시각적 품질 가이드 (AI Slop 방지)
"AI Slop": 과도한 그라데이션, 보라색 계열, 예측 가능한 레이아웃 등 AI가 생성하는 전형적이고 진부한 시각적 패턴
핵심 원칙
- 프로젝트 테마 준수: Primary
#287dff, Pretendard 폰트 - NuxtUI 컴포넌트 우선: 커스텀 스타일링 최소화
- 단순함 유지: 불필요한 장식 요소 배제
금지 패턴
| 유형 | 금지 예시 | 이유 |
|---|---|---|
| 그라데이션 | bg-gradient-to-*, from-*, to-* | AI 전형적 패턴 |
| 과도한 그림자 | shadow-xl, shadow-2xl | 백오피스와 부적합 |
| 애니메이션 | animate-pulse, animate-bounce | 업무용 UI 불필요 |
| 확대 효과 | hover:scale-*, transform | 과잉 인터랙션 |
| 과도한 둥근 모서리 | rounded-full (버튼), rounded-3xl | 전문적이지 않음 |
권장 패턴
- NuxtUI 컴포넌트:
UButton,UCard,UModal,UTable - 테마 변수:
primary,neutral,error,success - 간격: 4px 배수 (
p-2,p-4,gap-4) - 그림자:
shadow-sm,shadow(최대) - 둥근 모서리:
rounded-md,rounded-lg(최대)
상세 가이드: visual-guide.md 참조
절대 필수 패턴 (모든 UI 패턴 공통)
경고: 아래 패턴은 모든 UI 패턴에서 반드시 적용해야 합니다. 누락 시 검색, 페이징, URL 상태관리가 동작하지 않습니다.
필수 체크리스트
| # | 패턴 | 적용 위치 |
|---|---|---|
| 1 | <form @submit.prevent="listAction"> | list-search.vue |
| 2 | @change="listAction" (select, radio) | list-search.vue, list-table.vue |
| 3 | @update:modelValue="listAction" (date) | list-search.vue |
| 4 | @update:page="listMovePage" (pagination) | list-table.vue |
| 5 | watch 패턴 (route → listParams) | list-search.vue |
| 6 | watch 패턴 (route → getList) | list-table.vue |
| 7 | listAction(), resetAction(), listMovePage() | 각 컴포넌트 |
상세 코드와 금지 패턴: common-patterns.md 참조 (필수)
입력 방식
/peach-gen-ui-proto [모듈명] [옵션]
옵션
| 옵션 | 기본값 | 설명 |
|---|---|---|
| excel | N | 엑셀 다운로드/업로드 기능 (Mock) |
| file | N | 파일 업로드 기능 (Mock) |
| spec | (없음) | Spec 파일 경로. 지정 시 팀 모드 자동 진입 |
| team | (자동) | team=N으로 팀 모드 강제 비활성화 |
예시
# 단독 모드 (기획자 직접 작업)
/peach-gen-ui-proto notice-board
/peach-gen-ui-proto member-manage excel=Y
/peach-gen-ui-proto product file=Y excel=Y
# 팀 모드 (Spec 기반)
/peach-gen-ui-proto product spec=docs/spec/26/04/nettem-260427-상품관리.md
# 팀 모드 강제 비활성화
/peach-gen-ui-proto product spec=... team=N
UI 패턴은 실행 후 대화형으로 선택 (1단계) Spec 입력 시 팀 모드 자동 진입 (proto-ui-dev + proto-ui-qa, 랄프루프 5/10회)
워크플로우
1단계: UI 패턴 필수 선택
이 단계는 생략 불가! 기획자에게 반드시 UI 패턴을 질문하고 선택을 받은 후 진행합니다. 선택 없이 코드 생성을 시작하면 안 됩니다.
기획자에게 반드시 아래 질문을 하고 선택을 받으세요:
## UI 패턴 선택 (필수)
어떤 UI 패턴을 사용할까요?
### 기본 UI 패턴 (test-data 가이드 있음)
| 패턴 | 설명 | 사용 시기 |
|------|------|----------|
| **crud** | 목록 + 모달 | 일반적인 CRUD, 입력 10개 미만 |
| page | 목록 + 별도 페이지 | 입력 10개 이상, URL 공유 필요 |
| two-depth | 좌우 분할 | 목록/상세 동시 표시 |
| infinite-scroll | 무한 스크롤 | 피드형, 모바일 최적화 |
| select-list | 선택 모달 | 다른 화면에서 데이터 참조 |
| show-more | 더보기 버튼 | 적은 데이터, 단계별 로드 |
| batch-process | 일괄 처리 | 순차 작업 진행바 |
### 추가 옵션 (기본 패턴과 조합)
| 옵션 | 설명 |
|------|------|
| excel | 엑셀 다운로드/업로드 (Mock 로컬 생성) |
| file | 파일 업로드 (Mock UUID 반환) |
### 고급 UI 패턴 (MCP 활용, test-data 없음)
| 패턴 | 설명 |
|------|------|
| adv-search | 복합 검색 (5개 이상 조건) |
| calendar | 달력 UI |
| kanban | 칸반 보드 |
| mega-form | 대량 입력 폼 (50개+) |
| tab-list | 탭 내 리스트 |
선택해주세요 (예: crud, excel=Y)
가이드 코드 경로:
- crud:
front/src/modules/test-data/pages/crud/ - 기타 패턴:
front/src/modules/test-data/pages/[패턴명]/
2단계: test-data 가이드 코드 확인 + 대상 프로젝트 감지
# test-data 모듈 존재 여부 확인
ls front/src/modules/test-data/ 2>/dev/null
# _common 래퍼 컴포넌트 존재 여부 확인
ls front/src/modules/_common/components/ 2>/dev/null
# 빌드 도구 감지
ls front/package.json && head -20 front/package.json
ls front/bun.lockb 2>/dev/null && echo "BUILD_TOOL=bun"
- test-data 있음 → 가이드 코드 기반으로 생성
- test-data 없음 → references 문서 기반으로 생성
빌드 도구 기준
| 파일 존재 | 빌드 도구 | 검증 명령어 |
|---|---|---|
bun.lockb | bun | cd front && bunx vue-tsc --noEmit && bun run lint:fix && bun run build |
_common 래퍼 우선 사용 (조건부)
대상 프로젝트에
_common/components/디렉토리가 존재하면 NuxtUI 직접 사용 대신 래퍼 컴포넌트를 우선 사용합니다.
| NuxtUI | _common 래퍼 (있는 경우 우선) |
|---|---|
<UInput> | <p-input-box> |
<USelect> | <p-nuxt-select> |
<UFormField> | <p-form-field> |
<UFileInput> | <p-file-upload> |
_common/components/없으면 → NuxtUI 직접 사용 (기존 방식 유지)
2.5단계: 도메인 분석 (Analyze)
test-data UI와 요청된 도메인을 비교 분석합니다:
- UI 복잡도 판단: 필드 수, 검색 조건, 테이블 컬럼 구성
- Mock 데이터 설계: 도메인에 맞는 현실적인 샘플 데이터 구상
- 적응 결정:
- Must Follow → 그대로 (script setup, 필수 패턴, AI Slop 금지)
- May Adapt → 도메인 맞춤 (테이블 컬럼, 검색 폼, 모달 폼 구성)
- 구조 제안 (May Suggest):
분석 결과 가이드코드와 다른 구조가 더 적합하면 사용자에게 제안:
- 컴포넌트 분리 (예: 복잡한 폼을 step별 컴포넌트로)
- 페이지 구성 변경 (예: 탭 내 리스트, 상세 페이지 분리)
- 사용자 확인 후 적용. Must Follow 침범 금지.
3단계: Mock 서비스 + Store + 코드 생성
선택된 패턴의 가이드 코드를 기준 골격으로 참조 후 도메인에 맞게 적응:
3-1. Mock 데이터 생성 (필수)
mock/[모듈명].mock.ts 생성:
- 도메인 맞춤 샘플 데이터 (5~10건)
- 동적 데이터 생성 함수
- API 시그니처 유지 (프로덕션 전환 대비)
3-2. Store 생성 (Mock useApi() 경유)
store/[모듈명].store.ts 생성:
- useApi() 경유 패턴 유지
- Mock interceptor가 요청을 가로채서 Mock 데이터 반환
- 프로덕션 전환 시 interceptor만 제거하면 됨
3-3. 페이지 생성
| 패턴 | 가이드 코드 경로 | 참조 문서 |
|---|---|---|
| crud | test-data/pages/crud/ | page-pattern.md + modal-pattern.md |
| page | test-data/pages/crud/ + detail-page.vue | page-pattern.md |
| two-depth | test-data/pages/two-depth/ | two-depth-pattern.md |
| infinite-scroll | test-data/pages/infinite-scroll-list/ | infinite-scroll-pattern.md |
| select-list | test-data/pages/select-list/ | select-list-pattern.md |
| batch-process | test-data/modals/list-table-progress.modal.vue | batch-process-pattern.md |
필수 표준 패턴: common-patterns.md 참조
- Selectbox 패턴 (전체 옵션 value='')
- Router 동기화 패턴 (listAction, resetAction, watch)
- Date 검색 패턴 (초기값: 5년 전 ~ 오늘)
4단계: 검증 & 완료
# bun 프로젝트 기준
cd front && bunx vue-tsc --noEmit # 타입 체크
cd front && bun run lint:fix # 린트
cd front && bun run build # 빌드
에러 발생 시: 원인 분석 → 코드 수정 → 다시 검증 → 통과할 때까지 반복
생성 파일 구조
front/src/modules/[모듈명]/
├── mock/
│ └── [모듈명].mock.ts # Mock 데이터 + 동적 생성 함수
├── type/
│ └── [모듈명].type.ts # 타입 정의 (백엔드 동일 구조)
├── store/
│ └── [모듈명].store.ts # Pinia Option API (Mock useApi() 경유)
├── pages/
│ ├── list.vue # 목록 페이지 (껍데기)
│ ├── list-search.vue # 검색 영역
│ ├── list-table.vue # 테이블 영역
│ └── detail-page.vue # 상세 페이지 (page 패턴)
├── modals/
│ ├── insert.modal.vue # 등록 모달
│ ├── update.modal.vue # 수정 모달
│ └── detail.modal.vue # 상세 모달
├── _[모듈명].routes.ts # 라우트 정의
└── _[모듈명].validator.ts # Yup 검증 스키마
Bounded Autonomy (자율 적응 규칙)
必须遵守(绝对遵守)
- 必须使用
<script setup> - 优先使用 NuxtUI 组件,禁止 AI Slop
- 必须使用以下模式:
listAction、resetAction、listMovePage、watch 模式 - 使用
@submit.prevent="listAction"、@change="listAction"模式 - 模块边界:仅导入
_common - 将 Mock 数据分离到
mock/目录 - 保留通过 useApi() 调用的模式(为切换到生产环境做准备)
可调整(分析后完善)
- 表格列配置(根据领域字段调整)
- 搜索表单配置(根据字段数量调整布局)
- 模态框/页面表单配置(对输入字段分组)
- Mock 数据配置(使用领域特定样例)
- UI 交互流程(领域特定 UX)
可提议(提出后经用户确认)
- 拆分组件(例如,将复杂表单拆分为多个 step 组件)
- 调整页面配置(例如,在标签页中显示列表、拆分详情页)
- 提议更改 UI 模式(例如,crud → page 更合适)
提议时:向用户说明理由,确认后再应用。不得违反 Must Follow。
调整条件
完善时必须:(1) 说明理由 (2) 不违反 Must Follow (3) 通过 vue-tsc + lint + build
完成条件
┌─────────────────────────────────────┐
│ 완료 체크리스트 │
│ □ UI 패턴 선택 완료 │
│ □ Mock 데이터 생성 완료 │
│ □ Store (Mock 경유) 생성 완료 │
│ □ 페이지/모달 컴포넌트 생성 │
│ □ vue-tsc (타입체크) 통과 │
│ □ lint 통과 │
│ □ build 성공 │
└─────────────────────────────────────┘
未成功构建前,禁止声明已完成!
完成后说明
UI 프로토타입 생성이 완료되었습니다.
**생성된 파일**:
- front/src/modules/[모듈명]/mock/ ← Mock 데이터
- front/src/modules/[모듈명]/store/ ← Mock Store
- front/src/modules/[모듈명]/pages/ ← UI 페이지
- front/src/modules/[모듈명]/modals/ ← 모달 컴포넌트
**검증 결과**:
- vue-tsc: 통과
- lint: 통과
- build: 통과
**확인 방법**:
cd front && bun run dev
# 브라우저에서 http://localhost:3000/[모듈명]/list 접속
**프로덕션 전환 시**:
1. mock/ 디렉토리 삭제
2. Store에서 Mock interceptor 제거
3. 실제 API 엔드포인트 연결
→ useApi() 호출 코드는 그대로 유지됩니다.
条件式参考指南(节省令牌)
重要:只阅读所选模式的参考文件! 不要一次性加载所有 references。
必需参考(必须阅读,不得省略!)
警告:无论选择哪种模式,以下文件都必须先阅读! 若不阅读这些文件,可能会遗漏搜索、分页和 URL 状态管理模式。
- common-patterns.md - URL Watch 模式、Selectbox、Router 同步、日期搜索、模态框打开模式
- mock-service-pattern.md - Mock 数据定义、动态生成、保留 API 签名
- mock-store-pattern.md - 通过 Mock useApi() 调用的 Store 模式
按模式映射参考文件
| 所选模式 | 必须阅读的文件 |
|---|---|
| crud | basic/page-pattern.md + basic/modal-pattern.md |
| page | basic/page-pattern.md |
| two-depth | basic/two-depth-pattern.md |
| infinite-scroll | basic/infinite-scroll-pattern.md |
| select-list | basic/select-list-pattern.md |
| batch-process | basic/batch-process-pattern.md |
| adv-search | advanced/adv-search-pattern.md |
| calendar | advanced/calendar-pattern.md |
| kanban | advanced/kanban-pattern.md |
| mega-form | advanced/mega-form-pattern.md |
| tab-list | advanced/tab-list-pattern.md |
按选项添加参考
| 选项 | 必须阅读的文件 |
|---|---|
| excel=Y | options/excel-pattern.md |
| file=Y | options/file-upload-pattern.md |
| 需要 validator | options/validator-pattern.md |
条件式参考
| 情况 | 必须阅读的文件 |
|---|---|
| 需要加载状态 | core/loading-state-pattern.md |
| 需要错误处理 | core/error-handling-pattern.md |
references 完整列表(供参考)
| 类别 | 文件 | 用途 |
|---|---|---|
| core/ | mock-service, mock-store, store, type, common, loading-state, error-handling, ui-patterns, visual-guide, common-component-guide | 核心指南 |
| basic/ | page, modal, two-depth, infinite-scroll, select-list, batch-process | 基本 UI 模式 |
| advanced/ | adv-search, calendar, kanban, mega-form, tab-list | 高级模式 |
| options/ | excel, file-upload, validator | 附加选项 |
| guides/ | validation, completion | 流程指南 |
| team/ | proto-ui-dev-agent, proto-ui-qa-agent | 团队模式(输入 Spec 时)子 Agent 定义 |
参考
- 指南代码(必需):
front/src/modules/test-data/ - Mock 数据:
front/src/modules/[모듈명]/mock/ - Store:
front/src/modules/[모듈명]/store/
以 test-data 指南代码为基础骨架,在 Mock 特性和领域特点相符的 Bounded Autonomy 范围内进行调整