@kood/claude-code 0.1.5 → 0.1.7

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 (77) hide show
  1. package/dist/index.js +21 -243
  2. package/package.json +1 -1
  3. package/templates/hono/CLAUDE.md +10 -6
  4. package/templates/hono/docs/deployment/index.md +5 -0
  5. package/templates/hono/docs/library/hono/index.md +6 -0
  6. package/templates/hono/docs/library/prisma/index.md +3 -0
  7. package/templates/npx/CLAUDE.md +8 -2
  8. package/templates/tanstack-start/CLAUDE.md +105 -259
  9. package/templates/tanstack-start/docs/deployment/cloudflare.md +37 -424
  10. package/templates/tanstack-start/docs/deployment/index.md +57 -286
  11. package/templates/tanstack-start/docs/deployment/nitro.md +36 -318
  12. package/templates/tanstack-start/docs/deployment/railway.md +40 -409
  13. package/templates/tanstack-start/docs/deployment/vercel.md +43 -465
  14. package/templates/tanstack-start/docs/design/accessibility.md +56 -326
  15. package/templates/tanstack-start/docs/design/color.md +37 -179
  16. package/templates/tanstack-start/docs/design/components.md +77 -311
  17. package/templates/tanstack-start/docs/design/index.md +24 -87
  18. package/templates/tanstack-start/docs/design/safe-area.md +51 -250
  19. package/templates/tanstack-start/docs/design/spacing.md +57 -276
  20. package/templates/tanstack-start/docs/design/tailwind-setup.md +45 -359
  21. package/templates/tanstack-start/docs/design/typography.md +40 -284
  22. package/templates/tanstack-start/docs/guides/best-practices.md +3 -8
  23. package/templates/tanstack-start/docs/guides/env-setup.md +3 -3
  24. package/templates/tanstack-start/docs/library/better-auth/2fa.md +27 -115
  25. package/templates/tanstack-start/docs/library/better-auth/advanced.md +22 -105
  26. package/templates/tanstack-start/docs/library/better-auth/index.md +17 -66
  27. package/templates/tanstack-start/docs/library/better-auth/plugins.md +11 -88
  28. package/templates/tanstack-start/docs/library/better-auth/session.md +12 -92
  29. package/templates/tanstack-start/docs/library/better-auth/setup.md +9 -91
  30. package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +30 -358
  31. package/templates/tanstack-start/docs/library/prisma/config.md +27 -327
  32. package/templates/tanstack-start/docs/library/prisma/crud.md +46 -174
  33. package/templates/tanstack-start/docs/library/prisma/index.md +23 -113
  34. package/templates/tanstack-start/docs/library/prisma/relations.md +31 -153
  35. package/templates/tanstack-start/docs/library/prisma/schema.md +40 -217
  36. package/templates/tanstack-start/docs/library/prisma/setup.md +13 -113
  37. package/templates/tanstack-start/docs/library/prisma/transactions.md +20 -110
  38. package/templates/tanstack-start/docs/library/tanstack-query/index.md +12 -99
  39. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +28 -107
  40. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +44 -146
  41. package/templates/tanstack-start/docs/library/tanstack-query/setup.md +11 -73
  42. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +33 -127
  43. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +49 -149
  44. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +19 -112
  45. package/templates/tanstack-start/docs/library/tanstack-start/index.md +33 -80
  46. package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +28 -106
  47. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +21 -118
  48. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +41 -172
  49. package/templates/tanstack-start/docs/library/tanstack-start/setup.md +6 -39
  50. package/templates/tanstack-start/docs/library/zod/basic-types.md +33 -145
  51. package/templates/tanstack-start/docs/library/zod/complex-types.md +32 -156
  52. package/templates/tanstack-start/docs/library/zod/index.md +22 -150
  53. package/templates/tanstack-start/docs/library/zod/transforms.md +20 -129
  54. package/templates/tanstack-start/docs/library/zod/validation.md +39 -155
  55. package/templates/hono/docs/commands/git.md +0 -145
  56. package/templates/hono/docs/mcp/context7.md +0 -106
  57. package/templates/hono/docs/mcp/index.md +0 -176
  58. package/templates/hono/docs/mcp/sequential-thinking.md +0 -101
  59. package/templates/hono/docs/mcp/serena.md +0 -269
  60. package/templates/hono/docs/mcp/sgrep.md +0 -105
  61. package/templates/hono/docs/skills/gemini-review/SKILL.md +0 -220
  62. package/templates/hono/docs/skills/gemini-review/references/checklists.md +0 -136
  63. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +0 -303
  64. package/templates/npx/docs/commands/git.md +0 -145
  65. package/templates/npx/docs/mcp/index.md +0 -60
  66. package/templates/npx/docs/skills/gemini-review/SKILL.md +0 -220
  67. package/templates/npx/docs/skills/gemini-review/references/checklists.md +0 -134
  68. package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +0 -301
  69. package/templates/tanstack-start/docs/commands/git.md +0 -145
  70. package/templates/tanstack-start/docs/mcp/context7.md +0 -204
  71. package/templates/tanstack-start/docs/mcp/index.md +0 -177
  72. package/templates/tanstack-start/docs/mcp/sequential-thinking.md +0 -180
  73. package/templates/tanstack-start/docs/mcp/serena.md +0 -269
  74. package/templates/tanstack-start/docs/mcp/sgrep.md +0 -174
  75. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +0 -220
  76. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +0 -144
  77. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +0 -292
