@kood/claude-code 0.3.12 → 0.3.15

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.
Files changed (104) hide show
  1. package/dist/index.js +30 -8
  2. package/package.json +4 -4
  3. package/templates/.claude/skills/korea-uiux-design/SKILL.md +444 -0
  4. package/templates/.claude/skills/korea-uiux-design/references/accessibility.md +298 -0
  5. package/templates/.claude/skills/korea-uiux-design/references/checklist.md +107 -0
  6. package/templates/.claude/skills/korea-uiux-design/references/color-system.md +156 -0
  7. package/templates/.claude/skills/korea-uiux-design/references/design-philosophy.md +25 -0
  8. package/templates/.claude/skills/korea-uiux-design/references/icon-guide.md +180 -0
  9. package/templates/.claude/skills/korea-uiux-design/references/micro-interactions.md +259 -0
  10. package/templates/.claude/skills/korea-uiux-design/references/responsive-patterns.md +115 -0
  11. package/templates/.claude/skills/korea-uiux-design/references/service-patterns.md +206 -0
  12. package/templates/.claude/skills/korea-uiux-design/references/state-patterns.md +320 -0
  13. package/templates/.claude/skills/korea-uiux-design/references/typography.md +70 -0
  14. package/templates/.claude/skills/nextjs-react-best-practices/AGENTS.md +663 -0
  15. package/templates/.claude/skills/nextjs-react-best-practices/SKILL.md +269 -0
  16. package/templates/.claude/skills/tanstack-start-react-best-practices/AGENTS.md +751 -0
  17. package/templates/.claude/skills/tanstack-start-react-best-practices/SKILL.md +431 -0
  18. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/async-defer-await.md +80 -0
  19. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/async-dependencies.md +36 -0
  20. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/async-loader.md +44 -0
  21. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/async-parallel.md +28 -0
  22. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  23. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-conditional.md +31 -0
  24. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  25. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-lazy-routes.md +67 -0
  26. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/bundle-preload.md +50 -0
  27. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/client-event-listeners.md +74 -0
  28. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/client-tanstack-query.md +77 -0
  29. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-batch-dom-css.md +82 -0
  30. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-cache-function-results.md +80 -0
  31. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-cache-property-access.md +28 -0
  32. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-cache-storage.md +70 -0
  33. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-combine-iterations.md +32 -0
  34. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-early-exit.md +50 -0
  35. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-hoist-regexp.md +45 -0
  36. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-index-maps.md +37 -0
  37. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-length-check-first.md +49 -0
  38. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-min-max-loop.md +82 -0
  39. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-set-map-lookups.md +24 -0
  40. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  41. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  42. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-conditional-render.md +40 -0
  43. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-content-visibility.md +38 -0
  44. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  45. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rendering-svg-precision.md +28 -0
  46. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-defer-reads.md +39 -0
  47. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-dependencies.md +45 -0
  48. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-derived-state.md +29 -0
  49. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  50. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  51. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-memo.md +44 -0
  52. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/rerender-transitions.md +40 -0
  53. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-cache-lru.md +41 -0
  54. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-deferred-data.md +67 -0
  55. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-parallel-fetching.md +60 -0
  56. package/templates/.claude/skills/tanstack-start-react-best-practices/rules/server-serialization.md +38 -0
  57. package/templates/.claude/skills/vercel-react-best-practices/AGENTS.md +0 -2249
  58. package/templates/.claude/skills/vercel-react-best-practices/SKILL.md +0 -125
  59. package/templates/.claude/skills/vs-design-diverge/SKILL.md +0 -307
  60. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/advanced-event-handler-refs.md +0 -0
  61. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/advanced-use-latest.md +0 -0
  62. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/async-api-routes.md +0 -0
  63. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/async-defer-await.md +0 -0
  64. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/async-dependencies.md +0 -0
  65. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/async-parallel.md +0 -0
  66. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/async-suspense-boundaries.md +0 -0
  67. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/bundle-barrel-imports.md +0 -0
  68. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/bundle-conditional.md +0 -0
  69. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/bundle-defer-third-party.md +0 -0
  70. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/bundle-dynamic-imports.md +0 -0
  71. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/bundle-preload.md +0 -0
  72. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/client-event-listeners.md +0 -0
  73. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/client-swr-dedup.md +0 -0
  74. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-batch-dom-css.md +0 -0
  75. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-cache-function-results.md +0 -0
  76. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-cache-property-access.md +0 -0
  77. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-cache-storage.md +0 -0
  78. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-combine-iterations.md +0 -0
  79. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-early-exit.md +0 -0
  80. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-hoist-regexp.md +0 -0
  81. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-index-maps.md +0 -0
  82. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-length-check-first.md +0 -0
  83. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-min-max-loop.md +0 -0
  84. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-set-map-lookups.md +0 -0
  85. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/js-tosorted-immutable.md +0 -0
  86. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rendering-activity.md +0 -0
  87. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
  88. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rendering-conditional-render.md +0 -0
  89. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rendering-content-visibility.md +0 -0
  90. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rendering-hoist-jsx.md +0 -0
  91. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
  92. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rendering-svg-precision.md +0 -0
  93. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rerender-defer-reads.md +0 -0
  94. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rerender-dependencies.md +0 -0
  95. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rerender-derived-state.md +0 -0
  96. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rerender-functional-setstate.md +0 -0
  97. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rerender-lazy-state-init.md +0 -0
  98. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rerender-memo.md +0 -0
  99. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/rerender-transitions.md +0 -0
  100. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/server-after-nonblocking.md +0 -0
  101. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/server-cache-lru.md +0 -0
  102. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/server-cache-react.md +0 -0
  103. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/server-parallel-fetching.md +0 -0
  104. /package/templates/.claude/skills/{vercel-react-best-practices → nextjs-react-best-practices}/rules/server-serialization.md +0 -0
