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.
Files changed (63) hide show
  1. package/bin/create.js +97 -40
  2. package/package.json +5 -2
  3. package/template/.claude/CLAUDE.md +0 -7
  4. package/template/.claude/commands/CLAUDE.md +0 -0
  5. package/template/.claude/hooks/CLAUDE.md +0 -0
  6. package/template/.claude/skills/ai-collaboration/CLAUDE.md +0 -0
  7. package/template/.claude/skills/auto-checkpoint/CLAUDE.md +0 -0
  8. package/template/.claude/skills/context-compression/CLAUDE.md +0 -0
  9. package/template/.claude/skills/context-compression/prompts/CLAUDE.md +0 -0
  10. package/template/.claude/skills/output-validator/CLAUDE.md +0 -0
  11. package/template/.claude/skills/smart-handoff/CLAUDE.md +0 -0
  12. package/template/.claude/skills/stage-transition/CLAUDE.md +0 -0
  13. package/template/.claude/skills/stage-transition/prompts/CLAUDE.md +0 -0
  14. package/template/config/CLAUDE.md +0 -0
  15. package/template/scripts/CLAUDE.md +0 -0
  16. package/template/stages/01-brainstorm/HANDOFF.md +0 -110
  17. package/template/stages/01-brainstorm/inputs/CLAUDE.md +0 -0
  18. package/template/stages/01-brainstorm/inputs/project_brief.md +0 -40
  19. package/template/stages/01-brainstorm/outputs/CLAUDE.md +0 -0
  20. package/template/stages/01-brainstorm/outputs/ideas.md +0 -159
  21. package/template/stages/01-brainstorm/outputs/requirements_analysis.md +0 -222
  22. package/template/stages/01-brainstorm/prompts/CLAUDE.md +0 -0
  23. package/template/stages/01-brainstorm/templates/CLAUDE.md +0 -0
  24. package/template/stages/02-research/HANDOFF.md +0 -158
  25. package/template/stages/02-research/outputs/CLAUDE.md +0 -0
  26. package/template/stages/02-research/outputs/feasibility_report.md +0 -176
  27. package/template/stages/02-research/outputs/tech_research.md +0 -403
  28. package/template/stages/02-research/prompts/CLAUDE.md +0 -0
  29. package/template/stages/03-planning/HANDOFF.md +0 -168
  30. package/template/stages/03-planning/outputs/CLAUDE.md +0 -0
  31. package/template/stages/03-planning/outputs/architecture.md +0 -400
  32. package/template/stages/03-planning/outputs/implementation.yaml +0 -209
  33. package/template/stages/03-planning/outputs/project_plan.md +0 -204
  34. package/template/stages/03-planning/outputs/tech_stack.md +0 -176
  35. package/template/stages/03-planning/prompts/CLAUDE.md +0 -0
  36. package/template/stages/04-ui-ux/HANDOFF.md +0 -165
  37. package/template/stages/04-ui-ux/outputs/CLAUDE.md +0 -0
  38. package/template/stages/04-ui-ux/outputs/design_system.md +0 -449
  39. package/template/stages/04-ui-ux/outputs/user_flows.md +0 -321
  40. package/template/stages/04-ui-ux/outputs/wireframes.md +0 -241
  41. package/template/stages/04-ui-ux/prompts/CLAUDE.md +0 -0
  42. package/template/stages/05-task-management/HANDOFF.md +0 -187
  43. package/template/stages/05-task-management/outputs/CLAUDE.md +0 -0
  44. package/template/stages/05-task-management/outputs/milestones.md +0 -253
  45. package/template/stages/05-task-management/outputs/sprint_plan.md +0 -203
  46. package/template/stages/05-task-management/outputs/tasks.md +0 -402
  47. package/template/stages/05-task-management/prompts/CLAUDE.md +0 -0
  48. package/template/stages/05-task-management/templates/CLAUDE.md +0 -0
  49. package/template/stages/06-implementation/HANDOFF.md +0 -184
  50. package/template/stages/06-implementation/prompts/CLAUDE.md +0 -0
  51. package/template/stages/07-refactoring/HANDOFF.md +0 -82
  52. package/template/stages/07-refactoring/outputs/refactoring_report.md +0 -102
  53. package/template/stages/07-refactoring/prompts/CLAUDE.md +0 -0
  54. package/template/stages/08-qa/HANDOFF.md +0 -114
  55. package/template/stages/08-qa/outputs/qa_report.md +0 -138
  56. package/template/stages/08-qa/prompts/CLAUDE.md +0 -0
  57. package/template/stages/09-testing/HANDOFF.md +0 -118
  58. package/template/stages/09-testing/outputs/test_report.md +0 -146
  59. package/template/stages/09-testing/prompts/CLAUDE.md +0 -0
  60. package/template/stages/10-deployment/HANDOFF.md +0 -141
  61. package/template/stages/10-deployment/prompts/CLAUDE.md +0 -0
  62. package/template/stages/10-deployment/templates/CLAUDE.md +0 -0
  63. 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 main() {
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 (projectName === '--help' || projectName === '-h') {
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
- // 3. progress.json ์ดˆ๊ธฐํ™”
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
- // 4. project_brief.md ์ƒ์„ฑ
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 = `# Project Brief
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
- // 5. ์™„๋ฃŒ ๋ฉ”์‹œ์ง€
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.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
  }
@@ -1,7 +0,0 @@
1
- <claude-mem-context>
2
- # Recent Activity
3
-
4
- <!-- This section is auto-generated by claude-mem. Edit content outside the tags. -->
5
-
6
- *No recent activity*
7
- </claude-mem-context>
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 ์ž‘์„ฑ | โœ… ์„ฑ๊ณต |