@atlashub/smartstack-cli 1.13.2 → 1.14.1

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 (214) hide show
  1. package/.documentation/agents.html +1 -1
  2. package/.documentation/apex.html +1 -1
  3. package/.documentation/business-analyse.html +1 -1
  4. package/.documentation/cli-commands.html +3 -3
  5. package/.documentation/commands.html +1 -1
  6. package/.documentation/efcore.html +1 -1
  7. package/.documentation/gitflow.html +231 -236
  8. package/.documentation/hooks.html +1 -1
  9. package/.documentation/index.html +1 -1
  10. package/.documentation/init.html +3 -3
  11. package/.documentation/installation.html +1075 -351
  12. package/.documentation/ralph-loop.html +1 -1
  13. package/.documentation/test-web.html +1 -1
  14. package/README.md +88 -20
  15. package/config/default-config.json +10 -1
  16. package/dist/index.js +276 -85
  17. package/dist/index.js.map +1 -1
  18. package/package.json +1 -1
  19. package/templates/agents/code-reviewer.md +163 -0
  20. package/templates/agents/efcore/db-deploy.md +25 -7
  21. package/templates/agents/efcore/db-reset.md +31 -10
  22. package/templates/agents/efcore/db-status.md +22 -5
  23. package/templates/agents/efcore/migration.md +70 -20
  24. package/templates/agents/gitflow/cleanup.md +8 -1
  25. package/templates/agents/gitflow/commit.md +7 -5
  26. package/templates/agents/gitflow/finish.md +6 -4
  27. package/templates/agents/gitflow/pr.md +8 -1
  28. package/templates/agents/gitflow/start.md +1 -1
  29. package/templates/commands/check-version.md +267 -0
  30. package/templates/commands/efcore/_shared.md +31 -2
  31. package/templates/commands/efcore/db-reset.md +18 -6
  32. package/templates/commands/efcore/migration.md +1 -1
  33. package/templates/commands/efcore/rebase-snapshot.md +1 -1
  34. package/templates/commands/efcore/squash.md +1 -0
  35. package/templates/commands/refactor.md +164 -0
  36. package/templates/project/DependencyInjection.Application.cs.template +25 -0
  37. package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -0
  38. package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -0
  39. package/templates/project/ExampleEntity.cs.template +116 -0
  40. package/templates/project/ExampleEntityConfiguration.cs.template +64 -0
  41. package/templates/project/ExampleService.cs.template +146 -0
  42. package/templates/project/ExtensionsDbContext.cs.template +41 -0
  43. package/templates/project/IExtensionsDbContext.cs.template +22 -0
  44. package/templates/project/Program.cs.template +47 -0
  45. package/templates/project/README.md +79 -0
  46. package/templates/ralph/README.md +10 -8
  47. package/templates/ralph/ralph.config.yaml +2 -2
  48. package/templates/skills/_shared.md +44 -44
  49. package/templates/skills/ai-prompt/SKILL.md +55 -55
  50. package/templates/skills/apex/SKILL.md +235 -0
  51. package/templates/skills/apex/steps/step-00-init.md +203 -0
  52. package/templates/skills/apex/steps/step-01-analyze.md +210 -0
  53. package/templates/skills/apex/steps/step-02-plan.md +217 -0
  54. package/templates/skills/apex/steps/step-03-execute.md +178 -0
  55. package/templates/skills/apex/steps/step-04-validate.md +217 -0
  56. package/templates/skills/apex/steps/step-05-examine.md +207 -0
  57. package/templates/skills/apex/steps/step-06-resolve.md +181 -0
  58. package/templates/skills/apex/steps/step-07-tests.md +206 -0
  59. package/templates/skills/apex/steps/step-08-run-tests.md +207 -0
  60. package/templates/skills/apex/templates/00-context.md +46 -0
  61. package/templates/skills/apex/templates/01-analyze.md +63 -0
  62. package/templates/skills/apex/templates/02-plan.md +63 -0
  63. package/templates/skills/apex/templates/03-execute.md +34 -0
  64. package/templates/skills/apex/templates/04-validate.md +61 -0
  65. package/templates/skills/apex/templates/05-examine.md +58 -0
  66. package/templates/skills/apex/templates/06-resolve.md +39 -0
  67. package/templates/skills/apex/templates/07-tests.md +56 -0
  68. package/templates/skills/apex/templates/08-run-tests.md +41 -0
  69. package/templates/skills/apex/templates/README.md +69 -0
  70. package/templates/skills/application/SKILL.md +50 -50
  71. package/templates/skills/application/templates-backend.md +25 -25
  72. package/templates/skills/application/templates-frontend.md +43 -43
  73. package/templates/skills/application/templates-i18n.md +29 -29
  74. package/templates/skills/application/templates-seed.md +77 -77
  75. package/templates/skills/business-analyse/SKILL.md +223 -0
  76. package/templates/skills/business-analyse/_shared.md +258 -0
  77. package/templates/skills/business-analyse/questionnaire/01-context.md +33 -0
  78. package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +35 -0
  79. package/templates/skills/business-analyse/questionnaire/03-scope.md +35 -0
  80. package/templates/skills/business-analyse/questionnaire/04-data.md +36 -0
  81. package/templates/skills/business-analyse/questionnaire/05-integrations.md +36 -0
  82. package/templates/skills/business-analyse/questionnaire/06-security.md +40 -0
  83. package/templates/skills/business-analyse/questionnaire/07-ui.md +36 -0
  84. package/templates/skills/business-analyse/questionnaire/08-performance.md +35 -0
  85. package/templates/skills/business-analyse/questionnaire/09-constraints.md +35 -0
  86. package/templates/skills/business-analyse/questionnaire/10-documentation.md +35 -0
  87. package/templates/skills/business-analyse/questionnaire.md +177 -177
  88. package/templates/skills/business-analyse/react/components.md +340 -0
  89. package/templates/skills/business-analyse/react/i18n-template.md +245 -0
  90. package/templates/skills/business-analyse/react/schema.md +151 -0
  91. package/templates/skills/business-analyse/steps/step-00-init.md +293 -0
  92. package/templates/skills/business-analyse/steps/step-01-discover.md +267 -0
  93. package/templates/skills/business-analyse/steps/step-02-analyse.md +243 -0
  94. package/templates/skills/business-analyse/steps/step-03-specify.md +317 -0
  95. package/templates/skills/business-analyse/steps/step-04-validate.md +239 -0
  96. package/templates/skills/business-analyse/steps/step-05-handoff.md +336 -0
  97. package/templates/skills/business-analyse/steps/step-06-doc-html.md +261 -0
  98. package/templates/skills/business-analyse/templates/00-context.md +105 -0
  99. package/templates/skills/business-analyse/templates/frd-brd.md +97 -0
  100. package/templates/skills/business-analyse/templates/frd-discovery.md +78 -0
  101. package/templates/skills/business-analyse/templates/frd-handoff.md +118 -0
  102. package/templates/skills/business-analyse/templates/frd-spec.md +168 -0
  103. package/templates/skills/business-analyse/templates-frd.md +217 -217
  104. package/templates/skills/business-analyse/templates-react.md +26 -26
  105. package/templates/skills/controller/SKILL.md +141 -92
  106. package/templates/skills/controller/postman-templates.md +15 -15
  107. package/templates/skills/controller/steps/step-00-init.md +191 -0
  108. package/templates/skills/controller/steps/step-01-analyze.md +146 -0
  109. package/templates/skills/controller/steps/step-02-plan.md +176 -0
  110. package/templates/skills/controller/steps/step-03-generate.md +219 -0
  111. package/templates/skills/controller/steps/step-04-perms.md +219 -0
  112. package/templates/skills/controller/steps/step-05-validate.md +107 -0
  113. package/templates/skills/controller/templates.md +77 -77
  114. package/templates/skills/documentation/SKILL.md +79 -79
  115. package/templates/skills/feature-full/SKILL.md +38 -38
  116. package/templates/skills/gitflow/SKILL.md +277 -0
  117. package/templates/{commands → skills}/gitflow/_shared.md +20 -20
  118. package/templates/skills/gitflow/phases/abort.md +173 -0
  119. package/templates/skills/gitflow/phases/cleanup.md +226 -0
  120. package/templates/skills/gitflow/phases/status.md +178 -0
  121. package/templates/skills/gitflow/steps/step-commit.md +255 -0
  122. package/templates/skills/gitflow/steps/step-finish.md +255 -0
  123. package/templates/skills/gitflow/steps/step-init.md +209 -0
  124. package/templates/skills/gitflow/steps/step-merge.md +225 -0
  125. package/templates/skills/gitflow/steps/step-plan.md +208 -0
  126. package/templates/skills/gitflow/steps/step-pr.md +235 -0
  127. package/templates/skills/gitflow/steps/step-start.md +334 -0
  128. package/templates/skills/gitflow/steps/step-sync.md +200 -0
  129. package/templates/skills/gitflow/templates/config.json +53 -0
  130. package/templates/skills/notification/SKILL.md +51 -51
  131. package/templates/skills/ralph-loop/SKILL.md +228 -0
  132. package/templates/skills/ralph-loop/steps/step-00-init.md +201 -0
  133. package/templates/skills/ralph-loop/steps/step-01-task.md +169 -0
  134. package/templates/skills/ralph-loop/steps/step-02-execute.md +173 -0
  135. package/templates/skills/ralph-loop/steps/step-03-commit.md +170 -0
  136. package/templates/skills/ralph-loop/steps/step-04-check.md +162 -0
  137. package/templates/skills/ralph-loop/steps/step-05-report.md +181 -0
  138. package/templates/skills/review-code/SKILL.md +219 -0
  139. package/templates/skills/review-code/references/clean-code-principles.md +140 -0
  140. package/templates/skills/review-code/references/code-quality-metrics.md +174 -0
  141. package/templates/skills/review-code/references/feedback-patterns.md +149 -0
  142. package/templates/skills/review-code/references/security-checklist.md +127 -0
  143. package/templates/skills/ui-components/SKILL.md +54 -54
  144. package/templates/skills/workflow/SKILL.md +46 -46
  145. package/templates/commands/ai-prompt.md +0 -315
  146. package/templates/commands/apex/1-analyze.md +0 -100
  147. package/templates/commands/apex/2-plan.md +0 -145
  148. package/templates/commands/apex/3-execute.md +0 -171
  149. package/templates/commands/apex/4-examine.md +0 -116
  150. package/templates/commands/apex/5-tasks.md +0 -209
  151. package/templates/commands/apex.md +0 -76
  152. package/templates/commands/application/create.md +0 -362
  153. package/templates/commands/application/templates-backend.md +0 -463
  154. package/templates/commands/application/templates-frontend.md +0 -517
  155. package/templates/commands/application/templates-i18n.md +0 -478
  156. package/templates/commands/application/templates-seed.md +0 -362
  157. package/templates/commands/application.md +0 -303
  158. package/templates/commands/business-analyse/0-orchestrate.md +0 -156
  159. package/templates/commands/business-analyse/1-init.md +0 -99
  160. package/templates/commands/business-analyse/2-discover.md +0 -143
  161. package/templates/commands/business-analyse/3-analyse.md +0 -106
  162. package/templates/commands/business-analyse/4-specify.md +0 -133
  163. package/templates/commands/business-analyse/5-validate.md +0 -132
  164. package/templates/commands/business-analyse/6-handoff.md +0 -157
  165. package/templates/commands/business-analyse/7-doc-html.md +0 -103
  166. package/templates/commands/business-analyse/_shared.md +0 -176
  167. package/templates/commands/business-analyse/bug.md +0 -118
  168. package/templates/commands/business-analyse/change-request.md +0 -144
  169. package/templates/commands/business-analyse/hotfix.md +0 -116
  170. package/templates/commands/business-analyse.md +0 -121
  171. package/templates/commands/controller/create.md +0 -216
  172. package/templates/commands/controller/postman-templates.md +0 -528
  173. package/templates/commands/controller/templates.md +0 -600
  174. package/templates/commands/controller.md +0 -337
  175. package/templates/commands/create/agent.md +0 -138
  176. package/templates/commands/create/command.md +0 -166
  177. package/templates/commands/create/hook.md +0 -234
  178. package/templates/commands/create/plugin.md +0 -329
  179. package/templates/commands/create/project.md +0 -508
  180. package/templates/commands/create/skill.md +0 -199
  181. package/templates/commands/create.md +0 -220
  182. package/templates/commands/documentation/module.md +0 -202
  183. package/templates/commands/documentation/templates.md +0 -432
  184. package/templates/commands/documentation.md +0 -190
  185. package/templates/commands/epct.md +0 -69
  186. package/templates/commands/explain.md +0 -186
  187. package/templates/commands/feature-full.md +0 -267
  188. package/templates/commands/gitflow/1-init.md +0 -188
  189. package/templates/commands/gitflow/10-start.md +0 -190
  190. package/templates/commands/gitflow/11-finish.md +0 -382
  191. package/templates/commands/gitflow/12-cleanup.md +0 -103
  192. package/templates/commands/gitflow/13-sync.md +0 -216
  193. package/templates/commands/gitflow/14-rebase.md +0 -251
  194. package/templates/commands/gitflow/2-status.md +0 -122
  195. package/templates/commands/gitflow/3-commit.md +0 -209
  196. package/templates/commands/gitflow/4-plan.md +0 -174
  197. package/templates/commands/gitflow/5-exec.md +0 -202
  198. package/templates/commands/gitflow/6-abort.md +0 -121
  199. package/templates/commands/gitflow/7-pull-request.md +0 -176
  200. package/templates/commands/gitflow/8-review.md +0 -113
  201. package/templates/commands/gitflow/9-merge.md +0 -157
  202. package/templates/commands/gitflow.md +0 -128
  203. package/templates/commands/implement.md +0 -663
  204. package/templates/commands/init.md +0 -567
  205. package/templates/commands/mcp-integration.md +0 -330
  206. package/templates/commands/notification.md +0 -129
  207. package/templates/commands/oneshot.md +0 -57
  208. package/templates/commands/quickstart.md +0 -154
  209. package/templates/commands/ralph-loop/cancel-ralph.md +0 -18
  210. package/templates/commands/ralph-loop/help.md +0 -126
  211. package/templates/commands/ralph-loop/ralph-loop.md +0 -120
  212. package/templates/commands/review.md +0 -106
  213. package/templates/commands/workflow.md +0 -193
  214. package/templates/gitflow/config.json +0 -138
