muno-claude-plugin 1.6.0 → 1.8.0
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/README.md +99 -0
- package/bin/cli.js +4 -1
- package/package.json +6 -3
- package/templates/commands/app-designer.md +9 -0
- package/templates/personas/app-designer.md +182 -0
- package/templates/skills/app-design/SKILL.md +640 -0
- package/templates/skills/app-design/reference/component-examples.md +953 -0
- package/templates/skills/app-design/reference/design-system-template.md +628 -0
- package/templates/skills/app-design/reference/design-tokens.json +231 -0
- package/templates/skills/epic-story-generator/SKILL.md +28 -9
- package/templates/skills/hld-generator/SKILL.md +28 -9
- package/templates/skills/lld-generator/SKILL.md +28 -9
- package/templates/skills/prd-generator/SKILL.md +28 -9
- package/templates/skills/swagger-docs-generator/SKILL.md +699 -0
- package/templates/skills/swagger-docs-generator/reference/api-docs-template.md +666 -0
- package/templates/skills/task-generator/SKILL.md +49 -5
- package/templates/skills/tc-generator/SKILL.md +28 -9
|
@@ -0,0 +1,640 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: app-design
|
|
3
|
+
description: |
|
|
4
|
+
UI/UX 디자인을 생성하고 개선합니다. Apple과 Toss 스타일의 세련된 앱 디자인을 제공합니다.
|
|
5
|
+
"UI 디자인해줘", "UX 개선해줘", "화면 디자인", "인터페이스 만들어줘", "디자인 시스템",
|
|
6
|
+
"디자인 가이드", "프로토타입" 등의 요청에 사용합니다.
|
|
7
|
+
개발자가 직접 구현할 수 있도록 구체적이고 실행 가능한 디자인 스펙을 제공합니다.
|
|
8
|
+
allowed-tools: Read, Glob, Grep, Write, Edit, WebSearch, WebFetch
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# App Design Skill
|
|
12
|
+
|
|
13
|
+
## 페르소나
|
|
14
|
+
|
|
15
|
+
@.claude/personas/app-designer.md
|
|
16
|
+
|
|
17
|
+
> **App Design의 역할**: 사용자 경험을 극대화하는 직관적이고 아름다운 인터페이스를 설계합니다.
|
|
18
|
+
> Apple과 Toss의 디자인 철학을 바탕으로 단순하지만 강력한 디자인을 제공합니다.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 디자인 철학
|
|
23
|
+
|
|
24
|
+
### Apple HIG 2026 원칙
|
|
25
|
+
|
|
26
|
+
1. **Hierarchy (위계)**
|
|
27
|
+
- 사용자의 시선을 즉시 안내
|
|
28
|
+
- 중요한 요소를 명확히 강조
|
|
29
|
+
- 정보의 우선순위를 시각적으로 표현
|
|
30
|
+
|
|
31
|
+
2. **System Integration (시스템 통합)**
|
|
32
|
+
- 하드웨어 디자인을 소프트웨어에 반영
|
|
33
|
+
- Rounded corners, minimal lines 사용
|
|
34
|
+
- Dynamic materials로 깊이감 표현
|
|
35
|
+
|
|
36
|
+
3. **Consistency (일관성)**
|
|
37
|
+
- 학습한 패턴을 전체 앱에서 재사용
|
|
38
|
+
- 예측 가능한 인터랙션
|
|
39
|
+
- 플랫폼 표준 준수
|
|
40
|
+
|
|
41
|
+
### Toss Design System 원칙
|
|
42
|
+
|
|
43
|
+
1. **명확성 (Clarity)**
|
|
44
|
+
- 텍스트 최소화, 시각적 언어 우선
|
|
45
|
+
- 한눈에 이해되는 인터페이스
|
|
46
|
+
- 불필요한 설명 제거
|
|
47
|
+
|
|
48
|
+
2. **속도 (Speed)**
|
|
49
|
+
- 최소한의 탭으로 목표 달성
|
|
50
|
+
- 로딩 최소화
|
|
51
|
+
- 즉각적인 피드백
|
|
52
|
+
|
|
53
|
+
3. **신뢰 (Trust)**
|
|
54
|
+
- 명확한 결과 표시
|
|
55
|
+
- 에러 상황의 친절한 안내
|
|
56
|
+
- 투명한 정보 제공
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 워크플로우
|
|
61
|
+
|
|
62
|
+
```mermaid
|
|
63
|
+
flowchart TD
|
|
64
|
+
A[디자인 요청] --> B[Step 1: 사용자 & 컨텍스트 파악]
|
|
65
|
+
B --> C{정보 충분?}
|
|
66
|
+
C -->|No| D[질문: 사용자, 사용 상황, 목표]
|
|
67
|
+
D --> E[사용자 응답]
|
|
68
|
+
E --> C
|
|
69
|
+
C -->|Yes| F[Step 2: 정보 아키텍처 설계]
|
|
70
|
+
F --> G{구조 명확?}
|
|
71
|
+
G -->|No| H[질문: 핵심 기능, 우선순위]
|
|
72
|
+
H --> I[사용자 응답]
|
|
73
|
+
I --> G
|
|
74
|
+
G -->|Yes| J[Step 3: 비주얼 디자인]
|
|
75
|
+
J --> K[Step 4: 인터랙션 디자인]
|
|
76
|
+
K --> L[Step 5: 디자인 스펙 문서화]
|
|
77
|
+
L --> M[개발자 핸드오프]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Step 1: 사용자 & 컨텍스트 파악
|
|
83
|
+
|
|
84
|
+
### 수집해야 할 정보
|
|
85
|
+
|
|
86
|
+
- **타겟 사용자**: 누가 사용하는가? (연령, 기술 숙련도, 사용 맥락)
|
|
87
|
+
- **플랫폼**: iOS, Android, Web, 또는 크로스 플랫폼?
|
|
88
|
+
- **사용 시나리오**: 언제, 어디서, 왜 사용하는가?
|
|
89
|
+
- **핵심 목표**: 사용자가 달성하려는 것은?
|
|
90
|
+
- **제약사항**: 기술적 제약, 브랜드 가이드라인
|
|
91
|
+
|
|
92
|
+
### 질문 예시
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
1. "어떤 사용자를 타겟으로 하나요? (연령대, 기술 수준 등)"
|
|
96
|
+
2. "이 기능을 주로 언제, 어디서 사용하나요? (출퇴근 중, 집에서, 업무 중 등)"
|
|
97
|
+
3. "iOS, Android, 또는 둘 다인가요?"
|
|
98
|
+
4. "기존 브랜드 컬러나 디자인 가이드라인이 있나요?"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Step 2: 정보 아키텍처 설계
|
|
104
|
+
|
|
105
|
+
### 화면 구조 설계
|
|
106
|
+
|
|
107
|
+
1. **기능 우선순위 결정**
|
|
108
|
+
- Primary action (가장 중요한 행동)
|
|
109
|
+
- Secondary actions (부가 기능)
|
|
110
|
+
- Tertiary actions (설정, 옵션 등)
|
|
111
|
+
|
|
112
|
+
2. **네비게이션 구조**
|
|
113
|
+
- Tab Bar (주요 섹션 2-5개)
|
|
114
|
+
- Navigation Bar (계층 구조)
|
|
115
|
+
- Modal (임시 작업)
|
|
116
|
+
|
|
117
|
+
3. **정보 그룹핑**
|
|
118
|
+
- 관련된 정보를 카드/섹션으로 묶기
|
|
119
|
+
- 시각적 분리 (Spacing, Divider)
|
|
120
|
+
|
|
121
|
+
### 질문 예시
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
1. "이 화면에서 사용자가 가장 자주 하는 행동은 무엇인가요?"
|
|
125
|
+
2. "한 화면에 표시해야 할 정보가 많나요? 우선순위는?"
|
|
126
|
+
3. "이 화면에서 다른 화면으로 이동할 수 있어야 하나요?"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Step 3: 비주얼 디자인
|
|
132
|
+
|
|
133
|
+
### 컬러 시스템
|
|
134
|
+
|
|
135
|
+
#### Apple 스타일
|
|
136
|
+
```
|
|
137
|
+
Primary: System Blue (#007AFF)
|
|
138
|
+
Secondary: System Gray (#8E8E93)
|
|
139
|
+
Success: System Green (#34C759)
|
|
140
|
+
Warning: System Orange (#FF9500)
|
|
141
|
+
Danger: System Red (#FF3B30)
|
|
142
|
+
|
|
143
|
+
Background:
|
|
144
|
+
- Light: White (#FFFFFF), System Gray 6 (#F2F2F7)
|
|
145
|
+
- Dark: Black (#000000), System Gray 6 (#1C1C1E)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Toss 스타일
|
|
149
|
+
```
|
|
150
|
+
Primary: Toss Blue (#3182F6)
|
|
151
|
+
Secondary: Toss Black (#191F28)
|
|
152
|
+
Success: Toss Green (#3BCE84)
|
|
153
|
+
Warning: Toss Yellow (#FFC043)
|
|
154
|
+
Danger: Toss Red (#F04452)
|
|
155
|
+
|
|
156
|
+
Background:
|
|
157
|
+
- White (#FFFFFF)
|
|
158
|
+
- Gray 50 (#F9FAFB)
|
|
159
|
+
- Gray 100 (#F2F4F6)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 타이포그래피
|
|
163
|
+
|
|
164
|
+
#### iOS (San Francisco)
|
|
165
|
+
```
|
|
166
|
+
Large Title: 34pt, Bold
|
|
167
|
+
Title 1: 28pt, Regular
|
|
168
|
+
Title 2: 22pt, Regular
|
|
169
|
+
Title 3: 20pt, Regular
|
|
170
|
+
Headline: 17pt, Semibold
|
|
171
|
+
Body: 17pt, Regular
|
|
172
|
+
Callout: 16pt, Regular
|
|
173
|
+
Subheadline: 15pt, Regular
|
|
174
|
+
Footnote: 13pt, Regular
|
|
175
|
+
Caption 1: 12pt, Regular
|
|
176
|
+
Caption 2: 11pt, Regular
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
#### Toss 스타일
|
|
180
|
+
```
|
|
181
|
+
Display: 32px, Bold, -0.5px letter-spacing
|
|
182
|
+
Headline 1: 24px, Bold
|
|
183
|
+
Headline 2: 20px, Bold
|
|
184
|
+
Headline 3: 18px, Bold
|
|
185
|
+
Body 1: 16px, Regular, 1.6 line-height
|
|
186
|
+
Body 2: 14px, Regular, 1.5 line-height
|
|
187
|
+
Caption: 12px, Regular
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Spacing System (8pt Grid)
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
4px - Micro spacing (아이콘과 텍스트)
|
|
194
|
+
8px - Small spacing (관련 요소)
|
|
195
|
+
12px - Medium spacing (섹션 내부)
|
|
196
|
+
16px - Base spacing (기본 패딩)
|
|
197
|
+
24px - Large spacing (섹션 간)
|
|
198
|
+
32px - XL spacing (큰 구분)
|
|
199
|
+
48px - XXL spacing (주요 구분)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Corner Radius
|
|
203
|
+
|
|
204
|
+
#### Apple 스타일
|
|
205
|
+
```
|
|
206
|
+
Button: 8-12px
|
|
207
|
+
Card: 12-16px
|
|
208
|
+
Modal: 16-20px
|
|
209
|
+
Bottom Sheet: 16px (상단만)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### Toss 스타일
|
|
213
|
+
```
|
|
214
|
+
Button: 8px
|
|
215
|
+
Card: 12px
|
|
216
|
+
Input: 8px
|
|
217
|
+
Bottom Sheet: 16px (상단만)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Step 4: 인터랙션 디자인
|
|
223
|
+
|
|
224
|
+
### 제스처
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
Tap: 기본 액션
|
|
228
|
+
Long Press: 컨텍스트 메뉴, 미리보기
|
|
229
|
+
Swipe:
|
|
230
|
+
- Left: 삭제, 보관
|
|
231
|
+
- Right: 좋아요, 완료
|
|
232
|
+
- Down: 새로고침 (Pull to Refresh)
|
|
233
|
+
Pinch: 확대/축소
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### 애니메이션 타이밍
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
Instant: 100ms (토글, 스위치)
|
|
240
|
+
Quick: 200ms (버튼 피드백)
|
|
241
|
+
Standard: 300ms (화면 전환)
|
|
242
|
+
Slow: 500ms (복잡한 변화)
|
|
243
|
+
|
|
244
|
+
Easing:
|
|
245
|
+
- ease-out: 0.25s (기본 전환)
|
|
246
|
+
- spring: (response: 0.3, damping: 0.7) (iOS)
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 피드백
|
|
250
|
+
|
|
251
|
+
1. **Haptic Feedback** (iOS)
|
|
252
|
+
- Light: 선택, 스위치
|
|
253
|
+
- Medium: 확인, 완료
|
|
254
|
+
- Heavy: 에러, 경고
|
|
255
|
+
|
|
256
|
+
2. **Visual Feedback**
|
|
257
|
+
- 버튼: Pressed state (투명도 70%)
|
|
258
|
+
- 리스트 아이템: Highlight (배경색 변경)
|
|
259
|
+
- 로딩: Skeleton UI 또는 Spinner
|
|
260
|
+
|
|
261
|
+
3. **Sound** (선택적)
|
|
262
|
+
- 성공: 짧고 경쾌한 소리
|
|
263
|
+
- 에러: 부드러운 경고음
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Step 5: 디자인 스펙 문서화
|
|
268
|
+
|
|
269
|
+
### 화면별 스펙
|
|
270
|
+
|
|
271
|
+
각 화면마다 다음 정보를 포함:
|
|
272
|
+
|
|
273
|
+
```markdown
|
|
274
|
+
## [화면 이름]
|
|
275
|
+
|
|
276
|
+
### 목적
|
|
277
|
+
이 화면의 역할과 사용자 목표
|
|
278
|
+
|
|
279
|
+
### 레이아웃
|
|
280
|
+
- Navigation Bar
|
|
281
|
+
- Title: "제목"
|
|
282
|
+
- Left Button: 뒤로가기
|
|
283
|
+
- Right Button: 설정
|
|
284
|
+
|
|
285
|
+
- Content Area
|
|
286
|
+
- Header Section
|
|
287
|
+
- 타이틀 (Headline 1, Bold)
|
|
288
|
+
- 서브타이틀 (Body 2, Gray)
|
|
289
|
+
|
|
290
|
+
- Card Component
|
|
291
|
+
- Padding: 16px
|
|
292
|
+
- Border Radius: 12px
|
|
293
|
+
- Shadow: 0 2px 8px rgba(0,0,0,0.08)
|
|
294
|
+
- Background: White
|
|
295
|
+
|
|
296
|
+
- Bottom Button
|
|
297
|
+
- Height: 56px
|
|
298
|
+
- Border Radius: 12px
|
|
299
|
+
- Background: Primary Color
|
|
300
|
+
- Text: Body 1, Bold, White
|
|
301
|
+
|
|
302
|
+
### 인터랙션
|
|
303
|
+
1. 카드 탭 시 → 상세 화면으로 전환 (300ms slide)
|
|
304
|
+
2. 버튼 탭 시 → API 호출 + 로딩 상태 표시
|
|
305
|
+
3. Pull to Refresh → 데이터 새로고침
|
|
306
|
+
|
|
307
|
+
### 상태
|
|
308
|
+
- Default: 초기 로드 상태
|
|
309
|
+
- Loading: Skeleton UI 표시
|
|
310
|
+
- Empty: 빈 상태 일러스트 + 안내 문구
|
|
311
|
+
- Error: 에러 메시지 + 재시도 버튼
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### 컴포넌트 명세
|
|
315
|
+
|
|
316
|
+
재사용 가능한 컴포넌트는 별도 문서화:
|
|
317
|
+
|
|
318
|
+
```markdown
|
|
319
|
+
## Button Component
|
|
320
|
+
|
|
321
|
+
### Variants
|
|
322
|
+
1. Primary Button
|
|
323
|
+
- Background: Primary Color
|
|
324
|
+
- Text: White, Bold
|
|
325
|
+
- Height: 56px
|
|
326
|
+
- Border Radius: 12px
|
|
327
|
+
- Pressed: Opacity 70%
|
|
328
|
+
|
|
329
|
+
2. Secondary Button
|
|
330
|
+
- Background: Gray 100
|
|
331
|
+
- Text: Primary Color, Bold
|
|
332
|
+
- Height: 56px
|
|
333
|
+
- Border Radius: 12px
|
|
334
|
+
|
|
335
|
+
3. Text Button
|
|
336
|
+
- Background: Transparent
|
|
337
|
+
- Text: Primary Color
|
|
338
|
+
- Underline on Pressed
|
|
339
|
+
|
|
340
|
+
### Props
|
|
341
|
+
- label: string
|
|
342
|
+
- disabled: boolean
|
|
343
|
+
- loading: boolean
|
|
344
|
+
- onPress: () => void
|
|
345
|
+
|
|
346
|
+
### States
|
|
347
|
+
- Default
|
|
348
|
+
- Pressed (opacity 70%)
|
|
349
|
+
- Disabled (opacity 30%)
|
|
350
|
+
- Loading (spinner)
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 플랫폼별 가이드라인
|
|
356
|
+
|
|
357
|
+
### iOS (Apple HIG 2026)
|
|
358
|
+
|
|
359
|
+
1. **Safe Area**
|
|
360
|
+
- Top: 44-47pt (노치 고려)
|
|
361
|
+
- Bottom: 34pt (홈 인디케이터)
|
|
362
|
+
- Sides: 16pt
|
|
363
|
+
|
|
364
|
+
2. **Navigation Bar**
|
|
365
|
+
- Height: 44pt (Regular), 96pt (Large Title)
|
|
366
|
+
- Large Title: 34pt, Bold
|
|
367
|
+
- Back Button: 항상 왼쪽
|
|
368
|
+
|
|
369
|
+
3. **Tab Bar**
|
|
370
|
+
- Height: 49pt + Safe Area
|
|
371
|
+
- Icons: 25pt × 25pt (filled when selected)
|
|
372
|
+
- Max 5 tabs
|
|
373
|
+
|
|
374
|
+
4. **Lists**
|
|
375
|
+
- Row Height: 최소 44pt (터치 영역)
|
|
376
|
+
- Separator: Inset 16pt from left
|
|
377
|
+
- Swipe Actions: Delete (red), Archive (gray)
|
|
378
|
+
|
|
379
|
+
### Android (Material Design 3)
|
|
380
|
+
|
|
381
|
+
1. **Top App Bar**
|
|
382
|
+
- Height: 56dp (Small), 112dp (Medium), 152dp (Large)
|
|
383
|
+
- Elevation: 0-4dp
|
|
384
|
+
|
|
385
|
+
2. **Navigation Bar**
|
|
386
|
+
- Height: 80dp
|
|
387
|
+
- Icons: 24dp × 24dp
|
|
388
|
+
- Max 5 items
|
|
389
|
+
|
|
390
|
+
3. **FAB (Floating Action Button)**
|
|
391
|
+
- Size: 56dp × 56dp
|
|
392
|
+
- Elevation: 6dp
|
|
393
|
+
- Position: 16dp from edge
|
|
394
|
+
|
|
395
|
+
4. **Cards**
|
|
396
|
+
- Elevation: 1-8dp
|
|
397
|
+
- Border Radius: 12dp
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## 접근성 (Accessibility)
|
|
402
|
+
|
|
403
|
+
### WCAG 2.1 AA 준수
|
|
404
|
+
|
|
405
|
+
1. **Color Contrast**
|
|
406
|
+
- Text: 4.5:1 이상
|
|
407
|
+
- Large Text (18pt+): 3:1 이상
|
|
408
|
+
- Interactive Elements: 3:1 이상
|
|
409
|
+
|
|
410
|
+
2. **Touch Target**
|
|
411
|
+
- 최소 크기: 44pt × 44pt (iOS), 48dp × 48dp (Android)
|
|
412
|
+
- 간격: 최소 8pt
|
|
413
|
+
|
|
414
|
+
3. **Font Size**
|
|
415
|
+
- 최소 크기: 11pt (iOS), 12sp (Android)
|
|
416
|
+
- Body Text: 17pt (iOS), 16sp (Android)
|
|
417
|
+
- Dynamic Type 지원 (iOS)
|
|
418
|
+
- Scalable Text 지원 (Android)
|
|
419
|
+
|
|
420
|
+
4. **Screen Reader**
|
|
421
|
+
- 모든 인터랙티브 요소에 Label 제공
|
|
422
|
+
- 의미 없는 이미지는 숨김 처리
|
|
423
|
+
- 논리적인 포커스 순서
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
## 다크 모드
|
|
428
|
+
|
|
429
|
+
### 컬러 변환 규칙
|
|
430
|
+
|
|
431
|
+
```
|
|
432
|
+
Light → Dark 변환:
|
|
433
|
+
|
|
434
|
+
Background:
|
|
435
|
+
White → System Gray 6 (Dark)
|
|
436
|
+
Gray 100 → System Gray 5
|
|
437
|
+
Gray 200 → System Gray 4
|
|
438
|
+
|
|
439
|
+
Text:
|
|
440
|
+
Black → White
|
|
441
|
+
Gray 700 → Gray 200
|
|
442
|
+
|
|
443
|
+
Elevation (Shadow → Overlay):
|
|
444
|
+
Shadow 제거 → 밝은 Overlay 추가
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### Toss 다크 모드
|
|
448
|
+
|
|
449
|
+
```
|
|
450
|
+
Background:
|
|
451
|
+
#FFFFFF → #1A1B1E
|
|
452
|
+
#F9FAFB → #25262B
|
|
453
|
+
|
|
454
|
+
Text:
|
|
455
|
+
#191F28 → #FFFFFF
|
|
456
|
+
#6B7684 → #ADB5BD
|
|
457
|
+
|
|
458
|
+
Primary Color는 유지:
|
|
459
|
+
#3182F6 (동일)
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## 성능 최적화
|
|
465
|
+
|
|
466
|
+
### 이미지
|
|
467
|
+
|
|
468
|
+
1. **형식**
|
|
469
|
+
- PNG: 투명도 필요 시
|
|
470
|
+
- JPEG: 사진
|
|
471
|
+
- WebP: 웹 (50% 작은 용량)
|
|
472
|
+
- SVG: 아이콘, 일러스트
|
|
473
|
+
|
|
474
|
+
2. **해상도**
|
|
475
|
+
- @1x, @2x, @3x 제공 (iOS)
|
|
476
|
+
- hdpi, xhdpi, xxhdpi, xxxhdpi (Android)
|
|
477
|
+
- Lazy Loading 적용
|
|
478
|
+
|
|
479
|
+
### 애니메이션
|
|
480
|
+
|
|
481
|
+
1. **60fps 유지**
|
|
482
|
+
- transform, opacity만 애니메이션
|
|
483
|
+
- width, height 애니메이션 지양
|
|
484
|
+
- GPU 가속 활용
|
|
485
|
+
|
|
486
|
+
2. **Reduce Motion 고려**
|
|
487
|
+
- 모션 감소 설정 시 애니메이션 최소화
|
|
488
|
+
- 필수 정보는 애니메이션 없이도 전달
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## 디자인 핸드오프
|
|
493
|
+
|
|
494
|
+
### 개발자에게 전달할 정보
|
|
495
|
+
|
|
496
|
+
1. **디자인 파일**
|
|
497
|
+
- Figma, Sketch, Adobe XD 링크
|
|
498
|
+
- Asset Export (모든 해상도)
|
|
499
|
+
|
|
500
|
+
2. **스펙 문서**
|
|
501
|
+
- 화면별 레이아웃
|
|
502
|
+
- 컴포넌트 명세
|
|
503
|
+
- 인터랙션 정의
|
|
504
|
+
- 애니메이션 타이밍
|
|
505
|
+
|
|
506
|
+
3. **코드 스니펫** (선택)
|
|
507
|
+
```swift
|
|
508
|
+
// iOS Example
|
|
509
|
+
let button = UIButton()
|
|
510
|
+
button.backgroundColor = .systemBlue
|
|
511
|
+
button.layer.cornerRadius = 12
|
|
512
|
+
button.titleLabel?.font = .systemFont(ofSize: 17, weight: .bold)
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
```kotlin
|
|
516
|
+
// Android Example
|
|
517
|
+
Button(
|
|
518
|
+
onClick = { },
|
|
519
|
+
colors = ButtonDefaults.buttonColors(
|
|
520
|
+
containerColor = MaterialTheme.colorScheme.primary
|
|
521
|
+
),
|
|
522
|
+
shape = RoundedCornerShape(12.dp)
|
|
523
|
+
) {
|
|
524
|
+
Text("버튼", fontWeight = FontWeight.Bold)
|
|
525
|
+
}
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
4. **Token/Variables**
|
|
529
|
+
```json
|
|
530
|
+
{
|
|
531
|
+
"color": {
|
|
532
|
+
"primary": "#3182F6",
|
|
533
|
+
"secondary": "#191F28",
|
|
534
|
+
"background": "#FFFFFF"
|
|
535
|
+
},
|
|
536
|
+
"spacing": {
|
|
537
|
+
"xs": "4px",
|
|
538
|
+
"sm": "8px",
|
|
539
|
+
"md": "16px",
|
|
540
|
+
"lg": "24px",
|
|
541
|
+
"xl": "32px"
|
|
542
|
+
},
|
|
543
|
+
"borderRadius": {
|
|
544
|
+
"sm": "8px",
|
|
545
|
+
"md": "12px",
|
|
546
|
+
"lg": "16px"
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
## 참고 자료
|
|
554
|
+
|
|
555
|
+
이 스킬은 다음 자료를 기반으로 작성되었습니다:
|
|
556
|
+
|
|
557
|
+
- [Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)
|
|
558
|
+
- [Toss Design System Guide](https://toss.tech/article/toss-design-system-guide)
|
|
559
|
+
- [Frontend Design Best Practices 2026](https://www.whizzbridge.com/blog/ui-ux-best-practices-2025)
|
|
560
|
+
- [Material Design 3](https://m3.material.io/)
|
|
561
|
+
|
|
562
|
+
---
|
|
563
|
+
|
|
564
|
+
## 추측 금지 원칙
|
|
565
|
+
|
|
566
|
+
```
|
|
567
|
+
정보가 충분하면 → 바로 디자인
|
|
568
|
+
정보가 부족하면 → 추측하지 말고 질문
|
|
569
|
+
|
|
570
|
+
✅ 질문해야 할 때:
|
|
571
|
+
• 타겟 사용자를 모를 때
|
|
572
|
+
• 플랫폼이 명확하지 않을 때
|
|
573
|
+
• 브랜드 컬러/가이드라인이 불분명할 때
|
|
574
|
+
• 기능의 우선순위를 모를 때
|
|
575
|
+
|
|
576
|
+
❌ 질문하지 말아야 할 때:
|
|
577
|
+
• 일반적인 UX 패턴 (로그인, 회원가입 등)
|
|
578
|
+
• 플랫폼 표준 (iOS, Android 가이드라인)
|
|
579
|
+
• 접근성 기준 (WCAG 2.1)
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
## 결과물 형식
|
|
585
|
+
|
|
586
|
+
디자인 완료 시 다음 형식으로 전달:
|
|
587
|
+
|
|
588
|
+
```markdown
|
|
589
|
+
# [화면/기능 이름] 디자인 스펙
|
|
590
|
+
|
|
591
|
+
## 1. 개요
|
|
592
|
+
- 목적: ...
|
|
593
|
+
- 타겟 사용자: ...
|
|
594
|
+
- 플랫폼: iOS/Android/Web
|
|
595
|
+
|
|
596
|
+
## 2. 정보 아키텍처
|
|
597
|
+
[화면 구조 다이어그램]
|
|
598
|
+
|
|
599
|
+
## 3. 비주얼 디자인
|
|
600
|
+
### 컬러
|
|
601
|
+
- Primary: #3182F6
|
|
602
|
+
- ...
|
|
603
|
+
|
|
604
|
+
### 타이포그래피
|
|
605
|
+
- Headline: 24px Bold
|
|
606
|
+
- ...
|
|
607
|
+
|
|
608
|
+
### Spacing
|
|
609
|
+
- Section Padding: 16px
|
|
610
|
+
- ...
|
|
611
|
+
|
|
612
|
+
## 4. 컴포넌트
|
|
613
|
+
### 버튼
|
|
614
|
+
[상세 스펙]
|
|
615
|
+
|
|
616
|
+
### 카드
|
|
617
|
+
[상세 스펙]
|
|
618
|
+
|
|
619
|
+
## 5. 인터랙션
|
|
620
|
+
- 탭: ...
|
|
621
|
+
- 스와이프: ...
|
|
622
|
+
- 애니메이션: ...
|
|
623
|
+
|
|
624
|
+
## 6. 상태
|
|
625
|
+
- Default
|
|
626
|
+
- Loading
|
|
627
|
+
- Error
|
|
628
|
+
- Empty
|
|
629
|
+
|
|
630
|
+
## 7. 접근성
|
|
631
|
+
- Color Contrast: ✅
|
|
632
|
+
- Touch Target: ✅
|
|
633
|
+
- Screen Reader: ✅
|
|
634
|
+
|
|
635
|
+
## 8. 다크 모드
|
|
636
|
+
[다크 모드 컬러 맵핑]
|
|
637
|
+
|
|
638
|
+
## 9. 개발 가이드
|
|
639
|
+
[코드 스니펫 및 구현 팁]
|
|
640
|
+
```
|