@kood/claude-code 0.3.7 β†’ 0.3.9

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 (121) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +1 -1
  3. package/templates/.claude/agents/code-reviewer.md +138 -123
  4. package/templates/.claude/agents/dependency-manager.md +99 -84
  5. package/templates/.claude/agents/deployment-validator.md +70 -55
  6. package/templates/.claude/agents/git-operator.md +78 -63
  7. package/templates/.claude/agents/implementation-executor.md +109 -94
  8. package/templates/.claude/agents/ko-to-en-translator.md +74 -0
  9. package/templates/.claude/agents/lint-fixer.md +93 -78
  10. package/templates/.claude/agents/refactor-advisor.md +136 -121
  11. package/templates/.claude/commands/agent-creator.md +199 -184
  12. package/templates/.claude/commands/bug-fix.md +207 -192
  13. package/templates/.claude/commands/command-creator.md +69 -53
  14. package/templates/.claude/commands/docs-creator.md +72 -56
  15. package/templates/.claude/commands/docs-refactor.md +41 -25
  16. package/templates/.claude/commands/execute.md +27 -11
  17. package/templates/.claude/commands/git-all.md +46 -31
  18. package/templates/.claude/commands/git-session.md +57 -41
  19. package/templates/.claude/commands/git.md +49 -33
  20. package/templates/.claude/commands/lint-fix.md +153 -137
  21. package/templates/.claude/commands/lint-init.md +76 -60
  22. package/templates/.claude/commands/plan.md +275 -259
  23. package/templates/.claude/commands/prd.md +39 -23
  24. package/templates/.claude/commands/pre-deploy.md +124 -108
  25. package/templates/.claude/commands/refactor.md +162 -146
  26. package/templates/.claude/commands/version-update.md +32 -16
  27. package/templates/hono/CLAUDE.md +28 -27
  28. package/templates/hono/docs/architecture.md +24 -24
  29. package/templates/hono/docs/deployment/cloudflare.md +18 -18
  30. package/templates/hono/docs/deployment/docker.md +13 -13
  31. package/templates/hono/docs/deployment/index.md +19 -19
  32. package/templates/hono/docs/deployment/railway.md +32 -32
  33. package/templates/hono/docs/deployment/vercel.md +29 -29
  34. package/templates/hono/docs/guides/conventions.md +57 -57
  35. package/templates/hono/docs/guides/env-setup.md +47 -47
  36. package/templates/hono/docs/guides/getting-started.md +27 -27
  37. package/templates/hono/docs/library/hono/error-handling.md +11 -11
  38. package/templates/hono/docs/library/hono/index.md +4 -4
  39. package/templates/hono/docs/library/hono/middleware.md +18 -18
  40. package/templates/hono/docs/library/hono/rpc.md +7 -7
  41. package/templates/hono/docs/library/hono/validation.md +6 -6
  42. package/templates/hono/docs/library/prisma/cloudflare-d1.md +29 -29
  43. package/templates/hono/docs/library/prisma/config.md +16 -16
  44. package/templates/hono/docs/library/prisma/index.md +32 -32
  45. package/templates/hono/docs/library/t3-env/index.md +22 -22
  46. package/templates/hono/docs/library/zod/index.md +31 -31
  47. package/templates/nextjs/CLAUDE.md +54 -51
  48. package/templates/nextjs/docs/architecture.md +812 -0
  49. package/templates/nextjs/docs/design.md +183 -183
  50. package/templates/nextjs/docs/guides/conventions.md +86 -86
  51. package/templates/nextjs/docs/guides/getting-started.md +28 -28
  52. package/templates/nextjs/docs/guides/routes.md +32 -32
  53. package/templates/nextjs/docs/library/better-auth/index.md +70 -70
  54. package/templates/nextjs/docs/library/nextjs/app-router.md +43 -43
  55. package/templates/nextjs/docs/library/nextjs/caching.md +73 -73
  56. package/templates/nextjs/docs/library/nextjs/index.md +51 -51
  57. package/templates/nextjs/docs/library/nextjs/middleware.md +41 -41
  58. package/templates/nextjs/docs/library/nextjs/route-handlers.md +31 -31
  59. package/templates/nextjs/docs/library/nextjs/server-actions.md +34 -34
  60. package/templates/nextjs/docs/library/prisma/cloudflare-d1.md +20 -20
  61. package/templates/nextjs/docs/library/prisma/config.md +18 -18
  62. package/templates/nextjs/docs/library/prisma/crud.md +17 -17
  63. package/templates/nextjs/docs/library/prisma/index.md +18 -18
  64. package/templates/nextjs/docs/library/prisma/relations.md +16 -16
  65. package/templates/nextjs/docs/library/prisma/schema.md +23 -23
  66. package/templates/nextjs/docs/library/prisma/setup.md +6 -6
  67. package/templates/nextjs/docs/library/prisma/transactions.md +10 -10
  68. package/templates/nextjs/docs/library/tanstack-query/index.md +6 -6
  69. package/templates/nextjs/docs/library/tanstack-query/invalidation.md +20 -20
  70. package/templates/nextjs/docs/library/tanstack-query/optimistic-updates.md +4 -4
  71. package/templates/nextjs/docs/library/tanstack-query/use-mutation.md +15 -15
  72. package/templates/nextjs/docs/library/tanstack-query/use-query.md +22 -22
  73. package/templates/nextjs/docs/library/zod/complex-types.md +11 -11
  74. package/templates/nextjs/docs/library/zod/index.md +8 -8
  75. package/templates/nextjs/docs/library/zod/transforms.md +11 -11
  76. package/templates/nextjs/docs/library/zod/validation.md +9 -9
  77. package/templates/npx/CLAUDE.md +38 -37
  78. package/templates/npx/docs/library/commander/index.md +12 -12
  79. package/templates/npx/docs/library/fs-extra/index.md +9 -9
  80. package/templates/npx/docs/library/prompts/index.md +3 -3
  81. package/templates/npx/docs/references/patterns.md +12 -12
  82. package/templates/tanstack-start/CLAUDE.md +54 -53
  83. package/templates/tanstack-start/docs/architecture.md +128 -128
  84. package/templates/tanstack-start/docs/design.md +169 -169
  85. package/templates/tanstack-start/docs/guides/conventions.md +43 -43
  86. package/templates/tanstack-start/docs/guides/env-setup.md +35 -35
  87. package/templates/tanstack-start/docs/guides/getting-started.md +19 -19
  88. package/templates/tanstack-start/docs/guides/hooks.md +45 -45
  89. package/templates/tanstack-start/docs/guides/routes.md +54 -54
  90. package/templates/tanstack-start/docs/guides/services.md +45 -45
  91. package/templates/tanstack-start/docs/library/better-auth/index.md +68 -68
  92. package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +19 -19
  93. package/templates/tanstack-start/docs/library/prisma/config.md +16 -16
  94. package/templates/tanstack-start/docs/library/prisma/crud.md +17 -17
  95. package/templates/tanstack-start/docs/library/prisma/index.md +17 -17
  96. package/templates/tanstack-start/docs/library/prisma/relations.md +16 -16
  97. package/templates/tanstack-start/docs/library/prisma/schema.md +23 -23
  98. package/templates/tanstack-start/docs/library/prisma/setup.md +6 -6
  99. package/templates/tanstack-start/docs/library/prisma/transactions.md +10 -10
  100. package/templates/tanstack-start/docs/library/t3-env/index.md +21 -160
  101. package/templates/tanstack-start/docs/library/tanstack-query/index.md +6 -6
  102. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +19 -19
  103. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +4 -4
  104. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +14 -14
  105. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +21 -21
  106. package/templates/tanstack-start/docs/library/tanstack-router/error-handling.md +9 -9
  107. package/templates/tanstack-start/docs/library/tanstack-router/hooks.md +11 -11
  108. package/templates/tanstack-start/docs/library/tanstack-router/index.md +18 -18
  109. package/templates/tanstack-start/docs/library/tanstack-router/navigation.md +17 -17
  110. package/templates/tanstack-start/docs/library/tanstack-router/route-context.md +5 -5
  111. package/templates/tanstack-start/docs/library/tanstack-router/search-params.md +10 -10
  112. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +8 -8
  113. package/templates/tanstack-start/docs/library/tanstack-start/index.md +15 -15
  114. package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +9 -9
  115. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +6 -6
  116. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +18 -18
  117. package/templates/tanstack-start/docs/library/tanstack-start/setup.md +4 -4
  118. package/templates/tanstack-start/docs/library/zod/complex-types.md +11 -11
  119. package/templates/tanstack-start/docs/library/zod/index.md +8 -8
  120. package/templates/tanstack-start/docs/library/zod/transforms.md +11 -11
  121. package/templates/tanstack-start/docs/library/zod/validation.md +9 -9
