timsquad 2.0.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.
Files changed (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -0
  3. package/bin/tsq.js +6 -0
  4. package/dist/commands/feedback.d.ts +3 -0
  5. package/dist/commands/feedback.d.ts.map +1 -0
  6. package/dist/commands/feedback.js +142 -0
  7. package/dist/commands/feedback.js.map +1 -0
  8. package/dist/commands/full.d.ts +3 -0
  9. package/dist/commands/full.d.ts.map +1 -0
  10. package/dist/commands/full.js +87 -0
  11. package/dist/commands/full.js.map +1 -0
  12. package/dist/commands/git/commit.d.ts +3 -0
  13. package/dist/commands/git/commit.d.ts.map +1 -0
  14. package/dist/commands/git/commit.js +88 -0
  15. package/dist/commands/git/commit.js.map +1 -0
  16. package/dist/commands/git/index.d.ts +5 -0
  17. package/dist/commands/git/index.d.ts.map +1 -0
  18. package/dist/commands/git/index.js +5 -0
  19. package/dist/commands/git/index.js.map +1 -0
  20. package/dist/commands/git/pr.d.ts +3 -0
  21. package/dist/commands/git/pr.d.ts.map +1 -0
  22. package/dist/commands/git/pr.js +138 -0
  23. package/dist/commands/git/pr.js.map +1 -0
  24. package/dist/commands/git/release.d.ts +3 -0
  25. package/dist/commands/git/release.d.ts.map +1 -0
  26. package/dist/commands/git/release.js +158 -0
  27. package/dist/commands/git/release.js.map +1 -0
  28. package/dist/commands/git/sync.d.ts +3 -0
  29. package/dist/commands/git/sync.d.ts.map +1 -0
  30. package/dist/commands/git/sync.js +132 -0
  31. package/dist/commands/git/sync.js.map +1 -0
  32. package/dist/commands/init.d.ts +3 -0
  33. package/dist/commands/init.d.ts.map +1 -0
  34. package/dist/commands/init.js +150 -0
  35. package/dist/commands/init.js.map +1 -0
  36. package/dist/commands/log.d.ts +3 -0
  37. package/dist/commands/log.d.ts.map +1 -0
  38. package/dist/commands/log.js +271 -0
  39. package/dist/commands/log.js.map +1 -0
  40. package/dist/commands/metrics.d.ts +3 -0
  41. package/dist/commands/metrics.d.ts.map +1 -0
  42. package/dist/commands/metrics.js +299 -0
  43. package/dist/commands/metrics.js.map +1 -0
  44. package/dist/commands/quick.d.ts +3 -0
  45. package/dist/commands/quick.d.ts.map +1 -0
  46. package/dist/commands/quick.js +136 -0
  47. package/dist/commands/quick.js.map +1 -0
  48. package/dist/commands/retro.d.ts +3 -0
  49. package/dist/commands/retro.d.ts.map +1 -0
  50. package/dist/commands/retro.js +280 -0
  51. package/dist/commands/retro.js.map +1 -0
  52. package/dist/commands/status.d.ts +3 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +127 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/commands/watch.d.ts +3 -0
  57. package/dist/commands/watch.d.ts.map +1 -0
  58. package/dist/commands/watch.js +213 -0
  59. package/dist/commands/watch.js.map +1 -0
  60. package/dist/index.d.ts +3 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +50 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/lib/config.d.ts +34 -0
  65. package/dist/lib/config.d.ts.map +1 -0
  66. package/dist/lib/config.js +108 -0
  67. package/dist/lib/config.js.map +1 -0
  68. package/dist/lib/project.d.ts +47 -0
  69. package/dist/lib/project.d.ts.map +1 -0
  70. package/dist/lib/project.js +191 -0
  71. package/dist/lib/project.js.map +1 -0
  72. package/dist/lib/template.d.ts +33 -0
  73. package/dist/lib/template.d.ts.map +1 -0
  74. package/dist/lib/template.js +151 -0
  75. package/dist/lib/template.js.map +1 -0
  76. package/dist/types/config.d.ts +75 -0
  77. package/dist/types/config.d.ts.map +1 -0
  78. package/dist/types/config.js +66 -0
  79. package/dist/types/config.js.map +1 -0
  80. package/dist/types/feedback.d.ts +59 -0
  81. package/dist/types/feedback.d.ts.map +1 -0
  82. package/dist/types/feedback.js +26 -0
  83. package/dist/types/feedback.js.map +1 -0
  84. package/dist/types/index.d.ts +4 -0
  85. package/dist/types/index.d.ts.map +1 -0
  86. package/dist/types/index.js +5 -0
  87. package/dist/types/index.js.map +1 -0
  88. package/dist/types/project.d.ts +89 -0
  89. package/dist/types/project.d.ts.map +1 -0
  90. package/dist/types/project.js +44 -0
  91. package/dist/types/project.js.map +1 -0
  92. package/dist/utils/colors.d.ts +30 -0
  93. package/dist/utils/colors.d.ts.map +1 -0
  94. package/dist/utils/colors.js +54 -0
  95. package/dist/utils/colors.js.map +1 -0
  96. package/dist/utils/date.d.ts +25 -0
  97. package/dist/utils/date.d.ts.map +1 -0
  98. package/dist/utils/date.js +65 -0
  99. package/dist/utils/date.js.map +1 -0
  100. package/dist/utils/fs.d.ts +49 -0
  101. package/dist/utils/fs.d.ts.map +1 -0
  102. package/dist/utils/fs.js +84 -0
  103. package/dist/utils/fs.js.map +1 -0
  104. package/dist/utils/prompts.d.ts +31 -0
  105. package/dist/utils/prompts.d.ts.map +1 -0
  106. package/dist/utils/prompts.js +95 -0
  107. package/dist/utils/prompts.js.map +1 -0
  108. package/dist/utils/yaml.d.ts +21 -0
  109. package/dist/utils/yaml.d.ts.map +1 -0
  110. package/dist/utils/yaml.js +40 -0
  111. package/dist/utils/yaml.js.map +1 -0
  112. package/package.json +71 -0
  113. package/templates/common/CLAUDE.md.template +254 -0
  114. package/templates/common/claude/agents/tsq-dba.md +290 -0
  115. package/templates/common/claude/agents/tsq-designer.md +304 -0
  116. package/templates/common/claude/agents/tsq-developer.md +118 -0
  117. package/templates/common/claude/agents/tsq-planner.md +90 -0
  118. package/templates/common/claude/agents/tsq-prompter.md +336 -0
  119. package/templates/common/claude/agents/tsq-qa.md +134 -0
  120. package/templates/common/claude/agents/tsq-retro.md +168 -0
  121. package/templates/common/claude/agents/tsq-security.md +190 -0
  122. package/templates/common/claude/skills/architecture/SKILL.md +123 -0
  123. package/templates/common/claude/skills/backend/node/SKILL.md +1015 -0
  124. package/templates/common/claude/skills/coding/SKILL.md +171 -0
  125. package/templates/common/claude/skills/database/prisma/SKILL.md +357 -0
  126. package/templates/common/claude/skills/frontend/nextjs/SKILL.md +279 -0
  127. package/templates/common/claude/skills/frontend/react/SKILL.md +1729 -0
  128. package/templates/common/claude/skills/methodology/bdd/SKILL.md +234 -0
  129. package/templates/common/claude/skills/methodology/ddd/SKILL.md +311 -0
  130. package/templates/common/claude/skills/methodology/tdd/SKILL.md +512 -0
  131. package/templates/common/claude/skills/planning/SKILL.md +90 -0
  132. package/templates/common/claude/skills/security/SKILL.md +234 -0
  133. package/templates/common/claude/skills/testing/SKILL.md +146 -0
  134. package/templates/common/claude/skills/typescript/SKILL.md +435 -0
  135. package/templates/common/config.template.yaml +131 -0
  136. package/templates/common/timsquad/architectures/clean/ARCHITECTURE.md +49 -0
  137. package/templates/common/timsquad/architectures/clean/backend.xml +210 -0
  138. package/templates/common/timsquad/architectures/clean/frontend.xml +148 -0
  139. package/templates/common/timsquad/architectures/fsd/ARCHITECTURE.md +67 -0
  140. package/templates/common/timsquad/architectures/fsd/frontend.xml +288 -0
  141. package/templates/common/timsquad/architectures/hexagonal/ARCHITECTURE.md +60 -0
  142. package/templates/common/timsquad/architectures/hexagonal/backend.xml +300 -0
  143. package/templates/common/timsquad/constraints/competency-framework.xml +501 -0
  144. package/templates/common/timsquad/constraints/ssot-schema.xml +433 -0
  145. package/templates/common/timsquad/feedback/feedback-router.sh +341 -0
  146. package/templates/common/timsquad/feedback/routing-rules.yaml +352 -0
  147. package/templates/common/timsquad/generators/data-design.xml +290 -0
  148. package/templates/common/timsquad/generators/prd.xml +280 -0
  149. package/templates/common/timsquad/generators/requirements.xml +220 -0
  150. package/templates/common/timsquad/generators/service-spec.xml +266 -0
  151. package/templates/common/timsquad/logs/_example.md +81 -0
  152. package/templates/common/timsquad/logs/_template.md +46 -0
  153. package/templates/common/timsquad/patterns/cqrs.xml +127 -0
  154. package/templates/common/timsquad/patterns/event-sourcing.xml +85 -0
  155. package/templates/common/timsquad/patterns/repository.xml +64 -0
  156. package/templates/common/timsquad/process/state-machine.xml +343 -0
  157. package/templates/common/timsquad/process/validation-rules.xml +308 -0
  158. package/templates/common/timsquad/process/workflow-base.xml +202 -0
  159. package/templates/common/timsquad/retrospective/cycle-report.template.md +205 -0
  160. package/templates/common/timsquad/retrospective/metrics/metrics-schema.json +203 -0
  161. package/templates/common/timsquad/retrospective/patterns/failure-patterns.md +199 -0
  162. package/templates/common/timsquad/retrospective/patterns/success-patterns.md +262 -0
  163. package/templates/common/timsquad/retrospective/retrospective-config.xml +294 -0
  164. package/templates/common/timsquad/retrospective/retrospective-state.xml +210 -0
  165. package/templates/common/timsquad/ssot/adr/ADR-000-template.md +121 -0
  166. package/templates/common/timsquad/ssot/adr/ADR-001-example.md +115 -0
  167. package/templates/common/timsquad/ssot/data-design.template.md +132 -0
  168. package/templates/common/timsquad/ssot/deployment-spec.template.md +384 -0
  169. package/templates/common/timsquad/ssot/env-config.template.md +346 -0
  170. package/templates/common/timsquad/ssot/error-codes.template.md +114 -0
  171. package/templates/common/timsquad/ssot/functional-spec.template.md +185 -0
  172. package/templates/common/timsquad/ssot/glossary.template.md +148 -0
  173. package/templates/common/timsquad/ssot/integration-spec.template.md +391 -0
  174. package/templates/common/timsquad/ssot/planning.template.md +94 -0
  175. package/templates/common/timsquad/ssot/prd.template.md +102 -0
  176. package/templates/common/timsquad/ssot/requirements.template.md +117 -0
  177. package/templates/common/timsquad/ssot/security-spec.template.md +309 -0
  178. package/templates/common/timsquad/ssot/service-spec.template.md +194 -0
  179. package/templates/common/timsquad/ssot/test-spec.template.md +264 -0
  180. package/templates/common/timsquad/ssot/ui-ux-spec.template.md +262 -0
  181. package/templates/common/timsquad/state/workspace.xml +217 -0
@@ -0,0 +1,290 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ TimSquad Data Design Generator v1.0
4
+ 데이터베이스 설계 (ERD, 테이블 정의)를 생성합니다.
5
+ -->
6
+ <generator name="data-design" version="1.0" output=".timsquad/ssot/data-design.md">
7
+ <metadata>
8
+ <description>데이터 설계서 생성기</description>
9
+ <purpose>ERD, 테이블 정의, 인덱스 전략</purpose>
10
+ <depends-on>prd.md, service-spec.md</depends-on>
11
+ </metadata>
12
+
13
+ <instructions>
14
+ <![CDATA[
15
+ 기능과 API를 기반으로 필요한 테이블을 도출합니다.
16
+
17
+ 1. 핵심 엔티티 식별 (User, Match 등)
18
+ 2. 각 테이블의 컬럼 정의
19
+ 3. 관계(FK) 설정
20
+ 4. 인덱스 전략
21
+
22
+ 정제 원칙:
23
+ - 테이블명: 소문자, 복수형 (users, matches)
24
+ - 컬럼명: snake_case
25
+ - PK: id (UUID 또는 auto increment)
26
+ - 타임스탬프: created_at, updated_at 필수
27
+ ]]>
28
+ </instructions>
29
+
30
+ <!-- ============================================================
31
+ 섹션 1: 테이블 정의
32
+ ============================================================ -->
33
+ <section id="tables" title="테이블 정의" repeatable="true">
34
+ <field name="name" type="text" required="true">
35
+ <prompt>테이블 이름? (예: users, matches, messages)</prompt>
36
+ <refinement>소문자, 복수형, snake_case</refinement>
37
+ </field>
38
+
39
+ <field name="description" type="text" required="true">
40
+ <prompt>이 테이블의 역할?</prompt>
41
+ </field>
42
+
43
+ <field name="columns" type="table" required="true">
44
+ <prompt>컬럼을 정의하세요 (이름:타입:설명 형식, 여러 줄)</prompt>
45
+ <auto-include>
46
+ <column name="id" type="uuid" pk="true">Primary Key</column>
47
+ <column name="created_at" type="timestamp">생성 시각</column>
48
+ <column name="updated_at" type="timestamp">수정 시각</column>
49
+ </auto-include>
50
+ <hint>
51
+ email:varchar(255):이메일 주소
52
+ nickname:varchar(50):닉네임
53
+ skill_level:integer:실력 레벨 (1-10)
54
+ </hint>
55
+ <types>
56
+ <type name="uuid">UUID</type>
57
+ <type name="varchar">VARCHAR(n)</type>
58
+ <type name="text">TEXT</type>
59
+ <type name="integer">INTEGER</type>
60
+ <type name="bigint">BIGINT</type>
61
+ <type name="boolean">BOOLEAN</type>
62
+ <type name="timestamp">TIMESTAMP</type>
63
+ <type name="date">DATE</type>
64
+ <type name="jsonb">JSONB</type>
65
+ <type name="decimal">DECIMAL(p,s)</type>
66
+ </types>
67
+ </field>
68
+
69
+ <field name="indexes" type="list" required="false">
70
+ <prompt>인덱스가 필요한 컬럼? (검색, 정렬에 자주 사용되는)</prompt>
71
+ <hint>email (unique), skill_level, created_at</hint>
72
+ </field>
73
+ </section>
74
+
75
+ <!-- ============================================================
76
+ 섹션 2: 관계 정의
77
+ ============================================================ -->
78
+ <section id="relations" title="관계 정의" repeatable="true">
79
+ <field name="from_table" type="text" required="true">
80
+ <prompt>FK가 있는 테이블?</prompt>
81
+ </field>
82
+
83
+ <field name="to_table" type="text" required="true">
84
+ <prompt>참조하는 테이블?</prompt>
85
+ </field>
86
+
87
+ <field name="relation_type" type="select" required="true">
88
+ <prompt>관계 유형?</prompt>
89
+ <options>
90
+ <option value="1:1">1:1 (One to One)</option>
91
+ <option value="1:N">1:N (One to Many)</option>
92
+ <option value="N:M">N:M (Many to Many)</option>
93
+ </options>
94
+ </field>
95
+
96
+ <field name="fk_column" type="text" required="true">
97
+ <prompt>FK 컬럼명?</prompt>
98
+ <auto-suggest>{{to_table | singular}}_id</auto-suggest>
99
+ </field>
100
+
101
+ <field name="on_delete" type="select" required="false">
102
+ <prompt>삭제 시 동작?</prompt>
103
+ <options>
104
+ <option value="CASCADE">CASCADE - 함께 삭제</option>
105
+ <option value="SET NULL">SET NULL - NULL로 설정</option>
106
+ <option value="RESTRICT">RESTRICT - 삭제 방지</option>
107
+ </options>
108
+ <default>CASCADE</default>
109
+ </field>
110
+ </section>
111
+
112
+ <!-- ============================================================
113
+ 섹션 3: Enum 정의
114
+ ============================================================ -->
115
+ <section id="enums" title="Enum 정의" repeatable="true" optional="true">
116
+ <field name="name" type="text" required="true">
117
+ <prompt>Enum 이름? (예: match_status, user_role)</prompt>
118
+ </field>
119
+
120
+ <field name="values" type="list" required="true">
121
+ <prompt>가능한 값들?</prompt>
122
+ <hint>pending, accepted, rejected, completed</hint>
123
+ </field>
124
+ </section>
125
+
126
+ <!-- ============================================================
127
+ 섹션 4: 인덱스 전략
128
+ ============================================================ -->
129
+ <section id="index_strategy" title="인덱스 전략">
130
+ <field name="composite_indexes" type="list" required="false">
131
+ <prompt>복합 인덱스가 필요한 경우? (테이블.컬럼1,컬럼2)</prompt>
132
+ <hint>matches.user_id,status</hint>
133
+ </field>
134
+
135
+ <field name="full_text" type="list" required="false">
136
+ <prompt>전문 검색이 필요한 컬럼?</prompt>
137
+ <hint>users.bio, messages.content</hint>
138
+ </field>
139
+ </section>
140
+
141
+ <!-- ============================================================
142
+ 출력 템플릿
143
+ ============================================================ -->
144
+ <output-template>
145
+ <![CDATA[
146
+ # {{project_name}} 데이터 설계서
147
+
148
+ **생성일**: {{DATE}}
149
+ **버전**: 1.0
150
+ **DBMS**: {{tech.database | default: "PostgreSQL"}}
151
+
152
+ ---
153
+
154
+ ## 1. ERD 개요
155
+
156
+ ```
157
+ {{#each tables}}
158
+ [{{name}}]
159
+ {{/each}}
160
+
161
+ 관계:
162
+ {{#each relations}}
163
+ {{from_table}} {{relation_type}} {{to_table}} ({{fk_column}})
164
+ {{/each}}
165
+ ```
166
+
167
+ ---
168
+
169
+ ## 2. 테이블 정의
170
+
171
+ {{#each tables}}
172
+ ### 2.{{@index + 1}} {{name}}
173
+
174
+ > {{description}}
175
+
176
+ | Column | Type | Nullable | Default | Description |
177
+ |--------|------|:--------:|---------|-------------|
178
+ | id | UUID | NO | gen_random_uuid() | PK |
179
+ {{#each columns}}
180
+ | {{name}} | {{type}} | {{#if nullable}}YES{{else}}NO{{/if}} | {{default | default: "-"}} | {{description}} |
181
+ {{/each}}
182
+ | created_at | TIMESTAMP | NO | now() | 생성 시각 |
183
+ | updated_at | TIMESTAMP | NO | now() | 수정 시각 |
184
+
185
+ {{#if indexes}}
186
+ **인덱스:**
187
+ {{#each indexes}}
188
+ - `idx_{{../name}}_{{this}}` ON ({{this}})
189
+ {{/each}}
190
+ {{/if}}
191
+
192
+ ```sql
193
+ CREATE TABLE {{name}} (
194
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
195
+ {{#each columns}}
196
+ {{name}} {{type}}{{#unless nullable}} NOT NULL{{/unless}}{{#if default}} DEFAULT {{default}}{{/if}},
197
+ {{/each}}
198
+ created_at TIMESTAMP NOT NULL DEFAULT now(),
199
+ updated_at TIMESTAMP NOT NULL DEFAULT now()
200
+ );
201
+
202
+ {{#each indexes}}
203
+ CREATE INDEX idx_{{../name}}_{{this}} ON {{../name}}({{this}});
204
+ {{/each}}
205
+ ```
206
+
207
+ ---
208
+
209
+ {{/each}}
210
+
211
+ ## 3. 관계 (Foreign Keys)
212
+
213
+ | From | To | Type | FK Column | On Delete |
214
+ |------|-----|:----:|-----------|-----------|
215
+ {{#each relations}}
216
+ | {{from_table}} | {{to_table}} | {{relation_type}} | {{fk_column}} | {{on_delete}} |
217
+ {{/each}}
218
+
219
+ ```sql
220
+ {{#each relations}}
221
+ ALTER TABLE {{from_table}}
222
+ ADD CONSTRAINT fk_{{from_table}}_{{to_table}}
223
+ FOREIGN KEY ({{fk_column}}) REFERENCES {{to_table}}(id)
224
+ ON DELETE {{on_delete}};
225
+
226
+ {{/each}}
227
+ ```
228
+
229
+ ---
230
+
231
+ {{#if enums}}
232
+ ## 4. Enum 정의
233
+
234
+ {{#each enums}}
235
+ ### {{name}}
236
+
237
+ ```sql
238
+ CREATE TYPE {{name}} AS ENUM (
239
+ {{#each values}}
240
+ '{{this}}'{{#unless @last}},{{/unless}}
241
+ {{/each}}
242
+ );
243
+ ```
244
+
245
+ {{/each}}
246
+ {{/if}}
247
+
248
+ ---
249
+
250
+ ## 5. 인덱스 전략
251
+
252
+ ### 5.1 단일 컬럼 인덱스
253
+ {{#each tables}}
254
+ {{#if indexes}}
255
+ - `{{name}}`: {{#each indexes}}{{this}}{{#unless @last}}, {{/unless}}{{/each}}
256
+ {{/if}}
257
+ {{/each}}
258
+
259
+ {{#if index_strategy.composite_indexes}}
260
+ ### 5.2 복합 인덱스
261
+ {{#each index_strategy.composite_indexes}}
262
+ - {{this}}
263
+ {{/each}}
264
+ {{/if}}
265
+
266
+ {{#if index_strategy.full_text}}
267
+ ### 5.3 전문 검색 인덱스
268
+ {{#each index_strategy.full_text}}
269
+ - {{this}}
270
+ {{/each}}
271
+ {{/if}}
272
+
273
+ ---
274
+
275
+ ## 6. 마이그레이션 순서
276
+
277
+ 1. Enum 타입 생성
278
+ 2. 테이블 생성 (의존성 없는 것 먼저)
279
+ {{#each tables}}
280
+ - {{name}}
281
+ {{/each}}
282
+ 3. Foreign Key 추가
283
+ 4. 인덱스 생성
284
+
285
+ ---
286
+
287
+ *Generated by TimSquad v2.0*
288
+ ]]>
289
+ </output-template>
290
+ </generator>
@@ -0,0 +1,280 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ TimSquad PRD Generator v1.0
4
+ 메인 세션이 이 템플릿을 읽고 사용자와 대화하며 PRD를 생성합니다.
5
+ -->
6
+ <generator name="prd" version="1.0" output=".timsquad/ssot/prd.md">
7
+ <metadata>
8
+ <description>제품 요구사항 정의서 (PRD) 생성기</description>
9
+ <purpose>프로젝트의 목적, 타겟, 핵심 기능을 정의</purpose>
10
+ </metadata>
11
+
12
+ <instructions>
13
+ <![CDATA[
14
+ 이 생성기를 사용하여 PRD를 작성합니다.
15
+
16
+ 1. 각 섹션의 필드를 순서대로 질문하세요
17
+ 2. 사용자 답변을 정제하여 전문적인 문서 형식으로 변환하세요
18
+ 3. 필수(required) 필드는 반드시 채워야 합니다
19
+ 4. repeatable 섹션은 사용자가 "끝" 또는 빈 입력할 때까지 반복
20
+ 5. 모든 입력이 완료되면 output-template을 사용해 문서 생성
21
+
22
+ 정제 원칙:
23
+ - 구어체 → 문어체로 변환
24
+ - 모호한 표현 → 구체적 표현으로
25
+ - 20자 이내로 간결하게
26
+ - 전문 용어 적절히 사용
27
+ ]]>
28
+ </instructions>
29
+
30
+ <!-- ============================================================
31
+ 섹션 1: 기본 정보
32
+ ============================================================ -->
33
+ <section id="basic" title="기본 정보">
34
+ <field name="project_name" type="text" required="true">
35
+ <prompt>프로젝트 이름이 뭔가요?</prompt>
36
+ <refinement>영문 소문자, 하이픈 허용 (예: smash-sg)</refinement>
37
+ </field>
38
+
39
+ <field name="one_liner" type="text" required="true">
40
+ <prompt>한 줄로 설명하면?</prompt>
41
+ <example>싱가폴/아세안 테니스 매칭 앱</example>
42
+ <refinement>
43
+ - 20자 이내
44
+ - "~앱", "~서비스", "~플랫폼" 형식
45
+ - 지역 + 도메인 + 핵심 가치 포함
46
+ </refinement>
47
+ </field>
48
+
49
+ <field name="target_user" type="text" required="true">
50
+ <prompt>주요 타겟 사용자는 누구인가요?</prompt>
51
+ <example>싱가폴 거주 테니스 동호인 (20-40대)</example>
52
+ <refinement>
53
+ - 지역 + 연령대 + 특성 포함
54
+ - 구체적인 페르소나로 정제
55
+ </refinement>
56
+ </field>
57
+
58
+ <field name="problem" type="text" required="true">
59
+ <prompt>해결하려는 핵심 문제는?</prompt>
60
+ <example>실력 맞는 테니스 파트너 찾기 어려움</example>
61
+ <refinement>
62
+ - 문제 중심으로 서술
63
+ - "~어려움", "~불편함", "~한계" 형식
64
+ </refinement>
65
+ </field>
66
+
67
+ <field name="solution" type="text" required="true">
68
+ <prompt>어떻게 해결하려고 하나요?</prompt>
69
+ <example>실력/위치/시간 기반 자동 매칭 시스템</example>
70
+ <refinement>
71
+ - 솔루션 중심으로 서술
72
+ - 핵심 메커니즘 포함
73
+ </refinement>
74
+ </field>
75
+ </section>
76
+
77
+ <!-- ============================================================
78
+ 섹션 2: 핵심 기능
79
+ ============================================================ -->
80
+ <section id="features" title="핵심 기능" repeatable="true">
81
+ <instructions>
82
+ 기능을 하나씩 입력받습니다.
83
+ 빈 입력 또는 "끝"이 입력되면 종료합니다.
84
+ 최소 3개 이상의 기능을 권장합니다.
85
+ </instructions>
86
+
87
+ <field name="name" type="text" required="true">
88
+ <prompt>기능 이름?</prompt>
89
+ <example>매칭, 채팅, 프로필</example>
90
+ <refinement>2-4글자 명사형</refinement>
91
+ </field>
92
+
93
+ <field name="description" type="text" required="false">
94
+ <prompt>간단한 설명? (생략 가능)</prompt>
95
+ <example>실력/위치/시간 기반 자동 매칭</example>
96
+ <refinement>한 줄로 핵심 동작 설명</refinement>
97
+ </field>
98
+
99
+ <field name="priority" type="select" required="true">
100
+ <prompt>우선순위? (m:must / s:should / c:could)</prompt>
101
+ <options>
102
+ <option value="must" shortcut="m">MVP 필수</option>
103
+ <option value="should" shortcut="s">있으면 좋음</option>
104
+ <option value="could" shortcut="c">나중에</option>
105
+ </options>
106
+ <default>must</default>
107
+ </field>
108
+ </section>
109
+
110
+ <!-- ============================================================
111
+ 섹션 3: 기술 스택
112
+ ============================================================ -->
113
+ <section id="tech" title="기술 스택">
114
+ <field name="frontend" type="select" required="true">
115
+ <prompt>프론트엔드 프레임워크?</prompt>
116
+ <options>
117
+ <option value="nextjs" shortcut="1">Next.js (권장)</option>
118
+ <option value="react" shortcut="2">React</option>
119
+ <option value="vue" shortcut="3">Vue.js</option>
120
+ <option value="other" shortcut="4">기타</option>
121
+ </options>
122
+ <default>nextjs</default>
123
+ </field>
124
+
125
+ <field name="backend" type="select" required="true">
126
+ <prompt>백엔드/BaaS?</prompt>
127
+ <options>
128
+ <option value="supabase" shortcut="1">Supabase (권장)</option>
129
+ <option value="firebase" shortcut="2">Firebase</option>
130
+ <option value="custom" shortcut="3">커스텀 서버</option>
131
+ </options>
132
+ <default>supabase</default>
133
+ </field>
134
+
135
+ <field name="deploy" type="select" required="true">
136
+ <prompt>배포 플랫폼?</prompt>
137
+ <options>
138
+ <option value="vercel" shortcut="1">Vercel (권장)</option>
139
+ <option value="aws" shortcut="2">AWS</option>
140
+ <option value="cloudflare" shortcut="3">Cloudflare</option>
141
+ <option value="other" shortcut="4">기타</option>
142
+ </options>
143
+ <default>vercel</default>
144
+ </field>
145
+
146
+ <field name="database" type="select" required="false">
147
+ <prompt>데이터베이스? (백엔드 선택에 따라 자동 설정됨)</prompt>
148
+ <options>
149
+ <option value="postgresql">PostgreSQL</option>
150
+ <option value="mysql">MySQL</option>
151
+ <option value="mongodb">MongoDB</option>
152
+ </options>
153
+ <auto-fill>
154
+ <rule if="backend=supabase">postgresql</rule>
155
+ <rule if="backend=firebase">firestore</rule>
156
+ </auto-fill>
157
+ </field>
158
+ </section>
159
+
160
+ <!-- ============================================================
161
+ 섹션 4: 성공 지표 (선택)
162
+ ============================================================ -->
163
+ <section id="metrics" title="성공 지표" optional="true">
164
+ <field name="primary_metric" type="text" required="false">
165
+ <prompt>핵심 성공 지표? (예: DAU, 매칭 성사율)</prompt>
166
+ <example>주간 매칭 성사율 70% 이상</example>
167
+ </field>
168
+
169
+ <field name="target_users" type="text" required="false">
170
+ <prompt>목표 사용자 수? (MVP 기준)</prompt>
171
+ <example>런칭 3개월 내 MAU 1,000명</example>
172
+ </field>
173
+ </section>
174
+
175
+ <!-- ============================================================
176
+ 출력 템플릿
177
+ ============================================================ -->
178
+ <output-template>
179
+ <![CDATA[
180
+ # {{basic.project_name}} PRD
181
+
182
+ > {{basic.one_liner}}
183
+
184
+ **생성일**: {{DATE}}
185
+ **버전**: 1.0
186
+ **상태**: Draft
187
+
188
+ ---
189
+
190
+ ## 1. 개요
191
+
192
+ ### 1.1 프로젝트 정보
193
+
194
+ | 항목 | 내용 |
195
+ |-----|------|
196
+ | 프로젝트명 | {{basic.project_name}} |
197
+ | 한 줄 설명 | {{basic.one_liner}} |
198
+ | 타겟 사용자 | {{basic.target_user}} |
199
+
200
+ ### 1.2 문제 정의
201
+
202
+ **해결하려는 문제:**
203
+ {{basic.problem}}
204
+
205
+ **제안하는 솔루션:**
206
+ {{basic.solution}}
207
+
208
+ ---
209
+
210
+ ## 2. 핵심 기능
211
+
212
+ | 우선순위 | 기능 | 설명 |
213
+ |:-------:|------|------|
214
+ {{#each features}}
215
+ | {{priority | upper}} | {{name}} | {{description | default: "-"}} |
216
+ {{/each}}
217
+
218
+ ### 2.1 MVP 범위 (MUST)
219
+
220
+ {{#each features where priority="must"}}
221
+ - **{{name}}**: {{description | default: "상세 정의 필요"}}
222
+ {{/each}}
223
+
224
+ ### 2.2 확장 기능 (SHOULD/COULD)
225
+
226
+ {{#each features where priority!="must"}}
227
+ - **{{name}}** ({{priority | upper}}): {{description | default: "상세 정의 필요"}}
228
+ {{/each}}
229
+
230
+ ---
231
+
232
+ ## 3. 기술 스택
233
+
234
+ | 구분 | 선택 | 비고 |
235
+ |-----|------|-----|
236
+ | Frontend | {{tech.frontend | capitalize}} | |
237
+ | Backend | {{tech.backend | capitalize}} | |
238
+ | Database | {{tech.database | capitalize}} | {{tech.backend}} 기본 |
239
+ | Deploy | {{tech.deploy | capitalize}} | |
240
+
241
+ ---
242
+
243
+ ## 4. 성공 지표
244
+
245
+ {{#if metrics.primary_metric}}
246
+ - **핵심 지표**: {{metrics.primary_metric}}
247
+ {{/if}}
248
+ {{#if metrics.target_users}}
249
+ - **목표 사용자**: {{metrics.target_users}}
250
+ {{/if}}
251
+ {{#unless metrics.primary_metric}}
252
+ - (추후 정의)
253
+ {{/unless}}
254
+
255
+ ---
256
+
257
+ ## 5. 일정 (TBD)
258
+
259
+ | 마일스톤 | 목표 | 상태 |
260
+ |---------|-----|:----:|
261
+ | PRD 완료 | - | ✅ |
262
+ | 설계 완료 | - | ⬜ |
263
+ | MVP 개발 | - | ⬜ |
264
+ | 베타 런칭 | - | ⬜ |
265
+
266
+ ---
267
+
268
+ ## 6. 다음 단계
269
+
270
+ 1. [ ] requirements.md 작성
271
+ 2. [ ] service-spec.md 작성
272
+ 3. [ ] data-design.md 작성
273
+ 4. [ ] UI/UX 설계
274
+
275
+ ---
276
+
277
+ *Generated by TimSquad v2.0*
278
+ ]]>
279
+ </output-template>
280
+ </generator>