@@ -1,317 +1,163 @@
1
- # CLAUDE.md - Claude Code Instructions
1
+ # CLAUDE.md - TanStack Start + React 작업 지침
2
2
 
3
- > TanStack Start + React 프로젝트 작업 지침
3
+ ## Instructions
4
+ @../../commands/git.md
5
+ @docs/library/tanstack-start/index.md
6
+ @docs/library/prisma/index.md
7
+ @docs/library/better-auth/index.md
8
+ @docs/library/tanstack-query/index.md
9
+ @docs/library/zod/index.md
10
+ @docs/design/index.md
4
11
 
5
12
  ---
6
13
 
7
- ## 🚨 STOP - 작업 전 필수 확인
14
+ ## NEVER DO
8
15
 
9
- ```
10
- ┌─────────────────────────────────────────────────────────────┐
11
- │ 이 프로젝트에서 작업하기 전에 문서를 끝까지 읽으세요. │
12
- │ 특히 ⛔ NEVER DO 섹션의 규칙은 절대 위반하지 마세요. │
13
- │ │
14
- │ 📖 작업 유형별 상세 문서: docs/ 폴더 참조 │
15
- └─────────────────────────────────────────────────────────────┘
16
- ```
16
+ ### Git 커밋
17
+ - AI 표시 금지: "Generated with Claude Code", "🤖", "Co-Authored-By:" 포함 불가
18
+ - 커밋 메시지: 줄만, 이모지 금지
17
19
 
18
- ---
20
+ ### Prisma
21
+ - 자동 실행 금지: `prisma db push/migrate/generate`
22
+ - `schema.prisma` 임의 변경 금지
19
23
 
20
- ## NEVER DO (절대 금지 - 예외 없음)
24
+ ### API 구현
25
+ - `/api` 라우터 생성 금지 (명시 요청 제외)
26
+ - Server Function: POST/PUT/PATCH → `inputValidator` 필수, 인증 필요 시 → `middleware` 필수
27
+ - handler 내부에서 수동 검증/인증 체크 금지
28
+ - 클라이언트에서 Server Function 직접 호출 금지 → TanStack Query 필수
21
29
 
22
- ### Git 커밋 금지 사항
23
- ```
24
- ❌ "Generated with Claude Code" 포함 금지
25
- ❌ "🤖" 또는 AI 관련 이모지 포함 금지
26
- ❌ "Co-Authored-By:" 헤더 포함 금지
27
- ❌ AI/봇이 작성했다는 어떤 표시도 금지
28
- ❌ 커밋 메시지 여러 줄 작성 금지
29
- ❌ 커밋 메시지에 이모지 사용 금지
30
- ```
30
+ ### 코드 검색
31
+ - `grep`/`rg`/`find` 금지 → `sgrep` 사용
31
32
 