@@ -1,16 +1,16 @@
1
1
  # t3-env - Type-Safe Environment Variables
2
2
 
3
- > Zod 기반 νƒ€μž… μ•ˆμ „ ν™˜κ²½ λ³€μˆ˜ 관리
3
+ > Zod-based type-safe environment variable management
4
4
 
5
5
  <context>
6
6
 
7
- **μš©λ„:** μ„œλ²„ ν™˜κ²½ λ³€μˆ˜ 검증, λŸ°νƒ€μž„ νƒ€μž… μ•ˆμ „μ„±
7
+ **Purpose:** Server environment variable validation, runtime type safety
8
8
 
9
- **νŠΉμ§•:**
10
- - Zod μŠ€ν‚€λ§ˆλ‘œ 검증 + νƒ€μž… μΆ”λ‘ 
11
- - Transform & Default κ°’ 지원
12
- - λŸ°νƒ€μž„ 검증
13
- - ν”„λ ˆμž„μ›Œν¬ 무관
9
+ **Features:**
10
+ - Validation + type inference with Zod schemas
11
+ - Transform & default value support
12
+ - Runtime validation
13
+ - Framework agnostic
14
14
 
15
15
  </context>
16
16
 
@@ -18,11 +18,11 @@
18
18
 
19
19
  <forbidden>
