@kood/claude-code 0.2.5 → 0.3.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/dist/index.js +13 -8
- package/package.json +1 -1
- package/templates/.claude/agents/code-reviewer.md +371 -19
- package/templates/.claude/agents/dependency-manager.md +197 -0
- package/templates/.claude/agents/deployment-validator.md +136 -0
- package/templates/.claude/agents/git-operator.md +147 -0
- package/templates/.claude/agents/implementation-executor.md +202 -0
- package/templates/.claude/agents/lint-fixer.md +155 -0
- package/templates/.claude/agents/refactor-advisor.md +339 -29
- package/templates/.claude/commands/agent-creator.md +355 -0
- package/templates/.claude/commands/docs-creator.md +404 -163
- package/templates/.claude/commands/docs-refactor.md +400 -113
- package/templates/.claude/commands/execute.md +357 -185
- package/templates/.claude/commands/git-all.md +16 -70
- package/templates/.claude/commands/git-session.md +36 -68
- package/templates/.claude/commands/git.md +20 -69
- package/templates/.claude/commands/lint-fix.md +164 -107
- package/templates/.claude/commands/lint-init.md +142 -168
- package/templates/.claude/commands/plan.md +300 -84
- package/templates/.claude/commands/prd.md +497 -214
- package/templates/.claude/commands/pre-deploy.md +242 -0
- package/templates/.claude/commands/subagent-creator.md +118 -0
- package/templates/.claude/commands/version-update.md +45 -57
- package/templates/hono/CLAUDE.md +99 -54
- package/templates/hono/docs/guides/conventions.md +352 -0
- package/templates/hono/docs/guides/env-setup.md +347 -0
- package/templates/hono/docs/guides/getting-started.md +239 -0
- package/templates/hono/docs/library/hono/error-handling.md +20 -29
- package/templates/hono/docs/library/hono/index.md +25 -52
- package/templates/hono/docs/library/hono/middleware.md +16 -75
- package/templates/hono/docs/library/hono/rpc.md +7 -35
- package/templates/hono/docs/library/hono/validation.md +25 -45
- package/templates/hono/docs/library/t3-env/index.md +374 -0
- package/templates/npx/CLAUDE.md +165 -65
- package/templates/npx/docs/library/commander/index.md +10 -73
- package/templates/npx/docs/library/fs-extra/index.md +21 -113
- package/templates/npx/docs/library/prompts/index.md +30 -176
- package/templates/npx/docs/references/patterns.md +75 -48
- package/templates/tanstack-start/CLAUDE.md +101 -77
- package/templates/tanstack-start/docs/architecture.md +427 -0
- package/templates/tanstack-start/docs/design.md +558 -0
- package/templates/tanstack-start/docs/guides/conventions.md +132 -32
- package/templates/tanstack-start/docs/guides/env-setup.md +127 -62
- package/templates/tanstack-start/docs/guides/getting-started.md +81 -20
- package/templates/tanstack-start/docs/guides/hooks.md +241 -36
- package/templates/tanstack-start/docs/guides/routes.md +213 -61
- package/templates/tanstack-start/docs/guides/services.md +260 -24
- package/templates/tanstack-start/docs/library/better-auth/index.md +469 -16
- package/templates/tanstack-start/docs/library/t3-env/index.md +307 -0
- package/templates/tanstack-start/docs/library/tanstack-query/index.md +12 -21
- package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +22 -35
- package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +7 -24
- package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +26 -39
- package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +23 -26
- package/templates/tanstack-start/docs/library/tanstack-router/error-handling.md +32 -147
- package/templates/tanstack-start/docs/library/tanstack-router/hooks.md +25 -167
- package/templates/tanstack-start/docs/library/tanstack-router/index.md +39 -74
- package/templates/tanstack-start/docs/library/tanstack-router/navigation.md +46 -116
- package/templates/tanstack-start/docs/library/tanstack-router/route-context.md +35 -154
- package/templates/tanstack-start/docs/library/tanstack-router/search-params.md +32 -171
- package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +7 -15
- package/templates/tanstack-start/docs/library/tanstack-start/routing.md +16 -23
- package/templates/tanstack-start/docs/library/zod/complex-types.md +12 -31
- package/templates/tanstack-start/docs/library/zod/index.md +18 -35
- package/templates/tanstack-start/docs/library/zod/transforms.md +11 -25
- package/templates/tanstack-start/docs/library/zod/validation.md +12 -34
- package/templates/.claude/agents/debug-detective.md +0 -37
- package/templates/.claude/agents/test-writer.md +0 -41
- package/templates/.claude/commands/feedback.md +0 -199
- package/templates/.claude/commands/ts-fix.md +0 -176
- package/templates/.claude/skills/command-creator/LICENSE.txt +0 -202
- package/templates/.claude/skills/command-creator/SKILL.md +0 -245
- package/templates/.claude/skills/command-creator/scripts/init_command.py +0 -244
- package/templates/.claude/skills/command-creator/scripts/package_command.py +0 -125
- package/templates/.claude/skills/command-creator/scripts/quick_validate.py +0 -143
- package/templates/.claude/skills/frontend-design/SKILL.md +0 -310
- package/templates/.claude/skills/frontend-design/references/animation-patterns.md +0 -446
- package/templates/.claude/skills/frontend-design/references/colors-2026.md +0 -244
- package/templates/.claude/skills/frontend-design/references/typography-2026.md +0 -302
- package/templates/.claude/skills/gemini-review/SKILL.md +0 -118
- package/templates/.claude/skills/gemini-review/references/checklists.md +0 -129
- package/templates/.claude/skills/gemini-review/references/prompt-templates.md +0 -274
- package/templates/.claude/skills/skill-creator/LICENSE.txt +0 -202
- package/templates/.claude/skills/skill-creator/SKILL.md +0 -184
- package/templates/.claude/skills/skill-creator/scripts/init_skill.py +0 -303
- package/templates/.claude/skills/skill-creator/scripts/package_skill.py +0 -110
- package/templates/.claude/skills/skill-creator/scripts/quick_validate.py +0 -65
- package/templates/hono/docs/library/ai-sdk/index.md +0 -190
- package/templates/hono/docs/library/ai-sdk/openrouter.md +0 -111
- package/templates/hono/docs/library/ai-sdk/providers.md +0 -102
- package/templates/hono/docs/library/ai-sdk/streaming.md +0 -146
- package/templates/hono/docs/library/ai-sdk/structured-output.md +0 -161
- package/templates/hono/docs/library/ai-sdk/tools.md +0 -144
- package/templates/hono/docs/library/drizzle/cloudflare-d1.md +0 -247
- package/templates/hono/docs/library/drizzle/config.md +0 -167
- package/templates/hono/docs/library/drizzle/index.md +0 -259
- package/templates/hono/docs/library/hono/env-setup.md +0 -169
- package/templates/hono/docs/library/pino/index.md +0 -146
- package/templates/tanstack-start/docs/architecture/architecture.md +0 -243
- package/templates/tanstack-start/docs/deployment/cloudflare.md +0 -132
- package/templates/tanstack-start/docs/deployment/index.md +0 -163
- package/templates/tanstack-start/docs/deployment/nitro.md +0 -110
- package/templates/tanstack-start/docs/deployment/railway.md +0 -147
- package/templates/tanstack-start/docs/deployment/vercel.md +0 -135
- package/templates/tanstack-start/docs/design/components.md +0 -175
- package/templates/tanstack-start/docs/design/index.md +0 -151
- package/templates/tanstack-start/docs/design/safe-area.md +0 -118
- package/templates/tanstack-start/docs/design/tailwind-setup.md +0 -156
- package/templates/tanstack-start/docs/library/ai-sdk/hooks.md +0 -472
- package/templates/tanstack-start/docs/library/ai-sdk/index.md +0 -264
- package/templates/tanstack-start/docs/library/ai-sdk/openrouter.md +0 -371
- package/templates/tanstack-start/docs/library/ai-sdk/providers.md +0 -403
- package/templates/tanstack-start/docs/library/ai-sdk/streaming.md +0 -320
- package/templates/tanstack-start/docs/library/ai-sdk/structured-output.md +0 -454
- package/templates/tanstack-start/docs/library/ai-sdk/tools.md +0 -473
- package/templates/tanstack-start/docs/library/better-auth/2fa.md +0 -48
- package/templates/tanstack-start/docs/library/better-auth/advanced.md +0 -55
- package/templates/tanstack-start/docs/library/better-auth/plugins.md +0 -34
- package/templates/tanstack-start/docs/library/better-auth/session.md +0 -47
- package/templates/tanstack-start/docs/library/better-auth/setup.md +0 -41
- package/templates/tanstack-start/docs/library/drizzle/cloudflare-d1.md +0 -147
- package/templates/tanstack-start/docs/library/drizzle/config.md +0 -118
- package/templates/tanstack-start/docs/library/drizzle/crud.md +0 -205
- package/templates/tanstack-start/docs/library/drizzle/index.md +0 -79
- package/templates/tanstack-start/docs/library/drizzle/relations.md +0 -202
- package/templates/tanstack-start/docs/library/drizzle/schema.md +0 -154
- package/templates/tanstack-start/docs/library/drizzle/setup.md +0 -96
- package/templates/tanstack-start/docs/library/drizzle/transactions.md +0 -127
- package/templates/tanstack-start/docs/library/pino/index.md +0 -320
- /package/templates/hono/docs/{architecture/architecture.md → architecture.md} +0 -0
|
@@ -1,25 +1,35 @@
|
|
|
1
1
|
# NPX CLI Patterns
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> CLI 구현 통합 패턴
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<patterns>
|
|
6
|
+
|
|
7
|
+
## CLI 진입점
|
|
6
8
|
|
|
7
9
|
```typescript
|
|
8
10
|
#!/usr/bin/env node
|
|
9
11
|
import { Command } from 'commander';
|
|
12
|
+
import { logger } from './utils/logger.js';
|
|
13
|
+
import { initCommand } from './commands/init.js';
|
|
10
14
|
|
|
11
15
|
const program = new Command();
|
|
12
16
|
|
|
13
17
|
program
|
|
14
18
|
.name('my-cli')
|
|
15
|
-
.description('CLI description')
|
|
19
|
+
.description('CLI tool description')
|
|
16
20
|
.version('1.0.0');
|
|
17
21
|
|
|
18
22
|
program
|
|
19
23
|
.option('-t, --template <name>', 'template name')
|
|
20
24
|
.option('-f, --force', 'overwrite existing files')
|
|
21
25
|
.action(async (options) => {
|
|
22
|
-
|
|
26
|
+
try {
|
|
27
|
+
await initCommand(options);
|
|
28
|
+
logger.success('Done!');
|
|
29
|
+
} catch (error) {
|
|
30
|
+
logger.error(`Failed: ${error.message}`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
23
33
|
});
|
|
24
34
|
|
|
25
35
|
program.parse();
|
|
@@ -36,49 +46,74 @@ export const logger = {
|
|
|
36
46
|
warn: (msg: string): void => console.log(pc.yellow('⚠'), msg),
|
|
37
47
|
error: (msg: string): void => console.log(pc.red('✖'), msg),
|
|
38
48
|
step: (msg: string): void => console.log(pc.gray(' →'), msg),
|
|
39
|
-
blank: (): void => console.log(),
|
|
40
49
|
};
|
|
41
50
|
```
|
|
42
51
|
|
|
43
|
-
##
|
|
52
|
+
## 대화형 템플릿 선택
|
|
44
53
|
|
|
45
54
|
```typescript
|
|
46
55
|
import prompts from 'prompts';
|
|
56
|
+
import fs from 'fs-extra';
|
|
57
|
+
import path from 'path';
|
|
58
|
+
import { logger } from './utils/logger.js';
|
|
59
|
+
|
|
60
|
+
export const selectAndCopyTemplate = async (
|
|
61
|
+
templatesDir: string,
|
|
62
|
+
targetDir: string,
|
|
63
|
+
): Promise<void> => {
|
|
64
|
+
// 1. 템플릿 선택
|
|
65
|
+
const { template } = await prompts({
|
|
66
|
+
type: 'select',
|
|
67
|
+
name: 'template',
|
|
68
|
+
message: 'Select a template:',
|
|
69
|
+
choices: [
|
|
70
|
+
{ title: 'React', value: 'react' },
|
|
71
|
+
{ title: 'Vue', value: 'vue' },
|
|
72
|
+
],
|
|
73
|
+
});
|
|
47
74
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
message: 'Select a template:',
|
|
53
|
-
choices: [
|
|
54
|
-
{ title: 'Template A', value: 'a' },
|
|
55
|
-
{ title: 'Template B', value: 'b' },
|
|
56
|
-
],
|
|
57
|
-
});
|
|
75
|
+
if (!template) {
|
|
76
|
+
logger.warn('Cancelled.');
|
|
77
|
+
process.exit(0);
|
|
78
|
+
}
|
|
58
79
|
|
|
59
|
-
//
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
// 2. 덮어쓰기 확인
|
|
81
|
+
const targetExists = await fs.pathExists(targetDir);
|
|
82
|
+
if (targetExists) {
|
|
83
|
+
const { overwrite } = await prompts({
|
|
84
|
+
type: 'confirm',
|
|
85
|
+
name: 'overwrite',
|
|
86
|
+
message: 'Target exists. Overwrite?',
|
|
87
|
+
initial: false,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
if (!overwrite) {
|
|
91
|
+
logger.warn('Cancelled.');
|
|
92
|
+
process.exit(0);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
71
95
|
|
|
72
|
-
//
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
96
|
+
// 3. 복사
|
|
97
|
+
const src = path.join(templatesDir, template);
|
|
98
|
+
await fs.copy(src, targetDir, { overwrite: true });
|
|
99
|
+
logger.success(`Template copied to ${targetDir}`);
|
|
100
|
+
};
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## ESM __dirname 처리
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
import { fileURLToPath } from 'url';
|
|
107
|
+
import path from 'path';
|
|
108
|
+
|
|
109
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
110
|
+
const __dirname = path.dirname(__filename);
|
|
111
|
+
|
|
112
|
+
// 템플릿 디렉토리 경로
|
|
113
|
+
const templatesDir = path.resolve(__dirname, '../templates');
|
|
79
114
|
```
|
|
80
115
|
|
|
81
|
-
##
|
|
116
|
+
## 재귀 복사 with Counter
|
|
82
117
|
|
|
83
118
|
```typescript
|
|
84
119
|
import fs from 'fs-extra';
|
|
@@ -112,17 +147,7 @@ export const copyRecursive = async (
|
|
|
112
147
|
};
|
|
113
148
|
```
|
|
114
149
|
|
|
115
|
-
##
|
|
116
|
-
|
|
117
|
-
```typescript
|
|
118
|
-
import { fileURLToPath } from 'url';
|
|
119
|
-
import path from 'path';
|
|
120
|
-
|
|
121
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
122
|
-
const __dirname = path.dirname(__filename);
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## Package.json
|
|
150
|
+
## package.json 설정
|
|
126
151
|
|
|
127
152
|
```json
|
|
128
153
|
{
|
|
@@ -142,7 +167,7 @@ const __dirname = path.dirname(__filename);
|
|
|
142
167
|
}
|
|
143
168
|
```
|
|
144
169
|
|
|
145
|
-
## tsup
|
|
170
|
+
## tsup 설정
|
|
146
171
|
|
|
147
172
|
```typescript
|
|
148
173
|
import { defineConfig } from 'tsup';
|
|
@@ -158,3 +183,5 @@ export default defineConfig({
|
|
|
158
183
|
},
|
|
159
184
|
});
|
|
160
185
|
```
|
|
186
|
+
|
|
187
|
+
</patterns>
|
|
@@ -1,78 +1,73 @@
|
|
|
1
|
-
# CLAUDE.md - TanStack Start
|
|
1
|
+
# CLAUDE.md - TanStack Start
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> Full-stack React Framework
|
|
4
|
+
|
|
5
|
+
<context>
|
|
6
|
+
|
|
7
|
+
**Purpose:** TanStack Start 프레임워크 개발을 위한 작업 지침
|
|
8
|
+
|
|
9
|
+
**Scope:** Full-stack React 애플리케이션 구현
|
|
10
|
+
|
|
11
|
+
**Key Features:**
|
|
12
|
+
- File-based routing (TanStack Router)
|
|
13
|
+
- Server Functions (타입 안전 API)
|
|
14
|
+
- SSR + Streaming
|
|
15
|
+
- TanStack Query 통합
|
|
16
|
+
- Middleware 체계
|
|
17
|
+
- Deployment 유연성 (Vercel, Cloudflare, Nitro)
|
|
18
|
+
|
|
19
|
+
</context>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
<instructions>
|
|
4
24
|
@../../commands/git.md
|
|
5
25
|
@docs/library/tanstack-start/index.md
|
|
26
|
+
@docs/library/tanstack-router/index.md
|
|
27
|
+
@docs/library/tanstack-query/index.md
|
|
6
28
|
@docs/library/prisma/index.md
|
|
7
29
|
@docs/library/better-auth/index.md
|
|
8
|
-
@docs/library/
|
|
30
|
+
@docs/library/t3-env/index.md
|
|
9
31
|
@docs/library/zod/index.md
|
|
10
|
-
@docs/design
|
|
32
|
+
@docs/design.md
|
|
33
|
+
</instructions>
|
|
11
34
|
|
|
12
35
|
---
|
|
13
36
|
|
|
14
|
-
|
|
37
|
+
<forbidden>
|
|
15
38
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
39
|
+
| 분류 | 금지 행동 |
|
|
40
|
+
|------|----------|
|
|
41
|
+
| **Git 커밋** | AI 표시 (`Generated with Claude Code`, `🤖`, `Co-Authored-By:`), 여러 줄 메시지, 이모지 |
|
|
42
|
+
| **Prisma** | `db push/migrate/generate` 자동 실행, `schema.prisma` 무단 수정 |
|
|
43
|
+
| **API 라우터** | `/api` 경로에 라우터 생성 (Server Functions 사용) |
|
|
44
|
+
| **Server Fn** | handler 내부에서 수동 검증/인증, `.validator()` 사용 (`.inputValidator()` 사용) |
|
|
45
|
+
| **클라이언트** | Server Function 직접 호출 (TanStack Query 사용) |
|
|
46
|
+
| **코드 검색** | Bash의 grep/rg/find 명령어 (ast-grep 또는 전용 도구 사용) |
|
|
19
47
|
|
|
20
|
-
|
|
21
|
-
- 자동 실행 금지: `prisma db push/migrate/generate`
|
|
22
|
-
- `schema.prisma` 임의 변경 금지
|
|
23
|
-
|
|
24
|
-
### API 구현
|
|
25
|
-
- `/api` 라우터 생성 금지 (명시 요청 제외)
|
|
26
|
-
- Server Function: POST/PUT/PATCH → `inputValidator` 필수, 인증 필요 시 → `middleware` 필수
|
|
27
|
-
- handler 내부에서 수동 검증/인증 체크 금지
|
|
28
|
-
- 클라이언트에서 Server Function 직접 호출 금지 → TanStack Query 필수
|
|
29
|
-
|
|
30
|
-
### Custom Hook 순서
|
|
31
|
-
1. State (useState, zustand)
|
|
32
|
-
2. Global Hooks (useParams, useNavigate, useQueryClient)
|
|
33
|
-
3. React Query (useQuery → useMutation)
|
|
34
|
-
4. Event Handlers
|
|
35
|
-
5. useMemo
|
|
36
|
-
6. useEffect
|
|
37
|
-
|
|
38
|
-
### 코드 작성
|
|
39
|
-
- UTF-8 인코딩, 코드 묶음 단위 한글 주석
|
|
40
|
-
- Prisma Multi-File: 모든 요소에 한글 주석 필수
|
|
41
|
-
|
|
42
|
-
### Prisma Multi-File 구조
|
|
43
|
-
```
|
|
44
|
-
prisma/schema/
|
|
45
|
-
├── +base.prisma # datasource, generator
|
|
46
|
-
├── +enum.prisma # 모든 enum
|
|
47
|
-
└── [model].prisma # 모델별 파일
|
|
48
|
-
```
|
|
48
|
+
</forbidden>
|
|
49
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
### 작업 전 문서 읽기
|
|
55
|
-
| 작업 | 문서 |
|
|
56
|
-
|------|------|
|
|
57
|
-
| UI | docs/design/ |
|
|
58
|
-
| API | docs/library/tanstack-start/ |
|
|
59
|
-
| DB | docs/library/prisma/ |
|
|
60
|
-
| 인증 | docs/library/better-auth/ |
|
|
52
|
+
<required>
|
|
61
53
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
-
|
|
54
|
+
| 작업 | 필수 행동 |
|
|
55
|
+
|------|----------|
|
|
56
|
+
| **작업 시작 전** | 관련 docs 읽기 (UI → design, API → tanstack-start, DB → prisma, 인증 → better-auth) |
|
|
57
|
+
| **코드 검색** | ast-grep 사용 (함수/컴포넌트/패턴 검색) |
|
|
58
|
+
| **복잡한 작업** | Sequential Thinking MCP (5+ 단계 작업) |
|
|
59
|
+
| **대규모 수정** | gemini-review (3+ 파일 변경, 아키텍처 결정) |
|
|
60
|
+
| **Server Function** | POST/PUT/PATCH → `.inputValidator()` 필수, 인증 필요 시 → `.middleware()` 필수 |
|
|
61
|
+
| **클라이언트 API** | TanStack Query (`useQuery`/`useMutation`)로 Server Function 호출 |
|
|
62
|
+
| **Custom Hook 순서** | State → Global Hooks (useParams, useNavigate) → React Query → Handlers → Memo → Effect |
|
|
63
|
+
| **코드 작성** | UTF-8 인코딩, 코드 묶음별 한글 주석, const 함수 선언 |
|
|
64
|
+
| **Prisma** | Multi-File 구조 (`prisma/schema/`), 모든 요소 한글 주석 필수 |
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
- architecture/plan/code 타입 선택
|
|
68
|
-
|
|
69
|
-
### Git 커밋
|
|
70
|
-
`<prefix>: <설명>` (한 줄)
|
|
71
|
-
- prefix: feat|fix|refactor|style|docs|test|chore|perf|ci
|
|
66
|
+
</required>
|
|
72
67
|
|
|
73
68
|
---
|
|
74
69
|
|
|
75
|
-
|
|
70
|
+
<tech_stack>
|
|
76
71
|
|
|
77
72
|
| 기술 | 버전 | 주의 |
|
|
78
73
|
|------|------|------|
|
|
@@ -84,37 +79,48 @@ prisma/schema/
|
|
|
84
79
|
| Better Auth | 최신 | - |
|
|
85
80
|
| TanStack Query | 5.x | - |
|
|
86
81
|
|
|
82
|
+
</tech_stack>
|
|
83
|
+
|
|
87
84
|
---
|
|
88
85
|
|
|
89
|
-
|
|
86
|
+
<structure>
|
|
90
87
|
```
|
|
91
88
|
src/
|
|
92
|
-
├── routes/
|
|
93
|
-
│ ├── __root.tsx
|
|
94
|
-
│ ├── index.tsx
|
|
95
|
-
│ ├── $slug.tsx
|
|
89
|
+
├── routes/ # __root.tsx, index.tsx, $slug.tsx
|
|
96
90
|
│ └── [path]/
|
|
97
|
-
│ ├── -components/
|
|
98
|
-
│
|
|
99
|
-
|
|
100
|
-
├── functions/ # 공통 Server Functions
|
|
91
|
+
│ ├── -components/ # 페이지 전용
|
|
92
|
+
│ └── -functions/ # 페이지 전용 Server Functions
|
|
93
|
+
├── functions/ # 공통 Server Functions
|
|
101
94
|
├── components/ui/
|
|
102
95
|
├── middleware/
|
|
103
96
|
├── database/prisma.ts
|
|
104
97
|
└── lib/
|
|
105
98
|
```
|
|
106
|
-
|
|
99
|
+
|
|
100
|
+
공통 → `@/functions/`, 라우트 전용 → `routes/[경로]/-functions/`
|
|
101
|
+
</structure>
|
|
107
102
|
|
|
108
103
|
---
|
|
109
104
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
-
|
|
113
|
-
|
|
105
|
+
<conventions>
|
|
106
|
+
|
|
107
|
+
파일명: kebab-case, Routes: `__root.tsx`, `$param.tsx`
|
|
108
|
+
TypeScript: const 선언, 명시적 return type, interface(객체)/type(유니온), any→unknown
|
|
109
|
+
Import 순서: 외부 → @/ → 상대경로 → type
|
|
110
|
+
|
|
111
|
+
Prisma Multi-File:
|
|
112
|
+
```
|
|
113
|
+
prisma/schema/
|
|
114
|
+
├── +base.prisma # datasource, generator
|
|
115
|
+
├── +enum.prisma # enum
|
|
116
|
+
└── [model].prisma # 모델별 (한글 주석!)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
</conventions>
|
|
114
120
|
|
|
115
121
|
---
|
|
116
122
|
|
|
117
|
-
|
|
123
|
+
<quick_patterns>
|
|
118
124
|
|
|
119
125
|
```typescript
|
|
120
126
|
// Server Function (GET + 인증)
|
|
@@ -149,11 +155,29 @@ const mutation = useMutation({
|
|
|
149
155
|
})
|
|
150
156
|
```
|
|
151
157
|
|
|
158
|
+
</quick_patterns>
|
|
159
|
+
|
|
152
160
|
---
|
|
153
161
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
-
|
|
159
|
-
|
|
162
|
+
<ui_ux>
|
|
163
|
+
|
|
164
|
+
| 원칙 | 값 |
|
|
165
|
+
|------|------|
|
|
166
|
+
| 색상 | 60-30-10 (배경-보조-강조) |
|
|
167
|
+
| 간격 | 8px 그리드 |
|
|
168
|
+
| 접근성 | WCAG AA (대비 4.5:1+) |
|
|
169
|
+
| 폰트 | 2-3개 |
|
|
170
|
+
| Safe Area | tailwindcss-safe-area |
|
|
171
|
+
|
|
172
|
+
</ui_ux>
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
<docs_structure>
|
|
177
|
+
```
|
|
178
|
+
docs/
|
|
179
|
+
├── guides/ # 시작하기, 규칙, 패턴
|
|
180
|
+
├── library/ # tanstack-start/router/query, prisma, better-auth, t3-env, zod
|
|
181
|
+
└── design.md # UI/UX 가이드
|
|
182
|
+
```
|
|
183
|
+
</docs_structure>
|