@@ -5,14 +5,343 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Installation - SmartStack CLI</title>
7
7
  <link rel="stylesheet" href="css/styles.css">
8
+ <style>
9
+ /* Installation-specific styles */
10
+ .platform-selector {
11
+ display: flex;
12
+ gap: 1rem;
13
+ margin-bottom: 2rem;
14
+ }
15
+ .platform-btn {
16
+ flex: 1;
17
+ padding: 0.875rem 1rem;
18
+ border: 2px solid var(--border);
19
+ border-radius: 8px;
20
+ background: var(--bg-card);
21
+ color: var(--text);
22
+ cursor: pointer;
23
+ transition: all 0.2s ease;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ gap: 0.5rem;
28
+ font-size: 0.95rem;
29
+ font-weight: 500;
30
+ min-height: 52px;
31
+ }
32
+ .platform-btn:hover {
33
+ border-color: var(--primary);
34
+ background: var(--bg-hover);
35
+ }
36
+ .platform-btn.active {
37
+ border-color: var(--primary);
38
+ background: rgba(59, 130, 246, 0.1);
39
+ }
40
+ .platform-btn .platform-icon {
41
+ font-size: 1.25rem;
42
+ }
43
+ .platform-content {
44
+ display: none;
45
+ }
46
+ .platform-content.active {
47
+ display: block;
48
+ }
49
+
50
+ /* OS Selector */
51
+ .os-selector {
52
+ display: flex;
53
+ gap: 0.75rem;
54
+ }
55
+ .os-btn {
56
+ flex: 1;
57
+ padding: 0.875rem 1rem;
58
+ border: 2px solid var(--border);
59
+ border-radius: 8px;
60
+ background: var(--bg-card);
61
+ color: var(--text);
62
+ cursor: pointer;
63
+ transition: all 0.2s ease;
64
+ font-size: 0.95rem;
65
+ font-weight: 500;
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ gap: 0.5rem;
70
+ min-height: 52px;
71
+ }
72
+ .os-btn:hover {
73
+ border-color: var(--primary);
74
+ background: var(--bg-hover);
75
+ }
76
+ .os-btn.active {
77
+ border-color: var(--primary);
78
+ background: rgba(59, 130, 246, 0.1);
79
+ }
80
+ .os-btn .os-icon {
81
+ font-size: 1.25rem;
82
+ }
83
+ .os-content {
84
+ display: none;
85
+ }
86
+ .os-content.active {
87
+ display: block;
88
+ }
89
+
90
+ /* Settings panel */
91
+ .settings-panel {
92
+ background: var(--bg-card);
93
+ border: 1px solid var(--border);
94
+ border-radius: 12px;
95
+ padding: 1.5rem;
96
+ margin-bottom: 2rem;
97
+ }
98
+ .settings-row {
99
+ display: flex;
100
+ gap: 2rem;
101
+ flex-wrap: wrap;
102
+ }
103
+ .settings-group {
104
+ flex: 1;
105
+ min-width: 280px;
106
+ }
107
+ .settings-label {
108
+ font-weight: 600;
109
+ color: var(--text);
110
+ margin-bottom: 0.75rem;
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 0.5rem;
114
+ }
115
+ .settings-label .label-icon {
116
+ font-size: 1.1rem;
117
+ }
118
+
119
+ /* Tutorial section */
120
+ .tutorial-section {
121
+ background: var(--bg-card);
122
+ border: 1px solid var(--border);
123
+ border-radius: 8px;
124
+ padding: 1.5rem;
125
+ margin-bottom: 1.5rem;
126
+ }
127
+ .tutorial-section h4 {
128
+ color: var(--text);
129
+ margin: 0 0 1rem 0;
130
+ display: flex;
131
+ align-items: center;
132
+ gap: 0.5rem;
133
+ }
134
+ .tutorial-section h4 .step-badge {
135
+ background: var(--primary);
136
+ color: white;
137
+ padding: 0.25rem 0.75rem;
138
+ border-radius: 4px;
139
+ font-size: 0.8rem;
140
+ }
141
+ .tutorial-note {
142
+ background: rgba(59, 130, 246, 0.1);
143
+ border-left: 3px solid var(--primary);
144
+ padding: 1rem;
145
+ margin: 1rem 0;
146
+ border-radius: 0 4px 4px 0;
147
+ }
148
+ .tutorial-note p {
149
+ margin: 0;
150
+ color: var(--text);
151
+ }
152
+
153
+ /* API Key Input */
154
+ .api-key-section {
155
+ margin: 1.5rem 0;
156
+ padding: 1rem;
157
+ background: var(--bg-card);
158
+ border-radius: 8px;
159
+ border: 1px solid var(--border);
160
+ }
161
+ .api-key-input-wrapper {
162
+ display: flex;
163
+ gap: 0.5rem;
164
+ margin-top: 0.5rem;
165
+ }
166
+ .api-key-input {
167
+ flex: 1;
168
+ padding: 0.5rem 0.75rem;
169
+ border: 1px solid var(--border);
170
+ border-radius: 4px;
171
+ background: var(--bg-input);
172
+ color: var(--text);
173
+ font-family: monospace;
174
+ }
175
+ .api-key-input:focus {
176
+ outline: none;
177
+ border-color: var(--primary);
178
+ }
179
+ .api-key-save-btn {
180
+ padding: 0.5rem 1rem;
181
+ background: var(--primary);
182
+ color: white;
183
+ border: none;
184
+ border-radius: 4px;
185
+ cursor: pointer;
186
+ font-weight: 500;
187
+ }
188
+ .api-key-save-btn:hover {
189
+ background: var(--primary-hover);
190
+ }
191
+
192
+ /* Progress bar */
193
+ .progress-container {
194
+ margin: 2rem 0;
195
+ padding: 1.5rem;
196
+ background: var(--bg-card);
197
+ border-radius: 8px;
198
+ border: 1px solid var(--border);
199
+ }
200
+ .progress-header {
201
+ display: flex;
202
+ justify-content: space-between;
203
+ align-items: center;
204
+ margin-bottom: 1rem;
205
+ }
206
+ .progress-title {
207
+ font-weight: 600;
208
+ color: var(--text);
209
+ }
210
+ .progress-count {
211
+ color: var(--text-muted);
212
+ font-size: 0.9rem;
213
+ }
214
+ .progress-bar {
215
+ height: 8px;
216
+ background: var(--bg-hover);
217
+ border-radius: 4px;
218
+ overflow: hidden;
219
+ }
220
+ .progress-fill {
221
+ height: 100%;
222
+ background: linear-gradient(90deg, var(--primary), var(--success));
223
+ border-radius: 4px;
224
+ transition: width 0.3s ease;
225
+ }
226
+
227
+ /* Checklist */
228
+ .checklist {
229
+ list-style: none;
230
+ padding: 0;
231
+ margin: 0;
232
+ }
233
+ .checklist-item {
234
+ display: flex;
235
+ align-items: flex-start;
236
+ gap: 1rem;
237
+ padding: 1.5rem;
238
+ margin-bottom: 1rem;
239
+ background: var(--bg-card);
240
+ border: 1px solid var(--border);
241
+ border-radius: 8px;
242
+ transition: all 0.2s ease;
243
+ }
244
+ .checklist-item:hover {
245
+ border-color: var(--primary);
246
+ }
247
+ .checklist-item.completed {
248
+ border-color: var(--success);
249
+ background: rgba(34, 197, 94, 0.05);
250
+ }
251
+ .checklist-checkbox {
252
+ width: 24px;
253
+ height: 24px;
254
+ min-width: 24px;
255
+ border: 2px solid var(--border);
256
+ border-radius: 50%;
257
+ cursor: pointer;
258
+ display: flex;
259
+ align-items: center;
260
+ justify-content: center;
261
+ transition: all 0.2s ease;
262
+ margin-top: 0.2rem;
263
+ }
264
+ .checklist-checkbox:hover {
265
+ border-color: var(--primary);
266
+ }
267
+ .checklist-item.completed .checklist-checkbox {
268
+ background: var(--success);
269
+ border-color: var(--success);
270
+ }
271
+ .checklist-checkbox::after {
272
+ content: '';
273
+ display: none;
274
+ }
275
+ .checklist-item.completed .checklist-checkbox::after {
276
+ content: '\2713';
277
+ display: block;
278
+ color: white;
279
+ font-weight: bold;
280
+ }
281
+ .checklist-content {
282
+ flex: 1;
283
+ }
284
+ .checklist-title {
285
+ font-weight: 600;
286
+ margin-bottom: 0.5rem;
287
+ color: var(--text);
288
+ }
289
+ .checklist-description {
290
+ color: var(--text-muted);
291
+ font-size: 0.9rem;
292
+ line-height: 1.5;
293
+ }
294
+ .checklist-number {
295
+ width: 28px;
296
+ height: 28px;
297
+ min-width: 28px;
298
+ background: var(--primary);
299
+ color: white;
300
+ border-radius: 50%;
301
+ display: flex;
302
+ align-items: center;
303
+ justify-content: center;
304
+ font-weight: 600;
305
+ font-size: 0.85rem;
306
+ }
307
+ .checklist-item.completed .checklist-number {
308
+ background: var(--success);
309
+ }
310
+
311
+ /* Dynamic command display */
312
+ .dynamic-command {
313
+ transition: all 0.2s ease;
314
+ }
315
+ .command-highlight {
316
+ background: rgba(59, 130, 246, 0.2);
317
+ padding: 0 2px;
318
+ border-radius: 2px;
319
+ }
320
+
321
+ /* Reset button */
322
+ .reset-progress-btn {
323
+ margin-top: 1rem;
324
+ padding: 0.5rem 1rem;
325
+ background: transparent;
326
+ color: var(--text-muted);
327
+ border: 1px solid var(--border);
328
+ border-radius: 4px;
329
+ cursor: pointer;
330
+ font-size: 0.85rem;
331
+ }
332
+ .reset-progress-btn:hover {
333
+ background: var(--bg-hover);
334
+ color: var(--text);
335
+ }
336
+ </style>
8
337
  </head>