20
20
 
21
- | λΆ„λ₯˜ | κΈˆμ§€ |
22
- |------|------|
23
- | **직접 μ ‘κ·Ό** | `process.env` 직접 μ‚¬μš© (env 객체 ν•„μˆ˜) |
24
- | **νƒ€μž…** | any νƒ€μž…μœΌλ‘œ env λ³€μˆ˜ μ ‘κ·Ό |
25
- | **검증 우회** | μŠ€ν‚€λ§ˆ μ •μ˜ 없이 ν™˜κ²½ λ³€μˆ˜ μ‚¬μš© |
21
+ | Category | Prohibited |
22
+ |----------|------------|
23
+ | **Direct Access** | Using `process.env` directly (env object required) |
24
+ | **Types** | Accessing env variables with any type |
25
+ | **Bypass Validation** | Using environment variables without schema definition |
26
26
 
27
27
  </forbidden>
28
28
 
@@ -30,10 +30,10 @@
30
30
 
31
31
  <required>
32
32
 
33
- | λΆ„λ₯˜ | ν•„μˆ˜ |
34
- |------|------|
35
- | **μ„€μΉ˜** | `@t3-oss/env-core zod` |
36
- | **ꡬ쑰** | `src/env.ts` 파일 생성 |
33
+ | Category | Required |
34
+ |----------|----------|
35
+ | **Installation** | `@t3-oss/env-core zod` |
36
+ | **Structure** | Create `src/env.ts` file |
37
37
  | **Import** | `import { env } from '@/env'` |
38
38
 
39
39
  </required>
@@ -114,7 +114,7 @@ import { env } from '@/env'
114
114
 
115
115
  export const prisma = new PrismaClient({
116
116
  datasourceUrl: env.DATABASE_URL,
117
- // ^? string (νƒ€μž… μ•ˆμ „)
117
+ // ^? string (type-safe)
118
118
  })