32
- ### Prisma 금지 사항
33
- ```
34
- prisma db push 자동 실행 금지
35
- prisma migrate 자동 실행 금지
36
- prisma generate 자동 실행 금지
37
- ❌ schema.prisma 임의 변경 금지 (요청된 것만)
38
- ```
33
+ ### Custom Hook 순서
34
+ 1. State (useState, zustand)
35
+ 2. Global Hooks (useParams, useNavigate, useQueryClient)
36
+ 3. React Query (useQuery useMutation)
37
+ 4. Event Handlers
38
+ 5. useMemo
39
+ 6. useEffect
39
40
 
40
- ### API 구현 금지 사항
41
- ```
42
- /api 라우터에 함수 생성 금지 (사용자 명시 요청 제외)
43
- ❌ Server Function에 inputValidator 누락 금지 (POST/PUT/PATCH)
44
- ❌ Server Function에 middleware 누락 금지 (인증 필요 시)
45
- ❌ handler 내부에서 수동 검증 금지 (inputValidator 사용)
46
- ❌ handler 내부에서 수동 인증 체크 금지 (middleware 사용)
47
- ❌ 클라이언트에서 Server Function 직접 호출 금지 → TanStack Query 필수
48
- ```
41
+ ### 코드 작성
42
+ - UTF-8 인코딩, 코드 묶음 단위 한글 주석
43
+ - Prisma Multi-File: 모든 요소에 한글 주석 필수
49
44
 
50
- ### 코드 검색 금지 사항
45
+ ### Prisma Multi-File 구조
51
46
  ```
52
- ❌ grep, rg 등 기본 검색 도구 사용 금지
53
- find 명령어로 코드 검색 금지
54
- 코드베이스 검색 시 sgrep 사용 필수
55
- ```
56
-
57
- ### Custom Hook 순서 금지 사항
58
- ```
59
- ❌ Custom Hook 내부 순서 무시 금지
60
- ✅ 반드시 아래 순서 준수:
61
- 1. State (useState, zustand store)
62
- 2. Global Hooks (useParams, useNavigate, useQueryClient 등)
63
- 3. React Query (useQuery → useMutation 순서)
64
- 4. Event Handlers & Functions
65
- 5. useMemo
66
- 6. useEffect
67
- ```
68
-
69
- ### 코드 작성 규칙
70
- ```
71
- ✅ 모든 한글 텍스트는 UTF-8 인코딩 유지
72
- ✅ 코드 묶음 단위로 한글 주석 작성 (너무 세세하게 X)
73
- ✅ Prisma Multi-File 모든 요소에 한글 주석 필수
74
- ```
75
-
76
- ### Prisma Multi-File 구조 (필수)
77
- ```
78
- prisma/
79
- ├── schema/
80
- │ ├── +base.prisma # datasource, generator 설정
81
- │ ├── +enum.prisma # 모든 enum 정의
82
- │ ├── user.prisma # User 모델
83
- │ ├── post.prisma # Post 모델
84
- │ └── ... # 기타 모델별 파일
47
+ prisma/schema/
48
+ ├── +base.prisma # datasource, generator
49
+ ├── +enum.prisma # 모든 enum
50
+ └── [model].prisma # 모델별 파일
85
51
  ```
86
52
 
87
53
  ---
88
54
 
89
- ## ✅ ALWAYS DO (필수 실행)
90
-
91
- ### 1. 작업 전: 관련 문서 읽기
92
- ```
93
- UI 작업 → docs/design/ 읽기
94
- API 작업 → docs/library/tanstack-start/ 읽기
95
- DB 작업 → docs/library/prisma/ 읽기
96
- 인증 작업 → docs/library/better-auth/ 읽기
97
- ```
98
-
99
- ### 2. MCP 도구 적극 활용
100
- ```
101
- 코드베이스 검색 → sgrep 사용 (grep/rg 금지)
102
- 복잡한 분석/디버깅 → Sequential Thinking 사용
103
- 라이브러리 문서 → Context7 사용
104
- ```
105
- **상세**: `docs/mcp/` 참고
106
-
107
- ### 3. 복잡한 작업 시: Gemini Review 실행
108
- ```
109
- 아키텍처 설계/변경 → gemini-review (architecture)
110
- 구현 계획 검증 → gemini-review (plan)
111
- 복잡한 코드 리뷰 → gemini-review (code)
112
- ```
113
-
114
- **실행 조건**:
115
- - 3개 이상 파일 수정하는 기능 구현
116
- - 새로운 아키텍처 패턴 도입
117
- - 보안 관련 코드 (인증, 권한, 암호화)
118
- - 성능 크리티컬 코드
119
-
120
- **상세**: `docs/skills/gemini-review/SKILL.md` 참고
55
+ ## ✅ ALWAYS DO
121
56
 
