create-ax-project 1.0.0 โ 1.0.2
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/bin/create.js +97 -40
- package/package.json +5 -2
- package/template/.claude/CLAUDE.md +0 -7
- package/template/.claude/commands/CLAUDE.md +0 -0
- package/template/.claude/hooks/CLAUDE.md +0 -0
- package/template/.claude/skills/ai-collaboration/CLAUDE.md +0 -0
- package/template/.claude/skills/auto-checkpoint/CLAUDE.md +0 -0
- package/template/.claude/skills/context-compression/CLAUDE.md +0 -0
- package/template/.claude/skills/context-compression/prompts/CLAUDE.md +0 -0
- package/template/.claude/skills/output-validator/CLAUDE.md +0 -0
- package/template/.claude/skills/smart-handoff/CLAUDE.md +0 -0
- package/template/.claude/skills/stage-transition/CLAUDE.md +0 -0
- package/template/.claude/skills/stage-transition/prompts/CLAUDE.md +0 -0
- package/template/config/CLAUDE.md +0 -0
- package/template/scripts/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/HANDOFF.md +0 -110
- package/template/stages/01-brainstorm/inputs/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/inputs/project_brief.md +0 -40
- package/template/stages/01-brainstorm/outputs/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/outputs/ideas.md +0 -159
- package/template/stages/01-brainstorm/outputs/requirements_analysis.md +0 -222
- package/template/stages/01-brainstorm/prompts/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/templates/CLAUDE.md +0 -0
- package/template/stages/02-research/HANDOFF.md +0 -158
- package/template/stages/02-research/outputs/CLAUDE.md +0 -0
- package/template/stages/02-research/outputs/feasibility_report.md +0 -176
- package/template/stages/02-research/outputs/tech_research.md +0 -403
- package/template/stages/02-research/prompts/CLAUDE.md +0 -0
- package/template/stages/03-planning/HANDOFF.md +0 -168
- package/template/stages/03-planning/outputs/CLAUDE.md +0 -0
- package/template/stages/03-planning/outputs/architecture.md +0 -400
- package/template/stages/03-planning/outputs/implementation.yaml +0 -209
- package/template/stages/03-planning/outputs/project_plan.md +0 -204
- package/template/stages/03-planning/outputs/tech_stack.md +0 -176
- package/template/stages/03-planning/prompts/CLAUDE.md +0 -0
- package/template/stages/04-ui-ux/HANDOFF.md +0 -165
- package/template/stages/04-ui-ux/outputs/CLAUDE.md +0 -0
- package/template/stages/04-ui-ux/outputs/design_system.md +0 -449
- package/template/stages/04-ui-ux/outputs/user_flows.md +0 -321
- package/template/stages/04-ui-ux/outputs/wireframes.md +0 -241
- package/template/stages/04-ui-ux/prompts/CLAUDE.md +0 -0
- package/template/stages/05-task-management/HANDOFF.md +0 -187
- package/template/stages/05-task-management/outputs/CLAUDE.md +0 -0
- package/template/stages/05-task-management/outputs/milestones.md +0 -253
- package/template/stages/05-task-management/outputs/sprint_plan.md +0 -203
- package/template/stages/05-task-management/outputs/tasks.md +0 -402
- package/template/stages/05-task-management/prompts/CLAUDE.md +0 -0
- package/template/stages/05-task-management/templates/CLAUDE.md +0 -0
- package/template/stages/06-implementation/HANDOFF.md +0 -184
- package/template/stages/06-implementation/prompts/CLAUDE.md +0 -0
- package/template/stages/07-refactoring/HANDOFF.md +0 -82
- package/template/stages/07-refactoring/outputs/refactoring_report.md +0 -102
- package/template/stages/07-refactoring/prompts/CLAUDE.md +0 -0
- package/template/stages/08-qa/HANDOFF.md +0 -114
- package/template/stages/08-qa/outputs/qa_report.md +0 -138
- package/template/stages/08-qa/prompts/CLAUDE.md +0 -0
- package/template/stages/09-testing/HANDOFF.md +0 -118
- package/template/stages/09-testing/outputs/test_report.md +0 -146
- package/template/stages/09-testing/prompts/CLAUDE.md +0 -0
- package/template/stages/10-deployment/HANDOFF.md +0 -141
- package/template/stages/10-deployment/prompts/CLAUDE.md +0 -0
- package/template/stages/10-deployment/templates/CLAUDE.md +0 -0
- package/template/state/templates/CLAUDE.md +0 -0
package/bin/create.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
|
+
import { input } from '@inquirer/prompts';
|
|
6
7
|
|
|
7
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
9
|
const __dirname = path.dirname(__filename);
|
|
@@ -41,12 +42,82 @@ function copyRecursiveSync(src, dest) {
|
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
function
|
|
45
|
+
async function collectBriefInfo() {
|
|
46
|
+
console.log('');
|
|
47
|
+
log('๐ ํ๋ก์ ํธ ๋ธ๋ฆฌํ๋ฅผ ์์ฑํฉ๋๋ค. (Enter๋ง ๋๋ฅด๋ฉด ๊ฑด๋๋๋๋ค)', 'yellow');
|
|
48
|
+
console.log('');
|
|
49
|
+
|
|
50
|
+
const info = {};
|
|
51
|
+
|
|
52
|
+
// ์์ฐจ์ ์ผ๋ก ์ง๋ฌธ (๊ฐ input()์ด ์๋ฃ๋์ด์ผ ๋ค์์ผ๋ก ์งํ)
|
|
53
|
+
info.description = await input({ message: 'ํ ์ค ์ค๋ช
:' });
|
|
54
|
+
info.problem = await input({ message: '๋ฌธ์ ์ ์ (ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ):' });
|
|
55
|
+
info.targetUser = await input({ message: 'ํ๊ฒ ์ฌ์ฉ์:' });
|
|
56
|
+
info.successCriteria = await input({ message: '์ฑ๊ณต ๊ธฐ์ค:' });
|
|
57
|
+
info.constraintSchedule = await input({ message: '์ ์ฝ์กฐ๊ฑด - ์ผ์ :' });
|
|
58
|
+
info.constraintBudget = await input({ message: '์ ์ฝ์กฐ๊ฑด - ์์ฐ:' });
|
|
59
|
+
info.constraintTech = await input({ message: '์ ์ฝ์กฐ๊ฑด - ๊ธฐ์ :' });
|
|
60
|
+
info.references = await input({ message: '์ฐธ๊ณ ์๋ฃ (URL ๋๋ ๋ฌธ์):' });
|
|
61
|
+
|
|
62
|
+
// ํต์ฌ ๊ธฐ๋ฅ - ์ฌ๋ฌ ๊ฐ ์
๋ ฅ (๋ณ๋ ๋ฃจํ)
|
|
63
|
+
console.log('');
|
|
64
|
+
log('ํต์ฌ ๊ธฐ๋ฅ (๋น ์
๋ ฅ ์ ์ข
๋ฃ):', 'reset');
|
|
65
|
+
info.features = [];
|
|
66
|
+
let featureNum = 1;
|
|
67
|
+
while (true) {
|
|
68
|
+
const feature = await input({ message: ` ${featureNum}.` });
|
|
69
|
+
if (!feature) break;
|
|
70
|
+
info.features.push(feature);
|
|
71
|
+
featureNum++;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return info;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function generateBriefContent(projectName, info) {
|
|
78
|
+
// ํต์ฌ ๊ธฐ๋ฅ ํฌ๋งทํ
|
|
79
|
+
let featuresContent;
|
|
80
|
+
if (info.features && info.features.length > 0) {
|
|
81
|
+
featuresContent = info.features.map((f, i) => `${i + 1}. ${f}`).join('\n');
|
|
82
|
+
} else {
|
|
83
|
+
featuresContent = '1. [๊ธฐ๋ฅ 1]\n2. [๊ธฐ๋ฅ 2]\n3. [๊ธฐ๋ฅ 3]';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return `# Project Brief
|
|
87
|
+
|
|
88
|
+
## ํ๋ก์ ํธ ์ด๋ฆ
|
|
89
|
+
${projectName}
|
|
90
|
+
|
|
91
|
+
## ํ ์ค ์ค๋ช
|
|
92
|
+
${info.description || '[ํ๋ก์ ํธ๋ฅผ ํ ์ค๋ก ์ค๋ช
ํด์ฃผ์ธ์]'}
|
|
93
|
+
|
|
94
|
+
## ๋ฌธ์ ์ ์
|
|
95
|
+
${info.problem || '[ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ๋ ๋ฌด์์ธ๊ฐ์?]'}
|
|
96
|
+
|
|
97
|
+
## ํ๊ฒ ์ฌ์ฉ์
|
|
98
|
+
${info.targetUser || '[์ฃผ์ ์ฌ์ฉ์๋ ๋๊ตฌ์ธ๊ฐ์?]'}
|
|
99
|
+
|
|
100
|
+
## ํต์ฌ ๊ธฐ๋ฅ (์ด์)
|
|
101
|
+
${featuresContent}
|
|
102
|
+
|
|
103
|
+
## ์ฑ๊ณต ๊ธฐ์ค
|
|
104
|
+
${info.successCriteria || '[ํ๋ก์ ํธ๊ฐ ์ฑ๊ณตํ๋ค๊ณ ํ๋จํ๋ ๊ธฐ์ค์?]'}
|
|
105
|
+
|
|
106
|
+
## ์ ์ฝ์กฐ๊ฑด
|
|
107
|
+
- ์ผ์ : ${info.constraintSchedule || ''}
|
|
108
|
+
- ์์ฐ: ${info.constraintBudget || ''}
|
|
109
|
+
- ๊ธฐ์ : ${info.constraintTech || ''}
|
|
110
|
+
|
|
111
|
+
## ์ฐธ๊ณ ์๋ฃ
|
|
112
|
+
- ${info.references || '[URL ๋๋ ๋ฌธ์]'}
|
|
113
|
+
`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async function main() {
|
|
45
117
|
const args = process.argv.slice(2);
|
|
46
|
-
const projectName = args[0] || '.';
|
|
47
118
|
|
|
48
|
-
// ๋์๋ง
|
|
49
|
-
if (
|
|
119
|
+
// ๋์๋ง ์ฒดํฌ (๊ฐ์ฅ ๋จผ์ ์ฒ๋ฆฌ)
|
|
120
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
50
121
|
console.log(`
|
|
51
122
|
${colors.cyan}create-ax-project${colors.reset} - Multi-AI Workflow Pipeline ํ๋ก์ ํธ ์์ฑ
|
|
52
123
|
|
|
@@ -54,9 +125,13 @@ ${colors.yellow}์ฌ์ฉ๋ฒ:${colors.reset}
|
|
|
54
125
|
npx create-ax-project <project-name>
|
|
55
126
|
npx create-ax-project . (ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์์ฑ)
|
|
56
127
|
|
|
128
|
+
${colors.yellow}์ต์
:${colors.reset}
|
|
129
|
+
--yes, -y ํ๋กฌํํธ ์์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์์ฑ
|
|
130
|
+
|
|
57
131
|
${colors.yellow}์์:${colors.reset}
|
|
58
132
|
npx create-ax-project my-saas-app
|
|
59
133
|
npx create-ax-project my-game
|
|
134
|
+
npx create-ax-project my-project --yes
|
|
60
135
|
|
|
61
136
|
${colors.yellow}์์ฑ ํ:${colors.reset}
|
|
62
137
|
1. cd <project-name>
|
|
@@ -66,6 +141,9 @@ ${colors.yellow}์์ฑ ํ:${colors.reset}
|
|
|
66
141
|
process.exit(0);
|
|
67
142
|
}
|
|
68
143
|
|
|
144
|
+
const skipPrompts = args.includes('--yes') || args.includes('-y');
|
|
145
|
+
const projectName = args.find(arg => !arg.startsWith('-')) || '.';
|
|
146
|
+
|
|
69
147
|
// ํ๋ก์ ํธ ์ด๋ฆ ๊ฒ์ฆ
|
|
70
148
|
if (projectName !== '.' && !/^[a-z0-9-]+$/.test(projectName)) {
|
|
71
149
|
log('์ค๋ฅ: ํ๋ก์ ํธ ์ด๋ฆ์ ์๋ฌธ ์๋ฌธ์, ์ซ์, ํ์ดํ๋ง ํ์ฉ๋ฉ๋๋ค.', 'red');
|
|
@@ -103,12 +181,18 @@ ${colors.yellow}์์ฑ ํ:${colors.reset}
|
|
|
103
181
|
}
|
|
104
182
|
log(`โ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ: ${targetDir}`, 'green');
|
|
105
183
|
|
|
106
|
-
// 2.
|
|
184
|
+
// 2. ํ๋ก์ ํธ ๋ธ๋ฆฌํ ์ ๋ณด ์์ง (--yes ํ๋๊ทธ๊ฐ ์์ ๋๋ง)
|
|
185
|
+
let briefInfo = {};
|
|
186
|
+
if (!skipPrompts) {
|
|
187
|
+
briefInfo = await collectBriefInfo();
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// 3. ํ
ํ๋ฆฟ ๋ณต์ฌ
|
|
107
191
|
log(' ํ
ํ๋ฆฟ ๋ณต์ฌ ์ค...', 'blue');
|
|
108
192
|
copyRecursiveSync(templateDir, targetDir);
|
|
109
193
|
log('โ ํ
ํ๋ฆฟ ๋ณต์ฌ ์๋ฃ', 'green');
|
|
110
194
|
|
|
111
|
-
//
|
|
195
|
+
// 4. progress.json ์ด๊ธฐํ
|
|
112
196
|
const progressTemplatePath = path.join(targetDir, 'state', 'progress.json.template');
|
|
113
197
|
const progressPath = path.join(targetDir, 'state', 'progress.json');
|
|
114
198
|
|
|
@@ -125,7 +209,7 @@ ${colors.yellow}์์ฑ ํ:${colors.reset}
|
|
|
125
209
|
log('โ progress.json ์ด๊ธฐํ ์๋ฃ', 'green');
|
|
126
210
|
}
|
|
127
211
|
|
|
128
|
-
//
|
|
212
|
+
// 5. project_brief.md ์์ฑ
|
|
129
213
|
const briefPath = path.join(targetDir, 'stages', '01-brainstorm', 'inputs', 'project_brief.md');
|
|
130
214
|
const briefDir = path.dirname(briefPath);
|
|
131
215
|
|
|
@@ -133,41 +217,11 @@ ${colors.yellow}์์ฑ ํ:${colors.reset}
|
|
|
133
217
|
fs.mkdirSync(briefDir, { recursive: true });
|
|
134
218
|
}
|
|
135
219
|
|
|
136
|
-
const briefContent =
|
|
137
|
-
|
|
138
|
-
## ํ๋ก์ ํธ ์ด๋ฆ
|
|
139
|
-
${actualProjectName}
|
|
140
|
-
|
|
141
|
-
## ํ ์ค ์ค๋ช
|
|
142
|
-
[ํ๋ก์ ํธ๋ฅผ ํ ์ค๋ก ์ค๋ช
ํด์ฃผ์ธ์]
|
|
143
|
-
|
|
144
|
-
## ๋ฌธ์ ์ ์
|
|
145
|
-
[ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ๋ ๋ฌด์์ธ๊ฐ์?]
|
|
146
|
-
|
|
147
|
-
## ํ๊ฒ ์ฌ์ฉ์
|
|
148
|
-
[์ฃผ์ ์ฌ์ฉ์๋ ๋๊ตฌ์ธ๊ฐ์?]
|
|
149
|
-
|
|
150
|
-
## ํต์ฌ ๊ธฐ๋ฅ (์ด์)
|
|
151
|
-
1. [๊ธฐ๋ฅ 1]
|
|
152
|
-
2. [๊ธฐ๋ฅ 2]
|
|
153
|
-
3. [๊ธฐ๋ฅ 3]
|
|
154
|
-
|
|
155
|
-
## ์ฑ๊ณต ๊ธฐ์ค
|
|
156
|
-
[ํ๋ก์ ํธ๊ฐ ์ฑ๊ณตํ๋ค๊ณ ํ๋จํ๋ ๊ธฐ์ค์?]
|
|
157
|
-
|
|
158
|
-
## ์ ์ฝ์กฐ๊ฑด
|
|
159
|
-
- ์ผ์ :
|
|
160
|
-
- ์์ฐ:
|
|
161
|
-
- ๊ธฐ์ :
|
|
162
|
-
|
|
163
|
-
## ์ฐธ๊ณ ์๋ฃ
|
|
164
|
-
- [URL ๋๋ ๋ฌธ์]
|
|
165
|
-
`;
|
|
166
|
-
|
|
220
|
+
const briefContent = generateBriefContent(actualProjectName, briefInfo);
|
|
167
221
|
fs.writeFileSync(briefPath, briefContent);
|
|
168
222
|
log('โ project_brief.md ์์ฑ ์๋ฃ', 'green');
|
|
169
223
|
|
|
170
|
-
//
|
|
224
|
+
// 6. ์๋ฃ ๋ฉ์์ง
|
|
171
225
|
console.log('');
|
|
172
226
|
log('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ', 'green');
|
|
173
227
|
log(`โ ํ๋ก์ ํธ '${actualProjectName}' ์์ฑ ์๋ฃ!`, 'green');
|
|
@@ -190,4 +244,7 @@ ${actualProjectName}
|
|
|
190
244
|
console.log('');
|
|
191
245
|
}
|
|
192
246
|
|
|
193
|
-
main()
|
|
247
|
+
main().catch(err => {
|
|
248
|
+
log(`์ค๋ฅ: ${err.message}`, 'red');
|
|
249
|
+
process.exit(1);
|
|
250
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-ax-project",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Multi-AI Workflow Pipeline - Create new projects with 10-stage development workflow",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -34,5 +34,8 @@
|
|
|
34
34
|
"bugs": {
|
|
35
35
|
"url": "https://github.com/znehraks/ax-templates/issues"
|
|
36
36
|
},
|
|
37
|
-
"homepage": "https://github.com/znehraks/ax-templates#readme"
|
|
37
|
+
"homepage": "https://github.com/znehraks/ax-templates#readme",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@inquirer/prompts": "^8.2.0"
|
|
40
|
+
}
|
|
38
41
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
# HANDOFF: 01-brainstorm โ 02-research
|
|
2
|
-
|
|
3
|
-
> ์์ฑ์ผ: 2026-01-21
|
|
4
|
-
> ํ๋ก์ ํธ: snake-game
|
|
5
|
-
> ํ์ฌ ์คํ
์ด์ง: 01-brainstorm (์๋ฃ)
|
|
6
|
-
> ๋ค์ ์คํ
์ด์ง: 02-research
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## โ
์๋ฃ๋ ์์
|
|
11
|
-
|
|
12
|
-
- [x] ํ๋ก์ ํธ ๋ธ๋ฆฌํ ์์ฑ (`inputs/project_brief.md`)
|
|
13
|
-
- [x] ํต์ฌ ๊ธฐ๋ฅ ์์ด๋์ด 12๊ฐ ๋ธ๋ ์ธ์คํ ๋ฐ
|
|
14
|
-
- [x] ์ฌ์ฉ์ ํ๋ฅด์๋ 3๊ฐ ์ ์
|
|
15
|
-
- [x] ์ ์ฌ ํ๋ก์ ํธ ์ฌ๋ก ์กฐ์ฌ
|
|
16
|
-
- [x] ์ฅ๋จ์ ๋ถ์ ์๋ฃ
|
|
17
|
-
- [x] MVP ๋ฒ์ ์ ์
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## ๐ ํต์ฌ ๊ฒฐ์ ์ฌํญ
|
|
22
|
-
|
|
23
|
-
### 1. ๊ธฐ์ ์คํ ๋ฐฉํฅ
|
|
24
|
-
- **๋ ๋๋ง**: Canvas (์ฑ๋ฅ ์ฐ์ , ๋ชจ๋ฐ์ผ ์ง์)
|
|
25
|
-
- **์ํ๊ด๋ฆฌ**: useReducer + Custom Hook
|
|
26
|
-
- **๊ฒ์ ๋ฃจํ**: requestAnimationFrame
|
|
27
|
-
|
|
28
|
-
### 2. MVP ๊ธฐ๋ฅ ๋ฒ์
|
|
29
|
-
| ์ฐ์ ์์ | ๊ธฐ๋ฅ |
|
|
30
|
-
|---------|------|
|
|
31
|
-
| ๐ด ํ์ | ๊ธฐ๋ณธ ์กฐ์, ๋จน์ด ์์คํ
, ์ถฉ๋ ๊ฐ์ง, ์ ์, ์ฌ์์ |
|
|
32
|
-
| ๐ก ์ค์ | ๋ ๋ฒจ ์์คํ
, ํ์ด์ค์ฝ์ด ์ ์ฅ, ์ผ์์ ์ง, ๋ชจ๋ฐ์ผ ํฐ์น |
|
|
33
|
-
| ๐ข ์ ํ | Combo System, Portal Edges, Different Food |
|
|
34
|
-
|
|
35
|
-
### 3. ํ๊ฒ ์ฌ์ฉ์ (์ฐ์ ์์)
|
|
36
|
-
1. **Persona A**: ์บ์ฃผ์ผ ๊ฒ์ด๋จธ (๋ชจ๋ฐ์ผ, 5-10๋ถ ํ๋ ์ด)
|
|
37
|
-
2. **Persona B**: ๊ฒฝ์์ ๊ฒ์ด๋จธ (๋ฐ์คํฌํฑ, ํ์ด์ค์ฝ์ด ์ถ๊ตฌ)
|
|
38
|
-
3. **Persona C**: ๋ ํธ๋ก ํฌ (ํด๋์ ์คํ์ผ ์ ํธ)
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## ๐ ์์ฑ๋ ์ฐ์ถ๋ฌผ
|
|
43
|
-
|
|
44
|
-
| ํ์ผ | ์ค๋ช
|
|
|
45
|
-
|------|------|
|
|
46
|
-
| `inputs/project_brief.md` | ํ๋ก์ ํธ ๊ฐ์ ๋ฐ ์๊ตฌ์ฌํญ |
|
|
47
|
-
| `outputs/ideas.md` | ๋ธ๋ ์ธ์คํ ๋ฐ ์์ด๋์ด (12๊ฐ) |
|
|
48
|
-
| `outputs/requirements_analysis.md` | ์๊ตฌ์ฌํญ ๋ถ์ |
|
|
49
|
-
| `HANDOFF.md` | ์ด ๋ฌธ์ |
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## ๐ ๋ค์ ์คํ
์ด์ง ์ฆ์ ์คํ ์์
|
|
54
|
-
|
|
55
|
-
### 02-research์์ ์กฐ์ฌํ ํญ๋ชฉ
|
|
56
|
-
|
|
57
|
-
1. **Canvas ๊ฒ์ ๋ฃจํ ๊ตฌํ ๋ฐฉ๋ฒ**
|
|
58
|
-
- requestAnimationFrame vs setInterval
|
|
59
|
-
- ์ต์ ํ ๊ธฐ๋ฒ (๋๋ธ ๋ฒํผ๋ง)
|
|
60
|
-
|
|
61
|
-
2. **React + Canvas ํตํฉ ํจํด**
|
|
62
|
-
- useRef๋ก Canvas ์ ๊ทผ
|
|
63
|
-
- Canvas ๋ฆฌ๋ ๋๋ง ์ต์ํ
|
|
64
|
-
|
|
65
|
-
3. **๋ชจ๋ฐ์ผ ํฐ์น ์ด๋ฒคํธ ์ฒ๋ฆฌ**
|
|
66
|
-
- touchstart/touchmove/touchend
|
|
67
|
-
- ์ค์์ดํ ๋ฐฉํฅ ๊ฐ์ง ๋ก์ง
|
|
68
|
-
|
|
69
|
-
4. **localStorage ํ์ด์ค์ฝ์ด ์ ์ฅ**
|
|
70
|
-
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค๊ณ
|
|
71
|
-
- ๋ณด์ ๊ณ ๋ ค์ฌํญ
|
|
72
|
-
|
|
73
|
-
5. **์ถฉ๋ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ**
|
|
74
|
-
- O(n) ์๊ธฐ ๋ชธ ์ถฉ๋
|
|
75
|
-
- ์ต์ ํ ๋ฐฉ์
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## โ ๏ธ ์ฃผ์์ฌํญ
|
|
80
|
-
|
|
81
|
-
1. **์ธ๋ถ ๊ฒ์ ์์ง ๋ฏธ์ฌ์ฉ**: Phaser, PixiJS ๋ฑ ๊ธ์ง
|
|
82
|
-
2. **์์ React ๊ตฌํ**: jQuery ๋ฏธ์ฌ์ฉ
|
|
83
|
-
3. **์ ์ ๋ฐฐํฌ ๊ฐ๋ฅ**: ๋ฐฑ์๋ ์๋ฒ ์์
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## ๐ AI ํธ์ถ ๊ธฐ๋ก
|
|
88
|
-
|
|
89
|
-
| AI | ์๊ฐ | ํ๋กฌํํธ | ๊ฒฐ๊ณผ | ์ํ |
|
|
90
|
-
|----|------|---------|------|------|
|
|
91
|
-
| Gemini | 11:58 | Snake Game ๋ธ๋ ์ธ์คํ ๋ฐ | 12๊ฐ ์์ด๋์ด, 3 ํ๋ฅด์๋ | โ
|
|
|
92
|
-
| ClaudeCode | 11:57 | ๊ฒฐ๊ณผ ๊ตฌ์กฐํ | ideas.md, HANDOFF.md | โ
|
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## ๐ ๋ค์ ๋จ๊ณ
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
# ๋ค์ ์คํ
์ด์ง ์คํ
|
|
100
|
-
/run-stage 02-research
|
|
101
|
-
|
|
102
|
-
# ๋๋
|
|
103
|
-
/research
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
**์์ฑ์**: ClaudeCode
|
|
109
|
-
**๊ฒํ ์**: -
|
|
110
|
-
**์น์ธ**: ๋๊ธฐ
|
|
File without changes
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# Project Brief: Snake Game
|
|
2
|
-
|
|
3
|
-
## ํ๋ก์ ํธ ์ด๋ฆ
|
|
4
|
-
Snake Game
|
|
5
|
-
|
|
6
|
-
## ํ ์ค ์ค๋ช
|
|
7
|
-
ํด๋์ ์ค๋ค์ดํฌ ๊ฒ์์ ํ๋์ ์น ๋ฒ์
|
|
8
|
-
|
|
9
|
-
## ๋ฌธ์ ์ ์
|
|
10
|
-
๊ฐ๋จํ์ง๋ง ์ค๋
์ฑ ์๋ ์บ์ฃผ์ผ ๊ฒ์ ํ์
|
|
11
|
-
|
|
12
|
-
## ํ๊ฒ ์ฌ์ฉ์
|
|
13
|
-
- ์งง์ ์๊ฐ ๊ฒ์์ ์ฆ๊ธฐ๊ณ ์ถ์ ์ฌ์ฉ์
|
|
14
|
-
- ๋ ํธ๋ก ๊ฒ์ ํฌ
|
|
15
|
-
- ๋ชจ๋ฐ์ผ/๋ฐ์คํฌํฑ ๋ชจ๋์์ ๊ฒ์์ ์ํ๋ ์ฌ์ฉ์
|
|
16
|
-
|
|
17
|
-
## ํต์ฌ ๊ธฐ๋ฅ
|
|
18
|
-
1. ๋ฐฉํฅํค/ํฐ์น๋ก ๋ฑ ์กฐ์
|
|
19
|
-
2. ๋จน์ด ์์ง ๋ฐ ์ฑ์ฅ
|
|
20
|
-
3. ์ถฉ๋ ๊ฐ์ง (๋ฒฝ, ์๊ธฐ ๋ชธ)
|
|
21
|
-
4. ์ ์ ์์คํ
|
|
22
|
-
|
|
23
|
-
## ๊ธฐ์ ์๊ตฌ์ฌํญ
|
|
24
|
-
- React + TypeScript
|
|
25
|
-
- Vite ๋น๋ ๋๊ตฌ
|
|
26
|
-
- Canvas ๋๋ CSS Grid ๊ธฐ๋ฐ ๋ ๋๋ง
|
|
27
|
-
- ๋ฐ์ํ ๋์์ธ (๋ชจ๋ฐ์ผ ์ง์)
|
|
28
|
-
|
|
29
|
-
## ์ฑ๊ณต ์งํ
|
|
30
|
-
- ๊ฒ์ ํ๋ ์ด ๊ฐ๋ฅ (๊ธฐ๋ณธ ๊ธฐ๋ฅ ์์ฑ)
|
|
31
|
-
- ๋ชจ๋ฐ์ผ/๋ฐ์คํฌํฑ ๋ชจ๋ ์ง์
|
|
32
|
-
- ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง 80% ์ด์
|
|
33
|
-
- ๋ฐฐํฌ ์๋ฃ (GitHub Pages ๋๋ Vercel)
|
|
34
|
-
|
|
35
|
-
## ํ์๋ผ์ธ
|
|
36
|
-
- ์ ์ฒด ํ์ดํ๋ผ์ธ (01~10): ์ฝ 4์๊ฐ
|
|
37
|
-
|
|
38
|
-
## ์ ์ฝ์ฌํญ
|
|
39
|
-
- ์ธ๋ถ ๊ฒ์ ์์ง ๋ฏธ์ฌ์ฉ (์์ React)
|
|
40
|
-
- ๋ณต์กํ ๋ฐฑ์๋ ์์ (ํ๋ก ํธ์๋ only)
|
|
File without changes
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
# ๐ Snake Game - ๋ธ๋ ์ธ์คํ ๋ฐ ์์ด๋์ด
|
|
2
|
-
|
|
3
|
-
> ์์ฑ์ผ: 2026-01-21
|
|
4
|
-
> ์คํ
์ด์ง: 01-brainstorm
|
|
5
|
-
> ํ๋ก์ ํธ: snake-game
|
|
6
|
-
> AI ๋๊ตฌ: Gemini CLI + ClaudeCode
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## ๐ ํต์ฌ ๊ธฐ๋ฅ ์์ด๋์ด (12๊ฐ)
|
|
11
|
-
|
|
12
|
-
### ๐ฎ ๊ธฐ๋ณธ ๊ฒ์ํ๋ ์ด (ํ์)
|
|
13
|
-
|
|
14
|
-
| # | ์์ด๋์ด | ์ค๋ช
| ์ฐ์ ์์ |
|
|
15
|
-
|---|---------|------|---------|
|
|
16
|
-
| 1 | **๊ธฐ๋ณธ ๋ฑ ์กฐ์** | ๋ฐฉํฅํค(โโโโ)๋ก ๋ฑ ์ด๋ | ๐ด ํ์ |
|
|
17
|
-
| 2 | **๋จน์ด ์์คํ
** | ๋จน์ด๋ฅผ ๋จน์ผ๋ฉด ๋ฑ ๊ธธ์ด +1, ์ ์ +10 | ๐ด ํ์ |
|
|
18
|
-
| 3 | **์ถฉ๋ ๊ฐ์ง** | ๋ฒฝ/์๊ธฐ ๋ชธ ์ถฉ๋ ์ ๊ฒ์ ์ค๋ฒ | ๐ด ํ์ |
|
|
19
|
-
| 4 | **์ ์ ์์คํ
** | ์ค์๊ฐ ์ ์ ํ์ | ๐ด ํ์ |
|
|
20
|
-
| 5 | **๊ฒ์ ์ฌ์์** | ๊ฒ์ ์ค๋ฒ ํ ๋ค์ ์์ ๊ธฐ๋ฅ | ๐ด ํ์ |
|
|
21
|
-
|
|
22
|
-
### โญ Gemini ์ ์ ๊ธฐ๋ฅ
|
|
23
|
-
|
|
24
|
-
| # | ์์ด๋์ด | ์ค๋ช
| ์ฐ์ ์์ |
|
|
25
|
-
|---|---------|------|---------|
|
|
26
|
-
| 6 | **Dash / Sprint** | ์ ํ๋ ์คํ๋ฏธ๋๋ก 2๋ฐฐ์ ์ด๋ | ๐ข ์ ํ |
|
|
27
|
-
| 7 | **Ghost Mode** | ์๊ธฐ ๋ชธ ํต๊ณผ ํ์์
(5์ด) | ๐ข ์ ํ |
|
|
28
|
-
| 8 | **Dynamic Obstacles** | 10์ด๋ง๋ค ์์น ๋ณ๊ฒฝ๋๋ ์ฅ์ ๋ฌผ | ๐ข ์ ํ |
|
|
29
|
-
| 9 | **Combo System** | ์ฐ์ ๋จน์ด ํ๋ ์ ์ ์ ๋ฐฐ์จ (x1โx2โx4) | ๐ก ์ค์ |
|
|
30
|
-
| 10 | **Portal Edges** | ๋ฒฝ ํต๊ณผ ์ ๋ฐ๋ํธ์ผ๋ก ์ด๋ (ํฉ๋งจ ์คํ์ผ) | ๐ก ์ค์ |
|
|
31
|
-
| 11 | **Different Food Types** | ์ฌ๊ณผ(+1), ํฉ๊ธ์ฌ๊ณผ(์ ์๋ง), ๊ณ ์ถ(์๋โ), ์ผ์(์๋โ) | ๐ข ์ ํ |
|
|
32
|
-
| 12 | **Puzzle Levels** | ๋ฏธ๋ก ๋ ๋ฒจ์์ ๋ชจ๋ ๋จน์ด ์์ง | ๐ข ์ ํ |
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## ๐ ์ฅ๋จ์ ๋ถ์ (Gemini ๋ถ์)
|
|
37
|
-
|
|
38
|
-
| ์์ด๋์ด | ์ฅ์ | ๋จ์ |
|
|
39
|
-
|:---------|:-----|:-----|
|
|
40
|
-
| **Dash / Sprint** | ์คํฌ ์์ ์ถ๊ฐ, "ํด๋ฌ์น" ๋ชจ๋ฉํธ | ์๋๋ก ์ธํ ์ค์ ์ถฉ๋ ๊ฐ๋ฅ |
|
|
41
|
-
| **Ghost Mode** | ์ด๋ณด์ ์นํ์ , ์ข์ ๊ฐ ๊ฐ์ | ๋๋ฌด ์ฌ์์ง ์ ์์ |
|
|
42
|
-
| **Dynamic Obstacles** | ์ ์ ํจ ์ ์ง, ์์ ์ง๋ ์บ ํ ๋ฐฉ์ง | ๋ถ๊ณต์ ํ๊ฒ ๋๊ปด์ง ์ ์์ |
|
|
43
|
-
| **Combo System** | ๊ณต๊ฒฉ์ ์ด๊ณ ์ํํ ํ๋ ์ด ์ ๋ | UI ๋ณต์กํด์ง (ํ์ด๋จธ ํ์) |
|
|
44
|
-
| **Portal Edges** | ํด๋์ํ๊ณ ๋ง์กฑ์ค๋ฌ์ด ํ๋ก์ฐ | "์ฝ๋ ํจ์ " ๊ธด์ฅ๊ฐ ๊ฐ์ |
|
|
45
|
-
| **Different Food** | ์ ๋ต์ ๊น์ด (์ํ vs ๋ณด์) | ํ๋ ์ด์ด๊ฐ ์์๋ณ ํจ๊ณผ ๊ธฐ์ต ํ์ |
|
|
46
|
-
| **Puzzle Levels** | ๋ช
ํํ ์งํ๊ฐ/์๋ฃ๊ฐ | ๋ฌดํ ๋ชจ๋ ๋๋น ์ฌํ๋ ์ด์ฑ ๋ฎ์ |
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## ๐ฅ ์ฌ์ฉ์ ํ๋ฅด์๋ (Gemini ์์ฑ)
|
|
51
|
-
|
|
52
|
-
### ํ๋ฅด์๋ A: "The Commuter" (์บ์ฃผ์ผ)
|
|
53
|
-
- **์ธ๊ตฌํต๊ณ**: 28์ธ ์ง์ฅ์ธ
|
|
54
|
-
- **ํ๋**: ์งํ์ฒ ์์ ๋ชจ๋ฐ์ผ๋ก 5-10๋ถ ํ๋ ์ด
|
|
55
|
-
- **๋์ฆ**:
|
|
56
|
-
- ํ ์ ์กฐ์ (์ค์์ดํ)
|
|
57
|
-
- ๋น ๋ฅธ ์์ (๋ก๋ฉ ์์)
|
|
58
|
-
- ์คํ๋ผ์ธ ๊ฐ๋ฅ
|
|
59
|
-
- ๋ธ๋ผ์ฐ์ ๋ซ์๋ ์๋ ์ ์ฅ
|
|
60
|
-
- **๋ถ๋ง**: ๋ณต์กํ ๋ฉ๋ด, ์์ ๋ฒํผ, ๊ด๊ณ
|
|
61
|
-
|
|
62
|
-
### ํ๋ฅด์๋ B: "The High-Scorer" (๊ฒฝ์์ )
|
|
63
|
-
- **์ธ๊ตฌํต๊ณ**: 16์ธ ํ์
|
|
64
|
-
- **ํ๋**: ์ฌ๋ ์๊ฐ์ ๋ฐ์คํฌํฑ PC๋ก ํ๋ ์ด, ๋ฆฌ๋๋ณด๋์ ์ง์ฐฉ
|
|
65
|
-
- **๋์ฆ**:
|
|
66
|
-
- ์ ๋ฐํ ํค๋ณด๋ ์กฐ์ (์
๋ ฅ ์ง์ฐ ์ ๋ก)
|
|
67
|
-
- ๊ณ ๋๋น ์๊ฐ (์ฅ์ ๋ฌผ ๋ช
ํํ ๋ณด์)
|
|
68
|
-
- ์ฆ์ ์ฌ์์ ๊ธฐ๋ฅ ("R" ํค)
|
|
69
|
-
- ๊ธ๋ก๋ฒ ๋ฆฌ๋๋ณด๋
|
|
70
|
-
- **๋ถ๋ง**: ๋ถ๊ณต์ ํ RNG, ๋, ๋๋ฆฐ ์ ๋๋ฉ์ด์
|
|
71
|
-
|
|
72
|
-
### ํ๋ฅด์๋ C: "The Retro Fan" (ํฅ์)
|
|
73
|
-
- **์ธ๊ตฌํต๊ณ**: 40์ธ ๊ฐ๋ฐ์
|
|
74
|
-
- **ํ๋**: ํฝ์
์ํธ์ ์นฉํ ์์
์ ํธ, ํด์์ฉ ํ๋ ์ด
|
|
75
|
-
- **๋์ฆ**:
|
|
76
|
-
- ํด๋์ CRT ํํฐ ๋๋ ํฝ์
์ํธ ๋ฏธํ
|
|
77
|
-
- ๋จ์ํ๊ณ "์์ํ" ๊ฒ์ํ๋ ์ด
|
|
78
|
-
- ๊ฒ์ํจ๋/์ปจํธ๋กค๋ฌ ์ง์
|
|
79
|
-
- **๋ถ๋ง**: ๊ณผ๋ํ๊ฒ ํ๋์ ์ธ "ํ๋ คํ" ํจ๊ณผ, ์์ก๊ฒฐ์
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## ๐ ์ ์ฌ ํ๋ก์ ํธ ์ฌ๋ก (Gemini ์กฐ์ฌ)
|
|
84
|
-
|
|
85
|
-
### 1. Google Snake (๊ฒ์ ์ด์คํฐ์๊ทธ)
|
|
86
|
-
- **ํน์ง**: "์ ๊ทผ ๊ฐ๋ฅํ" ์ค๋ค์ดํฌ์ ํ์ค
|
|
87
|
-
- **ํต์ฌ ๊ธฐ๋ฅ**: ํ ๊ธ ๊ฐ๋ฅํ ๋ชจ๋ (์๋, ํฌํธ, ํํ ๋ชจ๋)
|
|
88
|
-
|
|
89
|
-
### 2. Slither.io
|
|
90
|
-
- **ํน์ง**: "ํ๋ ๋ฉํฐํ๋ ์ด์ด" ์๋ ์ ์
|
|
91
|
-
- **ํต์ฌ ๊ธฐ๋ฅ**: ๋ง์ฐ์ค ๋ฐ๋ผ๊ฐ๊ธฐ (์๋ ๋ก๊ทธ), "์ฐจ๋จ" ๋ฉ์นด๋
|
|
92
|
-
|
|
93
|
-
### 3. Classic Nokia Snake (Snake II)
|
|
94
|
-
- **ํน์ง**: ์ฅ๋ฅด์ ๊ธฐ์ด
|
|
95
|
-
- **ํต์ฌ ๊ธฐ๋ฅ**: ๋จ์, ๊ทธ๋ฆฌ๋ ๊ธฐ๋ฐ, ๋ฒฝ ๋ฉ์ด๋ผ์ด๋ ์ต์
|
|
96
|
-
|
|
97
|
-
### 4. React-Snake (GitHub Topics)
|
|
98
|
-
- **๊ณตํต ๊ธฐ์ ์คํ ํจํด**:
|
|
99
|
-
- `useInterval` ํ
์ผ๋ก ๊ฒ์ ๋ฃจํ
|
|
100
|
-
- ์ขํ ๋ฐฐ์ด `[{x,y}, {x,y}]`๋ก ๋ฑ ๋ชธํต
|
|
101
|
-
- CSS Grid (์ฌ์) vs HTML5 Canvas (์ฑ๋ฅ ์ข์)
|
|
102
|
-
- Redux/Zustand๋ก ํ์ด์ค์ฝ์ด ๊ด๋ฆฌ
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## ๐ฏ MVP ๊ถ์ฅ์ฌํญ (Gemini ์ ์)
|
|
107
|
-
|
|
108
|
-
**ํ๋ฅด์๋ A (The Commuter)**์ **ํ๋ฅด์๋ B (The Competitive)**๋ฅผ ์ผ๋์ ๋๊ณ :
|
|
109
|
-
|
|
110
|
-
### ๊ธฐ์ ์คํ
|
|
111
|
-
- **๋ ๋๋ง**: React + Canvas (๋ชจ๋ฐ์ผ ์ฑ๋ฅ ์ฐ์ )
|
|
112
|
-
- **์
๋ ฅ**: ํค๋ณด๋ (Arrow/WASD) + ๋ชจ๋ฐ์ผ ์ค์์ดํ
|
|
113
|
-
|
|
114
|
-
### MVP ๊ธฐ๋ฅ ์ธํธ
|
|
115
|
-
- [x] ํด๋์ ๋ฌดํ ๋ชจ๋
|
|
116
|
-
- [x] LocalStorage์ ํ์ด์ค์ฝ์ด ์ ์ฅ
|
|
117
|
-
- [x] 3๋จ๊ณ ์๋ (๋๋ฆผ, ๋ณดํต, ๋น ๋ฆ)
|
|
118
|
-
- [x] "์ฆ์ ์ฌ์์" (ํ ๋ฒ ๋ ์๋ ๋ฃจํ)
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## ๐ ์ต์ข
์ฐ์ ์์ ๋งคํธ๋ฆญ์ค
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
๋์ ๊ฐ์น
|
|
126
|
-
โ
|
|
127
|
-
โโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ
|
|
128
|
-
โ Combo System โ ๊ธฐ๋ณธ ์กฐ์ โ
|
|
129
|
-
โ Portal Edges โ ๋จน์ด ์์คํ
โ
|
|
130
|
-
โ ๋ ๋ฒจ ์์คํ
โ ์ถฉ๋ ๊ฐ์ง โ
|
|
131
|
-
โ โ ์ ์ ์์คํ
โ
|
|
132
|
-
์ ์ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ๋ง์
|
|
133
|
-
๋
ธ๋ ฅ โ โ ๊ฒ์ ์ฌ์์ โ ๋
ธ๋ ฅ
|
|
134
|
-
โ ์ผ์์ ์ง โ โ
|
|
135
|
-
โ ํ์ด์ค์ฝ์ด ์ ์ฅ โ Different Food โ
|
|
136
|
-
โ โ Ghost Mode โ
|
|
137
|
-
โโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ
|
|
138
|
-
โ
|
|
139
|
-
๋ฎ์ ๊ฐ์น
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## โ
๋ธ๋ ์ธ์คํ ๋ฐ ์๋ฃ ์ฒดํฌ๋ฆฌ์คํธ
|
|
145
|
-
|
|
146
|
-
- [x] ์ต์ 10๊ฐ ์์ด๋์ด ์์ฑ (12๊ฐ ์๋ฃ)
|
|
147
|
-
- [x] 3๊ฐ ์ด์ ์ฌ์ฉ์ ํ๋ฅด์๋ ์ ์ (3๊ฐ ์๋ฃ)
|
|
148
|
-
- [x] ๊ฐ ์์ด๋์ด ์ฅ๋จ์ ๋ถ์
|
|
149
|
-
- [x] ์ ์ฌ ํ๋ก์ ํธ ์กฐ์ฌ
|
|
150
|
-
- [x] MVP ๋ฒ์ ์ ์
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## ๐ AI ํธ์ถ ๊ธฐ๋ก
|
|
155
|
-
|
|
156
|
-
| AI | ํธ์ถ ์๊ฐ | ํ๋กฌํํธ | ๊ฒฐ๊ณผ | ์ํ |
|
|
157
|
-
|----|----------|---------|------|------|
|
|
158
|
-
| Gemini | 2026-01-21 11:58 | Snake Game ๋ธ๋ ์ธ์คํ ๋ฐ | 12๊ฐ ์์ด๋์ด, 3 ํ๋ฅด์๋, ์ฌ๋ก ์กฐ์ฌ | โ
์ฑ๊ณต |
|
|
159
|
-
| ClaudeCode | 2026-01-21 11:57 | ๊ฒฐ๊ณผ ๊ตฌ์กฐํ | ideas.md ์์ฑ | โ
์ฑ๊ณต |
|