119
119
  ```
120
120
 
@@ -329,7 +329,7 @@ import { createMiddleware } from 'hono/factory'
329
329
  import { env } from '@/env'
330
330
 
331
331
  export const envMiddleware = createMiddleware(async (c, next) => {
332
- // env 객체가 μ΄ˆκΈ°ν™”λ˜μ—ˆλŠ”μ§€ 확인
332
+ // Check if env object is initialized
333
333
  if (!env.DATABASE_URL) {
334
334
  return c.json({ error: 'Server misconfigured' }, 500)
335
335
  }
@@ -363,10 +363,10 @@ app.use(
363
363
 
364
364
  ## Tips
365
365
 
366
- | 상황 | 방법 |
367
- |------|------|
368
- | **Cloudflare** | `createWorkerEnv(env)` νŒ¨ν„΄ μ‚¬μš© |
369
- | **Monorepo** | 각 νŒ¨ν‚€μ§€λ§ˆλ‹€ 별도 `env.ts` |
366
+ | Scenario | Method |
367
+ |----------|--------|
368
+ | **Cloudflare** | Use `createWorkerEnv(env)` pattern |
369
+ | **Monorepo** | Separate `env.ts` per package |
370
370
  | **Testing** | `.env.test` + `NODE_ENV=test` |
371
371
  | **Docker** | `docker run -e DATABASE_URL=...` |
372
372
  | **CI/CD** | GitHub Secrets β†’ Environment Variables |
@@ -1,25 +1,25 @@
1
1
  # Zod v4 - Schema Validation
2
2
 
3
- > TypeScript-first μŠ€ν‚€λ§ˆ 검증
3
+ > TypeScript-first schema validation
4
4
 
5
5
  ---
6
6
 
7
- ## 버전 주의
7
+ ## Version Notice
8
8
 
9
9
  ```typescript
10
- // βœ… v4 문법
10
+ // βœ… v4 syntax
11
11
  z.email()
12
12
  z.url()
13
13
  z.uuid()
14
14
 
15
- // ❌ v3 문법 (μ‚¬μš© κΈˆμ§€)
15
+ // ❌ v3 syntax (prohibited)
16
16
  z.string().email()
17
17
  z.string().url()
18
18
  ```
19
19
 
20
20
  ---
21
21
 
22
- ## μ„€μΉ˜
22
+ ## Installation
23
23
 
24
24
  ```bash
25
25
  npm install zod
@@ -27,7 +27,7 @@ npm install zod
27
27
 
28
28
  ---
29
29
 
30
- ## κΈ°λ³Έ νƒ€μž…
30
+ ## Basic Types
31
31
 
32
32
  ```typescript
33
33
  import { z } from 'zod'
@@ -40,28 +40,28 @@ z.undefined()
40
40
  z.null()
41
41
  ```
42
42
 
43
- ### λ¬Έμžμ—΄ (v4)
43
+ ### Strings (v4)
44
44
 
45
45
  ```typescript
46
- z.email() // 이메일
46
+ z.email() // Email
47
47
  z.url() // URL
48
48
  z.uuid() // UUID
49
- z.string().min(1).max(100) // 길이
50
- z.string().trim() // 곡백 제거
51
- z.string().regex(/^[a-z]+$/) // μ •κ·œμ‹
49
+ z.string().min(1).max(100) // Length
50
+ z.string().trim() // Trim whitespace
51
+ z.string().regex(/^[a-z]+$/) // Regex
52
52
  ```
53
53
 
54
- ### 숫자
54
+ ### Numbers
55
55
 
56
56
  ```typescript
57
- z.number().int() // μ •μˆ˜
58
- z.number().positive() // μ–‘μˆ˜
57
+ z.number().int() // Integer
58
+ z.number().positive() // Positive
59
59
  z.number().min(1).max(100)
60
60
  ```
61
61
 
62
62
  ---
63
63
 
64
- ## 객체
64
+ ## Objects
65
65
 
66
66
  ```typescript
67
67
  const userSchema = z.object({
@@ -82,7 +82,7 @@ z.string().nullable() // string | null
82
82
  z.string().nullish() // string | null | undefined
83
83
  ```
84
84
 
85
- ### κΈ°λ³Έκ°’
85
+ ### Defaults
86
86
 
87
87
  ```typescript
88
88
  z.string().default('Anonymous')
@@ -92,8 +92,8 @@ z.enum(['user', 'admin']).default('user')
92
92
  ### Partial / Pick / Omit
93
93
 
94
94
  ```typescript
