appiq-solution 1.4.2 โ†’ 1.4.3

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appiq-solution",
3
- "version": "1.4.2",
3
+ "version": "1.4.3",
4
4
  "description": "๐Ÿš€ Super einfache KI-Agent Installation mit One-Click Workflows fรผr Web, Mobile (Flutter) & Backend - Built with โค๏ธ based on Bmad-Method",
5
5
  "main": "tools/appiq-installer.js",
6
6
  "bin": {
@@ -123,24 +123,29 @@ class AppiqSolutionInstaller {
123
123
  console.log(chalk.dim("https://github.com/Viktor-Hermann/APPIQ-METHOD\n"));
124
124
 
125
125
  try {
126
- // Phase 1: Projekt-Typ Detection
126
+ // Phase 1: Project Type Detection
127
127
  await this.detectProjectType();
128
128
 
129
129
  // Phase 1.5: Tech Stack Detection (Flutter, Web, etc.)
130
130
  await this.detectTechStack();
131
131
 
132
- // Phase 2: Projektidee erfassen
133
- await this.collectProjectIdea();
132
+ // Phase 2: Project idea collection (only for greenfield projects)
133
+ if (this.config.projectType === "greenfield") {
134
+ await this.collectProjectIdea();
135
+ } else {
136
+ // For brownfield projects: auto-set project name from directory
137
+ await this.generateBrownfieldProjectConfig();
138
+ }
134
139
 
135
140
  // Phase 3: IDE Selection (MULTISELECT)
136
141
  await this.selectIDE();
137
142
 
138
143
 
139
144
 
140
- // Phase 5: Projektplan erstellen
145
+ // Phase 5: Create project plan
141
146
  await this.createProjectPlan();
142
147
 
143
- // Phase 6: Plan-Freigabe
148
+ // Phase 6: Plan Approval
144
149
  await this.approvePlan();
145
150
 
146
151
  // Phase 7: Installation
@@ -172,7 +177,7 @@ class AppiqSolutionInstaller {
172
177
  }
173
178
 
174
179
  async detectProjectType() {
175
- console.log(chalk.yellow("๐Ÿ” Projekt-Analyse..."));
180
+ console.log(chalk.yellow("๐Ÿ” Project Analysis..."));
176
181
 
177
182
  // Auto-Detection
178
183
  const hasPackageJson = fs.existsSync(
@@ -185,20 +190,20 @@ class AppiqSolutionInstaller {
185
190
  const hasDocumentation = this.hasExistingDocumentation();
186
191
 
187
192
  let suggestedType = "greenfield";
188
- let reason = "Neues Projekt erkannt";
193
+ let reason = "New project detected";
189
194
 
190
195
  if (hasExistingCode || hasDocumentation) {
191
196
  suggestedType = "brownfield";
192
- reason = "Existierenden Code/Dokumentation gefunden";
197
+ reason = "Existing code/documentation found";
193
198
  }
194
199
 
195
- console.log(chalk.gray(`๐Ÿ’ก Analyse: ${reason}`));
200
+ console.log(chalk.gray(`๐Ÿ’ก Analysis: ${reason}`));
196
201
  console.log(
197
202
  chalk.gray(
198
- `๐Ÿ“Š Empfehlung: ${
203
+ `๐Ÿ“Š Recommendation: ${
199
204
  suggestedType === "greenfield"
200
- ? "Greenfield (Neues Projekt)"
201
- : "Brownfield (Bestehendes Projekt)"
205
+ ? "Greenfield (New Project)"
206
+ : "Brownfield (Existing Project)"
202
207
  }`
203
208
  )
204
209
  );
@@ -208,17 +213,17 @@ class AppiqSolutionInstaller {
208
213
  {
209
214
  type: "list",
210
215
  name: "projectType",
211
- message: "๐ŸŽฏ Welcher Projekt-Typ ist das?",
216
+ message: "๐ŸŽฏ What type of project is this?",
212
217
  choices: [
213
218
  {
214
- name: `โœจ Greenfield - Neues Projekt (Empfohlen: ${
219
+ name: `โœจ Greenfield - New project (Recommended: ${
215
220
  suggestedType === "greenfield" ? "โœ…" : "โŒ"
216
221
  })`,
217
222
  value: "greenfield",
218
223
  short: "Greenfield",
219
224
  },
220
225
  {
221
- name: `๐Ÿ”ง Brownfield - Bestehendes Projekt (Empfohlen: ${
226
+ name: `๐Ÿ”ง Brownfield - Enhance existing project (Recommended: ${
222
227
  suggestedType === "brownfield" ? "โœ…" : "โŒ"
223
228
  })`,
224
229
  value: "brownfield",
@@ -232,30 +237,30 @@ class AppiqSolutionInstaller {
232
237
  this.config.projectType = projectType;
233
238
  console.log(
234
239
  chalk.green(
235
- `โœ… Projekt-Typ: ${
240
+ `โœ… Project Type: ${
236
241
  projectType === "greenfield"
237
- ? "Greenfield (Neu)"
238
- : "Brownfield (Bestehend)"
242
+ ? "Greenfield (New)"
243
+ : "Brownfield (Existing)"
239
244
  }\n`
240
245
  )
241
246
  );
242
247
  }
243
248
 
244
249
  async selectIDE() {
245
- console.log(chalk.yellow("๐Ÿ› ๏ธ IDE Auswahl"));
250
+ console.log(chalk.yellow("๐Ÿ› ๏ธ IDE Selection"));
246
251
  console.log(
247
252
  chalk.bold.yellow.bgRed(
248
- " โš ๏ธ MULTISELECT: Verwenden Sie SPACEBAR zum Auswรคhlen mehrerer IDEs! "
253
+ " โš ๏ธ MULTISELECT: Use SPACEBAR to select multiple IDEs! "
249
254
  )
250
255
  );
251
- console.log(chalk.gray("Wรคhlen Sie ALLE IDEs aus, die Sie nutzen:\n"));
256
+ console.log(chalk.gray("Select ALL IDEs that you use:\n"));
252
257
 
253
258
  const { ides } = await inquirer.prompt([
254
259
  {
255
260
  type: "checkbox",
256
261
  name: "ides",
257
262
  message:
258
- "๐ŸŽฏ Welche IDEs nutzen Sie? (SPACEBAR = auswรคhlen, ENTER = bestรคtigen)",
263
+ "๐ŸŽฏ Which IDEs do you use? (SPACEBAR = select, ENTER = confirm)",
259
264
  choices: [
260
265
  { name: "๐Ÿ”ต Cursor", value: "cursor" },
261
266
  { name: "๐ŸŸฃ Claude Code CLI", value: "claude-code" },
@@ -268,7 +273,7 @@ class AppiqSolutionInstaller {
268
273
  ],
269
274
  validate: (input) => {
270
275
  if (input.length === 0) {
271
- return "Bitte wรคhlen Sie mindestens eine IDE aus!";
276
+ return "Please select at least one IDE!";
272
277
  }
273
278
  return true;
274
279
  },
@@ -284,7 +289,7 @@ class AppiqSolutionInstaller {
284
289
 
285
290
  async detectTechStack() {
286
291
  console.log(chalk.yellow("๐Ÿ” Tech Stack Detection"));
287
- console.log(chalk.gray("Analysiere Projekt-Umgebung und Tech Stack...\n"));
292
+ console.log(chalk.gray("Analyzing project environment and tech stack...\n"));
288
293
 
289
294
  // Check for Flutter
290
295
  const isFlutter = fs.existsSync(
@@ -317,20 +322,20 @@ class AppiqSolutionInstaller {
317
322
 
318
323
  // Auto-detect or ask user
319
324
  if (isFlutter) {
320
- console.log(chalk.green("โœ… Flutter Projekt erkannt!"));
325
+ console.log(chalk.green("โœ… Flutter project detected!"));
321
326
  this.config.techStack.platform = "flutter";
322
327
  this.config.techStack.isFlutter = true;
323
328
  this.config.techStack.hasUI = true;
324
- console.log(chalk.cyan(" โ†’ Dart MCP Server wird konfiguriert"));
329
+ console.log(chalk.cyan(" โ†’ Dart MCP Server will be configured"));
325
330
  console.log(
326
- chalk.cyan(" โ†’ Flutter Clean Architecture Agents werden geladen\n")
331
+ chalk.cyan(" โ†’ Flutter Clean Architecture Agents will be loaded\n")
327
332
  );
328
333
  } else if (webFramework) {
329
- console.log(chalk.green(`โœ… ${webFramework} Projekt erkannt!`));
334
+ console.log(chalk.green(`โœ… ${webFramework} project detected!`));
330
335
  this.config.techStack.platform = "web";
331
336
  this.config.techStack.hasUI = true;
332
337
  console.log(
333
- chalk.cyan(" โ†’ shadcn/ui + v0.dev Integration wird konfiguriert\n")
338
+ chalk.cyan(" โ†’ shadcn/ui + v0.dev integration will be configured\n")
334
339
  );
335
340
  } else {
336
341
  // Ask user for platform
@@ -338,13 +343,13 @@ class AppiqSolutionInstaller {
338
343
  {
339
344
  type: "list",
340
345
  name: "platform",
341
- message: "๐ŸŽฏ Welchen Tech Stack verwenden Sie?",
346
+ message: "๐ŸŽฏ Which tech stack are you using?",
342
347
  choices: [
343
348
  { name: "๐Ÿ“ฑ Flutter Mobile App", value: "flutter" },
344
349
  { name: "๐ŸŒ Web App (React/Next.js/Vue)", value: "web" },
345
350
  { name: "๐Ÿš€ Fullstack (Frontend + Backend)", value: "fullstack" },
346
351
  { name: "โšก API/Backend Only", value: "api" },
347
- { name: "๐Ÿคท Noch nicht sicher", value: "unknown" },
352
+ { name: "๐Ÿคท Not sure yet", value: "unknown" },
348
353
  ],
349
354
  },
350
355
  ]);
@@ -356,13 +361,13 @@ class AppiqSolutionInstaller {
356
361
  );
357
362
 
358
363
  if (platform === "flutter") {
359
- console.log(chalk.cyan(" โ†’ Dart MCP Server wird konfiguriert"));
364
+ console.log(chalk.cyan(" โ†’ Dart MCP Server will be configured"));
360
365
  console.log(
361
- chalk.cyan(" โ†’ Flutter Clean Architecture Agents werden geladen")
366
+ chalk.cyan(" โ†’ Flutter Clean Architecture Agents will be loaded")
362
367
  );
363
368
  } else if (platform === "web" || platform === "fullstack") {
364
369
  console.log(
365
- chalk.cyan(" โ†’ shadcn/ui + v0.dev Integration wird konfiguriert")
370
+ chalk.cyan(" โ†’ shadcn/ui + v0.dev integration will be configured")
366
371
  );
367
372
  }
368
373
  console.log("");
@@ -370,32 +375,49 @@ class AppiqSolutionInstaller {
370
375
  }
371
376
 
372
377
  async collectProjectIdea() {
373
- console.log(chalk.yellow("๐Ÿ’ก Projektidee erfassen"));
374
- console.log(chalk.gray("Beschreiben Sie Ihr Projekt-Vorhaben:\n"));
378
+ console.log(chalk.yellow("๐Ÿ’ก Collecting Project Information"));
379
+
380
+ // For brownfield projects, skip detailed project idea collection
381
+ if (this.config.projectType === "brownfield") {
382
+ console.log(
383
+ chalk.gray("๐Ÿ“ Detected existing project - using current directory\n")
384
+ );
385
+
386
+ const dirName = path.basename(this.projectRoot);
387
+ this.config.projectName = dirName;
388
+ this.config.projectIdea = `Brownfield project: ${dirName}`;
389
+ this.config.targetUsers = "Existing project users";
390
+
391
+ console.log(chalk.green(`โœ… Project identified: "${dirName}"\n`));
392
+ return;
393
+ }
394
+
395
+ // For greenfield projects, collect detailed information
396
+ console.log(chalk.gray("Describe your project concept:\n"));
375
397
 
376
398
  const { projectIdea, projectName, targetUsers } = await inquirer.prompt([
377
399
  {
378
400
  type: "input",
379
401
  name: "projectName",
380
- message: "๐Ÿท๏ธ Wie soll Ihr Projekt heiรŸen?",
402
+ message: "๐Ÿท๏ธ What should your project be called?",
381
403
  validate: (input) =>
382
- input.length > 0 ? true : "Bitte geben Sie einen Projektnamen ein!",
404
+ input.length > 0 ? true : "Please enter a project name!",
383
405
  },
384
406
  {
385
407
  type: "editor",
386
408
  name: "projectIdea",
387
- message: "๐Ÿ’ก Beschreiben Sie Ihre Projektidee (detailliert):",
409
+ message: "๐Ÿ’ก Describe your project idea (detailed):",
388
410
  validate: (input) =>
389
411
  input.length > 10
390
412
  ? true
391
- : "Bitte beschreiben Sie Ihr Projekt ausfรผhrlicher!",
413
+ : "Please describe your project in more detail!",
392
414
  },
393
415
  {
394
416
  type: "input",
395
417
  name: "targetUsers",
396
- message: "๐Ÿ‘ฅ Wer sind Ihre Zielgruppen/User?",
418
+ message: "๐Ÿ‘ฅ Who are your target groups/users?",
397
419
  validate: (input) =>
398
- input.length > 0 ? true : "Bitte beschreiben Sie Ihre Zielgruppe!",
420
+ input.length > 0 ? true : "Please describe your target audience!",
399
421
  },
400
422
  ]);
401
423
 
@@ -403,18 +425,88 @@ class AppiqSolutionInstaller {
403
425
  this.config.projectIdea = projectIdea;
404
426
  this.config.targetUsers = targetUsers;
405
427
 
406
- console.log(chalk.green(`โœ… Projektidee erfasst: "${projectName}"\n`));
428
+ console.log(chalk.green(`โœ… Project idea captured: "${projectName}"\n`));
429
+ }
430
+
431
+ async generateBrownfieldProjectConfig() {
432
+ console.log(chalk.yellow("๐Ÿ“‹ Configuring brownfield project..."));
433
+
434
+ // Auto-set project name from directory name
435
+ const dirName = path.basename(this.projectRoot);
436
+ this.config.projectName = dirName;
437
+
438
+ console.log(chalk.cyan(`๐Ÿท๏ธ Project name: ${dirName}`));
439
+ console.log(chalk.gray(" โ†’ Using directory name as project name"));
440
+
441
+ // Set default values for brownfield projects
442
+ this.config.projectIdea = `Enhancing existing ${dirName} project with AI agents`;
443
+ this.config.targetUsers = "Existing project stakeholders and development team";
444
+
445
+ // Auto-create docs/prd.md if it doesn't exist
446
+ const docsDir = path.join(this.projectRoot, "docs");
447
+ const prdPath = path.join(docsDir, "prd.md");
448
+
449
+ if (!fs.existsSync(prdPath)) {
450
+ if (!fs.existsSync(docsDir)) {
451
+ fs.mkdirSync(docsDir, { recursive: true });
452
+ }
453
+
454
+ const prdTemplate = this.config.techStack?.isFlutter ?
455
+ "flutter-mobile-prd-tmpl.yaml" : "prd-tmpl.yaml";
456
+
457
+ console.log(chalk.cyan("๐Ÿ“„ Creating docs/prd.md automatically"));
458
+ console.log(chalk.gray(` โ†’ Using template: ${prdTemplate}`));
459
+
460
+ const prdContent = `# Product Requirements Document - ${dirName}
461
+
462
+ ## Project Overview
463
+ This is a brownfield project enhancement for ${dirName}.
464
+
465
+ **Note:** Please fill in your specific requirements, features, and objectives below.
466
+
467
+ ## Current State Analysis
468
+ - [ ] Document existing functionality
469
+ - [ ] Identify technical debt
470
+ - [ ] List current features
471
+ - [ ] Note architecture patterns
472
+
473
+ ## Enhancement Goals
474
+ - [ ] Define new features to add
475
+ - [ ] List improvements to make
476
+ - [ ] Specify performance goals
477
+ - [ ] Document user experience improvements
478
+
479
+ ## Technical Requirements
480
+ - [ ] Document current tech stack
481
+ - [ ] List required integrations
482
+ - [ ] Define API requirements
483
+ - [ ] Specify database changes
484
+
485
+ ## Next Steps
486
+ 1. Fill in the requirements above
487
+ 2. Run \`@architect\` to analyze current architecture
488
+ 3. Use \`@sm\` to create feature stories
489
+ 4. Start implementation with \`@dev\`
490
+ `;
491
+
492
+ fs.writeFileSync(prdPath, prdContent);
493
+ console.log(chalk.green("โœ… docs/prd.md created successfully"));
494
+ } else {
495
+ console.log(chalk.cyan("๐Ÿ“„ docs/prd.md already exists"));
496
+ }
497
+
498
+ console.log(chalk.green(`โœ… Brownfield project configured: "${dirName}"\n`));
407
499
  }
408
500
 
409
501
  async createProjectPlan() {
410
- console.log(chalk.yellow("๐Ÿ“‹ Projektplan wird erstellt..."));
411
- console.log(chalk.gray("Basierend auf Ihrer Idee und dem Projekt-Typ\n"));
502
+ console.log(chalk.yellow("๐Ÿ“‹ Creating project plan..."));
503
+ console.log(chalk.gray("Based on your idea and project type\n"));
412
504
 
413
- // Hier wรผrde normalerweise die team-fullstack.yaml verwendet
505
+ // Normally team-fullstack.yaml would be used here
414
506
  const plan = this.generateProjectPlan();
415
507
  this.config.projectPlan = plan;
416
508
 
417
- console.log(chalk.cyan("๐Ÿ“‹ Ihr Projektplan:"));
509
+ console.log(chalk.cyan("๐Ÿ“‹ Your Project Plan:"));
418
510
  console.log(chalk.white("โ”€".repeat(50)));
419
511
  console.log(plan);
420
512
  console.log(chalk.white("โ”€".repeat(50) + "\n"));
@@ -425,26 +517,26 @@ class AppiqSolutionInstaller {
425
517
  {
426
518
  type: "confirm",
427
519
  name: "approved",
428
- message: "โœ… Sind Sie mit diesem Plan zufrieden?",
520
+ message: "โœ… Are you satisfied with this plan?",
429
521
  default: true,
430
522
  },
431
523
  {
432
524
  type: "input",
433
525
  name: "changes",
434
526
  message:
435
- "๐Ÿ“ Welche ร„nderungen mรถchten Sie? (oder ENTER fรผr keine ร„nderungen)",
527
+ "๐Ÿ“ What changes would you like? (or ENTER for no changes)",
436
528
  when: (answers) => !answers.approved,
437
529
  },
438
530
  ]);
439
531
 
440
532
  if (!approved && changes) {
441
- console.log(chalk.yellow("๐Ÿ“ Plan wird angepasst..."));
533
+ console.log(chalk.yellow("๐Ÿ“ Adapting plan..."));
442
534
  this.config.planChanges = changes;
443
- // Hier wรผrde Plan angepasst werden
444
- console.log(chalk.green("โœ… Plan wurde angepasst!\n"));
535
+ // Plan would be adapted here
536
+ console.log(chalk.green("โœ… Plan has been adapted!\n"));
445
537
  } else {
446
538
  console.log(
447
- chalk.green("โœ… Plan freigegeben - Entwicklung kann starten!\n")
539
+ chalk.green("โœ… Plan approved - development can start!\n")
448
540
  );
449
541
  }
450
542
 
@@ -454,50 +546,50 @@ class AppiqSolutionInstaller {
454
546
  generateProjectPlan() {
455
547
  const { projectType, projectName, projectIdea, targetUsers } = this.config;
456
548
 
457
- return `๐ŸŽฏ PROJEKTPLAN: ${projectName}
549
+ return `๐ŸŽฏ PROJECT PLAN: ${projectName}
458
550
 
459
- ๐Ÿ“Š PROJEKT-TYP: ${
551
+ ๐Ÿ“Š PROJECT TYPE: ${
460
552
  projectType === "greenfield"
461
- ? "Greenfield (Neues Projekt)"
462
- : "Brownfield (Bestehendes Projekt)"
553
+ ? "Greenfield (New Project)"
554
+ : "Brownfield (Existing Project)"
463
555
  }
464
- ๐Ÿ‘ฅ ZIELGRUPPE: ${targetUsers}
556
+ ๐Ÿ‘ฅ TARGET AUDIENCE: ${targetUsers}
465
557
 
466
- ๐Ÿ’ก PROJEKTIDEE:
558
+ ๐Ÿ’ก PROJECT IDEA:
467
559
  ${projectIdea}
468
560
 
469
- ๐Ÿš€ ENTWICKLUNGS-PIPELINE:
561
+ ๐Ÿš€ DEVELOPMENT PIPELINE:
470
562
  ${
471
563
  projectType === "greenfield"
472
564
  ? `
473
- 1. ๐Ÿ“‹ PO (Product Owner) โ†’ PRD erstellen
474
- 2. ๐Ÿ—๏ธ Architect โ†’ System-Architektur designen
565
+ 1. ๐Ÿ“‹ PO (Product Owner) โ†’ Create PRD
566
+ 2. ๐Ÿ—๏ธ Architect โ†’ Design system architecture
475
567
  3. ๐ŸŽจ UX Expert โ†’ UI/UX Design
476
- 4. ๐Ÿ“ Story Master โ†’ User Stories aufbrechen
477
- 5. ๐Ÿ’ป Developer โ†’ Features implementieren
478
- 6. โœ… QA Expert โ†’ Testing & Validierung
479
- 7. ๐Ÿ“Š SM (Scrum Master) โ†’ Sprint-Koordination
568
+ 4. ๐Ÿ“ Story Master โ†’ Break down user stories
569
+ 5. ๐Ÿ’ป Developer โ†’ Implement features
570
+ 6. โœ… QA Expert โ†’ Testing & validation
571
+ 7. ๐Ÿ“Š SM (Scrum Master) โ†’ Sprint coordination
480
572
  `
481
573
  : `
482
- 1. ๐Ÿ“‹ PO โ†’ Bestehende Dokumentation analysieren
483
- 2. ๐Ÿ—๏ธ Architect โ†’ Architektur-Review
484
- 3. ๐Ÿ“ Story Master โ†’ Neue Features planen
485
- 4. ๐Ÿ’ป Developer โ†’ Features in bestehende Basis integrieren
486
- 5. โœ… QA Expert โ†’ Regression Testing
487
- 6. ๐Ÿ“Š SM โ†’ Change Management
574
+ 1. ๐Ÿ“‹ PO โ†’ Analyze existing documentation
575
+ 2. ๐Ÿ—๏ธ Architect โ†’ Architecture review
576
+ 3. ๐Ÿ“ Story Master โ†’ Plan new features
577
+ 4. ๐Ÿ’ป Developer โ†’ Integrate features into existing base
578
+ 5. โœ… QA Expert โ†’ Regression testing
579
+ 6. ๐Ÿ“Š SM โ†’ Change management
488
580
  `
489
581
  }
490
582
 
491
- ๐ŸŽฎ ONE-CLICK BEFEHLE:
492
- - /start โ†’ Gesamten Workflow starten
493
- - /plan โ†’ Detailplanung
494
- - /develop โ†’ Entwicklung beginnen
495
- - /review โ†’ Code Review
496
- - /deploy โ†’ Deployment vorbereiten`;
583
+ ๐ŸŽฎ ONE-CLICK COMMANDS:
584
+ - /start โ†’ Start entire workflow
585
+ - /plan โ†’ Detailed planning
586
+ - /develop โ†’ Begin development
587
+ - /review โ†’ Code review
588
+ - /deploy โ†’ Prepare deployment`;
497
589
  }
498
590
 
499
591
  async setupBMADCoreConfig() {
500
- console.log(chalk.yellow("โš™๏ธ BMAD Core Configuration einrichten..."));
592
+ console.log(chalk.yellow("โš™๏ธ Setting up BMAD Core Configuration..."));
501
593
 
502
594
  // Create .bmad-core directory
503
595
  const bmadCoreDir = path.join(this.appiqPath, ".bmad-core");
@@ -565,11 +657,11 @@ ${
565
657
  fs.writeFileSync(path.join(docsDir, "prd.md"), this.generateInitialPRD());
566
658
  }
567
659
 
568
- console.log(chalk.green("โœ… Document Templates erstellt!\n"));
660
+ console.log(chalk.green("โœ… Document Templates created!\n"));
569
661
  }
570
662
 
571
663
  async setupAgentDependencies() {
572
- console.log(chalk.yellow("๐Ÿ”— Agent Dependencies System einrichten..."));
664
+ console.log(chalk.yellow("๐Ÿ”— Setting up Agent Dependencies System..."));
573
665
 
574
666
  const agentsDir = path.join(this.appiqPath, "agents");
575
667
  const tasksDir = path.join(this.appiqPath, "tasks");
@@ -2164,48 +2256,48 @@ ${
2164
2256
  generateBrownfieldWorkflow(config) {
2165
2257
  const workflows = {
2166
2258
  "Appiq Launcher": `
2167
- **๐Ÿ”ง Schnell-Start fรผr bestehendes Projekt:**
2168
- 1. \`/analyze\` - Analysiert bestehendes Projekt
2169
- 2. **Findet:** Existierende Docs, Code-Struktur, Tech-Stack
2170
- 3. **Erstellt:** Angepasste Workflows fรผr Ihr Projekt`,
2259
+ **๐Ÿ”ง Quick Start for Existing Project:**
2260
+ 1. \`/analyze\` - Analyzes existing project
2261
+ 2. **Finds:** Existing docs, code structure, tech stack
2262
+ 3. **Creates:** Customized workflows for your project`,
2171
2263
 
2172
2264
  "Project Manager": `
2173
- **๐Ÿ“‹ Automatische PRD Erstellung:**
2174
- 1. **Erstellt automatisch:** \`docs/prd.md\` (falls nicht vorhanden)
2175
- 2. **Fรผr Flutter Projekte:** Verwendet flutter-mobile-prd-tmpl.yaml
2176
- 3. **Keine Projektname-Abfrage** - Verwendet Verzeichnisname
2177
- 4. **Nรคchster Schritt:** Architect fรผr Architektur-Review`,
2265
+ **๐Ÿ“‹ Automatic PRD Creation:**
2266
+ 1. **Creates automatically:** \`docs/prd.md\` (if not present)
2267
+ 2. **For Flutter Projects:** Uses flutter-mobile-prd-tmpl.yaml
2268
+ 3. **No project name prompt** - Uses directory name
2269
+ 4. **Next Step:** Architect for architecture review`,
2178
2270
 
2179
2271
  "System Architect": `
2180
- **๐Ÿ—๏ธ Architektur-Review:**
2181
- 1. \`/review-architecture\` - Analysiert bestehende Struktur
2182
- 2. **Erstellt/updated:** \`docs/architecture.md\`
2183
- 3. **Nรคchster Schritt:** Story Master fรผr neue Features`,
2272
+ **๐Ÿ—๏ธ Architecture Review:**
2273
+ 1. \`/review-architecture\` - Analyzes existing structure
2274
+ 2. **Creates/updates:** \`docs/architecture.md\`
2275
+ 3. **Next Step:** Story Master for new features`,
2184
2276
 
2185
2277
  "Story Master": `
2186
2278
  **๐Ÿ“ Feature Stories:**
2187
- 1. \`/new-feature\` - Neue Story fรผr bestehendes Projekt
2188
- 2. **Datei wird erstellt:** \`docs/stories/feature-XXX.md\`
2189
- 3. **Berรผcksichtigt:** Bestehende Code-Basis`,
2279
+ 1. \`/new-feature\` - New story for existing project
2280
+ 2. **File created:** \`docs/stories/feature-XXX.md\`
2281
+ 3. **Considers:** Existing code base`,
2190
2282
 
2191
2283
  "Senior Developer": `
2192
2284
  **๐Ÿ’ป Feature Implementation:**
2193
- 1. \`/add-feature\` - Implementiert in bestehendem Code
2194
- 2. **Bearbeitet:** Bestehende Dateien sicher
2195
- 3. **Erstellt:** Neue Dateien wo nรถtig`,
2285
+ 1. \`/add-feature\` - Implements in existing code
2286
+ 2. **Edits:** Existing files safely
2287
+ 3. **Creates:** New files where needed`,
2196
2288
 
2197
2289
  "QA Expert": `
2198
2290
  **โœ… Regression Testing:**
2199
- 1. \`/regression-test\` - Testet neue Features
2200
- 2. **Validiert:** Keine Breaking Changes
2201
- 3. **Erstellt:** Test-Reports fรผr bestehende + neue Features`,
2291
+ 1. \`/regression-test\` - Tests new features
2292
+ 2. **Validates:** No breaking changes
2293
+ 3. **Creates:** Test reports for existing + new features`,
2202
2294
  };
2203
2295
 
2204
2296
  return workflows[config.name] || "Standard Brownfield Workflow";
2205
2297
  }
2206
2298
 
2207
2299
  async setupOneClickWorkflows() {
2208
- console.log(chalk.yellow("โšก One-Click Workflows einrichten..."));
2300
+ console.log(chalk.yellow("โšก Setting up One-Click Workflows..."));
2209
2301
 
2210
2302
  // Create quick commands
2211
2303
  const commandsDir = path.join(this.appiqPath, "commands");
@@ -11,7 +11,7 @@ const program = new Command();
11
11
  program
12
12
  .name("bmad-build")
13
13
  .description("BMad-Method build tool for creating web bundles")
14
- .version("1.4.0");
14
+ .version("1.4.1");
15
15
 
16
16
  program
17
17
  .command('build')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appiq-solution",
3
- "version": "1.4.2",
3
+ "version": "1.4.3",
4
4
  "description": "๐Ÿš€ Super einfache KI-Agent Installation mit One-Click Workflows fรผr Web, Mobile (Flutter) & Backend - Built with โค๏ธ based on Bmad-Method",
5
5
  "main": "tools/appiq-installer.js",
6
6
  "bin": {
@@ -123,24 +123,29 @@ class AppiqSolutionInstaller {
123
123
  console.log(chalk.dim("https://github.com/Viktor-Hermann/APPIQ-METHOD\n"));
124
124
 
125
125
  try {
126
- // Phase 1: Projekt-Typ Detection
126
+ // Phase 1: Project Type Detection
127
127
  await this.detectProjectType();
128
128
 
129
129
  // Phase 1.5: Tech Stack Detection (Flutter, Web, etc.)
130
130
  await this.detectTechStack();
131
131
 
132
- // Phase 2: Projektidee erfassen
133
- await this.collectProjectIdea();
132
+ // Phase 2: Project idea collection (only for greenfield projects)
133
+ if (this.config.projectType === "greenfield") {
134
+ await this.collectProjectIdea();
135
+ } else {
136
+ // For brownfield projects: auto-set project name from directory
137
+ await this.generateBrownfieldProjectConfig();
138
+ }
134
139
 
135
140
  // Phase 3: IDE Selection (MULTISELECT)
136
141
  await this.selectIDE();
137
142
 
138
143
 
139
144
 
140
- // Phase 5: Projektplan erstellen
145
+ // Phase 5: Create project plan
141
146
  await this.createProjectPlan();
142
147
 
143
- // Phase 6: Plan-Freigabe
148
+ // Phase 6: Plan Approval
144
149
  await this.approvePlan();
145
150
 
146
151
  // Phase 7: Installation
@@ -172,7 +177,7 @@ class AppiqSolutionInstaller {
172
177
  }
173
178
 
174
179
  async detectProjectType() {
175
- console.log(chalk.yellow("๐Ÿ” Projekt-Analyse..."));
180
+ console.log(chalk.yellow("๐Ÿ” Project Analysis..."));
176
181
 
177
182
  // Auto-Detection
178
183
  const hasPackageJson = fs.existsSync(
@@ -185,20 +190,20 @@ class AppiqSolutionInstaller {
185
190
  const hasDocumentation = this.hasExistingDocumentation();
186
191
 
187
192
  let suggestedType = "greenfield";
188
- let reason = "Neues Projekt erkannt";
193
+ let reason = "New project detected";
189
194
 
190
195
  if (hasExistingCode || hasDocumentation) {
191
196
  suggestedType = "brownfield";
192
- reason = "Existierenden Code/Dokumentation gefunden";
197
+ reason = "Existing code/documentation found";
193
198
  }
194
199
 
195
- console.log(chalk.gray(`๐Ÿ’ก Analyse: ${reason}`));
200
+ console.log(chalk.gray(`๐Ÿ’ก Analysis: ${reason}`));
196
201
  console.log(
197
202
  chalk.gray(
198
- `๐Ÿ“Š Empfehlung: ${
203
+ `๐Ÿ“Š Recommendation: ${
199
204
  suggestedType === "greenfield"
200
- ? "Greenfield (Neues Projekt)"
201
- : "Brownfield (Bestehendes Projekt)"
205
+ ? "Greenfield (New Project)"
206
+ : "Brownfield (Existing Project)"
202
207
  }`
203
208
  )
204
209
  );
@@ -208,17 +213,17 @@ class AppiqSolutionInstaller {
208
213
  {
209
214
  type: "list",
210
215
  name: "projectType",
211
- message: "๐ŸŽฏ Welcher Projekt-Typ ist das?",
216
+ message: "๐ŸŽฏ What type of project is this?",
212
217
  choices: [
213
218
  {
214
- name: `โœจ Greenfield - Neues Projekt (Empfohlen: ${
219
+ name: `โœจ Greenfield - New project (Recommended: ${
215
220
  suggestedType === "greenfield" ? "โœ…" : "โŒ"
216
221
  })`,
217
222
  value: "greenfield",
218
223
  short: "Greenfield",
219
224
  },
220
225
  {
221
- name: `๐Ÿ”ง Brownfield - Bestehendes Projekt (Empfohlen: ${
226
+ name: `๐Ÿ”ง Brownfield - Enhance existing project (Recommended: ${
222
227
  suggestedType === "brownfield" ? "โœ…" : "โŒ"
223
228
  })`,
224
229
  value: "brownfield",
@@ -232,30 +237,30 @@ class AppiqSolutionInstaller {
232
237
  this.config.projectType = projectType;
233
238
  console.log(
234
239
  chalk.green(
235
- `โœ… Projekt-Typ: ${
240
+ `โœ… Project Type: ${
236
241
  projectType === "greenfield"
237
- ? "Greenfield (Neu)"
238
- : "Brownfield (Bestehend)"
242
+ ? "Greenfield (New)"
243
+ : "Brownfield (Existing)"
239
244
  }\n`
240
245
  )
241
246
  );
242
247
  }
243
248
 
244
249
  async selectIDE() {
245
- console.log(chalk.yellow("๐Ÿ› ๏ธ IDE Auswahl"));
250
+ console.log(chalk.yellow("๐Ÿ› ๏ธ IDE Selection"));
246
251
  console.log(
247
252
  chalk.bold.yellow.bgRed(
248
- " โš ๏ธ MULTISELECT: Verwenden Sie SPACEBAR zum Auswรคhlen mehrerer IDEs! "
253
+ " โš ๏ธ MULTISELECT: Use SPACEBAR to select multiple IDEs! "
249
254
  )
250
255
  );
251
- console.log(chalk.gray("Wรคhlen Sie ALLE IDEs aus, die Sie nutzen:\n"));
256
+ console.log(chalk.gray("Select ALL IDEs that you use:\n"));
252
257
 
253
258
  const { ides } = await inquirer.prompt([
254
259
  {
255
260
  type: "checkbox",
256
261
  name: "ides",
257
262
  message:
258
- "๐ŸŽฏ Welche IDEs nutzen Sie? (SPACEBAR = auswรคhlen, ENTER = bestรคtigen)",
263
+ "๐ŸŽฏ Which IDEs do you use? (SPACEBAR = select, ENTER = confirm)",
259
264
  choices: [
260
265
  { name: "๐Ÿ”ต Cursor", value: "cursor" },
261
266
  { name: "๐ŸŸฃ Claude Code CLI", value: "claude-code" },
@@ -268,7 +273,7 @@ class AppiqSolutionInstaller {
268
273
  ],
269
274
  validate: (input) => {
270
275
  if (input.length === 0) {
271
- return "Bitte wรคhlen Sie mindestens eine IDE aus!";
276
+ return "Please select at least one IDE!";
272
277
  }
273
278
  return true;
274
279
  },
@@ -284,7 +289,7 @@ class AppiqSolutionInstaller {
284
289
 
285
290
  async detectTechStack() {
286
291
  console.log(chalk.yellow("๐Ÿ” Tech Stack Detection"));
287
- console.log(chalk.gray("Analysiere Projekt-Umgebung und Tech Stack...\n"));
292
+ console.log(chalk.gray("Analyzing project environment and tech stack...\n"));
288
293
 
289
294
  // Check for Flutter
290
295
  const isFlutter = fs.existsSync(
@@ -317,20 +322,20 @@ class AppiqSolutionInstaller {
317
322
 
318
323
  // Auto-detect or ask user
319
324
  if (isFlutter) {
320
- console.log(chalk.green("โœ… Flutter Projekt erkannt!"));
325
+ console.log(chalk.green("โœ… Flutter project detected!"));
321
326
  this.config.techStack.platform = "flutter";
322
327
  this.config.techStack.isFlutter = true;
323
328
  this.config.techStack.hasUI = true;
324
- console.log(chalk.cyan(" โ†’ Dart MCP Server wird konfiguriert"));
329
+ console.log(chalk.cyan(" โ†’ Dart MCP Server will be configured"));
325
330
  console.log(
326
- chalk.cyan(" โ†’ Flutter Clean Architecture Agents werden geladen\n")
331
+ chalk.cyan(" โ†’ Flutter Clean Architecture Agents will be loaded\n")
327
332
  );
328
333
  } else if (webFramework) {
329
- console.log(chalk.green(`โœ… ${webFramework} Projekt erkannt!`));
334
+ console.log(chalk.green(`โœ… ${webFramework} project detected!`));
330
335
  this.config.techStack.platform = "web";
331
336
  this.config.techStack.hasUI = true;
332
337
  console.log(
333
- chalk.cyan(" โ†’ shadcn/ui + v0.dev Integration wird konfiguriert\n")
338
+ chalk.cyan(" โ†’ shadcn/ui + v0.dev integration will be configured\n")
334
339
  );
335
340
  } else {
336
341
  // Ask user for platform
@@ -338,13 +343,13 @@ class AppiqSolutionInstaller {
338
343
  {
339
344
  type: "list",
340
345
  name: "platform",
341
- message: "๐ŸŽฏ Welchen Tech Stack verwenden Sie?",
346
+ message: "๐ŸŽฏ Which tech stack are you using?",
342
347
  choices: [
343
348
  { name: "๐Ÿ“ฑ Flutter Mobile App", value: "flutter" },
344
349
  { name: "๐ŸŒ Web App (React/Next.js/Vue)", value: "web" },
345
350
  { name: "๐Ÿš€ Fullstack (Frontend + Backend)", value: "fullstack" },
346
351
  { name: "โšก API/Backend Only", value: "api" },
347
- { name: "๐Ÿคท Noch nicht sicher", value: "unknown" },
352
+ { name: "๐Ÿคท Not sure yet", value: "unknown" },
348
353
  ],
349
354
  },
350
355
  ]);
@@ -356,13 +361,13 @@ class AppiqSolutionInstaller {
356
361
  );
357
362
 
358
363
  if (platform === "flutter") {
359
- console.log(chalk.cyan(" โ†’ Dart MCP Server wird konfiguriert"));
364
+ console.log(chalk.cyan(" โ†’ Dart MCP Server will be configured"));
360
365
  console.log(
361
- chalk.cyan(" โ†’ Flutter Clean Architecture Agents werden geladen")
366
+ chalk.cyan(" โ†’ Flutter Clean Architecture Agents will be loaded")
362
367
  );
363
368
  } else if (platform === "web" || platform === "fullstack") {
364
369
  console.log(
365
- chalk.cyan(" โ†’ shadcn/ui + v0.dev Integration wird konfiguriert")
370
+ chalk.cyan(" โ†’ shadcn/ui + v0.dev integration will be configured")
366
371
  );
367
372
  }
368
373
  console.log("");
@@ -370,32 +375,49 @@ class AppiqSolutionInstaller {
370
375
  }
371
376
 
372
377
  async collectProjectIdea() {
373
- console.log(chalk.yellow("๐Ÿ’ก Projektidee erfassen"));
374
- console.log(chalk.gray("Beschreiben Sie Ihr Projekt-Vorhaben:\n"));
378
+ console.log(chalk.yellow("๐Ÿ’ก Collecting Project Information"));
379
+
380
+ // For brownfield projects, skip detailed project idea collection
381
+ if (this.config.projectType === "brownfield") {
382
+ console.log(
383
+ chalk.gray("๐Ÿ“ Detected existing project - using current directory\n")
384
+ );
385
+
386
+ const dirName = path.basename(this.projectRoot);
387
+ this.config.projectName = dirName;
388
+ this.config.projectIdea = `Brownfield project: ${dirName}`;
389
+ this.config.targetUsers = "Existing project users";
390
+
391
+ console.log(chalk.green(`โœ… Project identified: "${dirName}"\n`));
392
+ return;
393
+ }
394
+
395
+ // For greenfield projects, collect detailed information
396
+ console.log(chalk.gray("Describe your project concept:\n"));
375
397
 
376
398
  const { projectIdea, projectName, targetUsers } = await inquirer.prompt([
377
399
  {
378
400
  type: "input",
379
401
  name: "projectName",
380
- message: "๐Ÿท๏ธ Wie soll Ihr Projekt heiรŸen?",
402
+ message: "๐Ÿท๏ธ What should your project be called?",
381
403
  validate: (input) =>
382
- input.length > 0 ? true : "Bitte geben Sie einen Projektnamen ein!",
404
+ input.length > 0 ? true : "Please enter a project name!",
383
405
  },
384
406
  {
385
407
  type: "editor",
386
408
  name: "projectIdea",
387
- message: "๐Ÿ’ก Beschreiben Sie Ihre Projektidee (detailliert):",
409
+ message: "๐Ÿ’ก Describe your project idea (detailed):",
388
410
  validate: (input) =>
389
411
  input.length > 10
390
412
  ? true
391
- : "Bitte beschreiben Sie Ihr Projekt ausfรผhrlicher!",
413
+ : "Please describe your project in more detail!",
392
414
  },
393
415
  {
394
416
  type: "input",
395
417
  name: "targetUsers",
396
- message: "๐Ÿ‘ฅ Wer sind Ihre Zielgruppen/User?",
418
+ message: "๐Ÿ‘ฅ Who are your target groups/users?",
397
419
  validate: (input) =>
398
- input.length > 0 ? true : "Bitte beschreiben Sie Ihre Zielgruppe!",
420
+ input.length > 0 ? true : "Please describe your target audience!",
399
421
  },
400
422
  ]);
401
423
 
@@ -403,18 +425,88 @@ class AppiqSolutionInstaller {
403
425
  this.config.projectIdea = projectIdea;
404
426
  this.config.targetUsers = targetUsers;
405
427
 
406
- console.log(chalk.green(`โœ… Projektidee erfasst: "${projectName}"\n`));
428
+ console.log(chalk.green(`โœ… Project idea captured: "${projectName}"\n`));
429
+ }
430
+
431
+ async generateBrownfieldProjectConfig() {
432
+ console.log(chalk.yellow("๐Ÿ“‹ Configuring brownfield project..."));
433
+
434
+ // Auto-set project name from directory name
435
+ const dirName = path.basename(this.projectRoot);
436
+ this.config.projectName = dirName;
437
+
438
+ console.log(chalk.cyan(`๐Ÿท๏ธ Project name: ${dirName}`));
439
+ console.log(chalk.gray(" โ†’ Using directory name as project name"));
440
+
441
+ // Set default values for brownfield projects
442
+ this.config.projectIdea = `Enhancing existing ${dirName} project with AI agents`;
443
+ this.config.targetUsers = "Existing project stakeholders and development team";
444
+
445
+ // Auto-create docs/prd.md if it doesn't exist
446
+ const docsDir = path.join(this.projectRoot, "docs");
447
+ const prdPath = path.join(docsDir, "prd.md");
448
+
449
+ if (!fs.existsSync(prdPath)) {
450
+ if (!fs.existsSync(docsDir)) {
451
+ fs.mkdirSync(docsDir, { recursive: true });
452
+ }
453
+
454
+ const prdTemplate = this.config.techStack?.isFlutter ?
455
+ "flutter-mobile-prd-tmpl.yaml" : "prd-tmpl.yaml";
456
+
457
+ console.log(chalk.cyan("๐Ÿ“„ Creating docs/prd.md automatically"));
458
+ console.log(chalk.gray(` โ†’ Using template: ${prdTemplate}`));
459
+
460
+ const prdContent = `# Product Requirements Document - ${dirName}
461
+
462
+ ## Project Overview
463
+ This is a brownfield project enhancement for ${dirName}.
464
+
465
+ **Note:** Please fill in your specific requirements, features, and objectives below.
466
+
467
+ ## Current State Analysis
468
+ - [ ] Document existing functionality
469
+ - [ ] Identify technical debt
470
+ - [ ] List current features
471
+ - [ ] Note architecture patterns
472
+
473
+ ## Enhancement Goals
474
+ - [ ] Define new features to add
475
+ - [ ] List improvements to make
476
+ - [ ] Specify performance goals
477
+ - [ ] Document user experience improvements
478
+
479
+ ## Technical Requirements
480
+ - [ ] Document current tech stack
481
+ - [ ] List required integrations
482
+ - [ ] Define API requirements
483
+ - [ ] Specify database changes
484
+
485
+ ## Next Steps
486
+ 1. Fill in the requirements above
487
+ 2. Run \`@architect\` to analyze current architecture
488
+ 3. Use \`@sm\` to create feature stories
489
+ 4. Start implementation with \`@dev\`
490
+ `;
491
+
492
+ fs.writeFileSync(prdPath, prdContent);
493
+ console.log(chalk.green("โœ… docs/prd.md created successfully"));
494
+ } else {
495
+ console.log(chalk.cyan("๐Ÿ“„ docs/prd.md already exists"));
496
+ }
497
+
498
+ console.log(chalk.green(`โœ… Brownfield project configured: "${dirName}"\n`));
407
499
  }
408
500
 
409
501
  async createProjectPlan() {
410
- console.log(chalk.yellow("๐Ÿ“‹ Projektplan wird erstellt..."));
411
- console.log(chalk.gray("Basierend auf Ihrer Idee und dem Projekt-Typ\n"));
502
+ console.log(chalk.yellow("๐Ÿ“‹ Creating project plan..."));
503
+ console.log(chalk.gray("Based on your idea and project type\n"));
412
504
 
413
- // Hier wรผrde normalerweise die team-fullstack.yaml verwendet
505
+ // Normally team-fullstack.yaml would be used here
414
506
  const plan = this.generateProjectPlan();
415
507
  this.config.projectPlan = plan;
416
508
 
417
- console.log(chalk.cyan("๐Ÿ“‹ Ihr Projektplan:"));
509
+ console.log(chalk.cyan("๐Ÿ“‹ Your Project Plan:"));
418
510
  console.log(chalk.white("โ”€".repeat(50)));
419
511
  console.log(plan);
420
512
  console.log(chalk.white("โ”€".repeat(50) + "\n"));
@@ -425,26 +517,26 @@ class AppiqSolutionInstaller {
425
517
  {
426
518
  type: "confirm",
427
519
  name: "approved",
428
- message: "โœ… Sind Sie mit diesem Plan zufrieden?",
520
+ message: "โœ… Are you satisfied with this plan?",
429
521
  default: true,
430
522
  },
431
523
  {
432
524
  type: "input",
433
525
  name: "changes",
434
526
  message:
435
- "๐Ÿ“ Welche ร„nderungen mรถchten Sie? (oder ENTER fรผr keine ร„nderungen)",
527
+ "๐Ÿ“ What changes would you like? (or ENTER for no changes)",
436
528
  when: (answers) => !answers.approved,
437
529
  },
438
530
  ]);
439
531
 
440
532
  if (!approved && changes) {
441
- console.log(chalk.yellow("๐Ÿ“ Plan wird angepasst..."));
533
+ console.log(chalk.yellow("๐Ÿ“ Adapting plan..."));
442
534
  this.config.planChanges = changes;
443
- // Hier wรผrde Plan angepasst werden
444
- console.log(chalk.green("โœ… Plan wurde angepasst!\n"));
535
+ // Plan would be adapted here
536
+ console.log(chalk.green("โœ… Plan has been adapted!\n"));
445
537
  } else {
446
538
  console.log(
447
- chalk.green("โœ… Plan freigegeben - Entwicklung kann starten!\n")
539
+ chalk.green("โœ… Plan approved - development can start!\n")
448
540
  );
449
541
  }
450
542
 
@@ -454,50 +546,50 @@ class AppiqSolutionInstaller {
454
546
  generateProjectPlan() {
455
547
  const { projectType, projectName, projectIdea, targetUsers } = this.config;
456
548
 
457
- return `๐ŸŽฏ PROJEKTPLAN: ${projectName}
549
+ return `๐ŸŽฏ PROJECT PLAN: ${projectName}
458
550
 
459
- ๐Ÿ“Š PROJEKT-TYP: ${
551
+ ๐Ÿ“Š PROJECT TYPE: ${
460
552
  projectType === "greenfield"
461
- ? "Greenfield (Neues Projekt)"
462
- : "Brownfield (Bestehendes Projekt)"
553
+ ? "Greenfield (New Project)"
554
+ : "Brownfield (Existing Project)"
463
555
  }
464
- ๐Ÿ‘ฅ ZIELGRUPPE: ${targetUsers}
556
+ ๐Ÿ‘ฅ TARGET AUDIENCE: ${targetUsers}
465
557
 
466
- ๐Ÿ’ก PROJEKTIDEE:
558
+ ๐Ÿ’ก PROJECT IDEA:
467
559
  ${projectIdea}
468
560
 
469
- ๐Ÿš€ ENTWICKLUNGS-PIPELINE:
561
+ ๐Ÿš€ DEVELOPMENT PIPELINE:
470
562
  ${
471
563
  projectType === "greenfield"
472
564
  ? `
473
- 1. ๐Ÿ“‹ PO (Product Owner) โ†’ PRD erstellen
474
- 2. ๐Ÿ—๏ธ Architect โ†’ System-Architektur designen
565
+ 1. ๐Ÿ“‹ PO (Product Owner) โ†’ Create PRD
566
+ 2. ๐Ÿ—๏ธ Architect โ†’ Design system architecture
475
567
  3. ๐ŸŽจ UX Expert โ†’ UI/UX Design
476
- 4. ๐Ÿ“ Story Master โ†’ User Stories aufbrechen
477
- 5. ๐Ÿ’ป Developer โ†’ Features implementieren
478
- 6. โœ… QA Expert โ†’ Testing & Validierung
479
- 7. ๐Ÿ“Š SM (Scrum Master) โ†’ Sprint-Koordination
568
+ 4. ๐Ÿ“ Story Master โ†’ Break down user stories
569
+ 5. ๐Ÿ’ป Developer โ†’ Implement features
570
+ 6. โœ… QA Expert โ†’ Testing & validation
571
+ 7. ๐Ÿ“Š SM (Scrum Master) โ†’ Sprint coordination
480
572
  `
481
573
  : `
482
- 1. ๐Ÿ“‹ PO โ†’ Bestehende Dokumentation analysieren
483
- 2. ๐Ÿ—๏ธ Architect โ†’ Architektur-Review
484
- 3. ๐Ÿ“ Story Master โ†’ Neue Features planen
485
- 4. ๐Ÿ’ป Developer โ†’ Features in bestehende Basis integrieren
486
- 5. โœ… QA Expert โ†’ Regression Testing
487
- 6. ๐Ÿ“Š SM โ†’ Change Management
574
+ 1. ๐Ÿ“‹ PO โ†’ Analyze existing documentation
575
+ 2. ๐Ÿ—๏ธ Architect โ†’ Architecture review
576
+ 3. ๐Ÿ“ Story Master โ†’ Plan new features
577
+ 4. ๐Ÿ’ป Developer โ†’ Integrate features into existing base
578
+ 5. โœ… QA Expert โ†’ Regression testing
579
+ 6. ๐Ÿ“Š SM โ†’ Change management
488
580
  `
489
581
  }
490
582
 
491
- ๐ŸŽฎ ONE-CLICK BEFEHLE:
492
- - /start โ†’ Gesamten Workflow starten
493
- - /plan โ†’ Detailplanung
494
- - /develop โ†’ Entwicklung beginnen
495
- - /review โ†’ Code Review
496
- - /deploy โ†’ Deployment vorbereiten`;
583
+ ๐ŸŽฎ ONE-CLICK COMMANDS:
584
+ - /start โ†’ Start entire workflow
585
+ - /plan โ†’ Detailed planning
586
+ - /develop โ†’ Begin development
587
+ - /review โ†’ Code review
588
+ - /deploy โ†’ Prepare deployment`;
497
589
  }
498
590
 
499
591
  async setupBMADCoreConfig() {
500
- console.log(chalk.yellow("โš™๏ธ BMAD Core Configuration einrichten..."));
592
+ console.log(chalk.yellow("โš™๏ธ Setting up BMAD Core Configuration..."));
501
593
 
502
594
  // Create .bmad-core directory
503
595
  const bmadCoreDir = path.join(this.appiqPath, ".bmad-core");
@@ -565,11 +657,11 @@ ${
565
657
  fs.writeFileSync(path.join(docsDir, "prd.md"), this.generateInitialPRD());
566
658
  }
567
659
 
568
- console.log(chalk.green("โœ… Document Templates erstellt!\n"));
660
+ console.log(chalk.green("โœ… Document Templates created!\n"));
569
661
  }
570
662
 
571
663
  async setupAgentDependencies() {
572
- console.log(chalk.yellow("๐Ÿ”— Agent Dependencies System einrichten..."));
664
+ console.log(chalk.yellow("๐Ÿ”— Setting up Agent Dependencies System..."));
573
665
 
574
666
  const agentsDir = path.join(this.appiqPath, "agents");
575
667
  const tasksDir = path.join(this.appiqPath, "tasks");
@@ -2164,48 +2256,48 @@ ${
2164
2256
  generateBrownfieldWorkflow(config) {
2165
2257
  const workflows = {
2166
2258
  "Appiq Launcher": `
2167
- **๐Ÿ”ง Schnell-Start fรผr bestehendes Projekt:**
2168
- 1. \`/analyze\` - Analysiert bestehendes Projekt
2169
- 2. **Findet:** Existierende Docs, Code-Struktur, Tech-Stack
2170
- 3. **Erstellt:** Angepasste Workflows fรผr Ihr Projekt`,
2259
+ **๐Ÿ”ง Quick Start for Existing Project:**
2260
+ 1. \`/analyze\` - Analyzes existing project
2261
+ 2. **Finds:** Existing docs, code structure, tech stack
2262
+ 3. **Creates:** Customized workflows for your project`,
2171
2263
 
2172
2264
  "Project Manager": `
2173
- **๐Ÿ“‹ Automatische PRD Erstellung:**
2174
- 1. **Erstellt automatisch:** \`docs/prd.md\` (falls nicht vorhanden)
2175
- 2. **Fรผr Flutter Projekte:** Verwendet flutter-mobile-prd-tmpl.yaml
2176
- 3. **Keine Projektname-Abfrage** - Verwendet Verzeichnisname
2177
- 4. **Nรคchster Schritt:** Architect fรผr Architektur-Review`,
2265
+ **๐Ÿ“‹ Automatic PRD Creation:**
2266
+ 1. **Creates automatically:** \`docs/prd.md\` (if not present)
2267
+ 2. **For Flutter Projects:** Uses flutter-mobile-prd-tmpl.yaml
2268
+ 3. **No project name prompt** - Uses directory name
2269
+ 4. **Next Step:** Architect for architecture review`,
2178
2270
 
2179
2271
  "System Architect": `
2180
- **๐Ÿ—๏ธ Architektur-Review:**
2181
- 1. \`/review-architecture\` - Analysiert bestehende Struktur
2182
- 2. **Erstellt/updated:** \`docs/architecture.md\`
2183
- 3. **Nรคchster Schritt:** Story Master fรผr neue Features`,
2272
+ **๐Ÿ—๏ธ Architecture Review:**
2273
+ 1. \`/review-architecture\` - Analyzes existing structure
2274
+ 2. **Creates/updates:** \`docs/architecture.md\`
2275
+ 3. **Next Step:** Story Master for new features`,
2184
2276
 
2185
2277
  "Story Master": `
2186
2278
  **๐Ÿ“ Feature Stories:**
2187
- 1. \`/new-feature\` - Neue Story fรผr bestehendes Projekt
2188
- 2. **Datei wird erstellt:** \`docs/stories/feature-XXX.md\`
2189
- 3. **Berรผcksichtigt:** Bestehende Code-Basis`,
2279
+ 1. \`/new-feature\` - New story for existing project
2280
+ 2. **File created:** \`docs/stories/feature-XXX.md\`
2281
+ 3. **Considers:** Existing code base`,
2190
2282
 
2191
2283
  "Senior Developer": `
2192
2284
  **๐Ÿ’ป Feature Implementation:**
2193
- 1. \`/add-feature\` - Implementiert in bestehendem Code
2194
- 2. **Bearbeitet:** Bestehende Dateien sicher
2195
- 3. **Erstellt:** Neue Dateien wo nรถtig`,
2285
+ 1. \`/add-feature\` - Implements in existing code
2286
+ 2. **Edits:** Existing files safely
2287
+ 3. **Creates:** New files where needed`,
2196
2288
 
2197
2289
  "QA Expert": `
2198
2290
  **โœ… Regression Testing:**
2199
- 1. \`/regression-test\` - Testet neue Features
2200
- 2. **Validiert:** Keine Breaking Changes
2201
- 3. **Erstellt:** Test-Reports fรผr bestehende + neue Features`,
2291
+ 1. \`/regression-test\` - Tests new features
2292
+ 2. **Validates:** No breaking changes
2293
+ 3. **Creates:** Test reports for existing + new features`,
2202
2294
  };
2203
2295
 
2204
2296
  return workflows[config.name] || "Standard Brownfield Workflow";
2205
2297
  }
2206
2298
 
2207
2299
  async setupOneClickWorkflows() {
2208
- console.log(chalk.yellow("โšก One-Click Workflows einrichten..."));
2300
+ console.log(chalk.yellow("โšก Setting up One-Click Workflows..."));
2209
2301
 
2210
2302
  // Create quick commands
2211
2303
  const commandsDir = path.join(this.appiqPath, "commands");
package/tools/cli.js CHANGED
@@ -11,7 +11,7 @@ const program = new Command();
11
11
  program
12
12
  .name("bmad-build")
13
13
  .description("BMad-Method build tool for creating web bundles")
14
- .version("1.4.0");
14
+ .version("1.4.1");
15
15
 
16
16
  program
17
17
  .command('build')