skills/peach-gen-ui/SKILL.md
Store 기반 프로덕션 UI를 생성하는 스킬. Vue 3 + TypeScript + NuxtUI v4. "UI 만들어줘", "화면 생성", "CRUD 화면", "목록 화면" 키워드로 트리거. Store가 존재해야 하며 실제 API와 연동된 프로덕션 코드를 생성한다. Mock 데이터 기반 프로토타입이 필요하면 peach-team-ui-proto를 사용한다.
npx skillsauth add peachsolution/peach-harness peach-gen-uiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
당신은 Frontend UI 개발 최고 전문가입니다.
<u-button>, <u-modal>, <my-component>)"AI Slop": 과도한 그라데이션, 보라색 계열, 예측 가능한 레이아웃 등 AI가 생성하는 전형적이고 진부한 시각적 패턴
#287dff, Pretendard 폰트| 유형 | 금지 예시 | 이유 |
|------|----------|------|
| 그라데이션 | bg-gradient-to-*, from-*, to-* | AI 전형적 패턴 |
| 과도한 그림자 | shadow-xl, shadow-2xl | 백오피스와 부적합 |
| 애니메이션 | animate-pulse, animate-bounce | 업무용 UI 불필요 |
| 확대 효과 | hover:scale-*, transform | 과잉 인터랙션 |
| 과도한 둥근 모서리 | rounded-full (버튼), rounded-3xl | 전문적이지 않음 |
UButton, UCard, UModal, UTableprimary, neutral, error, successp-2, p-4, gap-4)shadow-sm, shadow (최대)rounded-md, rounded-lg (최대)상세 가이드: visual-guide.md 참조
경고: 아래 패턴은 모든 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 [모듈명] [옵션]
| 옵션 | 기본값 | 설명 | |------|--------|------| | excel | N | 엑셀 다운로드/업로드 기능 | | file | N | 파일 업로드 기능 |
/peach-gen-ui notice-board
/peach-gen-ui member-manage excel=Y
/peach-gen-ui product file=Y excel=Y
UI 패턴은 실행 후 대화형으로 선택 (1단계)
cat DESIGN.md 2>/dev/null | head -200
⚠️ DESIGN.md 없음 — 디자인 시스템 문서가 없습니다. 작성을 권장합니다.
참고: peach-harness/templates/DESIGN-template.md (또는 /peach-gen-design)
이 단계는 생략 불가! 개발자에게 반드시 UI 패턴을 질문하고 선택을 받은 후 진행합니다. 선택 없이 코드 생성을 시작하면 안 됩니다.
개발자에게 반드시 아래 질문을 하고 선택을 받으세요:
## UI 패턴 선택 (필수)
어떤 UI 패턴을 사용할까요?
### 기본 UI 패턴 (test-data 가이드 있음)
| 패턴 | 설명 | 사용 시기 |
|------|------|----------|
| **crud** | 목록 + 모달 | 일반적인 CRUD, 입력 10개 미만 |
| page | 목록 + 별도 페이지 | 입력 10개 이상, URL 공유 필요 |
| two-depth | 좌우 분할 | 목록/상세 동시 표시 |
| infinite-scroll | 무한 스크롤 | 피드형, 모바일 최적화 |
| select-list | 선택 모달 | 다른 화면에서 데이터 참조 |
| show-more | 더보기 버튼 | 적은 데이터, 단계별 로드 |
| batch-process | 일괄 처리 | 순차 작업 진행바 |
### 추가 옵션 (기본 패턴과 조합)
| 옵션 | 설명 |
|------|------|
| excel | 엑셀 다운로드/업로드 |
| file | 파일 업로드 |
### 고급 UI 패턴 (MCP 활용, test-data 없음)
| 패턴 | 설명 |
|------|------|
| adv-search | 복합 검색 (5개 이상 조건) |
| calendar | 달력 UI |
| kanban | 칸반 보드 |
| mega-form | 대량 입력 폼 (50개+) |
| tab-list | 탭 내 리스트 |
선택해주세요 (예: crud, excel=Y)
가이드 코드 경로:
front/src/modules/test-data/pages/crud/front/src/modules/test-data/pages/[패턴명]/# Store 위치 자동 감지 (modules-* 분리 구조 대응)
ls -d front/src/modules*/[모듈명]/store/ 2>/dev/null
cat front/src/modules*/[모듈명]/store/[모듈명].store.ts 2>/dev/null
# _common 래퍼 컴포넌트 존재 여부 확인 (조건부)
ls front/src/modules/_common/components/ 2>/dev/null
감지된 Store 위치와 동일한 모듈 루트에 pages/, modals/ 를 생성합니다.
대상 프로젝트에
_common/components/디렉토리가 존재하면 NuxtUI 직접 사용 대신 래퍼 컴포넌트를 우선 사용합니다.
| NuxtUI | _common 래퍼 (있는 경우 우선) |
|--------|------------------------------|
| <UInput> | <p-input-box> |
| <USelect> | <p-nuxt-select> |
| <UFormField> | <p-form-field> |
| <UFileInput> | <p-file-upload> |
_common/components/ 없으면 → NuxtUI 직접 사용 (기존 방식 유지)Store 인터페이스와 test-data UI를 비교 분석합니다:
선택된 패턴의 가이드 코드를 기준 골격으로 참조 후 도메인에 맞게 적응:
| 패턴 | 가이드 코드 경로 | 참조 문서 |
|------|-----------------|----------|
| 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 참조
cd front && bunx vue-tsc --noEmit # 타입 체크
cd front && bun run lint:fix # 린트
cd front && bun run build # 빌드
에러 발생 시: 원인 분석 → 코드 수정 → 다시 검증 → 통과할 때까지 반복
front/src/[감지된 modules 경로]/[모듈명]/
├── 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 검증 스키마
가이드 코드는 기본 참고 골격이며 강제 표준이 아니다. 도메인 특성에 따라 AI가 더 나은 구조를 판단하면 자율 조정한다. Must Follow와 "단일 사용처 추상화 금지" 원칙은 그대로 지키고, 조정한 항목과 이유는 완료 보고에 기록한다. 상세 원칙은
peach-setup-ui-proto/references/04-bounded-autonomy.md(Frontend) 또는peach-setup-harness/references/05-bounded-autonomy.md(Backend) 참조.
<script setup> 필수listAction, resetAction, listMovePage, watch 패턴@submit.prevent="listAction", @change="listAction" 패턴_common만 importSuggest 시: 이유를 사용자에게 제시하고 확인 후 적용. Must Follow 침범 금지.
보완 시 반드시: (1) 이유 설명 (2) Must Follow 미침범 (3) vue-tsc + lint + build 통과
┌─────────────────────────────────────────────────┐
│ 완료 체크리스트 │
│ □ DESIGN.md 확인 (있으면 규칙 반영, 없으면 경고) │
│ □ UI 패턴 선택 완료 │
│ □ Store 연결 확인 │
│ □ 페이지/모달 컴포넌트 생성 │
│ □ bunx vue-tsc --noEmit 통과 │
│ □ bun run lint:fix 통과 │
│ □ bun run build 성공 │
└─────────────────────────────────────────────────┘
빌드 성공 없이 완료 선언 금지!
UI 컴포넌트 생성이 완료되었습니다.
📁 **생성된 파일**:
- front/src/[감지된 modules 경로]/[모듈명]/pages/
- front/src/[감지된 modules 경로]/[모듈명]/modals/
- front/src/[감지된 modules 경로]/[모듈명]/_[모듈명].routes.ts
✅ **검증 결과**:
- vue-tsc: 통과
- lint: 통과
- build: 통과
**확인 방법**:
cd front && bun run dev
# 브라우저에서 http://localhost:3000/[모듈명]/list 접속
중요: 선택된 패턴의 참조 파일만 읽으세요! 모든 references를 한 번에 로드하지 마세요.
경고: 아래 파일은 어떤 패턴을 선택하든 반드시 먼저 읽어야 합니다! 이 파일을 읽지 않으면 검색, 페이징, URL 상태관리 패턴이 누락됩니다.
@change="listAction", @submit.prevent="listAction" 패턴| 선택 패턴 | 읽어야 할 파일 | |----------|---------------| | 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 |
| 상황 | 읽어야 할 파일 | |------|---------------| | Store 없음 | core/mock-store-pattern.md, core/store-pattern.md | | 로딩 상태 필요 | core/loading-state-pattern.md | | 에러 처리 필요 | core/error-handling-pattern.md |
| 카테고리 | 파일 | 용도 | |----------|------|------| | 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 | 추가 옵션 | | core/ | store, type, mock-store, common, loading-state, error-handling, ui-patterns | 핵심 가이드 | | guides/ | validation, completion | 프로세스 가이드 |
front/src/modules/test-data/front/src/[감지된 modules 경로]/[모듈명]/store/test-data 가이드 코드를 기준 골격으로 참조하되, 도메인 특성에 맞게 Bounded Autonomy 범위 내에서 적응
tools
기능 브랜치용 git worktree 라이프사이클을 관리하는 스킬. 생성(create) / 상태 진단(status) / PR 준비(finish) / 병합 후 정리(closeout) / 정리(cleanup) 모드를 자동 판단한다. "워크트리 만들어줘", "worktree 생성", "워크트리 정리", "워크트리 삭제", "기능 브랜치 워크트리", "워크트리 상태", "마무리", "PR 생성", "PR 머지 후 정리", "feature worktree" 키워드로 트리거. PR 전 base 비교와 안전한 동기화 필요 여부를 진단한다. 개발 완료 후 finish/closeout 모드에서는 한 번의 통합 체크포인트로 push/PR/merge/cleanup을 안전하게 진행한다.
development
Karpathy LLM Wiki 패턴 기반 지식 관리 스킬. 코드 프로젝트와 옵시디언 노트 모두 지원. Raw Source(코드·문서)를 읽어 docs/wiki/에 누적형 지식베이스를 구축·유지한다. "wiki", "위키", "ingest", "인제스트", "wiki 점검", "wiki lint", "wiki 업데이트", "문서화해줘", "아키텍처 설명해줘", "어떻게 동작해?" 키워드로 트리거. qmd 검색 도구와 연동하여 토큰 절약 + 높은 검색 정확도 제공.
development
Backend 없이 Mock 데이터 기반 프로토타입 UI를 생성·검증하는 기획 구체화 산출물 스킬. Vue 3 + TypeScript + NuxtUI v4. 별도 ui-proto 저장소(예: peach-ui-proto-backoffice)의 src/modules-task 폴더에 태스크별 화면을 누적한다. "프로토타입 만들어줘", "Mock 화면", "proto UI", "기획 화면 빠르게", "ui-proto 작업", "기획자 검토용 화면", "태스크 폴더 추가", "팀 ui-proto" 키워드로 트리거. 기획자가 직접 작업하는 화면 기획 + 현업 검토용 산출물 스킬이며, 개발용 Spec은 후속 peach-gen-spec이 생성한다. 실제 API 연동이 필요하면 peach-gen-ui를 사용한다.
development
Spec 필수 + ui-proto 보조 기준으로 E2E 환경 세팅 + 단위 시나리오 자동 분할 + 통합 suite 생성 + 실행 + 부합 검증을 한 번에 처리하는 통합 팀 스킬. "e2e 검증해줘", "통합 검증", "전체 흐름 테스트", "팀 e2e", "스펙대로 동작하는지 확인", "ui-proto와 다른지 확인", "최종 검증", "릴리스 전 검증" 키워드로 트리거. peach-e2e-setup + peach-e2e-scenario + peach-e2e-suite 3개 스킬의 패턴을 공유하고, 검증 기준은 본 프로젝트 Spec을 필수 기준으로 삼고, ui-proto는 화면/흐름 보조 기준으로 사용한다. peach-team-dev와 함께 하나의 개발-검증 납품 흐름을 이루되, 구현 컨텍스트와 검증 컨텍스트는 분리한다. 팀 실행 방식은 E2E 범위와 런타임 도구 가용성을 분석해 single-agent / role-queue / agent-team 중 선택한다. 단순 코드 동작 검증을 넘어, 기획 의도와 부합하는지 자동 검증하는 게 핵심 차별점.