95
- userSchema.partial() // λͺ¨λ“  ν•„λ“œ optional
96
- userSchema.partial({ email: true }) // νŠΉμ • ν•„λ“œλ§Œ
95
+ userSchema.partial() // All fields optional
96
+ userSchema.partial({ email: true }) // Specific fields only
97
97
  userSchema.pick({ id: true, name: true })
98
98
  userSchema.omit({ password: true })
99
99
  ```
@@ -118,7 +118,7 @@ z.discriminatedUnion('type', [
118
118
 
119
119
  ---
120
120
 
121
- ## Coerce (νƒ€μž… λ³€ν™˜)
121
+ ## Coerce (Type Conversion)
122
122
 
123
123
  ```typescript
124
124
  z.coerce.number() // string β†’ number
@@ -137,27 +137,27 @@ z.string().transform((s) => s.split(','))
137
137
 
138
138
  ---
139
139
 
140
- ## Refine (μ»€μŠ€ν…€ 검증)
140
+ ## Refine (Custom Validation)
141
141
 
142
142
  ```typescript
143
- // 단일 ν•„λ“œ
143
+ // Single field
144
144
  z.string().refine((val) => val.length >= 8, {
145
- message: '8자 이상 ν•„μš”',
145
+ message: 'Must be at least 8 characters',
146
146
  })
147
147
 
148
- // 객체 전체
148
+ // Entire object
149
149
  z.object({
150
150
  password: z.string().min(8),
151
151
  confirmPassword: z.string(),
152
152
  }).refine((data) => data.password === data.confirmPassword, {
153
- message: 'λΉ„λ°€λ²ˆν˜Έ 뢈일치',
153
+ message: 'Passwords do not match',
154
154
  path: ['confirmPassword'],
155
155
  })
156
156
  ```
157
157
 
158
158
  ---
159
159
 
160
- ## μ—λŸ¬ 처리
160
+ ## Error Handling
161
161
 
162
162
  ```typescript
163
163
  const result = schema.safeParse(input)
@@ -170,16 +170,16 @@ if (result.success) {
170
170
  }
171
171
  ```
172
172
 
173
- ### μ»€μŠ€ν…€ μ—λŸ¬
173
+ ### Custom Errors
174
174
 
175
175
  ```typescript
176
- z.email({ message: 'μ˜¬λ°”λ₯Έ 이메일 μž…λ ₯' })
177
- z.string().min(1, { message: 'ν•„μˆ˜ μž…λ ₯' })
176
+ z.email({ message: 'Please enter a valid email' })
177
+ z.string().min(1, { message: 'Required field' })
178
178
  ```
179
179
 
180
180
  ---
181
181
 
182
- ## Hono와 ν•¨κ»˜
182
+ ## Usage with Hono
183
183
 