122
- ### 4. 작업 완료 후: Git 커밋
123
- ```bash
124
- git add .
125
- git commit -m "<prefix>: <설명>"
126
- ```
57
+ ### 작업 문서 읽기
58
+ | 작업 | 문서 |
59
+ |------|------|
60
+ | UI | docs/design/ |
61
+ | API | docs/library/tanstack-start/ |
62
+ | DB | docs/library/prisma/ |
63
+ | 인증 | docs/library/better-auth/ |
127
64
 
128
- **커밋 형식**: `<prefix>: <설명>` (한 줄, 본문 없음)
65
+ ### MCP 도구
66
+ - 코드 검색: sgrep
67
+ - 분석/디버깅: Sequential Thinking
68
+ - 라이브러리 문서: Context7
129
69
 
130
- **Prefix**: `feat` | `fix` | `refactor` | `style` | `docs` | `test` | `chore` | `perf` | `ci`
70
+ ### Gemini Review (3개+ 파일 수정, 아키텍처 변경, 보안/성능 코드)
71
+ - architecture/plan/code 타입 선택
131
72
 
132
- **예시**:
133
- ```bash
134
- feat: 사용자 로그인 기능 추가
135
- fix: 세션 만료 오류 수정
136
- docs: API 문서 업데이트
137
- ```
73
+ ### Git 커밋
74
+ `<prefix>: <설명>` (한 줄)
75
+ - prefix: feat|fix|refactor|style|docs|test|chore|perf|ci
138
76
 
139
77
  ---
140
78
 
141
- ## 📚 문서 참조 테이블
142
-
143
- | 작업 | 문서 경로 | 필독 여부 |
144
- |------|----------|----------|
145
- | **전체 가이드** | `docs/README.md` | 🔴 필수 |
146
- | **Git 규칙** | `docs/git/git.md` | 🔴 필수 |
147
- | **MCP 도구** | `docs/mcp/` | 🔴 필수 |
148
- | **Gemini Review** | `docs/skills/gemini-review/` | 🟡 복잡한 작업 시 |
149
- | **UI 개발** | `docs/design/` | 🟡 해당 시 |
150
- | **API 개발** | `docs/library/tanstack-start/` | 🟡 해당 시 |
151
- | **인증** | `docs/library/better-auth/` | 🟡 해당 시 |
152
- | **DB** | `docs/library/prisma/` | 🟡 해당 시 |
153
- | **데이터 페칭** | `docs/library/tanstack-query/` | 🟡 해당 시 |
154
- | **검증** | `docs/library/zod/` | 🟡 해당 시 |
155
- | **배포** | `docs/deployment/` | 🟡 해당 시 |
156
-
157
- ---
79
+ ## Tech Stack
158
80
 
159
- ## 🛠 Tech Stack (버전 주의)
160
-
161
- | 기술 | 버전 | 주의사항 |
162
- |------|------|----------|
163
- | TanStack Start | 최신 | Framework |
164
- | TypeScript | 5.x | strict mode |
165
- | Tailwind CSS | 4.x | `@theme` 사용 |
166
- | Prisma | **7.x** | `prisma-client` (js 아님), output 필수 |
167
- | Zod | **4.x** | `z.email()`, `z.url()` (string().email() 아님) |
168
- | Better Auth | 최신 | 인증 |
169
- | TanStack Query | 5.x | 데이터 페칭 |
81
+ | 기술 | 버전 | 주의 |
82
+ |------|------|------|
83
+ | TanStack Start | 최신 | - |
84
+ | TypeScript | 5.x | strict |
85
+ | Tailwind CSS | 4.x | @theme |
86
+ | Prisma | **7.x** | `prisma-client`, output 필수 |
87
+ | Zod | **4.x** | `z.email()`, `z.url()` |
88
+ | Better Auth | 최신 | - |
89
+ | TanStack Query | 5.x | - |
170
90
 
