@su-record/vibe 2.8.24 → 2.8.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/config.d.ts +17 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +207 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +2 -0
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +78 -54
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +13 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +280 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +33 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +1 -0
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
- package/dist/cli/setup/GlobalInstaller.js +7 -7
- package/dist/cli/setup/GlobalInstaller.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +18 -12
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/infra/lib/ContextCompressor.d.ts.map +1 -1
- package/dist/infra/lib/ContextCompressor.js +10 -4
- package/dist/infra/lib/ContextCompressor.js.map +1 -1
- package/dist/infra/lib/ProjectCache.d.ts +2 -2
- package/dist/infra/lib/ProjectCache.d.ts.map +1 -1
- package/dist/infra/lib/ProjectCache.js +4 -3
- package/dist/infra/lib/ProjectCache.js.map +1 -1
- package/dist/infra/lib/utils.d.ts +24 -0
- package/dist/infra/lib/utils.d.ts.map +1 -1
- package/dist/infra/lib/utils.js +41 -0
- package/dist/infra/lib/utils.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.d.ts +3 -0
- package/dist/infra/orchestrator/SmartRouter.d.ts.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.js +11 -1
- package/dist/infra/orchestrator/SmartRouter.js.map +1 -1
- package/dist/infra/orchestrator/SmartRouter.test.d.ts +5 -0
- package/dist/infra/orchestrator/SmartRouter.test.d.ts.map +1 -0
- package/dist/infra/orchestrator/SmartRouter.test.js +457 -0
- package/dist/infra/orchestrator/SmartRouter.test.js.map +1 -0
- package/dist/tools/convention/analyzeComplexity.d.ts.map +1 -1
- package/dist/tools/convention/analyzeComplexity.js +18 -10
- package/dist/tools/convention/analyzeComplexity.js.map +1 -1
- package/dist/tools/convention/checkCouplingCohesion.d.ts.map +1 -1
- package/dist/tools/convention/checkCouplingCohesion.js +14 -6
- package/dist/tools/convention/checkCouplingCohesion.js.map +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.d.ts.map +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js +1 -1
- package/dist/tools/semantic/analyzeDependencyGraph.js.map +1 -1
- package/dist/tools/semantic/findReferences.d.ts.map +1 -1
- package/dist/tools/semantic/findReferences.js +13 -13
- package/dist/tools/semantic/findReferences.js.map +1 -1
- package/dist/tools/semantic/findSymbol.d.ts.map +1 -1
- package/dist/tools/semantic/findSymbol.js +12 -13
- package/dist/tools/semantic/findSymbol.js.map +1 -1
- package/dist/tools/semantic/lsp.d.ts.map +1 -1
- package/dist/tools/semantic/lsp.js +22 -14
- package/dist/tools/semantic/lsp.js.map +1 -1
- package/hooks/hooks.json +29 -0
- package/hooks/scripts/__tests__/keyword-detector.test.js +199 -0
- package/hooks/scripts/__tests__/pre-tool-guard.test.js +286 -0
- package/hooks/scripts/__tests__/sentinel-guard.test.js +210 -0
- package/hooks/scripts/auto-commit.js +65 -0
- package/hooks/scripts/auto-format.js +64 -0
- package/hooks/scripts/auto-test.js +81 -0
- package/hooks/scripts/code-check.js +139 -0
- package/hooks/scripts/command-log.js +32 -0
- package/hooks/scripts/context-save.js +60 -6
- package/hooks/scripts/hud-status.js +32 -2
- package/hooks/scripts/llm-orchestrate.js +95 -17
- package/hooks/scripts/pr-test-gate.js +52 -0
- package/package.json +1 -1
- package/skills/agents-md/rubrics/what-to-keep.md +49 -0
- package/skills/agents-md/templates/agents-md.md +36 -0
- package/skills/arch-guard/agents/detector.md +48 -0
- package/skills/arch-guard/agents/reporter.md +48 -0
- package/skills/arch-guard/agents/rule-generator.md +49 -0
- package/skills/arch-guard/agents/violation-checker.md +51 -0
- package/skills/arch-guard/frameworks/clean-architecture.md +108 -0
- package/skills/arch-guard/frameworks/solid.md +102 -0
- package/skills/arch-guard/scripts/check-boundaries.js +90 -0
- package/skills/arch-guard/templates/arch-rules.json +47 -0
- package/skills/arch-guard/templates/violation-report.md +53 -0
- package/skills/brand-assets/rubrics/asset-checklist.md +98 -0
- package/skills/brand-assets/templates/brand-guide.md +161 -0
- package/skills/capability-loop/agents/capability-designer.md +61 -0
- package/skills/capability-loop/agents/failure-analyst.md +55 -0
- package/skills/capability-loop/agents/implementer.md +50 -0
- package/skills/capability-loop/agents/tester.md +53 -0
- package/skills/capability-loop/templates/capability-spec.md +118 -0
- package/skills/capability-loop/templates/failure-analysis.md +118 -0
- package/skills/characterization-test/agents/behavior-capturer.md +50 -0
- package/skills/characterization-test/agents/coverage-checker.md +54 -0
- package/skills/characterization-test/agents/reporter.md +50 -0
- package/skills/characterization-test/agents/test-writer.md +49 -0
- package/skills/characterization-test/rubrics/coverage-criteria.md +53 -0
- package/skills/characterization-test/templates/test-template.ts +101 -0
- package/skills/claude-md-guide/rubrics/anti-patterns.md +88 -0
- package/skills/claude-md-guide/templates/claude-md.md +54 -0
- package/skills/commerce-patterns/rubrics/checkout-flow.md +48 -0
- package/skills/commerce-patterns/templates/product-schema.md +85 -0
- package/skills/commit-push-pr/agents/change-analyzer.md +55 -0
- package/skills/commit-push-pr/agents/message-writer.md +50 -0
- package/skills/commit-push-pr/agents/pr-writer.md +58 -0
- package/skills/commit-push-pr/agents/reviewer.md +52 -0
- package/skills/commit-push-pr/rubrics/commit-message.md +73 -0
- package/skills/commit-push-pr/templates/pr-body.md +63 -0
- package/skills/context7-usage/rubrics/when-to-use.md +50 -0
- package/skills/create-prd/agents/edge-case-finder.md +48 -0
- package/skills/create-prd/agents/prioritizer.md +60 -0
- package/skills/create-prd/agents/requirements-writer.md +48 -0
- package/skills/create-prd/agents/researcher.md +55 -0
- package/skills/create-prd/agents/reviewer.md +54 -0
- package/skills/create-prd/frameworks/jobs-to-be-done.md +96 -0
- package/skills/create-prd/frameworks/rice-scoring.md +97 -0
- package/skills/create-prd/orchestrator.md +70 -0
- package/skills/create-prd/rubrics/completeness.md +58 -0
- package/skills/create-prd/templates/prd.md +139 -0
- package/skills/design-audit/agents/a11y-auditor.md +43 -0
- package/skills/design-audit/agents/performance-auditor.md +46 -0
- package/skills/design-audit/agents/responsive-auditor.md +46 -0
- package/skills/design-audit/agents/scorer.md +47 -0
- package/skills/design-audit/agents/slop-detector.md +47 -0
- package/skills/design-audit/frameworks/core-web-vitals.md +107 -0
- package/skills/design-audit/frameworks/wcag-checklist.md +64 -0
- package/skills/design-audit/orchestrator.md +64 -0
- package/skills/design-audit/rubrics/ai-slop-patterns.md +83 -0
- package/skills/design-audit/rubrics/scoring.md +63 -0
- package/skills/design-audit/templates/report.md +88 -0
- package/skills/design-critique/rubrics/ux-heuristics.md +143 -0
- package/skills/design-critique/templates/critique-report.md +86 -0
- package/skills/design-distill/templates/design-system.md +132 -0
- package/skills/design-normalize/rubrics/token-naming.md +117 -0
- package/skills/design-normalize/templates/token-audit.md +89 -0
- package/skills/design-polish/rubrics/polish-checklist.md +68 -0
- package/skills/design-polish/templates/polish-report.md +64 -0
- package/skills/design-teach/rubrics/brand-personality.md +73 -0
- package/skills/design-teach/templates/design-context.json +36 -0
- package/skills/e2e-commerce/templates/test-scenarios.md +170 -0
- package/skills/event-comms/templates/email-invite.md +99 -0
- package/skills/event-comms/templates/sns-post.md +133 -0
- package/skills/event-ops/rubrics/contingency.md +85 -0
- package/skills/event-ops/templates/d-day-checklist.md +65 -0
- package/skills/event-planning/rubrics/timeline.md +70 -0
- package/skills/event-planning/templates/event-plan.md +91 -0
- package/skills/exec-plan/agents/decomposer.md +47 -0
- package/skills/exec-plan/agents/dependency-mapper.md +44 -0
- package/skills/exec-plan/agents/estimator.md +43 -0
- package/skills/exec-plan/agents/validator.md +55 -0
- package/skills/exec-plan/orchestrator.md +70 -0
- package/skills/exec-plan/rubrics/complexity-scoring.md +75 -0
- package/skills/exec-plan/templates/plan.md +147 -0
- package/skills/git-worktree/rubrics/when-to-use.md +55 -0
- package/skills/handoff/agents/context-summarizer.md +51 -0
- package/skills/handoff/agents/document-writer.md +63 -0
- package/skills/handoff/agents/state-collector.md +53 -0
- package/skills/handoff/agents/verifier.md +48 -0
- package/skills/handoff/rubrics/completeness.md +62 -0
- package/skills/handoff/templates/handoff.md +107 -0
- package/skills/parallel-research/agents/best-practices.md +43 -0
- package/skills/parallel-research/agents/codebase-patterns.md +46 -0
- package/skills/parallel-research/agents/framework-docs.md +45 -0
- package/skills/parallel-research/agents/security-advisory.md +46 -0
- package/skills/parallel-research/agents/synthesizer.md +52 -0
- package/skills/parallel-research/experts/best-practices.md +50 -0
- package/skills/parallel-research/experts/codebase-patterns.md +70 -0
- package/skills/parallel-research/experts/framework-docs.md +65 -0
- package/skills/parallel-research/experts/security-advisory.md +69 -0
- package/skills/parallel-research/orchestrator.md +65 -0
- package/skills/parallel-research/templates/synthesis.md +101 -0
- package/skills/prioritization-frameworks/rubrics/frameworks.md +79 -0
- package/skills/prioritization-frameworks/templates/scoring-matrix.md +69 -0
- package/skills/priority-todos/rubrics/prioritization.md +70 -0
- package/skills/priority-todos/templates/todo-board.md +59 -0
- package/skills/seo-checklist/frameworks/structured-data.md +153 -0
- package/skills/seo-checklist/rubrics/content-seo.md +42 -0
- package/skills/seo-checklist/rubrics/technical-seo.md +48 -0
- package/skills/techdebt/agents/analyzer.md +50 -0
- package/skills/techdebt/agents/fixer.md +41 -0
- package/skills/techdebt/agents/reviewer.md +47 -0
- package/skills/techdebt/agents/scanner.md +44 -0
- package/skills/techdebt/orchestrator.md +70 -0
- package/skills/techdebt/rubrics/severity.md +51 -0
- package/skills/techdebt/scripts/scan.js +90 -0
- package/skills/techdebt/templates/report.md +86 -0
- package/skills/tool-fallback/rubrics/fallback-chain.md +58 -0
- package/skills/typescript-advanced-types/rubrics/type-patterns.md +109 -0
- package/skills/ui-ux-pro-max/rubrics/interaction-states.md +83 -0
- package/skills/ui-ux-pro-max/rubrics/responsive-breakpoints.md +99 -0
- package/skills/user-personas/rubrics/research-methods.md +56 -0
- package/skills/user-personas/templates/persona.md +89 -0
- package/skills/vercel-react-best-practices/rubrics/performance.md +82 -0
- package/skills/vercel-react-best-practices/rubrics/server-components.md +86 -0
- package/skills/vibe-docs/SKILL.md +171 -0
- package/skills/vibe-docs/templates/architecture.md +80 -0
- package/skills/vibe-docs/templates/readme.md +84 -0
- package/skills/vibe-docs/templates/release-notes.md +74 -0
- package/skills/vibe-figma/SKILL.md +122 -206
- package/skills/vibe-figma/rubrics/extraction-checklist.md +51 -0
- package/skills/vibe-figma/templates/figma-handoff.md +96 -0
- package/skills/vibe-figma-analyze/rubrics/analysis-dimensions.md +53 -0
- package/skills/vibe-figma-codegen/rubrics/code-quality.md +54 -0
- package/skills/vibe-figma-consolidate/templates/consolidation-report.md +95 -0
- package/skills/vibe-figma-convert/SKILL.md +13 -175
- package/skills/vibe-figma-convert/rubrics/conversion-rules.md +83 -0
- package/skills/vibe-figma-convert/templates/component.md +152 -0
- package/skills/vibe-figma-extract/rubrics/image-rules.md +67 -0
- package/skills/vibe-figma-frame/rubrics/frame-selection.md +55 -0
- package/skills/vibe-figma-pipeline/rubrics/pipeline-stages.md +96 -0
- package/skills/vibe-figma-rules/rubrics/naming-conventions.md +70 -0
- package/skills/vibe-figma-style/rubrics/style-mapping.md +100 -0
- package/skills/video-production/rubrics/quality-checklist.md +58 -0
- package/skills/video-production/templates/production-plan.md +104 -0
|
@@ -13,22 +13,11 @@ tier: standard
|
|
|
13
13
|
❌ CSS로 이미지 재현 (삼각형/원/gradient로 나무/눈사람/배경 그리기)
|
|
14
14
|
❌ 이미지 다운로드 없이 코드 생성 진행
|
|
15
15
|
❌ placeholder / 빈 template / 빈 src="" 남기기
|
|
16
|
-
❌ CSS 값을 추정 (참조
|
|
16
|
+
❌ CSS 값을 추정 (참조 코드의 Tailwind 클래스에 정확한 값이 있음)
|
|
17
17
|
❌ 브라우저 기본 스타일(검은색 16px)로 보이는 텍스트
|
|
18
|
-
❌ 핵심 에셋만 다운로드 (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
### 스타일 배치 규칙 (모드별)
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
일반 모드:
|
|
25
|
-
❌ 컴포넌트 파일 안에 <style> 블록 / 인라인 style=""
|
|
26
|
-
✅ 외부 SCSS 파일에만 스타일 작성
|
|
27
|
-
|
|
28
|
-
직역 모드:
|
|
29
|
-
✅ <style scoped> 블록 허용 (Tailwind→CSS 1:1 변환)
|
|
30
|
-
✅ 인라인 :style="" 허용 (maskImage 등 동적 값)
|
|
31
|
-
❌ 외부 SCSS 파일에 추상화된 스타일 작성 (원본 좌표 손실)
|
|
18
|
+
❌ 핵심 에셋만 다운로드 (const img... 전부 다운로드)
|
|
19
|
+
❌ 컴포넌트 파일 안에 <style> 블록 / 인라인 style=""
|
|
20
|
+
✅ 외부 SCSS 파일에만 스타일 작성
|
|
32
21
|
```
|
|
33
22
|
|
|
34
23
|
## 전체 플로우
|
|
@@ -62,7 +51,7 @@ tier: standard
|
|
|
62
51
|
4. 디렉토리 생성:
|
|
63
52
|
- components/{feature}/
|
|
64
53
|
- public/images/{feature}/ (또는 static/images/{feature}/)
|
|
65
|
-
- styles/{feature}/ (layout/, components/ 하위)
|
|
54
|
+
- styles/{feature}/ (layout/, components/ 하위)
|
|
66
55
|
```
|
|
67
56
|
|
|
68
57
|
---
|
|
@@ -189,225 +178,164 @@ Phase 1 완료 조건:
|
|
|
189
178
|
|
|
190
179
|
---
|
|
191
180
|
|
|
192
|
-
## Phase 2: Design
|
|
181
|
+
## Phase 2: Design
|
|
193
182
|
|
|
194
|
-
Phase 1
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
모바일 퍼스트 강제. CSS base = 최소 뷰포트, @media (min-width:)로 확장.
|
|
183
|
+
Phase 1 컴포넌트에 **이미지 + 스타일**을 입힌다.
|
|
184
|
+
모바일 퍼스트. base = 최소 뷰포트, @media (min-width:)로 확장.
|
|
198
185
|
|
|
199
186
|
사용자에게 질문한다:
|
|
200
187
|
- question: "베이스 디자인(모바일) Figma URL을 입력해주세요."
|
|
201
188
|
- options 제공 금지 — 자유 텍스트 입력만 허용
|
|
202
189
|
|
|
203
|
-
→
|
|
190
|
+
→ 2-1 → 2-2 섹션 루프 실행.
|
|
204
191
|
|
|
205
|
-
|
|
192
|
+
완료 후 다시 질문:
|
|
206
193
|
- question: "다음 브레이크포인트 디자인 URL을 입력해주세요. (없으면 '없음')"
|
|
207
|
-
-
|
|
208
|
-
|
|
209
|
-
→ URL 입력 시: @media (min-width:) 레이어 추가 후 다시 질문
|
|
194
|
+
→ URL 입력 시: 2-3 반응형 추가 후 다시 질문
|
|
210
195
|
→ "없음" 응답 시: Phase 3으로
|
|
211
196
|
|
|
212
|
-
|
|
213
|
-
예: 720px → 480px(스케일), 2560px → 1920px(스케일) → @media (min-width: 1024px)
|
|
214
|
-
|
|
215
|
-
### 2-1. 스타일 파일 내용 작성 (첫 섹션 전)
|
|
197
|
+
### 2-1. SCSS Setup + 등록 (첫 섹션 전)
|
|
216
198
|
|
|
217
199
|
```
|
|
218
|
-
|
|
219
|
-
styles/{feature}/index.scss ← @
|
|
220
|
-
styles/{feature}/_tokens.scss ← 빈 파일 (
|
|
200
|
+
SCSS 파일 기본 내용 Write:
|
|
201
|
+
styles/{feature}/index.scss ← @import 진입점
|
|
202
|
+
styles/{feature}/_tokens.scss ← 빈 파일 (섹션마다 채움)
|
|
221
203
|
styles/{feature}/_mixins.scss ← breakpoint mixin
|
|
222
|
-
styles/{feature}/_base.scss ←
|
|
204
|
+
styles/{feature}/_base.scss ← 루트 클래스 (.winterPcbang 등)
|
|
223
205
|
styles/{feature}/layout/ ← 디렉토리
|
|
224
206
|
styles/{feature}/components/ ← 디렉토리
|
|
225
|
-
```
|
|
226
207
|
|
|
227
|
-
|
|
208
|
+
스타일 등록 (BLOCKING — 미등록 시 섹션 루프 진행 금지):
|
|
209
|
+
Grep "{feature}/index.scss" → 이미 등록되어 있으면 건너뜀.
|
|
228
210
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
비정형 지표 (하나라도 해당 → 해당 섹션 직역 모드):
|
|
234
|
-
□ 에셋 URL 15개 이상
|
|
235
|
-
□ 소수점 좌표 사용 (left-[117.13px], top-[373.65px])
|
|
236
|
-
□ mix-blend-mode 사용 (mix-blend-lighten, mix-blend-multiply, mix-blend-hue)
|
|
237
|
-
□ rotate/scale 변환 사용 (rotate-[149.7deg], -scale-y-100)
|
|
238
|
-
□ mask-image 사용
|
|
239
|
-
□ blur 필터 사용 (blur-[3.5px])
|
|
240
|
-
□ 2560px 이상 원본 해상도에서 트리밍된 BG 구조
|
|
241
|
-
|
|
242
|
-
정형 지표 (전부 해당 → 해당 섹션 일반 모드):
|
|
243
|
-
□ flex/grid 기반 정형 레이아웃
|
|
244
|
-
□ 에셋 URL 10개 미만
|
|
245
|
-
□ absolute 좌표 없거나 정수값만
|
|
246
|
-
□ mix-blend/rotate/mask/blur 미사용
|
|
247
|
-
|
|
248
|
-
섹션별 판정 결과 테이블 출력:
|
|
249
|
-
┌──────────┬──────────┐
|
|
250
|
-
│ 섹션 │ 모드 │
|
|
251
|
-
├──────────┼──────────┤
|
|
252
|
-
│ Hero │ 직역 │
|
|
253
|
-
│ KID │ 직역 │
|
|
254
|
-
│ Daily │ 직역 │
|
|
255
|
-
│ Caution │ 일반 │
|
|
256
|
-
│ ... │ ... │
|
|
257
|
-
└──────────┴──────────┘
|
|
258
|
-
|
|
259
|
-
혼합 섹션 (배경=비정형, 콘텐츠=정형):
|
|
260
|
-
→ 직역 모드 적용 (비정형이 하나라도 있으면 직역)
|
|
261
|
-
→ 콘텐츠 영역의 반복 패턴(v-for 등)은 직역 내에서 유지
|
|
262
|
-
```
|
|
211
|
+
■ 신규 프로젝트 (--new):
|
|
212
|
+
루트 페이지 파일에서 직접 로드:
|
|
213
|
+
pages/{feature}.vue → <style lang="scss" src="~/assets/scss/{feature}/index.scss" />
|
|
214
|
+
app/{feature}/page.tsx → import '~/styles/{feature}/index.scss'
|
|
263
215
|
|
|
264
|
-
|
|
216
|
+
■ 기존 프로젝트 (업데이트):
|
|
217
|
+
Grep "\.scss\|\.css" in nuxt.config.*/next.config.*/vite.config.*/main.ts
|
|
218
|
+
→ 기존 방식과 동일하게 등록
|
|
265
219
|
|
|
266
|
-
|
|
267
|
-
get_design_context 타임아웃 방지:
|
|
268
|
-
|
|
269
|
-
섹션 높이가 1500px 이상이면 (모바일/PC 무관):
|
|
270
|
-
사전 분할: get_design_context 호출 전에 먼저 분할
|
|
271
|
-
1. get_metadata(섹션 nodeId)로 하위 노드 목록 확보
|
|
272
|
-
2. 하위 노드별로 get_design_context 호출 (분할)
|
|
273
|
-
3. 결과를 합쳐서 하나의 섹션으로 처리
|
|
274
|
-
|
|
275
|
-
타임아웃 발생 시 (분할 없이 호출한 경우):
|
|
276
|
-
1회 재시도 (excludeScreenshot: true)
|
|
277
|
-
→ 실패 시 즉시 분할 전략으로 전환 (3회 반복 금지)
|
|
278
|
-
→ 분할도 불가하면 get_screenshot + 스크린샷 기반 구현
|
|
279
|
-
(이 경우 CSS 값은 스크린샷에서 추정 — 품질 하락 감수)
|
|
280
|
-
|
|
281
|
-
실전 데이터 (PUBG 겨울 PC방 기준):
|
|
282
|
-
정상 응답: ~900px 이하 (KID 238px, Caution 880px, Anchor 652px)
|
|
283
|
-
타임아웃: 2000px+ (Daily 2372~3604, PlayTime 2000~2613, Exchange 2832~4342)
|
|
284
|
-
파일 저장: Hero 1280px (92K~130K chars — 에셋 40개로 크기 큼)
|
|
220
|
+
검증: Grep "{feature}/index.scss" in 프로젝트 전체 → 0건이면 실패
|
|
285
221
|
```
|
|
286
222
|
|
|
287
|
-
### 2-
|
|
223
|
+
### 2-2. 섹션 루프
|
|
288
224
|
|
|
289
|
-
**각
|
|
225
|
+
**각 섹션을 순서대로, 한 섹션을 완전히 완료한 후 다음으로.**
|
|
290
226
|
|
|
291
|
-
#### a.
|
|
227
|
+
#### a. 참조 코드 획득
|
|
292
228
|
|
|
293
229
|
```
|
|
294
230
|
get_design_context(fileKey, 섹션.nodeId)
|
|
295
231
|
|
|
296
|
-
|
|
297
|
-
- const img변수명 = '
|
|
298
|
-
- React+Tailwind JSX
|
|
299
|
-
- 스크린샷 (
|
|
300
|
-
- data-name 속성 (레이어 이름: "BG", "Title"
|
|
232
|
+
반환:
|
|
233
|
+
- const img변수명 = 'URL' (이미지 에셋)
|
|
234
|
+
- React+Tailwind JSX (HTML 구조 + CSS 값)
|
|
235
|
+
- 스크린샷 (시각 기준점)
|
|
236
|
+
- data-name 속성 (레이어 이름: "BG", "Title" 등)
|
|
301
237
|
|
|
302
|
-
|
|
238
|
+
큰 섹션 (높이 1500px+):
|
|
239
|
+
get_metadata로 하위 노드 목록 → 하위 단위로 get_design_context 분할 호출
|
|
240
|
+
타임아웃 시: 1회 재시도 (excludeScreenshot: true) → 실패 시 분할
|
|
303
241
|
```
|
|
304
242
|
|
|
305
|
-
#### b. 이미지
|
|
243
|
+
#### b. 이미지 다운로드 (BLOCKING)
|
|
306
244
|
|
|
307
245
|
```
|
|
308
|
-
|
|
246
|
+
참조 코드의 모든 const img... URL을 추출 → 다운로드 → 검증.
|
|
247
|
+
|
|
248
|
+
변수명 → 파일명: imgSnowParticle12 → snow-particle-12.webp
|
|
249
|
+
다운로드: curl -sL "{url}" -o images/{feature}/{파일명}
|
|
250
|
+
검증: ls -la → 모든 파일 존재 + 0byte 아닌지
|
|
309
251
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
하나라도
|
|
252
|
+
이미지 매핑 생성:
|
|
253
|
+
imageMap = { imgTitle: '/images/{feature}/title.webp', ... }
|
|
254
|
+
|
|
255
|
+
전부 완료해야 c 단계로 진행. 하나라도 실패 → 코드 생성 금지.
|
|
314
256
|
```
|
|
315
257
|
|
|
316
|
-
#### c.
|
|
258
|
+
#### c. SCSS 작성
|
|
317
259
|
|
|
318
260
|
```
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
styles/{feature}/_tokens.scss ← 새 토큰 추가
|
|
261
|
+
참조 코드의 Tailwind 클래스에서 CSS 값을 추출하여 외부 SCSS에 작성.
|
|
262
|
+
vibe-figma-extract의 Tailwind→CSS 변환표 참조.
|
|
263
|
+
|
|
264
|
+
CSS 변수 패턴 처리:
|
|
265
|
+
font-[family-name:var(--font/family/pretendard,...)] → fallback 값 사용
|
|
266
|
+
text-[length:var(--font/size/heading/24,24px)] → 24px
|
|
267
|
+
text-[color:var(--color/grayscale/300,#dadce3)] → #dadce3
|
|
268
|
+
|
|
269
|
+
scaleFactor 적용:
|
|
270
|
+
px 값 → × scaleFactor (font-size, padding, margin, gap, width, height, border-radius)
|
|
271
|
+
적용 안 함 → color, opacity, font-weight, z-index, line-height(단위 없음), % 값
|
|
272
|
+
|
|
273
|
+
출력 파일:
|
|
274
|
+
styles/{feature}/layout/_{section}.scss
|
|
275
|
+
→ position, display, flex, width, height, padding, overflow, z-index, background-image
|
|
276
|
+
styles/{feature}/components/_{section}.scss
|
|
277
|
+
→ font-size, font-weight, color, line-height, letter-spacing, text-align,
|
|
278
|
+
border, border-radius, box-shadow, opacity
|
|
279
|
+
styles/{feature}/_tokens.scss
|
|
280
|
+
→ 새로 발견된 색상/폰트/스페이싱 토큰 추가
|
|
281
|
+
|
|
282
|
+
BG 레이어 패턴 (참조 코드에서 absolute + inset-0 + object-cover):
|
|
283
|
+
.{section}Bg → position: absolute; inset: 0; z-index: 0;
|
|
284
|
+
.{section}Content → position: relative; z-index: 1;
|
|
285
|
+
|
|
286
|
+
index.scss에 새 섹션 @import 추가.
|
|
346
287
|
```
|
|
347
288
|
|
|
348
|
-
#### d.
|
|
289
|
+
#### d. template 업데이트
|
|
349
290
|
|
|
350
291
|
```
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
- 배경 이미지 섹션은 Multi-Layer 구조 (.{section}Bg + .{section}Content)
|
|
372
|
-
- 클래스명을 외부 스타일 파일의 셀렉터와 매칭
|
|
373
|
-
- Phase 1의 기능 요소(v-for, @click, v-if)를 새 구조에 재배치
|
|
374
|
-
|
|
375
|
-
컴포넌트에 <style> 블록 없음. 스타일은 전부 외부 파일.
|
|
292
|
+
Phase 1 컴포넌트의 template을 참조 코드 기반으로 리팩토링.
|
|
293
|
+
script(JSDoc, 인터페이스, 목 데이터, 핸들러)는 보존.
|
|
294
|
+
|
|
295
|
+
1. 참조 코드의 HTML 구조를 프로젝트 스택으로 변환:
|
|
296
|
+
className → class, onClick → @click, {조건 && <X/>} → v-if 등
|
|
297
|
+
|
|
298
|
+
2. 이미지 경로를 imageMap으로 교체:
|
|
299
|
+
src={imgTitle} → src="/images/{feature}/title.webp"
|
|
300
|
+
|
|
301
|
+
3. BG 레이어 구조 적용:
|
|
302
|
+
.{section}Bg div (배경) + .{section}Content div (콘텐츠)
|
|
303
|
+
|
|
304
|
+
4. Phase 1 기능 요소 재배치:
|
|
305
|
+
v-for, @click, v-if, $emit 등을 새 구조의 적절한 위치에 배치
|
|
306
|
+
|
|
307
|
+
5. 접근성:
|
|
308
|
+
장식 이미지 → alt="" aria-hidden="true"
|
|
309
|
+
콘텐츠 이미지 → alt="설명적 텍스트"
|
|
310
|
+
|
|
311
|
+
컴포넌트에 <style> 블록 없음. 스타일은 전부 외부 SCSS.
|
|
376
312
|
```
|
|
377
313
|
|
|
378
314
|
#### e. 섹션 검증
|
|
379
315
|
|
|
380
316
|
```
|
|
381
|
-
|
|
382
|
-
□
|
|
383
|
-
□
|
|
384
|
-
□
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
□ Read: 외부 스타일 파일에 font-size, color, background-image 존재
|
|
392
|
-
|
|
393
|
-
직역 모드 추가 체크:
|
|
394
|
-
□ Read: <style scoped> 블록에 position, transform, mix-blend-mode 존재
|
|
395
|
-
□ 에셋 수 = 다운로드된 이미지 수 (누락 0)
|
|
396
|
-
|
|
397
|
-
실패 시 → 해당 항목 수정 → 재검증
|
|
317
|
+
Grep 체크:
|
|
318
|
+
□ "figma.com/api" in 생성 파일 → 0건
|
|
319
|
+
□ 'src=""' in 컴포넌트 파일 → 0건
|
|
320
|
+
□ "<style" in 컴포넌트 파일 → 0건
|
|
321
|
+
|
|
322
|
+
Read 체크:
|
|
323
|
+
□ 외부 SCSS 파일에 font-size, color 존재 (브라우저 기본 스타일 방지)
|
|
324
|
+
□ 이미지 파일 수 = const img... 수 (누락 0)
|
|
325
|
+
|
|
326
|
+
실패 → 수정 → 재검증
|
|
398
327
|
```
|
|
399
328
|
|
|
400
|
-
### 2-3. 두 번째 URL
|
|
329
|
+
### 2-3. 반응형 (두 번째 URL부터)
|
|
401
330
|
|
|
402
331
|
```
|
|
403
|
-
두 번째 이후 URL
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
기존 코드/스타일 삭제 금지
|
|
332
|
+
두 번째 이후 URL: 기존 스타일 유지 + @media 추가만.
|
|
333
|
+
|
|
334
|
+
같은 값 → 유지
|
|
335
|
+
다른 px 값 → @media (min-width: $bp-desktop) 오버라이드
|
|
336
|
+
다른 레이아웃 → @media 블록 추가
|
|
337
|
+
다른 배경 이미지 → @media 이미지 분기
|
|
338
|
+
기존 코드/스타일 삭제 금지
|
|
411
339
|
```
|
|
412
340
|
|
|
413
341
|
---
|
|
@@ -415,27 +343,15 @@ vibe-figma-extract 스킬 참조.
|
|
|
415
343
|
## Phase 3: Verification
|
|
416
344
|
|
|
417
345
|
```
|
|
418
|
-
|
|
419
|
-
□
|
|
420
|
-
□
|
|
421
|
-
□
|
|
422
|
-
□
|
|
423
|
-
□ Grep: 'src=""' in components/{feature}/ → 0건
|
|
424
|
-
□ Glob: images/{feature}/*.webp → 이미지 파일 존재
|
|
346
|
+
Grep 체크:
|
|
347
|
+
□ "figma.com/api" in 모든 생성 파일 → 0건
|
|
348
|
+
□ "<style" in components/{feature}/ → 0건
|
|
349
|
+
□ 'src=""' in components/{feature}/ → 0건
|
|
350
|
+
□ Glob: images/{feature}/ → 이미지 파일 존재
|
|
425
351
|
|
|
426
352
|
시각 검증:
|
|
427
|
-
각
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
P1 (필수 수정): 이미지 누락, 레이아웃 구조 다름, 텍스트 스타일 미적용
|
|
433
|
-
P2 (권장 수정): 미세 간격 차이, 미세 색상 차이
|
|
434
|
-
|
|
435
|
-
P1 → 수정 → 재검증 (P1=0 될 때까지, 제한 없음)
|
|
436
|
-
|
|
437
|
-
완료 후:
|
|
438
|
-
Design Quality Pipeline 안내:
|
|
439
|
-
/design-normalize → /design-audit (quick)
|
|
440
|
-
+ /design-critique → /design-polish (thorough)
|
|
353
|
+
각 섹션: get_screenshot(nodeId) vs dev 서버/preview 비교
|
|
354
|
+
P1 (필수): 이미지 누락, 레이아웃 구조 다름, 텍스트 스타일 미적용
|
|
355
|
+
P2 (권장): 미세 간격, 미세 색상 차이
|
|
356
|
+
→ P1 수정 → 재검증 (P1=0 될 때까지)
|
|
441
357
|
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Extraction Checklist — What to Extract from Figma
|
|
2
|
+
|
|
3
|
+
## Colors
|
|
4
|
+
|
|
5
|
+
- [ ] Background colors (`bg-[#...]`) — section, card, overlay backgrounds
|
|
6
|
+
- [ ] Text colors (`text-[#...]`) — heading, body, label, disabled states
|
|
7
|
+
- [ ] Border colors (`border-[#...]`) — dividers, input outlines
|
|
8
|
+
- [ ] Overlay/alpha colors (`rgba(...)`) — modals, hover states
|
|
9
|
+
- [ ] Gradient stops — linear/radial gradients with exact hex + stop positions
|
|
10
|
+
- [ ] Blend mode colors — any element using `mix-blend-*`
|
|
11
|
+
|
|
12
|
+
## Spacing
|
|
13
|
+
|
|
14
|
+
- [ ] Section padding (`pt-[Npx]`, `pb-[Npx]`, `px-[Npx]`)
|
|
15
|
+
- [ ] Component gaps (`gap-[Npx]`) — flex/grid item spacing
|
|
16
|
+
- [ ] Inner padding (`p-[Npx]`, `px-[Npx]`) — cards, buttons
|
|
17
|
+
- [ ] Margin overrides (`mt-`, `mb-`, `ml-`, `mr-`)
|
|
18
|
+
- [ ] Absolute offsets (`top-[Npx]`, `left-[Npx]`) — positioned layers
|
|
19
|
+
|
|
20
|
+
## Typography
|
|
21
|
+
|
|
22
|
+
- [ ] Font family — extract from `font-[family-name:var(--...)]` fallback
|
|
23
|
+
- [ ] Font sizes (`text-[Npx]`) — all unique sizes per role (heading, sub, body, caption)
|
|
24
|
+
- [ ] Font weights (`font-black/bold/semibold/medium/normal`)
|
|
25
|
+
- [ ] Line heights (`leading-[N]` or `leading-[Npx]`)
|
|
26
|
+
- [ ] Letter spacing (`tracking-[Npx]` or `tracking-[-Npx]`)
|
|
27
|
+
- [ ] Text alignment (`text-center`, `text-left`, `text-right`)
|
|
28
|
+
- [ ] Text decoration / transform if present
|
|
29
|
+
|
|
30
|
+
## Components
|
|
31
|
+
|
|
32
|
+
- [ ] Button variants — primary, secondary, disabled; exact size + color + radius
|
|
33
|
+
- [ ] Card structures — border, shadow (`shadow-[...]`), border-radius
|
|
34
|
+
- [ ] Icon dimensions — width/height from `w-[Npx] h-[Npx]`
|
|
35
|
+
- [ ] Badges/tags — background color, font, padding, radius
|
|
36
|
+
- [ ] Input fields — border, focus ring, placeholder color
|
|
37
|
+
- [ ] Navigation — GNB/footer height, link styles
|
|
38
|
+
|
|
39
|
+
## Assets
|
|
40
|
+
|
|
41
|
+
- [ ] All `const img...` URL variables in reference code — zero omissions
|
|
42
|
+
- [ ] Background images vs content images vs decorative images classified
|
|
43
|
+
- [ ] Image dimensions noted for `width`/`height` attributes
|
|
44
|
+
- [ ] Sprite/overflow images identified (left negative %, width >100%)
|
|
45
|
+
|
|
46
|
+
## Tokens to Create
|
|
47
|
+
|
|
48
|
+
- [ ] Color tokens for every unique hex value used more than once
|
|
49
|
+
- [ ] Spacing tokens for recurring gap/padding values
|
|
50
|
+
- [ ] Typography tokens for each font-size role
|
|
51
|
+
- [ ] Breakpoint token (`$bp-pc`) from CONFIG frame
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Figma Handoff — {{FEATURE_NAME}}
|
|
2
|
+
|
|
3
|
+
**Figma File:** {{FIGMA_FILE_URL}}
|
|
4
|
+
**Feature Key:** {{FEATURE_KEY}} (kebab-case)
|
|
5
|
+
**Date:** {{DATE}}
|
|
6
|
+
**Stack:** {{STACK}} (e.g. Vue/Nuxt + SCSS, React/Next.js + SCSS)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Design Specs
|
|
11
|
+
|
|
12
|
+
### Viewport / Scale
|
|
13
|
+
|
|
14
|
+
| Breakpoint | Design Width | Target Width | Scale Factor |
|
|
15
|
+
|-----------|-------------|-------------|-------------|
|
|
16
|
+
| Mobile (base) | {{DESIGN_MOBILE_PX}}px | {{TARGET_MOBILE_PX}}px | {{SCALE_MOBILE}} |
|
|
17
|
+
| Desktop | {{DESIGN_PC_PX}}px | {{TARGET_PC_PX}}px | {{SCALE_PC}} |
|
|
18
|
+
|
|
19
|
+
Breakpoint threshold: `@media (min-width: {{BP_PC}}px)`
|
|
20
|
+
|
|
21
|
+
### Color Tokens
|
|
22
|
+
|
|
23
|
+
| Token | Hex | Usage |
|
|
24
|
+
|-------|-----|-------|
|
|
25
|
+
| `$color-{{NAME}}` | `{{HEX}}` | {{USAGE}} |
|
|
26
|
+
|
|
27
|
+
### Typography Tokens
|
|
28
|
+
|
|
29
|
+
| Token | Figma px | Scaled px | Weight | Role |
|
|
30
|
+
|-------|---------|----------|--------|------|
|
|
31
|
+
| `$text-{{ROLE}}` | {{FIGMA_PX}}px | {{SCALED_PX}}px | {{WEIGHT}} | {{ROLE}} |
|
|
32
|
+
|
|
33
|
+
### Spacing Tokens
|
|
34
|
+
|
|
35
|
+
| Token | Figma px | Scaled px | Usage |
|
|
36
|
+
|-------|---------|----------|-------|
|
|
37
|
+
| `$space-{{NAME}}` | {{FIGMA_PX}}px | {{SCALED_PX}}px | {{USAGE}} |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Sections
|
|
42
|
+
|
|
43
|
+
| # | Section Name | Component File | Mode | Height (design) |
|
|
44
|
+
|---|-------------|---------------|------|----------------|
|
|
45
|
+
| 1 | {{SECTION_NAME}} | `components/{{FEATURE_KEY}}/{{ComponentName}}.vue` | {{MODE}} | {{HEIGHT}}px |
|
|
46
|
+
|
|
47
|
+
**Mode key:** `normal` = external SCSS | `literal` = scoped CSS (non-standard layout)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Asset Manifest
|
|
52
|
+
|
|
53
|
+
| Variable | Local Path | Type | Alt Text |
|
|
54
|
+
|----------|-----------|------|----------|
|
|
55
|
+
| `{{IMG_VAR}}` | `/images/{{FEATURE_KEY}}/{{FILE_NAME}}.webp` | {{bg\|content\|decorative}} | {{ALT}} |
|
|
56
|
+
|
|
57
|
+
Total assets: {{ASSET_COUNT}}
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## File Structure
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
components/{{FEATURE_KEY}}/
|
|
65
|
+
{{ComponentName}}.vue
|
|
66
|
+
|
|
67
|
+
public/images/{{FEATURE_KEY}}/
|
|
68
|
+
{{FILE_NAME}}.webp
|
|
69
|
+
|
|
70
|
+
styles/{{FEATURE_KEY}}/
|
|
71
|
+
index.scss
|
|
72
|
+
_tokens.scss
|
|
73
|
+
_mixins.scss
|
|
74
|
+
_base.scss
|
|
75
|
+
layout/
|
|
76
|
+
_{{section}}.scss
|
|
77
|
+
components/
|
|
78
|
+
_{{section}}.scss
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Verification Checklist
|
|
84
|
+
|
|
85
|
+
- [ ] No `figma.com/api` URLs in any generated file
|
|
86
|
+
- [ ] No `placeholder` or empty `src=""` in components
|
|
87
|
+
- [ ] No `<style>` blocks in components (normal mode)
|
|
88
|
+
- [ ] All assets downloaded and non-zero bytes
|
|
89
|
+
- [ ] Build passes without errors
|
|
90
|
+
- [ ] Screenshot comparison: P1 issues = 0
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Notes
|
|
95
|
+
|
|
96
|
+
{{NOTES}}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Analysis Dimensions — Figma Design Analysis
|
|
2
|
+
|
|
3
|
+
> This skill is merged into vibe-figma (Phase 1: Storyboard). These dimensions guide what to extract and evaluate when reading Figma frames.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
|
|
7
|
+
- [ ] Overall page structure — single column, multi-column, grid, or free-form absolute
|
|
8
|
+
- [ ] Section boundaries — identify where each distinct section starts/ends by visual grouping
|
|
9
|
+
- [ ] Container width — fixed px vs fluid (100%)
|
|
10
|
+
- [ ] Alignment system — centered, left-aligned, or asymmetric
|
|
11
|
+
- [ ] Z-layering — how many stacked layers exist (BG/content/overlay count)
|
|
12
|
+
- [ ] Overflow behavior — clip, hidden, visible, scroll
|
|
13
|
+
|
|
14
|
+
## Spacing Consistency
|
|
15
|
+
|
|
16
|
+
- [ ] Gap between sections — does a single spacing value repeat, or is each unique?
|
|
17
|
+
- [ ] Internal component padding — consistent across card variants?
|
|
18
|
+
- [ ] Icon-to-text gap — uniform within a component family?
|
|
19
|
+
- [ ] Recurring values — list values that appear 3+ times (these become spacing tokens)
|
|
20
|
+
- [ ] Irregular values — flag one-off spacings that may indicate design inconsistency
|
|
21
|
+
|
|
22
|
+
## Color Usage
|
|
23
|
+
|
|
24
|
+
- [ ] Background palette — how many distinct background colors exist?
|
|
25
|
+
- [ ] Text color roles — identify heading / body / label / disabled colors separately
|
|
26
|
+
- [ ] Accent/brand colors — primary CTA color, hover state color
|
|
27
|
+
- [ ] Transparency usage — rgba overlays, opacity layers
|
|
28
|
+
- [ ] Blend modes present — `mix-blend-lighten`, `multiply`, `hue` flag a literal-mode section
|
|
29
|
+
- [ ] Dark/light variants — does the design have both, requiring CSS variable tokens?
|
|
30
|
+
|
|
31
|
+
## Typography Hierarchy
|
|
32
|
+
|
|
33
|
+
- [ ] H1 equivalent — largest display text, font-size + weight + role
|
|
34
|
+
- [ ] H2 / section heading — size, weight, color
|
|
35
|
+
- [ ] Body text — base size, line-height, color
|
|
36
|
+
- [ ] Caption / label text — smallest size, usage context
|
|
37
|
+
- [ ] Font families — how many distinct families? Any variable fonts?
|
|
38
|
+
- [ ] Responsive scaling — does font-size change across breakpoints?
|
|
39
|
+
|
|
40
|
+
## Component Inventory
|
|
41
|
+
|
|
42
|
+
- [ ] Repeating UI patterns — cards, list items, tabs (candidates for `v-for`)
|
|
43
|
+
- [ ] State variants — default, hover, active, disabled, selected (note which states exist)
|
|
44
|
+
- [ ] Shared components — GNB, Footer, Popup (already in project or needs creation?)
|
|
45
|
+
- [ ] Interactive elements — buttons, links, inputs, toggles
|
|
46
|
+
- [ ] Decorative elements — particles, background shapes, overlay effects
|
|
47
|
+
|
|
48
|
+
## Storyboard-Specific Dimensions
|
|
49
|
+
|
|
50
|
+
- [ ] Frame classification — SPEC, CONFIG, SHARED, PAGE (by name pattern)
|
|
51
|
+
- [ ] Interaction annotations — arrows, overlay connections, state transitions in Figma
|
|
52
|
+
- [ ] Section count — total PAGE frames that need components
|
|
53
|
+
- [ ] Tall frames (1500px+) — flag for split strategy before `get_design_context`
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Code Generation Quality Checklist
|
|
2
|
+
|
|
3
|
+
> This skill is merged into vibe-figma-convert. Use this checklist to validate generated component and style files before moving to the next section.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
- [ ] Component file exists at `components/{feature}/{ComponentName}.vue` (or `.tsx`)
|
|
8
|
+
- [ ] Template is not empty — at least one visible HTML element with content
|
|
9
|
+
- [ ] No `placeholder` text remaining in any attribute or text node
|
|
10
|
+
- [ ] No `src=""` or `href=""` empty attributes
|
|
11
|
+
|
|
12
|
+
## Assets
|
|
13
|
+
|
|
14
|
+
- [ ] All `const img...` variables from reference code are replaced with local `/images/{feature}/` paths
|
|
15
|
+
- [ ] No `figma.com/api` URLs in any generated file
|
|
16
|
+
- [ ] Every image path references a file that was actually downloaded (cross-check image map)
|
|
17
|
+
- [ ] Decorative images have `alt="" aria-hidden="true"`
|
|
18
|
+
- [ ] Content images have descriptive `alt` text
|
|
19
|
+
|
|
20
|
+
## Styles (Normal Mode)
|
|
21
|
+
|
|
22
|
+
- [ ] No `<style>` block inside the component file
|
|
23
|
+
- [ ] No inline `style=""` attribute (exception: dynamic `:style` for mask-image)
|
|
24
|
+
- [ ] External layout file exists at `styles/{feature}/layout/_{section}.scss`
|
|
25
|
+
- [ ] External components file exists at `styles/{feature}/components/_{section}.scss`
|
|
26
|
+
- [ ] `_tokens.scss` updated with any new unique color/spacing/typography values
|
|
27
|
+
|
|
28
|
+
## Styles (Literal Mode)
|
|
29
|
+
|
|
30
|
+
- [ ] `<style scoped>` block present in component
|
|
31
|
+
- [ ] No external SCSS files created for this section
|
|
32
|
+
- [ ] All `position: absolute` coordinates are scaled by scaleFactor
|
|
33
|
+
- [ ] `mix-blend-mode`, `rotate`, `blur`, `mask-image` values preserved verbatim
|
|
34
|
+
- [ ] `%` values not scaled (only `px` values are scaled)
|
|
35
|
+
|
|
36
|
+
## TypeScript / Script
|
|
37
|
+
|
|
38
|
+
- [ ] JSDoc comment present with `[기능 정의]`, `[인터랙션]`, `[상태]` sections
|
|
39
|
+
- [ ] No `any` type — use explicit interfaces or `unknown`
|
|
40
|
+
- [ ] Mock data arrays have 3–7 items (not empty `[]`)
|
|
41
|
+
- [ ] Event handler stubs exist with `// TODO:` body
|
|
42
|
+
- [ ] Explicit return types on all functions
|
|
43
|
+
|
|
44
|
+
## Responsive
|
|
45
|
+
|
|
46
|
+
- [ ] Base styles target the smallest viewport (mobile-first)
|
|
47
|
+
- [ ] Desktop overrides use `@media (min-width: {$bp-pc})` or the project mixin
|
|
48
|
+
- [ ] No existing base styles deleted when adding breakpoint overrides
|
|
49
|
+
|
|
50
|
+
## Build
|
|
51
|
+
|
|
52
|
+
- [ ] No TypeScript compile errors in the generated file
|
|
53
|
+
- [ ] No missing imports (components, composables, types)
|
|
54
|
+
- [ ] Template references only props/data/computed that are declared in `<script setup>`
|