184
184
  ```typescript
185
185
  import { zValidator } from '@hono/zod-validator'
@@ -204,6 +204,6 @@ app.post('/users',
204
204
 
205
205
  ---
206
206
 
207
- ## κ΄€λ ¨ λ¬Έμ„œ
207
+ ## Related Documentation
208
208
 
209
- - [Hono 검증](../hono/validation.md)
209
+ - [Hono Validation](../hono/validation.md)
@@ -4,17 +4,17 @@
4
4
 
5
5
  <context>
6
6
 
7
- **Purpose:** Next.js App Router 기반 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 μ§€μΉ¨
7
+ **Purpose:** Next.js App Router-based web application development guidelines
8
8
 
9
- **Scope:** Full-stack React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ΅¬ν˜„
9
+ **Scope:** Full-stack React application implementation
10
10
 
11
11
  **Key Features:**
12
12
  - App Router (file-based routing)
13
- - Server Actions (νƒ€μž… μ•ˆμ „ API)
13
+ - Server Actions (type-safe API)
14
14
  - Server/Client Components
15
15
  - Route Handlers (REST API)
16
16
  - Middleware
17
- - Built-in Optimization (이미지, 폰트, 슀크립트)
17
+ - Built-in Optimization (images, fonts, scripts)
18
18
  - Deployment (Vercel, Docker, Node.js)
19
19
 
20
20
  </context>
@@ -35,14 +35,14 @@
35
35
 
36
36
  <forbidden>
37
37
 
38
- | λΆ„λ₯˜ | κΈˆμ§€ 행동 |
39
- |------|----------|
40
- | **Git 컀밋** | AI ν‘œμ‹œ (`Generated with Claude Code`, `πŸ€–`, `Co-Authored-By:`), μ—¬λŸ¬ 쀄 λ©”μ‹œμ§€, 이λͺ¨μ§€ |
41
- | **Prisma** | `db push/migrate/generate` μžλ™ μ‹€ν–‰, `schema.prisma` 무단 μˆ˜μ • |
42
- | **Server Actions** | ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 직접 μ •μ˜, try-catch 없이 μ‚¬μš©, Zod 검증 λˆ„λ½ (POST/PUT/PATCH) |
43
- | **Route Handlers** | `/app/api/` 외뢀에 생성, Server Actions둜 λŒ€μ²΄ κ°€λŠ₯ν•œ 경우 생성 |
44
- | **ν΄λΌμ΄μ–ΈνŠΈ** | Server Action 직접 호좜 (TanStack Query μ‚¬μš©), `"use client"` λˆ„λ½ |
45
- | **μ½”λ“œ 검색** | Bash의 grep/rg/find λͺ…λ Ήμ–΄ (ast-grep λ˜λŠ” μ „μš© 도ꡬ μ‚¬μš©) |
38
+ | Category | Forbidden Actions |
39
+ |----------|-------------------|
40
+ | **Git Commits** | AI markers (`Generated with Claude Code`, `πŸ€–`, `Co-Authored-By:`), multi-line messages, emojis |
41
+ | **Prisma** | Auto-running `db push/migrate/generate`, unauthorized `schema.prisma` modifications |
42
+ | **Server Actions** | Direct definition in client components, usage without try-catch, missing Zod validation (POST/PUT/PATCH) |
43
+ | **Route Handlers** | Creation outside `/app/api/`, creation when Server Actions are suitable |
44
+ | **Client** | Direct Server Action calls (use TanStack Query), missing `"use client"` |
45
+ | **Code Search** | Bash grep/rg/find commands (use ast-grep or dedicated tools) |
46
46
 
47
47
  </forbidden>
48
48
 
@@ -50,17 +50,18 @@
50
50
 
51
51
  <required>
52
52
 
53
- | μž‘μ—… | ν•„μˆ˜ 행동 |
54
- |------|----------|
55
- | **μž‘μ—… μ‹œμž‘ μ „** | κ΄€λ ¨ docs 읽기 (UI β†’ design, API β†’ nextjs, DB β†’ prisma, 인증 β†’ next-auth) |
56
- | **μ½”λ“œ 검색** | ast-grep μ‚¬μš© (ν•¨μˆ˜/μ»΄ν¬λ„ŒνŠΈ/νŒ¨ν„΄ 검색) |
57
- | **λ³΅μž‘ν•œ μž‘μ—…** | Sequential Thinking MCP (5+ 단계 μž‘μ—…) |
58
- | **λŒ€κ·œλͺ¨ μˆ˜μ •** | gemini-review (3+ 파일 λ³€κ²½, μ•„ν‚€ν…μ²˜ κ²°μ •) |
59
- | **Server Actions** | `"use server"` μ„ μ–Έ, Zod 검증 (POST/PUT/PATCH), try-catch + revalidatePath/redirect |
60
- | **ν΄λΌμ΄μ–ΈνŠΈ API** | TanStack Query (`useQuery`/`useMutation`)둜 Server Action 호좜 |
61
- | **Custom Hook μˆœμ„œ** | State β†’ Global Hooks (useParams, useRouter, useSearchParams) β†’ React Query β†’ Handlers β†’ Memo β†’ Effect |
62
- | **μ½”λ“œ μž‘μ„±** | UTF-8 인코딩, μ½”λ“œ λ¬ΆμŒλ³„ ν•œκΈ€ 주석, const ν•¨μˆ˜ μ„ μ–Έ |
63
- | **Prisma** | Multi-File ꡬ쑰 (`prisma/schema/`), λͺ¨λ“  μš”μ†Œ ν•œκΈ€ 주석 ν•„μˆ˜ |
53
+ | Task | Required Actions |
54
+ |------|------------------|
55
+ | **Before Starting** | Read relevant docs (UI β†’ design, API β†’ nextjs, DB β†’ prisma, auth β†’ next-auth) |
56
+ | **Document Search** | Use serena mcp (document indexing/search, context length optimization) |
57
+ | **Code Search** | Use ast-grep (function/component/pattern search) |
58
+ | **Complex Tasks** | Sequential Thinking MCP (5+ step tasks) |
59
+ | **Large Changes** | gemini-review (3+ file changes, architectural decisions) |
60
+ | **Server Actions** | `"use server"` declaration, Zod validation (POST/PUT/PATCH), try-catch + revalidatePath/redirect |
61
+ | **Client API** | Call Server Actions via TanStack Query (`useQuery`/`useMutation`) |
62
+ | **Custom Hook Order** | State β†’ Global Hooks (useParams, useRouter, useSearchParams) β†’ React Query β†’ Handlers β†’ Memo β†’ Effect |
63
+ | **Code Writing** | UTF-8 encoding, Korean comments per code block, const function declarations |
64
+ | **Prisma** | Multi-File structure (`prisma/schema/`), Korean comments required for all elements |
64
65
 
65
66
  </required>
66
67
 
@@ -68,15 +69,15 @@
68
69
 
69
70
  <tech_stack>
70
71
 
71
- | 기술 | 버전 | 주의 |
72
- |------|------|------|
73
- | Next.js | **15.x** | App Router μ „μš© |
72
+ | Technology | Version | Note |
73
+ |------------|---------|------|
74
+ | Next.js | **15.x** | App Router only |
74
75
  | React | **19.x** | Server Components |
75
76
  | TypeScript | 5.x | strict |
76
77
  | Tailwind CSS | 4.x | @theme |
77
- | Prisma | **7.x** | `prisma-client`, output ν•„μˆ˜ |
78
+ | Prisma | **7.x** | `prisma-client`, output required |
78
79
  | Zod | **4.x** | `z.email()`, `z.url()` |
79
- | NextAuth.js | **5.x** (Auth.js) | App Router 지원 |
80
+ | NextAuth.js | **5.x** (Auth.js) | App Router support |
80
81
  | TanStack Query | 5.x | - |
81
82
 
82
83
  </tech_stack>
@@ -91,39 +92,41 @@ src/
91
92
  β”‚ β”œβ”€β”€ page.tsx # Home page
92
93
  β”‚ β”œβ”€β”€ [slug]/
93
94
  β”‚ β”‚ β”œβ”€β”€ page.tsx # Dynamic route
94
- β”‚ β”‚ └── -components/ # νŽ˜μ΄μ§€ μ „μš© Client Components
95
+ β”‚ β”‚ β”œβ”€β”€ _components/ # Page-specific components (required)
96
+ β”‚ β”‚ β”œβ”€β”€ _hooks/ # Page-specific hooks (required)
97
+ β”‚ β”‚ └── _actions/ # Page-specific Server Actions (required)
95
98
  β”‚ β”œβ”€β”€ api/
96
99
  β”‚ β”‚ └── [endpoint]/
97
100
  β”‚ β”‚ └── route.ts # Route Handler (REST API)
98
- β”‚ └── _components/ # 곡톡 Client Components
99
- β”œβ”€β”€ actions/ # Server Actions (곡톡)
100
- β”œβ”€β”€ components/ui/ # UI μ»΄ν¬λ„ŒνŠΈ (Server Components)
101
+ β”‚ └── _actions/ # Shared Server Actions
102
+ β”œβ”€β”€ components/ui/ # Shared UI components (Server Components)
101
103
  β”œβ”€β”€ middleware.ts # Middleware
102
104
  β”œβ”€β”€ database/prisma.ts
103
105
  └── lib/
104
106
  ```