171
91
  ---
172
92
 
173
- ## 📁 Directory Structure
174
-
93
+ ## Directory Structure
175
94
  ```
176
95
  src/
177
- ├── routes/ # File-based routes
178
- │ ├── __root.tsx # Root layout
179
- │ ├── index.tsx # / (Home)
180
- │ ├── $slug.tsx # Dynamic route
181
- │ └── users/
182
- │ ├── index.tsx # /users
183
- │ ├── -components/ # 페이지 전용 컴포넌트
184
- ├── -hooks/ # 페이지 전용
185
- │ └── -functions/ # 페이지 전용 Server Functions
186
- ├── functions/ # 공통 Server Functions ⭐
187
- ├── auth.ts # 인증 관련
188
- │ └── user.ts # 사용자 관련
189
- ├── components/ui/ # 공통 UI 컴포넌트
190
- ├── middleware/ # 공통 미들웨어
191
- │ └── auth.ts # Better Auth 미들웨어
192
- ├── database/prisma.ts # Prisma Client
193
- └── lib/ # 유틸리티
194
- ```
195
-
196
- ### Server Functions 위치 규칙 ⭐
197
- ```
198
- 공통 함수 (여러 라우트에서 사용) → @/functions/
199
- 라우트 전용 함수 (해당 라우트만) → routes/[경로]/-functions/
200
- ```
201
-
202
- **`-` prefix**: 라우트에서 제외되는 폴더
96
+ ├── routes/ # File-based routes
97
+ │ ├── __root.tsx
98
+ │ ├── index.tsx
99
+ │ ├── $slug.tsx
100
+ │ └── [path]/
101
+ │ ├── -components/ # 페이지 전용
102
+ │ ├── -hooks/
103
+ └── -functions/ # 페이지 전용 Server Functions
104
+ ├── functions/ # 공통 Server Functions
105
+ ├── components/ui/
106
+ ├── middleware/
107
+ ├── database/prisma.ts
108
+ └── lib/
109
+ ```
110
+ - 공통 함수 `@/functions/`, 라우트 전용 → `routes/[경로]/-functions/`
203
111
 
204
112
  ---
205
113
 
206
- ## 🔧 Code Conventions
207
-
208
- ### File Naming
209
- - **kebab-case**: `user-profile.tsx`, `auth-service.ts`
210
- - **Routes**: `__root.tsx`, `$param.tsx`
211
-
212
- ### TypeScript
213
- - `const` 선언 사용 (function 대신)
214
- - 명시적 return type
215
- - `interface` (객체) / `type` (유니온)
216
- - `any` 금지 → `unknown` 사용
217
-
218
- ### Import
219
- ```typescript
220
- // @/* → ./src/*
221
- import { prisma } from '@/database/prisma'
222
- import { getUsers } from '@/services/user'
223
- ```
224
-
225
- **순서**: 외부 → 내부(@/) → 상대경로 → type imports
114
+ ## Code Conventions
115
+ - 파일명: kebab-case, Routes: `__root.tsx`, `$param.tsx`
116
+ - TypeScript: const 선언, 명시적 return type, interface(객체)/type(유니온), any 금지→unknown
117
+ - Import 순서: 외부 → @/ → 상대경로 → type
226
118
 
227
119
  ---
228
120
 
229
- ## 📝 Quick Patterns (복사용)
121
+ ## Quick Patterns
230
122
 
231
- ### Server Function (GET + 인증)
232
123
  ```typescript
233
- // 올바른 패턴: middleware 사용
124
+ // Server Function (GET + 인증)
234
125
  export const getUsers = createServerFn({ method: 'GET' })