9
338
  <body>
10
339
  <div class="app-container">
11
- <!-- Global Header (single unified element) -->
340
+ <!-- Global Header -->
12
341
  <header class="global-header">
13
342
  <div class="logo">SS</div>
14
343
  <span class="site-title">SmartStack CLI</span>
15
- <span class="version-badge">v1.5.0</span>
344
+ <span class="version-badge">v1.14.0</span>
16
345
  <div class="header-divider"></div>
17
346
  <span class="page-title">Installation</span>
18
347
  <nav class="breadcrumb">
@@ -25,8 +354,8 @@
25
354
  </nav>
26
355
  <!-- Language Select -->
27
356
  <select class="lang-select" id="lang-select" onchange="setLanguage(this.value); localStorage.setItem('doc-language', this.value);">
28
- <option value="fr">🇫🇷 FR</option>
29
- <option value="en">🇬🇧 EN</option>
357
+ <option value="fr">&#127467;&#127479; FR</option>
358
+ <option value="en">&#127468;&#127463; EN</option>
30
359
  </select>
31
360
  <!-- Search -->
32
361
  <div class="header-search">
@@ -128,417 +457,624 @@
128
457
  <!-- Main Content -->
129
458
  <main class="main-content">
130
459
  <div class="content content-wide">
131
- <!-- Prerequisites -->
132
- <section id="prerequisites">
460
+
461
+ <!-- Introduction -->
462
+ <section id="introduction">
133
463
  <h2>
134
- <span data-lang="fr">Prerequis</span>
135
- <span data-lang="en">Prerequisites</span>
464
+ <span data-lang="fr">Installation de SmartStack CLI</span>
465
+ <span data-lang="en">SmartStack CLI Installation</span>
136
466
  </h2>
467
+ <p data-lang="fr">
468
+ Suivez cette checklist interactive pour installer SmartStack CLI et configurer votre environnement de developpement.
469
+ Votre progression est automatiquement sauvegardee.
470
+ </p>
471
+ <p data-lang="en">
472
+ Follow this interactive checklist to install SmartStack CLI and configure your development environment.
473
+ Your progress is automatically saved.
474
+ </p>
475
+ </section>
137
476
 