105
107
 
106
- **ν•„μˆ˜ κ·œμΉ™:**
107
- - νŽ˜μ΄μ§€λ‹Ή `-components/` 폴더 ꢌμž₯ (νŽ˜μ΄μ§€ μ „μš© Client Components)
108
- - Server Componentsκ°€ κΈ°λ³Έ β†’ `"use client"` λͺ…μ‹œ ν•„μš” μ‹œλ§Œ μ‚¬μš©
109
- - Server ActionsλŠ” `actions/` 폴더 λ˜λŠ” 파일 상단 (`"use server"`)
110
- - Route HandlersλŠ” `/app/api/` κ²½λ‘œμ—λ§Œ 생성
108
+ **Required Rules:**
109
+ - Each page MUST have `_components/`, `_hooks/`, `_actions/` folders (regardless of line count)
110
+ - Custom Hooks MUST be separated into `_hooks/` folder regardless of page size
111
+ - Server Components by default β†’ use `"use client"` only when necessary
112
+ - Server Actions: global (`app/_actions/`) or page-specific (`[route]/_actions/`)
113
+ - Route Handlers only in `/app/api/` path
111
114
  </structure>
112
115
 
113
116
  ---
114
117
 
115
118
  <conventions>
116
119
 
117
- 파일λͺ…: kebab-case, Routes: `page.tsx`, `layout.tsx`, `[slug]/page.tsx`
118
- TypeScript: const μ„ μ–Έ, λͺ…μ‹œμ  return type, interface(객체)/type(μœ λ‹ˆμ˜¨), anyβ†’unknown
119
- Import μˆœμ„œ: μ™ΈλΆ€ β†’ @/ β†’ μƒλŒ€κ²½λ‘œ β†’ type
120
+ File names: kebab-case, Routes: `page.tsx`, `layout.tsx`, `[slug]/page.tsx`
121
+ TypeScript: const declarations, explicit return types, interface (objects)/type (unions), any→unknown
122
+ Import order: external β†’ @/ β†’ relative β†’ type
120
123
 