235
- .middleware([authMiddleware]) // ⭐ 인증 미들웨어 필수
126
+ .middleware([authMiddleware])
236
127
  .handler(async () => prisma.user.findMany())
237
- ```
238
128
 
239
- ### Server Function (POST + Validation + 인증)
240
- ```typescript
241
- // ✅ 올바른 패턴: inputValidator + middleware 모두 사용
129
+ // Server Function (POST + Validation + 인증)
242
130
  export const createUser = createServerFn({ method: 'POST' })
243
- .middleware([authMiddleware]) // ⭐ 인증 미들웨어 필수
244
- .inputValidator(createUserSchema) // ⭐ Zod 스키마 필수
131
+ .middleware([authMiddleware])
132
+ .inputValidator(createUserSchema)
245
133
  .handler(async ({ data }) => prisma.user.create({ data }))
246
- ```
247
134
 
248
- ### 잘못된 패턴 (금지)
249
- ```typescript
250
- // ❌ handler 내부에서 수동 검증 금지
251
- export const createUser = createServerFn({ method: 'POST' })
252
- .handler(async ({ data }) => {
253
- // ❌ 이렇게 하지 마세요!
254
- if (!data.email) throw new Error('Email required')
255
- const session = await getSession() // ❌ 수동 인증 체크 금지
256
- // ...
257
- })
258
- ```
259
-
260
- ### Zod Schema (v4 문법!)
261
- ```typescript
135
+ // Zod v4
262
136
  const schema = z.object({
263
- email: z.email(), // ✅ v4
137
+ email: z.email(),
264
138
  name: z.string().min(1).trim(),
265
- website: z.url().optional(), // ✅ v4
139
+ website: z.url().optional(),
266
140
  })
267
- ```
268
141
 
269
- ### Route with Loader
270
- ```tsx
142
+ // Route with Loader
271
143
  export const Route = createFileRoute('/users')({
272
144
  component: UsersPage,
273
145
  loader: async () => ({ users: await getUsers() }),
274
146
  })
275
- ```
276
-
277
- ### TanStack Query (서버 연동 시 필수)
278
- ```tsx
279
- // ✅ 데이터 조회: useQuery 필수
280
- const getPosts = useServerFn(getServerPosts)
281
- const { data } = useQuery({
282
- queryKey: ['users'],
283
- queryFn: () => getPosts(),
284
- })
285
147
 
286
- // 데이터 변경: useMutation 필수
287
- const createPostFn = useServerFn(createPost)
148
+ // TanStack Query
149
+ const { data } = useQuery({ queryKey: ['posts'], queryFn: getServerPosts })
288
150
  const mutation = useMutation({
289
- mutationFn: createPostFn,
290
- onSuccess: () => queryClient.invalidateQueries({ queryKey: ['users'] }),
151
+ mutationFn: createPost,
152
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: ['posts'] }),
291
153
  })
292
-
293
- // ❌ 금지: Server Function 직접 호출
294
- // useEffect(() => { getPosts().then(setData) }, [])
295
154
  ```
296
155
 
297
156
  ---
298
157
 
299
- ## 🎨 UI/UX Rules
300
-
301
- - **색상**: 60-30-10 규칙 (배경-보조-강조)
302
- - **간격**: 8px 그리드 (8의 배수)
303
- - **접근성**: WCAG AA (대비 4.5:1+)
304
- - **폰트**: 최대 2-3개
305
- - **Safe Area**: `tailwindcss-safe-area` 사용
306
-
307
- **상세**: `docs/design/` 참고
308
-
309
- ---
310
-
311
- ## 🔗 Quick Links
312
-
313
- - [문서 가이드](./docs/README.md)
314
- - [Git 규칙](./docs/git/git.md)
315
- - [MCP 가이드](./docs/mcp/index.md)
316
- - [디자인 가이드](./docs/design/index.md)
317
- - [아키텍처](./docs/architecture/architecture.md)
158
+ ## UI/UX
159
+ - 색상: 60-30-10 (배경-보조-강조)
160
+ - 간격: 8px 그리드
161
+ - 접근성: WCAG AA (대비 4.5:1+)
162
+ - 폰트: 2-3개
163
+ - Safe Area: tailwindcss-safe-area