@kood/claude-code 0.1.16 → 0.2.1
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/index.js +62 -18
- package/package.json +1 -1
- package/templates/.claude/agents/code-reviewer.md +31 -0
- package/templates/.claude/agents/debug-detective.md +37 -0
- package/templates/.claude/agents/refactor-advisor.md +44 -0
- package/templates/.claude/agents/test-writer.md +41 -0
- package/templates/.claude/commands/execute.md +281 -0
- package/templates/.claude/skills/frontend-design/SKILL.md +310 -0
- package/templates/.claude/skills/frontend-design/references/animation-patterns.md +446 -0
- package/templates/.claude/skills/frontend-design/references/colors-2026.md +244 -0
- package/templates/.claude/skills/frontend-design/references/typography-2026.md +302 -0
- package/templates/.claude/skills/gemini-review/SKILL.md +1 -1
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-design
|
|
3
|
+
description: 프론트엔드 UI 구현 스킬. 컴포넌트, 페이지, 애플리케이션 구축 시 사용. 2026 트렌드 기반 고품질 디자인 생성.
|
|
4
|
+
license: Complete terms in LICENSE.txt
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Frontend Design Skill
|
|
8
|
+
|
|
9
|
+
프로덕션급 프론트엔드 인터페이스 구현. 독창적이고 기억에 남는 디자인.
|
|
10
|
+
|
|
11
|
+
## 사용 시점
|
|
12
|
+
|
|
13
|
+
| 트리거 | 예시 |
|
|
14
|
+
|--------|------|
|
|
15
|
+
| UI 컴포넌트 요청 | "버튼 컴포넌트 만들어줘" |
|
|
16
|
+
| 페이지 구현 | "랜딩 페이지 만들어줘" |
|
|
17
|
+
| 스타일링 작업 | "다크 테마 적용해줘" |
|
|
18
|
+
| 애니메이션 추가 | "hover 효과 넣어줘" |
|
|
19
|
+
|
|
20
|
+
## 디자인 프로세스
|
|
21
|
+
|
|
22
|
+
### 1단계: 컨텍스트 파악
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
- 목적: 무슨 문제 해결?
|
|
26
|
+
- 대상: 누가 사용?
|
|
27
|
+
- 제약: 프레임워크, 성능, 접근성 요구사항
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 2단계: 미적 방향 결정
|
|
31
|
+
|
|
32
|
+
**반드시 하나 선택하고 일관성 유지:**
|
|
33
|
+
|
|
34
|
+
| 방향 | 특징 | 적합한 상황 |
|
|
35
|
+
|------|------|-------------|
|
|
36
|
+
| Liquid Glass | 투명도, 깊이, 유동적 표면 | 모던 앱, 대시보드 |
|
|
37
|
+
| Calm Minimal | 여백, 선명한 타이포, 절제 | 콘텐츠 중심, 포트폴리오 |
|
|
38
|
+
| Bold Maximalist | 큰 타이포, 강렬한 색, 레이어 | 크리에이티브, 브랜드 |
|
|
39
|
+
| Organic Natural | 부드러운 곡선, 어시 톤, 텍스처 | 웰빙, 라이프스타일 |
|
|
40
|
+
| Editorial | 매거진 레이아웃, 그리드 플레이 | 미디어, 블로그 |
|
|
41
|
+
| Retro Futuristic | 네온, 그라디언트, 글리치 | 테크, 게임 |
|
|
42
|
+
|
|
43
|
+
### 3단계: 구현
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
1. CSS 변수로 디자인 토큰 정의
|
|
47
|
+
2. 타이포그래피 시스템 설정
|
|
48
|
+
3. 컬러 팔레트 적용
|
|
49
|
+
4. 레이아웃 구조화
|
|
50
|
+
5. 애니메이션/인터랙션 추가
|
|
51
|
+
6. 접근성 검증
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 핵심 규칙
|
|
55
|
+
|
|
56
|
+
### 타이포그래피
|
|
57
|
+
|
|
58
|
+
**DO:**
|
|
59
|
+
```css
|
|
60
|
+
/* Variable fonts 사용 */
|
|
61
|
+
@font-face {
|
|
62
|
+
font-family: 'Display';
|
|
63
|
+
src: url('font.woff2') format('woff2');
|
|
64
|
+
font-weight: 100 900;
|
|
65
|
+
font-display: swap;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* 명확한 위계 */
|
|
69
|
+
--font-display: 'Playfair Display', serif; /* 헤드라인 */
|
|
70
|
+
--font-body: 'Source Sans 3', sans-serif; /* 본문 */
|
|
71
|
+
--font-mono: 'JetBrains Mono', monospace; /* 코드 */
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**DON'T:**
|
|
75
|
+
```css
|
|
76
|
+
/* ❌ 금지 - 일반적인 시스템 폰트 */
|
|
77
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
78
|
+
font-family: -apple-system, BlinkMacSystemFont, sans-serif;
|
|
79
|
+
|
|
80
|
+
/* ❌ 금지 - AI 슬롭 폰트 */
|
|
81
|
+
font-family: 'Inter', sans-serif;
|
|
82
|
+
font-family: 'Roboto', sans-serif;
|
|
83
|
+
font-family: 'Space Grotesk', sans-serif;
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**추천 폰트 페어링:**
|
|
87
|
+
|
|
88
|
+
| 헤드라인 | 본문 | 무드 |
|
|
89
|
+
|----------|------|------|
|
|
90
|
+
| Playfair Display | Source Sans 3 | 클래식, 에디토리얼 |
|
|
91
|
+
| Clash Display | Satoshi | 모던, 볼드 |
|
|
92
|
+
| Fraunces | Work Sans | 따뜻한, 친근한 |
|
|
93
|
+
| Space Mono | DM Sans | 테크, 미니멀 |
|
|
94
|
+
| Syne | Inter (예외적 허용) | 크리에이티브 |
|
|
95
|
+
|
|
96
|
+
**상세**: [references/typography-2026.md](references/typography-2026.md)
|
|
97
|
+
|
|
98
|
+
### 컬러
|
|
99
|
+
|
|
100
|
+
**DO:**
|
|
101
|
+
```css
|
|
102
|
+
/* OKLCH 컬러 시스템 (2026 표준) */
|
|
103
|
+
:root {
|
|
104
|
+
/* 베이스 - 소프트 뉴트럴 (순백색 X) */
|
|
105
|
+
--bg-primary: oklch(98% 0.005 90); /* 웜 오프화이트 */
|
|
106
|
+
--bg-secondary: oklch(95% 0.01 90); /* 린넨 */
|
|
107
|
+
|
|
108
|
+
/* 텍스트 */
|
|
109
|
+
--text-primary: oklch(20% 0.01 90); /* 소프트 블랙 */
|
|
110
|
+
--text-secondary: oklch(45% 0.02 90); /* 뮤트 그레이 */
|
|
111
|
+
|
|
112
|
+
/* 액센트 - 하나만 강하게 */
|
|
113
|
+
--accent: oklch(65% 0.25 180); /* Transformative Teal */
|
|
114
|
+
--accent-hover: oklch(60% 0.28 180);
|
|
115
|
+
|
|
116
|
+
/* 상태 */
|
|
117
|
+
--success: oklch(70% 0.2 145);
|
|
118
|
+
--error: oklch(65% 0.25 25);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* 다크 모드 */
|
|
122
|
+
@media (prefers-color-scheme: dark) {
|
|
123
|
+
:root {
|
|
124
|
+
--bg-primary: oklch(15% 0.01 90);
|
|
125
|
+
--bg-secondary: oklch(20% 0.015 90);
|
|
126
|
+
--text-primary: oklch(90% 0.01 90);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**DON'T:**
|
|
132
|
+
```css
|
|
133
|
+
/* ❌ 금지 - 순백색 배경 */
|
|
134
|
+
background: #ffffff;
|
|
135
|
+
background: white;
|
|
136
|
+
|
|
137
|
+
/* ❌ 금지 - AI 슬롭 퍼플 그라디언트 */
|
|
138
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
139
|
+
background: linear-gradient(to right, #8b5cf6, #a855f7);
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**2026 트렌드 컬러:**
|
|
143
|
+
|
|
144
|
+
| 이름 | OKLCH | HEX (참고) | 용도 |
|
|
145
|
+
|------|-------|-----------|------|
|
|
146
|
+
| Cloud Dancer | oklch(97% 0.005 90) | #F5F5F5 | 배경, 여백 |
|
|
147
|
+
| Mocha Mousse | oklch(55% 0.08 55) | #A47764 | 어시, 따뜻함 |
|
|
148
|
+
| Transformative Teal | oklch(65% 0.15 180) | #2D9CCA | 액센트 |
|
|
149
|
+
| Neo Mint | oklch(85% 0.1 160) | #AAF0D1 | 프레시, 테크 |
|
|
150
|
+
| Soft Coral | oklch(75% 0.12 30) | #FFB5A7 | 따뜻한 액센트 |
|
|
151
|
+
|
|
152
|
+
**상세**: [references/colors-2026.md](references/colors-2026.md)
|
|
153
|
+
|
|
154
|
+
### 애니메이션
|
|
155
|
+
|
|
156
|
+
**원칙:**
|
|
157
|
+
1. **목적 있는 움직임만** - 장식적 애니메이션 금지
|
|
158
|
+
2. **300ms 이하** - 트랜지션은 빠르게
|
|
159
|
+
3. **GPU 가속** - transform, opacity만 애니메이트
|
|
160
|
+
4. **접근성** - prefers-reduced-motion 존중
|
|
161
|
+
|
|
162
|
+
**DO:**
|
|
163
|
+
```css
|
|
164
|
+
/* 기본 트랜지션 */
|
|
165
|
+
.button {
|
|
166
|
+
transition: transform 200ms ease-out,
|
|
167
|
+
background-color 150ms ease;
|
|
168
|
+
}
|
|
169
|
+
.button:hover {
|
|
170
|
+
transform: translateY(-2px);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/* 스태거 애니메이션 */
|
|
174
|
+
.list-item {
|
|
175
|
+
animation: fadeInUp 400ms ease-out backwards;
|
|
176
|
+
}
|
|
177
|
+
.list-item:nth-child(1) { animation-delay: 0ms; }
|
|
178
|
+
.list-item:nth-child(2) { animation-delay: 50ms; }
|
|
179
|
+
.list-item:nth-child(3) { animation-delay: 100ms; }
|
|
180
|
+
|
|
181
|
+
@keyframes fadeInUp {
|
|
182
|
+
from {
|
|
183
|
+
opacity: 0;
|
|
184
|
+
transform: translateY(20px);
|
|
185
|
+
}
|
|
186
|
+
to {
|
|
187
|
+
opacity: 1;
|
|
188
|
+
transform: translateY(0);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* 접근성 */
|
|
193
|
+
@media (prefers-reduced-motion: reduce) {
|
|
194
|
+
*, *::before, *::after {
|
|
195
|
+
animation-duration: 0.01ms !important;
|
|
196
|
+
transition-duration: 0.01ms !important;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**DON'T:**
|
|
202
|
+
```css
|
|
203
|
+
/* ❌ 금지 - 레이아웃 속성 애니메이트 */
|
|
204
|
+
transition: width 300ms, height 300ms, margin 300ms;
|
|
205
|
+
|
|
206
|
+
/* ❌ 금지 - 너무 느린 트랜지션 */
|
|
207
|
+
transition: all 1s ease;
|
|
208
|
+
|
|
209
|
+
/* ❌ 금지 - 무한 회전 (목적 없는 장식) */
|
|
210
|
+
animation: spin 2s infinite linear;
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**React (Motion 라이브러리):**
|
|
214
|
+
```tsx
|
|
215
|
+
import { motion } from 'motion/react';
|
|
216
|
+
|
|
217
|
+
// 페이지 진입
|
|
218
|
+
<motion.div
|
|
219
|
+
initial={{ opacity: 0, y: 20 }}
|
|
220
|
+
animate={{ opacity: 1, y: 0 }}
|
|
221
|
+
transition={{ duration: 0.3, ease: 'easeOut' }}
|
|
222
|
+
>
|
|
223
|
+
{content}
|
|
224
|
+
</motion.div>
|
|
225
|
+
|
|
226
|
+
// 리스트 스태거
|
|
227
|
+
<motion.ul>
|
|
228
|
+
{items.map((item, i) => (
|
|
229
|
+
<motion.li
|
|
230
|
+
key={item.id}
|
|
231
|
+
initial={{ opacity: 0, x: -20 }}
|
|
232
|
+
animate={{ opacity: 1, x: 0 }}
|
|
233
|
+
transition={{ delay: i * 0.05 }}
|
|
234
|
+
>
|
|
235
|
+
{item.name}
|
|
236
|
+
</motion.li>
|
|
237
|
+
))}
|
|
238
|
+
</motion.ul>
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**상세**: [references/animation-patterns.md](references/animation-patterns.md)
|
|
242
|
+
|
|
243
|
+
### 레이아웃
|
|
244
|
+
|
|
245
|
+
**DO:**
|
|
246
|
+
```css
|
|
247
|
+
/* 비대칭, 그리드 브레이킹 */
|
|
248
|
+
.hero {
|
|
249
|
+
display: grid;
|
|
250
|
+
grid-template-columns: 1fr 1.5fr;
|
|
251
|
+
gap: clamp(2rem, 5vw, 4rem);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/* 여백은 넉넉하게 */
|
|
255
|
+
section {
|
|
256
|
+
padding: clamp(4rem, 10vh, 8rem) 0;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* Container queries (2026 표준) */
|
|
260
|
+
@container (min-width: 400px) {
|
|
261
|
+
.card { flex-direction: row; }
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**DON'T:**
|
|
266
|
+
```css
|
|
267
|
+
/* ❌ 금지 - 완벽한 대칭 (지루함) */
|
|
268
|
+
grid-template-columns: 1fr 1fr;
|
|
269
|
+
|
|
270
|
+
/* ❌ 금지 - 빽빽한 레이아웃 */
|
|
271
|
+
padding: 10px;
|
|
272
|
+
gap: 8px;
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## 접근성 체크리스트
|
|
276
|
+
|
|
277
|
+
| 항목 | 기준 | 확인 |
|
|
278
|
+
|------|------|------|
|
|
279
|
+
| 색상 대비 | WCAG AA (4.5:1 텍스트, 3:1 UI) | [ ] |
|
|
280
|
+
| 키보드 네비게이션 | 모든 인터랙티브 요소 접근 가능 | [ ] |
|
|
281
|
+
| 포커스 표시 | 명확한 포커스 링 | [ ] |
|
|
282
|
+
| 모션 감소 | prefers-reduced-motion 처리 | [ ] |
|
|
283
|
+
| 스크린 리더 | 시맨틱 HTML, aria-label | [ ] |
|
|
284
|
+
| 텍스트 크기 | 16px 이상 본문 | [ ] |
|
|
285
|
+
| 터치 타겟 | 44x44px 이상 | [ ] |
|
|
286
|
+
|
|
287
|
+
## 금지 사항 (Anti-patterns)
|
|
288
|
+
|
|
289
|
+
| 카테고리 | 금지 항목 |
|
|
290
|
+
|----------|----------|
|
|
291
|
+
| 폰트 | Inter, Roboto, Arial, system fonts 단독 사용 |
|
|
292
|
+
| 컬러 | 퍼플 그라디언트 on 화이트, 순백색 배경 |
|
|
293
|
+
| 레이아웃 | 완벽 대칭, 좁은 여백, 쿠키커터 카드 |
|
|
294
|
+
| 애니메이션 | 목적 없는 회전, 1초+ 트랜지션, layout 애니메이트 |
|
|
295
|
+
| 패턴 | 동일한 그림자, 동일한 border-radius, 복사된 UI |
|
|
296
|
+
|
|
297
|
+
## 참조 문서
|
|
298
|
+
|
|
299
|
+
- [references/typography-2026.md](references/typography-2026.md) - 폰트 선택, 스케일, 페어링
|
|
300
|
+
- [references/colors-2026.md](references/colors-2026.md) - OKLCH, 팔레트, 다크모드
|
|
301
|
+
- [references/animation-patterns.md](references/animation-patterns.md) - CSS/JS 패턴, 라이브러리
|
|
302
|
+
|
|
303
|
+
## Sources
|
|
304
|
+
|
|
305
|
+
- [UI Trends 2026 - UX Studio Team](https://www.uxstudioteam.com/ux-blog/ui-trends-2019)
|
|
306
|
+
- [12 UI/UX Design Trends - Index.dev](https://www.index.dev/blog/ui-ux-design-trends)
|
|
307
|
+
- [Typography Trends 2026 - Wannathis](https://wannathis.one/blog/top-typography-trends-2026-for-designers)
|
|
308
|
+
- [Color Trends 2026 - Lounge Lizard](https://www.loungelizard.com/blog/web-design-color-trends/)
|
|
309
|
+
- [Motion UI Trends 2026 - Loma Technology](https://lomatechnology.com/blog/motion-ui-trends-2026/2911)
|
|
310
|
+
- [Motion Library](https://motion.dev/)
|