package/dist/index.js CHANGED
@@ -144,13 +144,33 @@ var listAvailableTemplates = async () => {
144
144
  }
145
145
  return templates;
146
146
  };
147
- var copySkills = async (_templates, targetDir) => {
147
+ var TEMPLATE_SKILLS_MAP = {
148
+ nextjs: ["nextjs-react-best-practices", "vs-design-diverge"],
149
+ "tanstack-start": [
150
+ "tanstack-start-react-best-practices",
151
+ "vs-design-diverge"
152
+ ]
153
+ // hono와 npx는 스킬 없음
154
+ };
155
+ var copySkills = async (templates, targetDir) => {
148
156
  const counter = { files: 0, directories: 0 };
149
157
  const targetSkillsDir = path.join(targetDir, ".claude", "skills");
150
158
  const skillsSrc = path.join(getTemplatesDir(), ".claude", "skills");
151
- if (await fs.pathExists(skillsSrc)) {
152
- await fs.ensureDir(targetSkillsDir);
153
- await copyRecursive(skillsSrc, targetSkillsDir, counter);
159
+ if (!await fs.pathExists(skillsSrc)) {
160
+ return counter;
161
+ }
162
+ await fs.ensureDir(targetSkillsDir);
163
+ const skillsToCopy = /* @__PURE__ */ new Set();
164
+ for (const template of templates) {
165
+ const skills = TEMPLATE_SKILLS_MAP[template] || [];
166
+ skills.forEach((skill) => skillsToCopy.add(skill));
167
+ }
168
+ for (const skill of skillsToCopy) {
169
+ const skillSrc = path.join(skillsSrc, skill);
170
+ const skillDest = path.join(targetSkillsDir, skill);
171
+ if (await fs.pathExists(skillSrc)) {
172
+ await copyRecursive(skillSrc, skillDest, counter);
173
+ }
154
174
  }
155
175
  return counter;
156
176
  };
@@ -190,12 +210,14 @@ var copyAgents = async (_templates, targetDir) => {
190
210
  }
191
211
  return counter;
192
212
  };
193
- var checkAllExtrasExist = async (_templates) => {
213
+ var checkAllExtrasExist = async (templates) => {
194
214
  const claudeDir = path.join(getTemplatesDir(), ".claude");
195
- const skillsSrc = path.join(claudeDir, "skills");
196
215
  const commandsSrc = path.join(claudeDir, "commands");
197
216
  const agentsSrc = path.join(claudeDir, "agents");
198
- const hasSkills = await hasFiles(skillsSrc);
217
+ const hasSkills = templates.some((template) => {
218
+ const skills = TEMPLATE_SKILLS_MAP[template];
219
+ return skills && skills.length > 0;
220
+ });
199
221
  const hasCommands = await hasFiles(commandsSrc);
200
222
  const hasAgents = await hasFiles(agentsSrc);
201
223
  return { hasSkills, hasCommands, hasAgents };
@@ -409,7 +431,7 @@ var init = async (options) => {
409
431
 
410
432
  // src/index.ts
411
433
  var program = new Command();
412
- program.name("claude-code").description("Claude Code documentation installer for projects").version("0.3.12");
434
+ program.name("claude-code").description("Claude Code documentation installer for projects").version("0.3.15");
413
435
  program.option(
414
436
  "-t, --template <names>",
415
437
  "template names (comma-separated: tanstack-start,hono)"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kood/claude-code",
3
- "version": "0.3.12",
3
+ "version": "0.3.15",
4
4
  "description": "Claude Code documentation installer for projects",
5
5
  "type": "module",
6
6
  "bin": "./dist/index.js",
@@ -10,11 +10,11 @@
10
10
  ],
11
11
  "scripts": {
12
12
  "copy-templates": "node scripts/copy-templates.js",
13
- "build": "tsup && npm run copy-templates",
14
- "dev": "npm run build && node dist/index.js",
13
+ "build": "yarn tsup && yarn run copy-templates",
14
+ "dev": "yarn run build && node dist/index.js",
15
15
  "lint": "eslint src/",
16
16
  "lint:fix": "eslint src/ --fix",
17
- "prepublishOnly": "npm run build"
17
+ "prepublishOnly": "yarn run build"
18
18
  },
19
19
  "keywords": [
20
20
  "claude",
@@ -0,0 +1,444 @@
1
+ # 한국형 앱 UI/UX 디자인
2
+
3
+ <context>
4
+
5
+ **Purpose:** 한국 사용자 대상 앱/웹 UI/UX 디자인 구현. shadcn/ui 기본 스타일 대신 토스/카카오/배민/플렉스 등 국내 앱 스타일 적용.
6
+
7
+ **Trigger:** 프론트엔드 UI/UX 구현, React/Vue 컴포넌트 디자인, 반응형 웹/앱 개발, 한국 사용자 대상 서비스
8
+
9
+ **Key Features:**
10
+ - 정보 밀도와 가독성 균형
11
+ - 절제된 미니멀리즘
12
+ - 대화하는 듯한 UX 라이팅
13
+ - WCAG AA 접근성 기준
14
+
15
+ </context>
16
+
17
+ ---
18
+
19
+ <core_principles>
20
+
21
+ ## 디자인 철학
22
+
23
+ | 원칙 | 적용 |
24
+ |------|------|
25
+ | **정보 밀도** | 한 화면에 핵심만, 상세는 펼침/모달 |
26
+ | **미니멀리즘** | 불필요한 장식 제거, 미세한 보더로 구분 |
27
+ | **부드러운 곡선** | border-radius 8-16px |
28
+ | **UX 라이팅** | "입력하세요" → "어떤 이름으로 불러드릴까요?" |
29
+
30
+ **상세:** [references/design-philosophy.md](references/design-philosophy.md)
31
+
32
+ </core_principles>
33
+
34
+ ---
35
+
36
+ <layout_patterns>
37
+
38
+ ## 레이아웃
39
+
40
+ ### 컨테이너 너비
41
+
42
+ ```tsx
43
+ {/* 대시보드 - 1200px */}
44
+ <div className="max-w-7xl mx-auto px-4 md:px-6 lg:px-8">
45
+
46
+ {/* 콘텐츠 - 800px */}
47
+ <div className="max-w-3xl mx-auto px-4 md:px-6">
48
+
49
+ {/* 폼/설정 - 480px */}
50
+ <div className="max-w-md mx-auto px-4">
51
+ ```
52
+
53
+ ### 여백
54
+
55
+ ```tsx
56
+ {/* 섹션 간 */}
57
+ <div className="space-y-8 md:space-y-12">
58
+
59
+ {/* 카드 내부 */}
60
+ <div className="p-4 md:p-6">
61
+ ```
62
+
63
+ </layout_patterns>
64
+
65
+ ---
66
+
67
+ <component_patterns>
68
+
69
+ ## 컴포넌트
70
+
71
+ ### 버튼
72
+
73
+ ```tsx
74
+ {/* Primary */}
75
+ <button className="h-11 px-4 rounded-lg bg-blue-500 hover:bg-blue-600 text-white font-medium transition-colors">
76
+ 저장하기
77
+ </button>
78
+
79
+ {/* Secondary */}
80
+ <button className="h-11 px-4 rounded-lg border border-gray-300 hover:bg-gray-50 font-medium transition-colors">
81
+ 취소
82
+ </button>
83
+
84
+ {/* Ghost */}
85
+ <button className="h-11 px-4 rounded-lg hover:bg-gray-100 font-medium transition-colors">
86
+ 더보기
87
+ </button>
88
+ ```
89
+
90
+ **크기:** Small h-8 px-3 | Medium h-11 px-4 | Large h-12 px-5
91
+
92
+ ### 카드
93
+
94
+ ```tsx
95
+ <div className="p-4 md:p-6 border border-gray-200 rounded-xl bg-white">
96
+ {/* 헤더 */}
97
+ <div className="flex items-center justify-between mb-4">
98
+ <h3 className="text-lg font-semibold">제목</h3>
99
+ <button className="text-gray-500">•••</button>
100
+ </div>
101
+
102
+ {/* 바디 */}
103
+ <div className="space-y-3">
104
+ <p className="text-sm text-gray-700 leading-relaxed">콘텐츠</p>
105
+ </div>
106
+
107
+ {/* 푸터 */}
108
+ <div className="flex items-center justify-between mt-4 pt-4 border-t">
109
+ <span className="text-sm text-gray-500">2시간 전</span>
110
+ <button className="text-sm text-blue-500 font-medium">자세히</button>
111
+ </div>
112
+ </div>
113
+ ```
114
+
115
+ ### 리스트 아이템
116
+
117
+ ```tsx
118
+ <div className="flex items-center gap-3 p-4 hover:bg-gray-50 transition-colors cursor-pointer">
119
+ {/* 좌측: 썸네일 */}
120
+ <div className="w-12 h-12 rounded-lg bg-gray-100 flex-shrink-0" />
121
+
122
+ {/* 중앙: 제목+설명 */}
123
+ <div className="flex-1 min-w-0">
124
+ <div className="font-semibold text-sm truncate">제목</div>
125
+ <div className="text-[13px] text-gray-600 truncate">설명</div>
126
+ </div>
127
+
128
+ {/* 우측: 숫자/상태 */}
129
+ <div className="flex items-center gap-2 flex-shrink-0">
130
+ <span className="text-sm font-semibold">15,000원</span>
131
+ <svg className="w-5 h-5 text-gray-400" />
132
+ </div>
133
+ </div>
134
+ ```
135
+
136
+ ### 입력 필드
137
+
138
+ ```tsx
139
+ <div className="space-y-2">
140
+ <label className="text-sm font-medium text-gray-900">
141
+ 이메일 <span className="text-red-500">*</span>
142
+ </label>
143
+ <input
144
+ type="email"
145
+ className="w-full h-11 px-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-shadow"
146
+ placeholder="example@email.com"
147
+ />
148
+ </div>
149
+ ```
150
+
151
+ ### 모달
152
+
153
+ ```tsx
154
+ <div className="fixed inset-0 bg-black/50 flex items-center justify-center p-4 z-50">
155
+ <div className="bg-white rounded-2xl max-w-md w-full max-h-[90vh] overflow-auto">
156
+ <div className="flex items-center justify-between p-6 border-b">
157
+ <h2 className="text-xl font-semibold">모달 제목</h2>
158
+ <button className="w-8 h-8 flex items-center justify-center rounded-lg hover:bg-gray-100">✕</button>
159
+ </div>
160
+ <div className="p-6"><p className="text-sm text-gray-700 leading-relaxed">내용</p></div>
161
+ <div className="flex gap-2 justify-end p-6 border-t">
162
+ <button className="h-11 px-4 rounded-lg border">취소</button>
163
+ <button className="h-11 px-4 rounded-lg bg-blue-500 text-white">확인</button>
164
+ </div>
165
+ </div>
166
+ </div>
167
+ ```
168
+
169
+ ### 탭
170
+
171
+ ```tsx
172
+ {/* 밑줄 스타일 */}
173
+ <div className="border-b border-gray-200">
174
+ <div className="flex gap-8">
175
+ <button className="py-3 text-sm font-medium text-blue-500 border-b-2 border-blue-500">전체</button>
176
+ <button className="py-3 text-sm font-medium text-gray-600 hover:text-gray-900">진행중</button>
177
+ </div>
178
+ </div>
179
+
180
+ {/* 세그먼트 */}
181
+ <div className="inline-flex p-1 bg-gray-100 rounded-lg gap-1">
182
+ <button className="px-4 py-2 rounded-md bg-white shadow-sm text-sm font-medium">전체</button>
183
+ <button className="px-4 py-2 rounded-md text-sm font-medium text-gray-600">진행중</button>
184
+ </div>
185
+ ```
186
+
187
+ </component_patterns>
188
+
189
+ ---
190
+
191
+ <color_system>
192
+
193
+ ## 색상 시스템
194
+
195
+ | 색상 | 용도 | 비율 |
196
+ |------|------|------|
197
+ | **Primary** | 버튼, 링크, 활성 상태 | 10% |
198
+ | **Secondary** | 필터, 칩, 보조 버튼 | 30% |
199
+ | **Background** | 배경 | 60% |
200
+ | **Semantic** | Success/Error/Warning/Info | 필요시 |
201
+
202
+ ```tsx
203
+ {/* 60-30-10 규칙 적용 */}
204
+ <button className="bg-primary-500 hover:bg-primary-600 text-white">주요 액션</button>
205
+ <button className="bg-secondary-200 text-secondary-900">보조 액션</button>
206
+ ```
207
+
208
+ **WCAG AA:** 일반 텍스트 4.5:1 | 큰 텍스트 3:1
209
+
210
+ **상세:** [references/color-system.md](references/color-system.md)
211
+
212
+ </color_system>
213
+
214
+ ---
215
+
216
+ <icon_system>
217
+
218
+ ## 아이콘
219
+
220
+ | 크기 | 용도 | 터치 영역 |
221
+ |------|------|----------|
222
+ | 16px, 20px | 텍스트와 함께 | - |
223
+ | 24px | 기본 시스템 아이콘 | 44-48px |
224
+ | 32-48px | 강조 | 그대로 |
225
+
226
+ ```tsx
227
+ {/* 충분한 터치 타겟 */}
228
+ <button className="w-12 h-12 flex items-center justify-center rounded-lg">
229
+ <svg className="w-6 h-6" />
230
+ </button>
231
+
232
+ {/* 비활성: Outline | 활성: Filled */}
233
+ <svg className="w-6 h-6 stroke-current text-gray-600" fill="none" />
234
+ <svg className="w-6 h-6 fill-current text-primary-500" />
235
+ ```
236
+
237
+ **상세:** [references/icon-guide.md](references/icon-guide.md)
238
+
239
+ </icon_system>
240
+
241
+ ---
242
+
243
+ <typography>
244
+
245
+ ## 타이포그래피
246
+
247
+ ```tsx
248
+ {/* 페이지 제목 */}
249
+ <h1 className="text-3xl font-bold tracking-tight leading-tight">대시보드</h1>
250
+
251
+ {/* 섹션 제목 */}
252
+ <h2 className="text-xl font-semibold tracking-tight">최근 활동</h2>
253
+
254
+ {/* 본문 */}
255
+ <p className="text-sm font-normal leading-relaxed text-gray-700">본문</p>
256
+
257
+ {/* 부가 정보 */}
258
+ <span className="text-[13px] text-gray-500">2시간 전</span>
259
+ ```
260
+
261
+ **상세:** [references/typography.md](references/typography.md)
262
+
263
+ </typography>
264
+
265
+ ---
266
+
267
+ <responsive_patterns>
268
+
269
+ ## 반응형
270
+
271
+ ### 그리드
272
+
273
+ ```tsx
274
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
275
+ {items.map(item => <Card key={item.id} {...item} />)}
276
+ </div>
277
+ ```
278
+
279
+ ### 네비게이션
280
+
281
+ ```tsx
282
+ {/* 데스크톱: 사이드바 */}
283
+ <aside className="hidden lg:block w-60" />
284
+
285
+ {/* 모바일: 하단 탭바 */}
286
+ <nav className="lg:hidden fixed bottom-0 w-full h-14 border-t bg-white" />
287
+ ```
288
+
289
+ **상세:** [references/responsive-patterns.md](references/responsive-patterns.md)
290
+
291
+ </responsive_patterns>
292
+
293
+ ---
294
+
295
+ <service_patterns>
296
+
297
+ ## 주요 서비스 패턴
298
+
299
+ | 서비스 | 색상 | 특징 |
300
+ |--------|------|------|
301
+ | **토스** | Blue #3182F6 | 신뢰감, 카드 중심, "어떤 이름으로 불러드릴까요?" |
302
+ | **카카오** | Yellow #FEE500 | 친근함, 말풍선 모티브, radius 12px |
303
+ | **배민** | Teal #2AC1BC | 감성, 손글씨, 일러스트 |
304
+
305
+ **상세:** [references/service-patterns.md](references/service-patterns.md)
306
+
307
+ </service_patterns>
308
+
309
+ ---
310
+
311
+ <accessibility_and_states>
312
+
313
+ ## 접근성 & 상태
314
+
315
+ ### 접근성 필수
316
+
317
+ - 명암 대비 4.5:1 (WCAG AA)
318
+ - 키보드 네비게이션
319
+ - 색상만으로 정보 전달 금지
320
+ - 스크린 리더 호환
321
+
322
+ ### 상태 패턴
323
+
324
+ ```tsx
325
+ {/* 로딩 */}
326
+ <div className="animate-pulse space-y-3">
327
+ <div className="h-4 bg-gray-200 rounded w-3/4" />
328
+ </div>
329
+
330
+ {/* 에러 */}
331
+ <div className="text-red-600 flex items-center gap-2">
332
+ <svg className="w-5 h-5" />
333
+ <span>오류가 발생했습니다</span>
334
+ </div>
335
+
336
+ {/* 빈 상태 */}
337
+ <div className="py-12 text-center">
338
+ <div className="w-20 h-20 mx-auto mb-4 rounded-full bg-gray-100 flex items-center justify-center">
339
+ <svg className="w-10 h-10 text-gray-400" />
340
+ </div>
341
+ <h3 className="font-semibold mb-1">아직 내용이 없어요</h3>
342
+ <p className="text-sm text-gray-600">첫 번째 항목을 추가해보세요</p>
343
+ </div>
344
+ ```
345
+
346
+ **상세:**
347
+ - [references/accessibility.md](references/accessibility.md)
348
+ - [references/micro-interactions.md](references/micro-interactions.md)
349
+ - [references/state-patterns.md](references/state-patterns.md)
350
+
351
+ </accessibility_and_states>
352
+
353
+ ---
354
+
355
+ <references>
356
+
357
+ ## 상세 문서
358
+
359
+ | 문서 | 내용 |
360
+ |------|------|
361
+ | [design-philosophy.md](references/design-philosophy.md) | 디자인 철학, 피해야 할 것 |
362
+ | [color-system.md](references/color-system.md) | Primary/Secondary/Semantic, WCAG, 서비스별 색상 |
363
+ | [icon-guide.md](references/icon-guide.md) | 크기, 터치 타겟, 스타일, 접근성 |
364
+ | [typography.md](references/typography.md) | 폰트, 크기, 웨이트, 한글 특징 |
365
+ | [service-patterns.md](references/service-patterns.md) | 토스/카카오/배민/플렉스/당근 분석 |
366
+ | [responsive-patterns.md](references/responsive-patterns.md) | 브레이크포인트, 그리드, 네비게이션 변환 |
367
+ | [accessibility.md](references/accessibility.md) | WCAG/KWCAG, 명암 대비, ARIA |
368
+ | [micro-interactions.md](references/micro-interactions.md) | 버튼/인풋/카드 인터랙션, 애니메이션 |
369
+ | [state-patterns.md](references/state-patterns.md) | 로딩/에러/빈 상태/성공 패턴 |
370
+ | [checklist.md](references/checklist.md) | 화면별 체크리스트 |
371
+
372
+ </references>
373
+
374
+ ---
375
+
376
+ <prompt_examples>
377
+
378
+ ## 프롬프트 예시
379
+
380
+ ### 대시보드
381
+
382
+ ```
383
+ 대시보드 페이지 만들어줘.
384
+
385
+ 레이아웃:
386
+ - 데스크톱: 좌측 사이드바(240px) + 메인(max-w-7xl)
387
+ - 모바일: 하단 탭바로 전환
388
+ - 반응형 패딩 (px-4 md:px-6 lg:px-8)
389
+
390
+ 구성:
391
+ - 상단 인사말 + 날짜
392
+ - 통계 카드 4개 (grid-cols-1 md:grid-cols-2 lg:grid-cols-4)
393
+ - 최근 활동 리스트
394
+ - 빠른 액션 버튼
395
+
396
+ 스타일:
397
+ - 한국형 SaaS (토스/플렉스)
398
+ - 카드: border + rounded-xl, 그림자 최소
399
+ - 숫자: font-bold + text-2xl
400
+ ```
401
+
402
+ ### 설정 화면
403
+
404
+ ```
405
+ 설정 페이지 만들어줘.
406
+
407
+ 레이아웃:
408
+ - max-w-md mx-auto
409
+ - 섹션별 space-y-8
410
+
411
+ 구성:
412
+ - 프로필: 아바타 + 이름 + 이메일
413
+ - 알림: 토글 스위치 (h-11 터치 영역)
414
+ - 계정: 비밀번호 변경, 로그아웃
415
+ - 위험: 계정 삭제 (빨간색)
416
+
417
+ 스타일:
418
+ - 각 항목: flex justify-between items-center
419
+ - 레이블: text-sm font-medium
420
+ - 섹션 제목: text-xs text-gray-500 uppercase
421
+ ```
422
+
423
+ ### 리스트 화면
424
+
425
+ ```
426
+ 사용자 목록 만들어줘.
427
+
428
+ 레이아웃:
429
+ - 데스크톱: 테이블
430
+ - 모바일: 카드 리스트
431
+
432
+ 구성:
433
+ - 상단: 검색바 + 필터 + 추가 버튼
434
+ - 테이블: 이름, 이메일, 가입일, 상태
435
+ - 페이지네이션
436
+
437
+ 스타일:
438
+ - 헤더: bg-gray-50
439
+ - 행 호버: hover:bg-gray-50
440
+ - 세로 구분선 없음
441
+ - 액션: 더보기 메뉴
442
+ ```
443
+
444
+ </prompt_examples>