138
- <div class="feature-grid">
139
- <div class="feature-item">
140
- <span class="feature-icon">&#128215;</span>
141
- <span class="feature-text"><strong>Node.js</strong> &gt;= 18.0.0</span>
142
- </div>
143
- <div class="feature-item">
144
- <span class="feature-icon">&#128230;</span>
145
- <span class="feature-text"><strong>npm</strong> &gt;= 8.0.0</span>
146
- </div>
147
- <div class="feature-item">
148
- <span class="feature-icon">&#129302;</span>
149
- <span class="feature-text"><strong>Claude Code</strong> (CLI d'Anthropic)</span>
150
- </div>
477
+ <!-- Progress Bar -->
478
+ <div class="progress-container">
479
+ <div class="progress-header">
480
+ <span class="progress-title">
481
+ <span data-lang="fr">Progression</span>
482
+ <span data-lang="en">Progress</span>
483
+ </span>
484
+ <span class="progress-count" id="progress-count">0/7</span>
151
485
  </div>
486
+ <div class="progress-bar">
487
+ <div class="progress-fill" id="progress-fill" style="width: 0%"></div>
488
+ </div>
489
+ <button class="reset-progress-btn" onclick="resetProgress()">
490
+ <span data-lang="fr">Reinitialiser la progression</span>
491
+ <span data-lang="en">Reset progress</span>
492
+ </button>
493
+ </div>
152
494
 
153
- <div class="code-block">
154
- <button class="copy-btn">Copy</button>
155
- <pre><code># Verifier les versions
156
- node --version # v18.x.x ou superieur
157
- npm --version # v8.x.x ou superieur</code></pre>
495
+ <!-- Configuration Panel -->
496
+ <section id="config-panel">
497
+ <h3>
498
+ <span data-lang="fr">Configuration</span>
499
+ <span data-lang="en">Configuration</span>
500
+ </h3>
501
+ <p data-lang="fr">Selectionnez votre environnement pour afficher les commandes adaptees :</p>
502
+ <p data-lang="en">Select your environment to display adapted commands:</p>
503
+
504
+ <div class="settings-panel">
505
+ <div class="settings-row">
506
+ <div class="settings-group">
507
+ <span class="settings-label">
508
+ <span class="label-icon">&#128187;</span>
509
+ <span data-lang="fr">Systeme d'exploitation</span>
510
+ <span data-lang="en">Operating System</span>
511
+ </span>
512
+ <div class="os-selector">
513
+ <button class="os-btn active" data-os="windows" onclick="setOS('windows')">
514
+ <span class="os-icon">&#129695;</span>
515
+ <span>Windows</span>
516
+ </button>
517
+ <button class="os-btn" data-os="macos" onclick="setOS('macos')">
518
+ <span class="os-icon">&#127822;</span>
519
+ <span>macOS</span>
520
+ </button>
521
+ <button class="os-btn" data-os="linux" onclick="setOS('linux')">
522
+ <span class="os-icon">&#128039;</span>
523
+ <span>Linux</span>
524
+ </button>
525
+ </div>
526
+ </div>
527
+ <div class="settings-group">
528
+ <span class="settings-label">
529
+ <span class="label-icon">&#128256;</span>
530
+ <span data-lang="fr">Plateforme Git</span>
531
+ <span data-lang="en">Git Platform</span>
532
+ </span>
533
+ <div class="platform-selector">
534
+ <button class="platform-btn active" data-platform="github" onclick="setPlatform('github')">
535
+ <span class="platform-icon">&#128025;</span>
536
+ <span>GitHub</span>
537
+ </button>
538
+ <button class="platform-btn" data-platform="azure" onclick="setPlatform('azure')">
539
+ <span class="platform-icon">&#9729;</span>
540
+ <span>Azure DevOps</span>
541
+ </button>
542
+ </div>
543
+ </div>
544
+ </div>
158
545
  </div>
159
546
  </section>
160
547
 
161
- <!-- Quick Install -->
162
- <section id="quick-install">
163
- <h2>
164
- <span data-lang="fr">Installation rapide</span>
165
- <span data-lang="en">Quick Install</span>
166
- </h2>
548
+ <!-- Installation Checklist -->
549
+ <section id="checklist">
550
+ <h3>
551
+ <span data-lang="fr">Checklist d'installation</span>
552
+ <span data-lang="en">Installation Checklist</span>
553
+ </h3>
167
554
 
168
- <div class="code-block">
169
- <button class="copy-btn">Copy</button>
170
- <pre><code># Installer le package
171
- npm install -g @atlashub/smartstack-cli
555
+ <ul class="checklist" id="installation-checklist">
556
+ <!-- Step 1: Node.js -->
557
+ <li class="checklist-item" data-step="1">
558
+ <span class="checklist-number">1</span>
559
+ <div class="checklist-checkbox" onclick="toggleStep(1)"></div>
560
+ <div class="checklist-content">
561
+ <div class="checklist-title">
562
+ <span data-lang="fr">Installer Node.js</span>
563
+ <span data-lang="en">Install Node.js</span>
564
+ </div>
565
+ <div class="checklist-description">
566
+ <p data-lang="fr">Telechargez et installez Node.js (version 18 ou superieure recommandee).</p>
567
+ <p data-lang="en">Download and install Node.js (version 18 or higher recommended).</p>
568
+ <div class="code-block">
569
+ <button class="copy-btn">Copy</button>
570
+ <pre><code>node --version # Verifier l'installation</code></pre>
571
+ </div>
572
+ <p><a href="https://nodejs.org/" target="_blank">https://nodejs.org/</a></p>
573
+ </div>
574
+ </div>
575
+ </li>
172
576
 
173
- # Installer les commandes
174
- smartstack-cli install</code></pre>
175
- </div>
176
- </section>
577
+ <!-- Step 2: Git -->
578
+ <li class="checklist-item" data-step="2">
579
+ <span class="checklist-number">2</span>
580
+ <div class="checklist-checkbox" onclick="toggleStep(2)"></div>
581
+ <div class="checklist-content">
582
+ <div class="checklist-title">
583
+ <span data-lang="fr">Configurer Git</span>
584
+ <span data-lang="en">Configure Git</span>
585
+ </div>
586
+ <div class="checklist-description">
587
+ <!-- GitHub content -->
588
+ <div class="platform-content github-content active">
589
+ <p data-lang="fr">Configurez Git avec SSH pour GitHub. Ajoutez votre cle SSH dans les parametres GitHub.</p>
590
+ <p data-lang="en">Configure Git with SSH for GitHub. Add your SSH key in GitHub settings.</p>
177
591
 
178
- <!-- Global Installation -->
179
- <section id="global">
180
- <h2>
181
- <span data-lang="fr">Installation globale (recommandee)</span>
182
- <span data-lang="en">Global Installation (recommended)</span>
183
- </h2>
592
+ <!-- Windows -->
593
+ <div class="os-content windows-content active">
594
+ <div class="code-block">
595
+ <button class="copy-btn">Copy</button>
596
+ <pre><code># Generer une cle SSH (PowerShell)
597
+ ssh-keygen -t ed25519 -C "your_email@example.com"
184
598
 
185
- <p data-lang="fr">
186
- L'installation globale installe les commandes dans <code>~/.claude</code>, les rendant disponibles dans tous vos projets.
187
- </p>
188
- <p data-lang="en">
189
- Global installation installs commands to <code>~/.claude</code>, making them available in all your projects.
190
- </p>
599
+ # Demarrer le service SSH Agent
600
+ Get-Service ssh-agent | Set-Service -StartupType Automatic
601
+ Start-Service ssh-agent
602
+ ssh-add $env:USERPROFILE\.ssh\id_ed25519
603
+
604
+ # Afficher la cle publique a copier
605
+ Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub</code></pre>
606
+ </div>
607
+ </div>
608
+ <!-- macOS -->
609
+ <div class="os-content macos-content">
610
+ <div class="code-block">
611
+ <button class="copy-btn">Copy</button>
612
+ <pre><code># Generer une cle SSH
613
+ ssh-keygen -t ed25519 -C "your_email@example.com"
614
+
615
+ # Ajouter au Keychain
616
+ ssh-add --apple-use-keychain ~/.ssh/id_ed25519
617
+
618
+ # Afficher la cle publique a copier
619
+ cat ~/.ssh/id_ed25519.pub | pbcopy # Copie directement</code></pre>
620
+ </div>
621
+ </div>
622
+ <!-- Linux -->
623
+ <div class="os-content linux-content">
624
+ <div class="code-block">
625
+ <button class="copy-btn">Copy</button>
626
+ <pre><code># Generer une cle SSH
627
+ ssh-keygen -t ed25519 -C "your_email@example.com"
628
+
629
+ # Demarrer l'agent SSH
630
+ eval "$(ssh-agent -s)"
631
+ ssh-add ~/.ssh/id_ed25519
632
+
633
+ # Afficher la cle publique a copier
634
+ cat ~/.ssh/id_ed25519.pub</code></pre>
635
+ </div>
636
+ </div>
637
+
638
+ <p data-lang="fr">Ajoutez votre cle SSH ici : <a href="https://github.com/settings/keys" target="_blank">https://github.com/settings/keys</a></p>
639
+ <p data-lang="en">Add your SSH key here: <a href="https://github.com/settings/keys" target="_blank">https://github.com/settings/keys</a></p>
640
+ </div>
641
+ <!-- Azure DevOps content -->
642
+ <div class="platform-content azure-content">
643
+ <p data-lang="fr">Configurez Git avec HTTPS et Git Credential Manager pour Azure DevOps.</p>
644
+ <p data-lang="en">Configure Git with HTTPS and Git Credential Manager for Azure DevOps.</p>
645
+
646
+ <!-- Windows -->
647
+ <div class="os-content windows-content active">
648
+ <div class="code-block">
649
+ <button class="copy-btn">Copy</button>
650
+ <pre><code># Git Credential Manager est inclus avec Git for Windows
651
+ # Verifiez qu'il est configure :
652
+ git config --global credential.helper manager</code></pre>
653
+ </div>
654
+ <p data-lang="fr" style="margin-top: 0.5rem; color: var(--text-muted);">Git Credential Manager est installe automatiquement avec Git for Windows.</p>
655
+ <p data-lang="en" style="margin-top: 0.5rem; color: var(--text-muted);">Git Credential Manager is installed automatically with Git for Windows.</p>
656
+ </div>
657
+ <!-- macOS -->
658
+ <div class="os-content macos-content">
659
+ <div class="code-block">
660
+ <button class="copy-btn">Copy</button>
661
+ <pre><code># Installer Git Credential Manager via Homebrew
662
+ brew install --cask git-credential-manager
663
+
664
+ # Configurer le credential helper
665
+ git config --global credential.helper manager</code></pre>
666
+ </div>
667
+ </div>
668
+ <!-- Linux -->
669
+ <div class="os-content linux-content">
670
+ <div class="code-block">
671
+ <button class="copy-btn">Copy</button>
672
+ <pre><code># Installer Git Credential Manager
673
+ # Telechargez le .deb depuis: https://github.com/git-ecosystem/git-credential-manager/releases
674
+ sudo dpkg -i gcm-linux_amd64.deb
191
675
 
192
- <ol class="steps-list">
193
- <li>
194
- <div class="step-content">
195
- <h5 data-lang="fr">Installer le package npm</h5>
196
- <h5 data-lang="en">Install npm package</h5>
197
- <div class="code-block">
198
- <button class="copy-btn">Copy</button>
199
- <pre><code>npm install -g @atlashub/smartstack-cli</code></pre>
676
+ # Configurer le credential helper
677
+ git config --global credential.helper manager</code></pre>
678
+ </div>
679
+ </div>
680
+
681
+ <div class="tutorial-note" style="margin-top: 1rem;">
682
+ <p data-lang="fr"><strong>Pas besoin de <code>az login</code></strong> - Git Credential Manager ouvrira automatiquement votre navigateur pour vous authentifier avec votre compte Azure AD lors de la premiere operation Git (clone, push, etc.).</p>
683
+ <p data-lang="en"><strong>No need for <code>az login</code></strong> - Git Credential Manager will automatically open your browser to authenticate with your Azure AD account on the first Git operation (clone, push, etc.).</p>
684
+ </div>
685
+ </div>
200
686
  </div>
201
687
  </div>
202
688
  </li>
203
- <li>
204
- <div class="step-content">
205
- <h5 data-lang="fr">Activer votre licence</h5>
206
- <h5 data-lang="en">Activate your license</h5>
207
- <div class="code-block">
208
- <button class="copy-btn">Copy</button>
209
- <pre><code>smartstack-cli activate YOUR-LICENSE-KEY</code></pre>
689
+
690
+ <!-- Step 3: Claude Code CLI -->
691
+ <li class="checklist-item" data-step="3">
692
+ <span class="checklist-number">3</span>
693
+ <div class="checklist-checkbox" onclick="toggleStep(3)"></div>
694
+ <div class="checklist-content">
695
+ <div class="checklist-title">
696
+ <span data-lang="fr">Installer Claude Code CLI</span>
697
+ <span data-lang="en">Install Claude Code CLI</span>
698
+ </div>
699
+ <div class="checklist-description">
700
+ <p data-lang="fr">Installez Claude Code CLI globalement avec npm.</p>
701
+ <p data-lang="en">Install Claude Code CLI globally with npm.</p>
702
+ <div class="code-block">
703
+ <button class="copy-btn">Copy</button>
704
+ <pre><code>npm install -g @anthropic-ai/claude-code</code></pre>
705
+ </div>
210
706
  </div>
211
707
  </div>
212
708
  </li>
213
- <li>
214
- <div class="step-content">
215
- <h5 data-lang="fr">Installer les commandes</h5>
216
- <h5 data-lang="en">Install commands</h5>
217
- <div class="code-block">
218
- <button class="copy-btn">Copy</button>
219
- <pre><code>smartstack-cli install</code></pre>
709
+
710
+ <!-- Step 4: SmartStack CLI -->
711
+ <li class="checklist-item" data-step="4">
712
+ <span class="checklist-number">4</span>
713
+ <div class="checklist-checkbox" onclick="toggleStep(4)"></div>
714
+ <div class="checklist-content">
715
+ <div class="checklist-title">
716
+ <span data-lang="fr">Installer SmartStack CLI</span>
717
+ <span data-lang="en">Install SmartStack CLI</span>
718
+ </div>
719
+ <div class="checklist-description">
720
+ <p data-lang="fr">Installez SmartStack CLI globalement avec npm.</p>
721
+ <p data-lang="en">Install SmartStack CLI globally with npm.</p>
722
+ <div class="code-block">
723
+ <button class="copy-btn">Copy</button>
724
+ <pre><code>npm install -g @atlashub/smartstack-cli</code></pre>
725
+ </div>
726
+ <p data-lang="fr">Verifiez l'installation :</p>
727
+ <p data-lang="en">Verify installation:</p>
728
+ <div class="code-block">
729
+ <button class="copy-btn">Copy</button>
730
+ <pre><code>smartstack --version</code></pre>
731
+ </div>
220
732
  </div>
221
733
  </div>
222
734
  </li>
223
- <li>
224
- <div class="step-content">
225
- <h5 data-lang="fr">Verifier l'installation</h5>
226
- <h5 data-lang="en">Verify installation</h5>
227
- <div class="code-block">
228
- <button class="copy-btn">Copy</button>
229
- <pre><code>smartstack-cli status</code></pre>
735
+
736
+ <!-- Step 5: SmartStack MCP Server -->
737
+ <li class="checklist-item" data-step="5">
738
+ <span class="checklist-number">5</span>
739
+ <div class="checklist-checkbox" onclick="toggleStep(5)"></div>
740
+ <div class="checklist-content">
741
+ <div class="checklist-title">
742
+ <span data-lang="fr">Installer SmartStack MCP Server</span>
743
+ <span data-lang="en">Install SmartStack MCP Server</span>
744
+ </div>
745
+ <div class="checklist-description">
746
+ <p data-lang="fr">Installez le serveur MCP SmartStack pour la validation des conventions et le scaffolding.</p>
747
+ <p data-lang="en">Install the SmartStack MCP server for conventions validation and scaffolding.</p>
748
+ <div class="code-block">
749
+ <button class="copy-btn">Copy</button>
750
+ <pre><code># Etape 1: Installer le package globalement
751
+ npm install -g @atlashub/smartstack-mcp
752
+
753
+ # Etape 2: Enregistrer le serveur MCP dans Claude
754
+ claude mcp add smartstack -- npx @atlashub/smartstack-mcp</code></pre>
755
+ </div>
230
756
  </div>
231
757
  </div>
232
758
  </li>
233
- </ol>
234
- </section>
235
759
 
236
- <!-- Local Installation -->
237
- <section id="local">
238
- <h2>
239
- <span data-lang="fr">Installation locale (projet)</span>
240
- <span data-lang="en">Local Installation (project)</span>
241
- </h2>
760
+ <!-- Step 6: Context7 MCP Server -->
761
+ <li class="checklist-item" data-step="6">
762
+ <span class="checklist-number">6</span>
763
+ <div class="checklist-checkbox" onclick="toggleStep(6)"></div>
764
+ <div class="checklist-content">
765
+ <div class="checklist-title">
766
+ <span data-lang="fr">Installer Context7 MCP Server</span>
767
+ <span data-lang="en">Install Context7 MCP Server</span>
768
+ </div>
769
+ <div class="checklist-description">
770
+ <p data-lang="fr">Installez le serveur MCP Context7 pour acceder a la documentation des bibliotheques.</p>
771
+ <p data-lang="en">Install the Context7 MCP server to access library documentation.</p>
242
772
 
243
- <p data-lang="fr">
244
- L'installation locale installe les commandes dans <code>./.claude</code> du projet courant. Utile pour personnaliser les commandes par projet.
245
- </p>
246
- <p data-lang="en">
247
- Local installation installs commands to <code>./.claude</code> in the current project. Useful for customizing commands per project.
248
- </p>
773
+ <!-- API Key Input -->
774
+ <div class="api-key-section">
775
+ <label data-lang="fr"><strong>Cle API Context7</strong> (optionnel - ameliore les performances)</label>
776
+ <label data-lang="en"><strong>Context7 API Key</strong> (optional - improves performance)</label>
777
+ <div class="api-key-input-wrapper">
778
+ <input type="text" class="api-key-input" id="context7-api-key" placeholder="ctx7_xxxxxxxx">
779
+ <button class="api-key-save-btn" onclick="saveApiKey()">
780
+ <span data-lang="fr">Sauvegarder</span>
781
+ <span data-lang="en">Save</span>
782
+ </button>
783
+ </div>
784
+ <small style="color: var(--text-muted); margin-top: 0.5rem; display: block;">
785
+ <span data-lang="fr">Obtenez une cle API sur <a href="https://context7.com" target="_blank">context7.com</a></span>
786
+ <span data-lang="en">Get an API key at <a href="https://context7.com" target="_blank">context7.com</a></span>
787
+ </small>
788
+ </div>
249
789
 
250
- <div class="code-block">
251
- <button class="copy-btn">Copy</button>
252
- <pre><code># Dans votre projet
253
- npm install -D @atlashub/smartstack-cli
790
+ <div class="code-block">
791
+ <button class="copy-btn">Copy</button>
792
+ <pre><code id="context7-command"># Sans cle API
793
+ claude mcp add context7 -- npx @upstash/context7-mcp</code></pre>
794
+ </div>
795
+ </div>
796
+ </div>
797
+ </li>
254
798
 
255
- # Installer localement
256
- npx smartstack-cli install --local</code></pre>
257
- </div>
799
+ <!-- Step 7: Verification -->
800
+ <li class="checklist-item" data-step="7">
801
+ <span class="checklist-number">7</span>
802
+ <div class="checklist-checkbox" onclick="toggleStep(7)"></div>
803
+ <div class="checklist-content">
804
+ <div class="checklist-title">
805
+ <span data-lang="fr">Verifier l'installation</span>
806
+ <span data-lang="en">Verify Installation</span>
807
+ </div>
808
+ <div class="checklist-description">
809
+ <p data-lang="fr">Verifiez que tout est correctement installe.</p>
810
+ <p data-lang="en">Verify that everything is correctly installed.</p>
811
+ <div class="code-block">
812
+ <button class="copy-btn">Copy</button>
813
+ <pre><code># Verifier les versions
814
+ node --version
815
+ claude --version
816
+ smartstack --version
258
817
 
259
- <div class="alert alert-warning">
260
- <span class="alert-icon">&#9888;</span>
818
+ # Verifier les serveurs MCP
819
+ claude mcp list</code></pre>
820
+ </div>
821
+ <div class="alert alert-success" style="margin-top: 1rem;">
822
+ <span class="alert-icon">&#9989;</span>
823
+ <div class="alert-content">
824
+ <p data-lang="fr">Felicitations ! Vous pouvez maintenant :</p>
825
+ <p data-lang="en">Congratulations! You can now:</p>
826
+ <ul style="margin: 0.5rem 0 0 1rem;">
827
+ <li data-lang="fr">Creer un nouveau projet : <code>smartstack init MyProject</code></li>
828
+ <li data-lang="en">Create a new project: <code>smartstack init MyProject</code></li>
829
+ <li data-lang="fr">Ou initialiser sur un projet existant : <code>smartstack init .</code></li>
830
+ <li data-lang="en">Or initialize on an existing project: <code>smartstack init .</code></li>
831
+ </ul>
832
+ </div>
833
+ </div>
834
+ </div>
835
+ </div>
836
+ </li>
837
+ </ul>
838
+ </section>
839
+
840
+ <!-- Next Steps - Tutorial -->
841
+ <section id="next-steps">
842
+ <h3>
843
+ <span data-lang="fr">Demarrer votre premier projet</span>
844
+ <span data-lang="en">Start your first project</span>
845
+ </h3>
846
+
847
+ <div class="alert alert-success" style="margin-bottom: 1.5rem;">
848
+ <span class="alert-icon">&#9989;</span>
261
849
  <div class="alert-content">
262
- <h5 data-lang="fr">Ajoutez .claude au .gitignore</h5>
263
- <h5 data-lang="en">Add .claude to .gitignore</h5>
264
- <p data-lang="fr">
265
- Si vous installez localement, pensez a ajouter <code>.claude/</code> a votre <code>.gitignore</code> pour eviter de commiter les fichiers de configuration.
266
- </p>
267
- <p data-lang="en">
268
- If you install locally, consider adding <code>.claude/</code> to your <code>.gitignore</code> to avoid committing configuration files.
269
- </p>
850
+ <p data-lang="fr"><strong>Vous lisez cette doc dans votre projet ?</strong> Vous etes deja pret ! Les etapes A, B, C sont deja faites. <a href="#step-d" style="color: var(--success); font-weight: 600;">Passez directement a l'etape D &rarr;</a></p>
851
+ <p data-lang="en"><strong>Reading this doc in your project?</strong> You're already set! Steps A, B, C are done. <a href="#step-d" style="color: var(--success); font-weight: 600;">Skip to step D &rarr;</a></p>
270
852
  </div>
271
853
  </div>
272
- </section>
273
854
 
274
- <!-- MCP Servers -->
275
- <section id="mcp-servers">
276
- <h2>
277
- <span data-lang="fr">Serveurs MCP (recommande)</span>
278
- <span data-lang="en">MCP Servers (recommended)</span>
279
- </h2>
855
+ <p data-lang="fr" style="color: var(--text-muted); font-size: 0.9rem; margin-bottom: 1.5rem;">Les etapes A, B, C ci-dessous sont pour reference si vous devez configurer un nouveau projet.</p>
856
+ <p data-lang="en" style="color: var(--text-muted); font-size: 0.9rem; margin-bottom: 1.5rem;">Steps A, B, C below are for reference if you need to set up a new project.</p>
280
857
 
281
- <p data-lang="fr">
282
- Les serveurs MCP (Model Context Protocol) enrichissent SmartStack avec des fonctionnalites avancees : validation de conventions, scaffolding, documentation en temps reel.
283
- </p>
284
- <p data-lang="en">
285
- MCP servers (Model Context Protocol) enhance SmartStack with advanced features: conventions validation, scaffolding, real-time documentation.
286
- </p>
858
+ <!-- Step A: Create repo -->
859
+ <div class="tutorial-section">
860
+ <h4>
861
+ <span class="step-badge">A</span>
862
+ <span data-lang="fr">Creer le repository Git</span>
863
+ <span data-lang="en">Create the Git repository</span>
864
+ </h4>
287
865
 
288
- <div class="table-container">
289
- <table>
290
- <thead>
291
- <tr>
292
- <th>Serveur</th>
293
- <th>
294
- <span data-lang="fr">Fonction</span>
295
- <span data-lang="en">Function</span>
296
- </th>
297
- </tr>
298
- </thead>
299
- <tbody>
300
- <tr>
301
- <td><strong>SmartStack MCP</strong></td>
302
- <td>
303
- <span data-lang="fr">Validation conventions, scaffolding, API docs</span>
304
- <span data-lang="en">Conventions validation, scaffolding, API docs</span>
305
- </td>
306
- </tr>
307
- <tr>
308
- <td><strong>Context7 MCP</strong></td>
309
- <td>
310
- <span data-lang="fr">Documentation libraries, exemples de code</span>
311
- <span data-lang="en">Library documentation, code examples</span>
312
- </td>
313
- </tr>
314
- </tbody>
315
- </table>
316
- </div>
866
+ <p data-lang="fr">Avant d'initialiser SmartStack, vous devez creer un repository sur votre plateforme Git.</p>
867
+ <p data-lang="en">Before initializing SmartStack, you need to create a repository on your Git platform.</p>
317
868
 
318
- <h3 data-lang="fr">Installation</h3>
319
- <h3 data-lang="en">Installation</h3>
869
+ <div class="platform-content github-content active">
870
+ <ol style="margin: 1rem 0 1rem 1.5rem; color: var(--text-muted);">
871
+ <li data-lang="fr">Allez sur <a href="https://github.com/new" target="_blank">github.com/new</a></li>
872
+ <li data-lang="en">Go to <a href="https://github.com/new" target="_blank">github.com/new</a></li>
873
+ <li data-lang="fr">Nommez votre repository (ex: <code>MonProjet</code>)</li>
874
+ <li data-lang="en">Name your repository (e.g., <code>MyProject</code>)</li>
875
+ <li data-lang="fr">Laissez-le <strong>vide</strong> (pas de README, .gitignore, ou license)</li>
876
+ <li data-lang="en">Leave it <strong>empty</strong> (no README, .gitignore, or license)</li>
877
+ <li data-lang="fr">Cliquez sur "Create repository"</li>
878
+ <li data-lang="en">Click "Create repository"</li>
879
+ </ol>
880
+ </div>
320
881
 
321
- <div class="code-block">
322
- <button class="copy-btn">Copy</button>
323
- <pre><code># SmartStack MCP
324
- claude mcp add smartstack
882
+ <div class="platform-content azure-content">
883
+ <ol style="margin: 1rem 0 1rem 1.5rem; color: var(--text-muted);">
884
+ <li data-lang="fr">Allez dans votre projet Azure DevOps</li>
885
+ <li data-lang="en">Go to your Azure DevOps project</li>
886
+ <li data-lang="fr">Repos &gt; "New repository"</li>
887
+ <li data-lang="en">Repos &gt; "New repository"</li>
888
+ <li data-lang="fr">Nommez votre repository (ex: <code>MonProjet</code>)</li>
889
+ <li data-lang="en">Name your repository (e.g., <code>MyProject</code>)</li>
890
+ <li data-lang="fr">Decochez "Add a README"</li>
891
+ <li data-lang="en">Uncheck "Add a README"</li>
892
+ <li data-lang="fr">Cliquez sur "Create"</li>
893
+ <li data-lang="en">Click "Create"</li>
894
+ </ol>
895
+ </div>
325
896
 
326
- # Context7 MCP (remplacez YOUR_API_KEY par votre cle)
327
- claude mcp add context7 -- npx @upstash/context7-mcp -- --api-key YOUR_API_KEY</code></pre>
897
+ <div class="tutorial-note">
898
+ <p data-lang="fr"><strong>Pourquoi un repo vide ?</strong> SmartStack va initialiser la structure du projet avec les bons fichiers. Un repo pre-rempli pourrait creer des conflits.</p>
899
+ <p data-lang="en"><strong>Why an empty repo?</strong> SmartStack will initialize the project structure with the correct files. A pre-filled repo could create conflicts.</p>
900
+ </div>
328
901
  </div>
329
902
 
330
- <div class="alert alert-warning">
331
- <span class="alert-icon">&#9888;</span>
332
- <div class="alert-content">
333
- <h5 data-lang="fr">Cle API Context7</h5>
334
- <h5 data-lang="en">Context7 API Key</h5>
335
- <p data-lang="fr">
336
- Obtenez votre cle API gratuite sur <a href="https://context7.io" target="_blank">context7.io</a>
337
- </p>
338
- <p data-lang="en">
339
- Get your free API key at <a href="https://context7.io" target="_blank">context7.io</a>
340
- </p>
903
+ <!-- Step B: Initialize GitFlow -->
904
+ <div class="tutorial-section">
905
+ <h4>
906
+ <span class="step-badge">B</span>
907
+ <span data-lang="fr">Initialiser GitFlow</span>
908
+ <span data-lang="en">Initialize GitFlow</span>
909
+ </h4>
910
+
911
+ <p data-lang="fr">Ouvrez Claude Code dans un dossier vide et lancez l'initialisation GitFlow :</p>
912
+ <p data-lang="en">Open Claude Code in an empty folder and launch GitFlow initialization:</p>
913
+
914
+ <div class="code-block">
915
+ <button class="copy-btn">Copy</button>
916
+ <pre><code># Dans Claude Code, tapez :
917
+ /gitflow:1-init</code></pre>
341
918
  </div>
342
- </div>
343
919
 
344
- <div class="alert alert-info">
345
- <span class="alert-icon">&#128161;</span>
346
- <div class="alert-content">
347
- <h5 data-lang="fr">Verifier l'installation</h5>
348
- <h5 data-lang="en">Verify installation</h5>
349
- <p><code>claude mcp list</code></p>
920
+ <p data-lang="fr" style="margin-top: 1rem;">L'assistant vous guidera pour :</p>
921
+ <p data-lang="en" style="margin-top: 1rem;">The assistant will guide you to:</p>
922
+
923
+ <ul style="margin: 0.5rem 0 1rem 1.5rem; color: var(--text-muted);">
924
+ <li data-lang="fr">Cloner votre repository</li>
925
+ <li data-lang="en">Clone your repository</li>
926
+ <li data-lang="fr">Configurer les branches (main, develop)</li>
927
+ <li data-lang="en">Configure branches (main, develop)</li>
928
+ <li data-lang="fr">Definir les conventions de versioning</li>
929
+ <li data-lang="en">Define versioning conventions</li>
930
+ </ul>
931
+
932
+ <div class="tutorial-note">
933
+ <p data-lang="fr"><strong>Conseil :</strong> Repondez aux questions de l'assistant. Il adaptera la configuration a vos besoins.</p>
934
+ <p data-lang="en"><strong>Tip:</strong> Answer the assistant's questions. It will adapt the configuration to your needs.</p>
350
935
  </div>
351
936
  </div>
352
- </section>
353
937
 
354
- <!-- Installation Options -->
355
- <section id="options">
356
- <h2>
357
- <span data-lang="fr">Options d'installation</span>
358
- <span data-lang="en">Installation Options</span>
359
- </h2>
938
+ <!-- Step C: Initialize SmartStack -->
939
+ <div class="tutorial-section">
940
+ <h4>
941
+ <span class="step-badge">C</span>
942
+ <span data-lang="fr">Installer les outils SmartStack</span>
943
+ <span data-lang="en">Install SmartStack tools</span>
944
+ </h4>
360
945
 
361
- <div class="table-container">
362
- <table>
363
- <thead>
364
- <tr>
365
- <th>Option</th>
366
- <th>
367
- <span data-lang="fr">Description</span>
368
- <span data-lang="en">Description</span>
369
- </th>
370
- </tr>
371
- </thead>
372
- <tbody>
373
- <tr>
374
- <td><code>--local</code></td>
375
- <td>
376
- <span data-lang="fr">Installer dans le projet courant (./.claude)</span>
377
- <span data-lang="en">Install in current project (./.claude)</span>
378
- </td>
379
- </tr>
380
- <tr>
381
- <td><code>--commands-only</code></td>
382
- <td>
383
- <span data-lang="fr">Installer uniquement les commandes</span>
384
- <span data-lang="en">Install commands only</span>
385
- </td>
386
- </tr>
387
- <tr>
388
- <td><code>--agents-only</code></td>
389
- <td>
390
- <span data-lang="fr">Installer uniquement les agents</span>
391
- <span data-lang="en">Install agents only</span>
392
- </td>
393
- </tr>
394
- <tr>
395
- <td><code>--hooks-only</code></td>
396
- <td>
397
- <span data-lang="fr">Installer uniquement les hooks</span>
398
- <span data-lang="en">Install hooks only</span>
399
- </td>
400
- </tr>
401
- <tr>
402
- <td><code>--force</code></td>
403
- <td>
404
- <span data-lang="fr">Forcer la reecriture des fichiers existants</span>
405
- <span data-lang="en">Force overwrite existing files</span>
406
- </td>
407
- </tr>
408
- <tr>
409
- <td><code>--no-config</code></td>
410
- <td>
411
- <span data-lang="fr">Ne pas creer le fichier de configuration</span>
412
- <span data-lang="en">Skip config file creation</span>
413
- </td>
414
- </tr>
415
- </tbody>
416
- </table>
417
- </div>
418
- </section>
946
+ <p data-lang="fr">Vous etes maintenant dans votre projet clone. Installez les outils SmartStack :</p>
947
+ <p data-lang="en">You are now in your cloned project. Install SmartStack tools:</p>
419
948
 
420
- <!-- Directory Structure -->
421
- <section id="structure">
422
- <h2>
423
- <span data-lang="fr">Structure des fichiers</span>
424
- <span data-lang="en">File Structure</span>
425
- </h2>
949
+ <div class="code-block">
950
+ <button class="copy-btn">Copy</button>
951
+ <pre><code># Depuis la racine de votre projet clone
952
+ smartstack init .</code></pre>
953
+ </div>
426
954
 
427
- <p data-lang="fr">Apres installation, la structure suivante est creee :</p>
428
- <p data-lang="en">After installation, the following structure is created:</p>
429
-
430
- <div class="code-block">
431
- <pre><code>~/.claude/ # Installation globale
432
- ├── commands/ # Commandes slash
433
- │ ├── gitflow.md # Orchestrateur GitFlow
434
- │ ├── gitflow/ # Phases GitFlow
435
- │ │ ├── 1-init.md
436
- │ │ ├── 2-status.md
437
- │ │ ├── 3-commit.md
438
- │ │ ├── 4-plan.md
439
- │ │ ├── 5-exec.md
440
- │ │ ├── 6-abort.md
441
- │ │ ├── 10-start.md
442
- │ │ └── 11-finish.md
443
- │ ├── apex.md # Orchestrateur APEX
444
- │ ├── apex/ # Phases APEX
445
- │ ├── git/ # Commandes Git
446
- │ └── prompts/ # Generateurs de prompts
447
- ├── agents/ # Agents specialises
448
- │ ├── explore-codebase.md
449
- │ ├── explore-docs.md
450
- │ ├── websearch.md
451
- │ ├── snipper.md
452
- │ ├── fix-grammar.md
453
- │ └── action.md
454
- ├── hooks/ # Hooks Claude Code
455
- │ └── hooks.json
456
- └── gitflow/ # Donnees GitFlow
457
- ├── config.json # Configuration
458
- ├── plans/ # Plans d'integration
459
- ├── logs/ # Logs d'operations
460
- └── migrations/ # Suivi des migrations
461
- └── history.json</code></pre>
462
- </div>
463
- </section>
955
+ <p data-lang="fr" style="margin-top: 1rem;">Cette commande va :</p>
956
+ <p data-lang="en" style="margin-top: 1rem;">This command will:</p>
464
957
 
465
- <!-- Uninstall -->
466
- <section id="uninstall">
467
- <h2>
468
- <span data-lang="fr">Desinstallation</span>
469
- <span data-lang="en">Uninstallation</span>
470
- </h2>
958
+ <ul style="margin: 0.5rem 0 1rem 1.5rem; color: var(--text-muted);">
959
+ <li data-lang="fr">Installer les skills et agents SmartStack</li>
960
+ <li data-lang="en">Install SmartStack skills and agents</li>
961
+ <li data-lang="fr">Configurer les hooks Claude Code</li>
962
+ <li data-lang="en">Configure Claude Code hooks</li>
963
+ <li data-lang="fr">Generer le fichier <code>CLAUDE.md</code> avec les regles du projet</li>
964
+ <li data-lang="en">Generate the <code>CLAUDE.md</code> file with project rules</li>
965
+ <li data-lang="fr">Generer cette documentation (<code>.documentation/</code>)</li>
966
+ <li data-lang="en">Generate this documentation (<code>.documentation/</code>)</li>
967
+ <li data-lang="fr">Verifier les serveurs MCP</li>
968
+ <li data-lang="en">Verify MCP servers</li>
969
+ </ul>
471
970
 
472
- <div class="code-block">
473
- <button class="copy-btn">Copy</button>
474
- <pre><code># Desinstaller tous les composants
475
- smartstack-cli uninstall
971
+ <div class="tutorial-note">
972
+ <p data-lang="fr"><strong>Nouveau projet .NET ?</strong> Si vous partez de zero et voulez creer la structure Clean Architecture, utilisez plutot <code>smartstack init MonProjet</code> avant l'etape A (sans creer de repo au prealable).</p>
973
+ <p data-lang="en"><strong>New .NET project?</strong> If you're starting from scratch and want to create the Clean Architecture structure, use <code>smartstack init MyProject</code> before step A (without creating a repo beforehand).</p>
974
+ </div>
975
+ </div>
476
976
 
477
- # Desinstaller des composants specifiques
478
- smartstack-cli uninstall --commands-only
479
- smartstack-cli uninstall --agents-only
480
- smartstack-cli uninstall --hooks-only
977
+ <!-- Step D: Start working -->
978
+ <div class="tutorial-section" id="step-d">
979
+ <h4>
980
+ <span class="step-badge">D</span>
981
+ <span data-lang="fr">Commencer a travailler</span>
982
+ <span data-lang="en">Start working</span>
983
+ </h4>
481
984
 
482
- # Garder le fichier de configuration
483
- smartstack-cli uninstall --keep-config
985
+ <p data-lang="fr">Votre environnement est pret ! Le workflow GitFlow vous guide selon votre objectif :</p>
986
+ <p data-lang="en">Your environment is ready! The GitFlow workflow guides you based on your goal:</p>
484
987
 
485
- # Sans confirmation
486
- smartstack-cli uninstall --yes</code></pre>
487
- </div>
488
- </section>
988
+ <!-- Mini decision guide -->
989
+ <div style="display: flex; gap: 1rem; flex-wrap: wrap; margin: 1.5rem 0;">
990
+ <div style="flex: 1; min-width: 200px; padding: 1rem; background: rgba(34, 197, 94, 0.1); border: 1px solid #22c55e; border-radius: 8px;">
991
+ <div style="font-weight: 600; color: #22c55e; margin-bottom: 0.5rem;">
992
+ <span data-lang="fr">Nouvelle fonctionnalite</span>
993
+ <span data-lang="en">New feature</span>
994
+ </div>
995
+ <code style="font-size: 0.85rem;">/gitflow:10-start feature {nom}</code>
996
+ </div>
997
+ <div style="flex: 1; min-width: 200px; padding: 1rem; background: rgba(234, 179, 8, 0.1); border: 1px solid #eab308; border-radius: 8px;">
998
+ <div style="font-weight: 600; color: #eab308; margin-bottom: 0.5rem;">
999
+ <span data-lang="fr">Deployer en prod</span>
1000
+ <span data-lang="en">Deploy to prod</span>
1001
+ </div>
1002
+ <code style="font-size: 0.85rem;">/gitflow:10-start release</code>
1003
+ </div>
1004
+ <div style="flex: 1; min-width: 200px; padding: 1rem; background: rgba(236, 72, 153, 0.1); border: 1px solid #ec4899; border-radius: 8px;">
1005
+ <div style="font-weight: 600; color: #ec4899; margin-bottom: 0.5rem;">
1006
+ <span data-lang="fr">Bug urgent prod</span>
1007
+ <span data-lang="en">Urgent prod bug</span>
1008
+ </div>
1009
+ <code style="font-size: 0.85rem;">/gitflow:10-start hotfix {nom}</code>
1010
+ </div>
1011
+ </div>
489
1012
 
490
- <!-- Update -->
491
- <section id="update">
492
- <h2>
493
- <span data-lang="fr">Mise a jour</span>
494
- <span data-lang="en">Update</span>
495
- </h2>
1013
+ <p data-lang="fr" style="margin-top: 1rem;">Cycle de travail type :</p>
1014
+ <p data-lang="en" style="margin-top: 1rem;">Typical work cycle:</p>
496
1015
 
497
- <div class="code-block">
498
- <button class="copy-btn">Copy</button>
499
- <pre><code># Mettre a jour le package npm
500
- npm update -g @atlashub/smartstack-cli
1016
+ <div class="code-block">
1017
+ <button class="copy-btn">Copy</button>
1018
+ <pre><code># 1. Demarrer une branche
1019
+ /gitflow:10-start feature ma-fonctionnalite
501
1020
 
502
- # Mettre a jour les commandes installees
503
- smartstack-cli update</code></pre>
504
- </div>
505
- </section>
1021
+ # 2. Coder... puis commiter regulierement
1022
+ /gitflow:3-commit
506
1023
 
507
- <!-- Troubleshooting -->
508
- <section id="troubleshooting">
509
- <h2>
510
- <span data-lang="fr">Resolution de problemes</span>
511
- <span data-lang="en">Troubleshooting</span>
512
- </h2>
1024
+ # 3. Creer une Pull Request quand c'est pret
1025
+ /gitflow:7-pull-request
513
1026
 
514
- <div class="alert alert-warning">
515
- <span class="alert-icon">&#9888;</span>
516
- <div class="alert-content">
517
- <h5 data-lang="fr">Erreur de permission</h5>
518
- <h5 data-lang="en">Permission error</h5>
519
- <p data-lang="fr">
520
- Si vous obtenez une erreur de permission lors de l'installation globale, utilisez <code>sudo</code> ou configurez npm pour utiliser un repertoire utilisateur.
521
- </p>
522
- <p data-lang="en">
523
- If you get a permission error during global installation, use <code>sudo</code> or configure npm to use a user directory.
524
- </p>
1027
+ # 4. Finaliser apres le merge
1028
+ /gitflow:11-finish</code></pre>
525
1029
  </div>
526
- </div>
527
1030
 
528
- <div class="alert alert-info">
529
- <span class="alert-icon">&#128161;</span>
530
- <div class="alert-content">
531
- <h5 data-lang="fr">Commandes non reconnues</h5>
532
- <h5 data-lang="en">Commands not recognized</h5>
533
- <p data-lang="fr">
534
- Assurez-vous que le repertoire npm global est dans votre PATH. Verifiez avec <code>npm bin -g</code>.
535
- </p>
536
- <p data-lang="en">
537
- Make sure the npm global directory is in your PATH. Check with <code>npm bin -g</code>.
538
- </p>
1031
+ <div class="alert alert-info" style="margin-top: 1rem;">
1032
+ <span class="alert-icon">&#128218;</span>
1033
+ <div class="alert-content">
1034
+ <p data-lang="fr"><strong>Guide complet :</strong> Consultez le <a href="gitflow.html#workflow-decision" style="color: var(--primary);">schema decisonnel GitFlow</a> pour visualiser le workflow complet et choisir la bonne commande selon votre situation.</p>
1035
+ <p data-lang="en"><strong>Complete guide:</strong> See the <a href="gitflow.html#workflow-decision" style="color: var(--primary);">GitFlow decision diagram</a> to visualize the complete workflow and choose the right command for your situation.</p>
1036
+ </div>
539
1037
  </div>
540
1038
  </div>
1039
+
1040
+ <!-- Links to documentation -->
1041
+ <h4 style="margin-top: 2rem;">
1042
+ <span data-lang="fr">Documentation complementaire</span>
1043
+ <span data-lang="en">Additional documentation</span>
1044
+ </h4>
1045
+
1046
+ <div class="feature-grid">
1047
+ <a href="init.html" class="feature-item" style="text-decoration: none;">
1048
+ <span class="feature-icon">&#128640;</span>
1049
+ <span class="feature-text">
1050
+ <span data-lang="fr">Commande Init</span>
1051
+ <span data-lang="en">Init Command</span>
1052
+ </span>
1053
+ </a>
1054
+ <a href="gitflow.html" class="feature-item" style="text-decoration: none;">
1055
+ <span class="feature-icon">&#128256;</span>
1056
+ <span class="feature-text">
1057
+ <span data-lang="fr">Guide GitFlow</span>
1058
+ <span data-lang="en">GitFlow Guide</span>
1059
+ </span>
1060
+ </a>
1061
+ <a href="efcore.html" class="feature-item" style="text-decoration: none;">
1062
+ <span class="feature-icon">&#128452;</span>
1063
+ <span class="feature-text">
1064
+ <span data-lang="fr">Migrations EF Core</span>
1065
+ <span data-lang="en">EF Core Migrations</span>
1066
+ </span>
1067
+ </a>
1068
+ <a href="apex.html" class="feature-item" style="text-decoration: none;">
1069
+ <span class="feature-icon">&#127919;</span>
1070
+ <span class="feature-text">
1071
+ <span data-lang="fr">Methodologie APEX</span>
1072
+ <span data-lang="en">APEX Methodology</span>
1073
+ </span>
1074
+ </a>
1075
+ </div>
541
1076
  </section>
1077
+
542
1078
  </div>
543
1079
  </main>
544
1080
  </div>
@@ -549,5 +1085,193 @@ smartstack-cli update</code></pre>
549
1085
  <div class="overlay"></div>
550
1086
 
551
1087
  <script src="js/app.js"></script>
1088
+ <script>
1089
+ // Installation page specific scripts
1090
+ var STORAGE_KEY = 'smartstack-install-progress';
1091
+ var completedSteps = [];
1092
+
1093
+ // Initialize on page load
1094
+ document.addEventListener('DOMContentLoaded', function() {
1095
+ loadProgress();
1096
+ loadApiKey();
1097
+ loadPlatform();
1098
+ loadOS();
1099
+ updateProgressBar();
1100
+ });
1101
+
1102
+ // OS switching
1103
+ function setOS(os) {
1104
+ // Update buttons
1105
+ var buttons = document.querySelectorAll('.os-btn');
1106
+ buttons.forEach(function(btn) {
1107
+ btn.classList.remove('active');
1108
+ if (btn.dataset.os === os) {
1109
+ btn.classList.add('active');
1110
+ }
1111
+ });
1112
+
1113
+ // Update content visibility
1114
+ var windowsContent = document.querySelectorAll('.windows-content');
1115
+ var macosContent = document.querySelectorAll('.macos-content');
1116
+ var linuxContent = document.querySelectorAll('.linux-content');
1117
+
1118
+ windowsContent.forEach(function(el) {
1119
+ el.classList.toggle('active', os === 'windows');
1120
+ });
1121
+ macosContent.forEach(function(el) {
1122
+ el.classList.toggle('active', os === 'macos');
1123
+ });
1124
+ linuxContent.forEach(function(el) {
1125
+ el.classList.toggle('active', os === 'linux');
1126
+ });
1127
+
1128
+ // Save preference
1129
+ localStorage.setItem('smartstack-os', os);
1130
+ }
1131
+
1132
+ function loadOS() {
1133
+ // Try to detect OS
1134
+ var detectedOS = 'windows';
1135
+ var userAgent = navigator.userAgent.toLowerCase();
1136
+ if (userAgent.indexOf('mac') !== -1) {
1137
+ detectedOS = 'macos';
1138
+ } else if (userAgent.indexOf('linux') !== -1) {
1139
+ detectedOS = 'linux';
1140
+ }
1141
+
1142
+ var savedOS = localStorage.getItem('smartstack-os') || detectedOS;
1143
+ setOS(savedOS);
1144
+ }
1145
+
1146
+ // Platform switching
1147
+ function setPlatform(platform) {
1148
+ // Update buttons
1149
+ var buttons = document.querySelectorAll('.platform-btn');
1150
+ buttons.forEach(function(btn) {
1151
+ btn.classList.remove('active');
1152
+ if (btn.dataset.platform === platform) {
1153
+ btn.classList.add('active');
1154
+ }
1155
+ });
1156
+
1157
+ // Update content visibility
1158
+ var githubContent = document.querySelectorAll('.github-content');
1159
+ var azureContent = document.querySelectorAll('.azure-content');
1160
+
1161
+ githubContent.forEach(function(el) {
1162
+ el.classList.toggle('active', platform === 'github');
1163
+ });
1164
+ azureContent.forEach(function(el) {
1165
+ el.classList.toggle('active', platform === 'azure');
1166
+ });
1167
+
1168
+ // Save preference
1169
+ localStorage.setItem('smartstack-platform', platform);
1170
+ }
1171
+
1172
+ function loadPlatform() {
1173
+ var platform = localStorage.getItem('smartstack-platform') || 'github';
1174
+ setPlatform(platform);
1175
+ }
1176
+
1177
+ // Checklist management
1178
+ function toggleStep(stepNumber) {
1179
+ var index = completedSteps.indexOf(stepNumber);
1180
+ if (index === -1) {
1181
+ completedSteps.push(stepNumber);
1182
+ } else {
1183
+ completedSteps.splice(index, 1);
1184
+ }
1185
+ saveProgress();
1186
+ updateUI();
1187
+ }
1188
+
1189
+ function saveProgress() {
1190
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(completedSteps));
1191
+ }
1192
+
1193
+ function loadProgress() {
1194
+ var saved = localStorage.getItem(STORAGE_KEY);
1195
+ if (saved) {
1196
+ try {
1197
+ completedSteps = JSON.parse(saved);
1198
+ } catch (e) {
1199
+ completedSteps = [];
1200
+ }
1201
+ }
1202
+ updateUI();
1203
+ }
1204
+
1205
+ function resetProgress() {
1206
+ completedSteps = [];
1207
+ saveProgress();
1208
+ updateUI();
1209
+ }
1210
+
1211
+ function updateUI() {
1212
+ var items = document.querySelectorAll('.checklist-item');
1213
+ items.forEach(function(item) {
1214
+ var step = parseInt(item.dataset.step);
1215
+ if (completedSteps.indexOf(step) !== -1) {
1216
+ item.classList.add('completed');
1217
+ } else {
1218
+ item.classList.remove('completed');
1219
+ }
1220
+ });
1221
+ updateProgressBar();
1222
+ }
1223
+
1224
+ function updateProgressBar() {
1225
+ var total = 7;
1226
+ var completed = completedSteps.length;
1227
+ var percentage = (completed / total) * 100;
1228
+
1229
+ var progressFill = document.getElementById('progress-fill');
1230
+ var progressCount = document.getElementById('progress-count');
1231
+
1232
+ if (progressFill) {
1233
+ progressFill.style.width = percentage + '%';
1234
+ }
1235
+ if (progressCount) {
1236
+ progressCount.textContent = completed + '/' + total;
1237
+ }
1238
+ }
1239
+
1240
+ // API Key management
1241
+ function saveApiKey() {
1242
+ var input = document.getElementById('context7-api-key');
1243
+ var apiKey = input.value.trim();
1244
+
1245
+ if (apiKey) {
1246
+ localStorage.setItem('context7-api-key', apiKey);
1247
+ updateContext7Command(apiKey);
1248
+ } else {
1249
+ localStorage.removeItem('context7-api-key');
1250
+ updateContext7Command('');
1251
+ }
1252
+ }
1253
+
1254
+ function loadApiKey() {
1255
+ var apiKey = localStorage.getItem('context7-api-key');
1256
+ if (apiKey) {
1257
+ var input = document.getElementById('context7-api-key');
1258
+ if (input) {
1259
+ input.value = apiKey;
1260
+ }
1261
+ updateContext7Command(apiKey);
1262
+ }
1263
+ }
1264
+
1265
+ function updateContext7Command(apiKey) {
1266
+ var commandEl = document.getElementById('context7-command');
1267
+ if (commandEl) {
1268
+ if (apiKey) {
1269
+ commandEl.textContent = '# Avec cle API\nclaude mcp add context7 -e CONTEXT7_API_KEY=' + apiKey + ' -- npx @upstash/context7-mcp';
1270
+ } else {
1271
+ commandEl.textContent = '# Sans cle API\nclaude mcp add context7 -- npx @upstash/context7-mcp';
1272
+ }
1273
+ }
1274
+ }
1275
+ </script>
552
1276
  </body>
553
1277
  </html>