121
124
  Prisma Multi-File:
122
125
  ```
123
126
  prisma/schema/
124
127
  β”œβ”€β”€ +base.prisma # datasource, generator
125
128
  β”œβ”€β”€ +enum.prisma # enum
126
- └── [model].prisma # λͺ¨λΈλ³„ (ν•œκΈ€ 주석!)
129
+ └── [model].prisma # per model (Korean comments required!)
127
130
  ```
128
131
 
129
132
  </conventions>
@@ -133,7 +136,7 @@ prisma/schema/
133
136
  <quick_patterns>
134
137
 
135
138
  ```typescript
136
- // Server Action (파일 상단)
139
+ // Server Action (file top)
137
140
  "use server"
138
141
 
139
142
  export async function createPost(formData: FormData) {
@@ -147,7 +150,7 @@ export async function createPost(formData: FormData) {
147
150
  return post
148
151
  }
149
152
 
150
- // Server Action (인증)
153
+ // Server Action (with auth)
151
154
  "use server"
152
155
 
153
156
  import { auth } from "@/lib/auth"
@@ -206,12 +209,12 @@ export default async function PostsPage() {
206
209
 
207
210
  <ui_ux>
208
211
 
209
- | 원칙 | κ°’ |
210
- |------|------|
211
- | 색상 | 60-30-10 (λ°°κ²½-보쑰-κ°•μ‘°) |
212
- | 간격 | 8px κ·Έλ¦¬λ“œ |
213
- | μ ‘κ·Όμ„± | WCAG AA (λŒ€λΉ„ 4.5:1+) |
214
- | 폰트 | 2-3개 |
212
+ | Principle | Value |
213
+ |-----------|-------|
214
+ | Color | 60-30-10 (background-secondary-accent) |
215
+ | Spacing | 8px grid |
216
+ | Accessibility | WCAG AA (contrast 4.5:1+) |
217
+ | Fonts | 2-3 types |
215
218
  | Safe Area | tailwindcss-safe-area |
216
219
 
217
220
  </ui_ux>
@@ -221,8 +224,8 @@ export default async function PostsPage() {
221
224
  <docs_structure>
222
225
  ```
223
226
  docs/
224
- β”œβ”€β”€ guides/ # μ‹œμž‘ν•˜κΈ°, κ·œμΉ™, νŒ¨ν„΄
227
+ β”œβ”€β”€ guides/ # Getting started, conventions, patterns
225
228
  β”œβ”€β”€ library/ # nextjs, prisma, next-auth, tanstack-query, zod
226
- └── design.md # UI/UX κ°€μ΄λ“œ
229
+ └── design.md # UI/UX guide
227
230
  ```
228
231
  </docs_structure>