vibefast-cli 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,WAAW,SAiXpB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,WAAW,SAmpBpB,CAAC"}
@@ -25,31 +25,88 @@ export const initCommand = new Command('init')
25
25
  log.info('This directory already contains a VibeFast project.');
26
26
  process.exit(1);
27
27
  }
28
- // Step 1: Choose branch (always ask unless --branch provided)
29
- let branch = options.branch;
30
- if (!options.branch) {
31
- if (options.yes) {
32
- // Default to main if --yes is used without --branch
33
- branch = 'main';
34
- log.info('Using default: full starter');
28
+ // Step 1: Choose starter type
29
+ let starterType = 'clean';
30
+ let selectedFeatures = [];
31
+ if (!options.yes) {
32
+ starterType = await promptSelect('How would you like to start?', [
33
+ {
34
+ name: 'Clean',
35
+ value: 'clean',
36
+ description: 'Minimal setup - add features later with vf add',
37
+ },
38
+ {
39
+ name: 'Custom',
40
+ value: 'custom',
41
+ description: 'Choose features now - one-shot setup',
42
+ },
43
+ ]);
44
+ log.info(`Selected: ${starterType === 'clean' ? 'Clean starter' : 'Custom setup'}`);
45
+ log.plain('');
46
+ // If custom, let them choose features
47
+ if (starterType === 'custom') {
48
+ const { promptMultiSelectAsync } = await import('../core/prompt.js');
49
+ const { RECIPES, getRecipesByCategory } = await import('../core/recipes.js');
50
+ log.info('📦 Select features to include:');
51
+ log.plain('');
52
+ // Get native features
53
+ const nativeFeatures = getRecipesByCategory('feature').map(r => ({
54
+ value: r.name,
55
+ label: `${r.icon} ${r.name}`,
56
+ description: r.description,
57
+ }));
58
+ selectedFeatures = await promptMultiSelectAsync('Select features (use space to toggle, enter to confirm):', nativeFeatures);
59
+ if (selectedFeatures.length > 0) {
60
+ log.info(`Selected ${selectedFeatures.length} feature(s): ${selectedFeatures.join(', ')}`);
61
+ }
62
+ else {
63
+ log.info('No features selected - starting with clean setup');
64
+ }
65
+ log.plain('');
66
+ }
67
+ }
68
+ else {
69
+ log.info('Using default: Clean starter');
70
+ log.plain('');
71
+ }
72
+ // Always use clean branch for cloning
73
+ const branch = 'clean';
74
+ // Step 1.5: Choose platforms
75
+ let platforms = ['native', 'web'];
76
+ if (!options.yes) {
77
+ const platformChoice = await promptSelect('Which platforms do you want to include?', [
78
+ {
79
+ name: 'Both (Native + Web)',
80
+ value: 'both',
81
+ description: 'Full monorepo with mobile and web app',
82
+ },
83
+ {
84
+ name: 'Native Only (Expo)',
85
+ value: 'native',
86
+ description: 'Mobile app only (iOS & Android)',
87
+ },
88
+ {
89
+ name: 'Web Only (Next.js)',
90
+ value: 'web',
91
+ description: 'Web app only',
92
+ },
93
+ ]);
94
+ if (platformChoice === 'native') {
95
+ platforms = ['native'];
96
+ log.info('Selected: Native (Expo) only');
97
+ }
98
+ else if (platformChoice === 'web') {
99
+ platforms = ['web'];
100
+ log.info('Selected: Web (Next.js) only');
35
101
  }
36
102
  else {
37
- // Always prompt for branch selection
38
- branch = await promptSelect('Which starter template would you like?', [
39
- {
40
- name: 'Full',
41
- value: 'main',
42
- description: 'All features included - ready to customize',
43
- },
44
- {
45
- name: 'Clean',
46
- value: 'clean',
47
- description: 'Minimal setup - add features as you need them',
48
- },
49
- ]);
103
+ platforms = ['native', 'web'];
104
+ log.info('Selected: Both platforms');
50
105
  }
51
106
  }
52
- log.info(`Selected: ${branch === 'main' ? 'full' : 'clean'} starter`);
107
+ else {
108
+ log.info('Using default: Both platforms');
109
+ }
53
110
  log.plain('');
54
111
  // Step 2: Get project name
55
112
  const defaultName = 'vibefast-app';
@@ -71,13 +128,11 @@ export const initCommand = new Command('init')
71
128
  // 2. GitHub CLI (gh auth)
72
129
  // 3. Personal access token in URL
73
130
  const repoUrl = 'https://github.com/mzafarr/vibefast-pro.git';
74
- await withSpinner(`Cloning VibeFast monorepo (${branch === 'main' ? 'full' : 'clean'} starter)...`, async () => {
131
+ await withSpinner(`Cloning VibeFast monorepo (clean starter)...`, async () => {
75
132
  const git = simpleGit();
76
133
  const cloneOptions = ['--depth', '1'];
77
- // Only specify branch if not main (main is default)
78
- if (branch !== 'main') {
79
- cloneOptions.unshift('--branch', branch, '--single-branch');
80
- }
134
+ // Always use clean branch
135
+ cloneOptions.unshift('--branch', 'clean', '--single-branch');
81
136
  try {
82
137
  await git.clone(repoUrl, projectName, cloneOptions);
83
138
  }
@@ -105,8 +160,75 @@ export const initCommand = new Command('init')
105
160
  successText: `✓ Repository cloned successfully`,
106
161
  });
107
162
  log.plain('');
108
- // Step 4: Check for pnpm and install dependencies
163
+ // Step 3.5: Remove unwanted platforms
109
164
  const projectPath = join(process.cwd(), projectName);
165
+ if (platforms.length < 2) {
166
+ await withSpinner('Cleaning up unwanted platforms...', async () => {
167
+ const { rmSync } = await import('fs');
168
+ const { join } = await import('path');
169
+ if (!platforms.includes('native')) {
170
+ // Remove native app
171
+ const nativePath = join(projectPath, 'apps/native');
172
+ if (existsSync(nativePath)) {
173
+ rmSync(nativePath, { recursive: true, force: true });
174
+ }
175
+ log.info(' ✓ Removed native app');
176
+ }
177
+ if (!platforms.includes('web')) {
178
+ // Remove web app
179
+ const webPath = join(projectPath, 'apps/web');
180
+ if (existsSync(webPath)) {
181
+ rmSync(webPath, { recursive: true, force: true });
182
+ }
183
+ log.info(' ✓ Removed web app');
184
+ }
185
+ // Update package.json workspaces
186
+ const rootPackageJsonPath = join(projectPath, 'package.json');
187
+ if (existsSync(rootPackageJsonPath)) {
188
+ const { readFileSync, writeFileSync } = await import('fs');
189
+ const packageJson = JSON.parse(readFileSync(rootPackageJsonPath, 'utf-8'));
190
+ if (packageJson.workspaces) {
191
+ const workspaces = packageJson.workspaces.filter((ws) => {
192
+ if (!platforms.includes('native') && ws.includes('apps/native'))
193
+ return false;
194
+ if (!platforms.includes('web') && ws.includes('apps/web'))
195
+ return false;
196
+ return true;
197
+ });
198
+ packageJson.workspaces = workspaces;
199
+ writeFileSync(rootPackageJsonPath, JSON.stringify(packageJson, null, 2));
200
+ log.info(' ✓ Updated workspace configuration');
201
+ }
202
+ }
203
+ // Update turbo.json
204
+ const turboJsonPath = join(projectPath, 'turbo.json');
205
+ if (existsSync(turboJsonPath)) {
206
+ const { readFileSync, writeFileSync } = await import('fs');
207
+ const turboJson = JSON.parse(readFileSync(turboJsonPath, 'utf-8'));
208
+ if (turboJson.pipeline) {
209
+ // Remove platform-specific tasks
210
+ const tasksToRemove = [];
211
+ if (!platforms.includes('native')) {
212
+ tasksToRemove.push('native:*', 'dev:native', 'build:native');
213
+ }
214
+ if (!platforms.includes('web')) {
215
+ tasksToRemove.push('web:*', 'dev:web', 'build:web');
216
+ }
217
+ tasksToRemove.forEach(task => {
218
+ if (turboJson.pipeline[task]) {
219
+ delete turboJson.pipeline[task];
220
+ }
221
+ });
222
+ writeFileSync(turboJsonPath, JSON.stringify(turboJson, null, 2));
223
+ log.info(' ✓ Updated Turbo configuration');
224
+ }
225
+ }
226
+ }, {
227
+ successText: '✓ Platform cleanup complete',
228
+ });
229
+ log.plain('');
230
+ }
231
+ // Step 4: Check for pnpm and install dependencies
110
232
  if (!options.skipInstall) {
111
233
  // Check if pnpm is installed
112
234
  log.info('Checking for pnpm...');
@@ -217,6 +339,105 @@ export const initCommand = new Command('init')
217
339
  }
218
340
  log.plain('');
219
341
  }
342
+ // Step 6.5: Install selected features (if custom setup)
343
+ if (starterType === 'custom' && selectedFeatures.length > 0) {
344
+ log.plain('');
345
+ log.info('📦 Installing selected features...');
346
+ log.plain('');
347
+ // We need to be in the project directory for feature installation
348
+ process.chdir(projectPath);
349
+ for (const featureName of selectedFeatures) {
350
+ try {
351
+ log.plain('');
352
+ log.plain('━'.repeat(60));
353
+ log.info(`Installing ${featureName}...`);
354
+ log.plain('');
355
+ // Import and use the add command logic
356
+ const { getToken } = await import('../core/auth.js');
357
+ const { fetchRecipe, downloadZip } = await import('../core/http.js');
358
+ const { extractZipSafe } = await import('../core/archive.js');
359
+ const { copyTree, readFileContent } = await import('../core/fsx.js');
360
+ const { addEntry } = await import('../core/journal.js');
361
+ const { hashFiles } = await import('../core/hash.js');
362
+ const { insertNavLinkNative } = await import('../core/codemod.js');
363
+ const { getDeviceInfo } = await import('../core/auth.js');
364
+ const { validateSignature } = await import('../core/validate.js');
365
+ const { getPaths } = await import('../core/paths.js');
366
+ const paths = getPaths();
367
+ const token = await getToken();
368
+ const device = await getDeviceInfo();
369
+ const config = await validateSignature(paths.signatureFile);
370
+ // Fetch recipe
371
+ const response = await fetchRecipe({
372
+ token: token,
373
+ device,
374
+ feature: featureName,
375
+ target: 'native',
376
+ starter: { name: config.name, version: config.version },
377
+ });
378
+ if (!response.ok || (!response.signedUrl && !response.zipData)) {
379
+ log.warn(`⚠ Could not fetch ${featureName}: ${response.error || 'Unknown error'}`);
380
+ log.info(`You can install it later with: vf add ${featureName}`);
381
+ continue;
382
+ }
383
+ // Download and extract
384
+ const zipPath = response.zipData
385
+ ? await downloadZip(response.zipData, true)
386
+ : await downloadZip(response.signedUrl);
387
+ const extractDir = zipPath.replace('.zip', '');
388
+ await extractZipSafe(zipPath, extractDir);
389
+ // Read manifest
390
+ const manifestPath = join(extractDir, 'recipe.json');
391
+ const manifestContent = await readFileContent(manifestPath);
392
+ const manifest = JSON.parse(manifestContent);
393
+ // Copy files
394
+ const copiedFiles = [];
395
+ const { resolve: resolvePath } = await import('path');
396
+ for (const copySpec of manifest.copy) {
397
+ const srcPath = resolvePath(extractDir, copySpec.from);
398
+ const destPath = resolvePath(projectPath, copySpec.to);
399
+ const result = await copyTree(srcPath, destPath, { force: true });
400
+ copiedFiles.push(...result.files);
401
+ }
402
+ // Add navigation
403
+ let navInserted = false;
404
+ if (manifest.nav) {
405
+ navInserted = await insertNavLinkNative(paths.nativeNavFile, manifest.nav, {});
406
+ }
407
+ // Hash and journal
408
+ const fileHashes = await hashFiles(copiedFiles);
409
+ const fileEntries = Array.from(fileHashes.entries()).map(([path, hash]) => ({
410
+ path,
411
+ hash,
412
+ }));
413
+ await addEntry(paths.journalFile, {
414
+ feature: manifest.name,
415
+ target: manifest.target,
416
+ files: fileEntries,
417
+ insertedNav: navInserted,
418
+ navHref: manifest.nav?.href,
419
+ navLabel: manifest.nav?.label,
420
+ ts: Date.now(),
421
+ manifest: {
422
+ version: manifest.version,
423
+ manualSteps: manifest.manualSteps,
424
+ env: manifest.env,
425
+ },
426
+ });
427
+ log.success(`✓ ${featureName} installed successfully!`);
428
+ }
429
+ catch (error) {
430
+ log.warn(`⚠ Failed to install ${featureName}: ${error.message}`);
431
+ log.info(`You can install it later with: vf add ${featureName}`);
432
+ }
433
+ }
434
+ // Go back to original directory
435
+ process.chdir('..');
436
+ log.plain('');
437
+ log.plain('━'.repeat(60));
438
+ log.success(`✓ Installed ${selectedFeatures.length} feature(s)`);
439
+ log.plain('');
440
+ }
220
441
  // Step 7: Login with license key (REQUIRED)
221
442
  let licenseKey = options.license;
222
443
  // Check if user already has a license key saved
@@ -259,29 +480,55 @@ export const initCommand = new Command('init')
259
480
  log.plain('');
260
481
  log.success('🎉 Project initialized successfully!');
261
482
  log.plain('');
483
+ log.info(`Setup: ${starterType === 'clean' ? 'Clean' : 'Custom'}`);
484
+ log.info(`Platforms: ${platforms.join(' + ')}`);
485
+ if (starterType === 'custom' && selectedFeatures.length > 0) {
486
+ log.info(`Features: ${selectedFeatures.join(', ')}`);
487
+ }
488
+ log.plain('');
262
489
  log.info('Next steps:');
263
490
  log.plain(` 1. cd ${projectName}`);
264
- // Check if setup script exists
265
- const setupScriptExists = existsSync(join(projectPath, 'apps/native/scripts/starter-setup.mjs'));
491
+ // Check if setup script exists (only for native)
492
+ const setupScriptExists = platforms.includes('native') &&
493
+ existsSync(join(projectPath, 'apps/native/scripts/starter-setup.mjs'));
266
494
  if (setupScriptExists && !options.skipInstall) {
267
495
  log.plain(' 2. Start developing:');
268
- log.plain(' • pnpm dev:native (start dev server)');
269
- log.plain(' • pnpm native:ios (run on iOS)');
270
- log.plain(' • pnpm native:android (run on Android)');
496
+ if (platforms.includes('native')) {
497
+ log.plain(' • pnpm dev:native (start native dev server)');
498
+ log.plain(' • pnpm native:ios (run on iOS)');
499
+ log.plain(' • pnpm native:android (run on Android)');
500
+ }
501
+ if (platforms.includes('web')) {
502
+ log.plain(' • pnpm dev:web (start web dev server)');
503
+ log.plain(' • pnpm web:build (build for production)');
504
+ }
271
505
  }
272
506
  else {
273
- log.plain(' 2. Run starter setup (if not done):');
274
- log.plain(` cd ${projectName}/apps/native`);
275
- log.plain(' node scripts/starter-setup.mjs');
276
- log.plain(' 3. Start developing:');
277
- log.plain(' • pnpm dev:native (start dev server)');
278
- log.plain(' pnpm native:ios (run on iOS)');
279
- log.plain(' • pnpm native:android (run on Android)');
507
+ if (setupScriptExists) {
508
+ log.plain(' 2. Run starter setup (if not done):');
509
+ log.plain(` cd ${projectName}/apps/native`);
510
+ log.plain(' node scripts/starter-setup.mjs');
511
+ }
512
+ log.plain(` ${setupScriptExists ? '3' : '2'}. Start developing:`);
513
+ if (platforms.includes('native')) {
514
+ log.plain(' • pnpm dev:native (start native dev server)');
515
+ log.plain(' • pnpm native:ios (run on iOS)');
516
+ log.plain(' • pnpm native:android (run on Android)');
517
+ }
518
+ if (platforms.includes('web')) {
519
+ log.plain(' • pnpm dev:web (start web dev server)');
520
+ log.plain(' • pnpm web:build (build for production)');
521
+ }
280
522
  }
281
523
  log.plain('');
282
524
  log.info('Add features:');
283
525
  log.plain(' • vf list # See available features');
284
- log.plain(' • vf add <feature> # Add features to your project');
526
+ if (platforms.includes('native')) {
527
+ log.plain(' • vf add chatbot # Add native feature');
528
+ }
529
+ if (platforms.includes('web')) {
530
+ log.plain(' • vf add quiz --target web # Add web feature');
531
+ }
285
532
  log.plain('');
286
533
  log.info('📚 Documentation: https://vibefast.pro/docs');
287
534
  log.info('💬 Support: support@vibefast.pro');
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibefast-cli",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "CLI for installing VibeFast features into your monorepo",
5
5
  "type": "module",
6
6
  "bin": {
@@ -37,35 +37,104 @@ export const initCommand = new Command('init')
37
37
  process.exit(1);
38
38
  }
39
39
 
40
- // Step 1: Choose branch (always ask unless --branch provided)
41
- let branch = options.branch as 'clean' | 'main';
40
+ // Step 1: Choose starter type
41
+ let starterType: 'clean' | 'custom' = 'clean';
42
+ let selectedFeatures: string[] = [];
42
43
 
43
- if (!options.branch) {
44
- if (options.yes) {
45
- // Default to main if --yes is used without --branch
46
- branch = 'main';
47
- log.info('Using default: full starter');
48
- } else {
49
- // Always prompt for branch selection
50
- branch = await promptSelect(
51
- 'Which starter template would you like?',
52
- [
53
- {
54
- name: 'Full',
55
- value: 'main',
56
- description: 'All features included - ready to customize',
57
- },
58
- {
59
- name: 'Clean',
60
- value: 'clean',
61
- description: 'Minimal setup - add features as you need them',
62
- },
63
- ]
64
- ) as 'clean' | 'main';
44
+ if (!options.yes) {
45
+ starterType = await promptSelect(
46
+ 'How would you like to start?',
47
+ [
48
+ {
49
+ name: 'Clean',
50
+ value: 'clean',
51
+ description: 'Minimal setup - add features later with vf add',
52
+ },
53
+ {
54
+ name: 'Custom',
55
+ value: 'custom',
56
+ description: 'Choose features now - one-shot setup',
57
+ },
58
+ ]
59
+ ) as 'clean' | 'custom';
60
+
61
+ log.info(`Selected: ${starterType === 'clean' ? 'Clean starter' : 'Custom setup'}`);
62
+ log.plain('');
63
+
64
+ // If custom, let them choose features
65
+ if (starterType === 'custom') {
66
+ const { promptMultiSelectAsync } = await import('../core/prompt.js');
67
+ const { RECIPES, getRecipesByCategory } = await import('../core/recipes.js');
68
+
69
+ log.info('📦 Select features to include:');
70
+ log.plain('');
71
+
72
+ // Get native features
73
+ const nativeFeatures = getRecipesByCategory('feature').map(r => ({
74
+ value: r.name,
75
+ label: `${r.icon} ${r.name}`,
76
+ description: r.description,
77
+ }));
78
+
79
+ selectedFeatures = await promptMultiSelectAsync(
80
+ 'Select features (use space to toggle, enter to confirm):',
81
+ nativeFeatures
82
+ );
83
+
84
+ if (selectedFeatures.length > 0) {
85
+ log.info(`Selected ${selectedFeatures.length} feature(s): ${selectedFeatures.join(', ')}`);
86
+ } else {
87
+ log.info('No features selected - starting with clean setup');
88
+ }
89
+ log.plain('');
65
90
  }
91
+ } else {
92
+ log.info('Using default: Clean starter');
93
+ log.plain('');
66
94
  }
95
+
96
+ // Always use clean branch for cloning
97
+ const branch = 'clean';
98
+
99
+ // Step 1.5: Choose platforms
100
+ let platforms: string[] = ['native', 'web'];
101
+
102
+ if (!options.yes) {
103
+ const platformChoice = await promptSelect(
104
+ 'Which platforms do you want to include?',
105
+ [
106
+ {
107
+ name: 'Both (Native + Web)',
108
+ value: 'both',
109
+ description: 'Full monorepo with mobile and web app',
110
+ },
111
+ {
112
+ name: 'Native Only (Expo)',
113
+ value: 'native',
114
+ description: 'Mobile app only (iOS & Android)',
115
+ },
116
+ {
117
+ name: 'Web Only (Next.js)',
118
+ value: 'web',
119
+ description: 'Web app only',
120
+ },
121
+ ]
122
+ ) as string;
67
123
 
68
- log.info(`Selected: ${branch === 'main' ? 'full' : 'clean'} starter`);
124
+ if (platformChoice === 'native') {
125
+ platforms = ['native'];
126
+ log.info('Selected: Native (Expo) only');
127
+ } else if (platformChoice === 'web') {
128
+ platforms = ['web'];
129
+ log.info('Selected: Web (Next.js) only');
130
+ } else {
131
+ platforms = ['native', 'web'];
132
+ log.info('Selected: Both platforms');
133
+ }
134
+ } else {
135
+ log.info('Using default: Both platforms');
136
+ }
137
+
69
138
  log.plain('');
70
139
 
71
140
  // Step 2: Get project name
@@ -97,15 +166,13 @@ export const initCommand = new Command('init')
97
166
  const repoUrl = 'https://github.com/mzafarr/vibefast-pro.git';
98
167
 
99
168
  await withSpinner(
100
- `Cloning VibeFast monorepo (${branch === 'main' ? 'full' : 'clean'} starter)...`,
169
+ `Cloning VibeFast monorepo (clean starter)...`,
101
170
  async () => {
102
171
  const git = simpleGit();
103
172
  const cloneOptions = ['--depth', '1'];
104
173
 
105
- // Only specify branch if not main (main is default)
106
- if (branch !== 'main') {
107
- cloneOptions.unshift('--branch', branch, '--single-branch');
108
- }
174
+ // Always use clean branch
175
+ cloneOptions.unshift('--branch', 'clean', '--single-branch');
109
176
 
110
177
  try {
111
178
  await git.clone(repoUrl, projectName, cloneOptions);
@@ -139,9 +206,90 @@ export const initCommand = new Command('init')
139
206
 
140
207
  log.plain('');
141
208
 
142
- // Step 4: Check for pnpm and install dependencies
209
+ // Step 3.5: Remove unwanted platforms
143
210
  const projectPath = join(process.cwd(), projectName);
144
211
 
212
+ if (platforms.length < 2) {
213
+ await withSpinner(
214
+ 'Cleaning up unwanted platforms...',
215
+ async () => {
216
+ const { rmSync } = await import('fs');
217
+ const { join } = await import('path');
218
+
219
+ if (!platforms.includes('native')) {
220
+ // Remove native app
221
+ const nativePath = join(projectPath, 'apps/native');
222
+ if (existsSync(nativePath)) {
223
+ rmSync(nativePath, { recursive: true, force: true });
224
+ }
225
+ log.info(' ✓ Removed native app');
226
+ }
227
+
228
+ if (!platforms.includes('web')) {
229
+ // Remove web app
230
+ const webPath = join(projectPath, 'apps/web');
231
+ if (existsSync(webPath)) {
232
+ rmSync(webPath, { recursive: true, force: true });
233
+ }
234
+ log.info(' ✓ Removed web app');
235
+ }
236
+
237
+ // Update package.json workspaces
238
+ const rootPackageJsonPath = join(projectPath, 'package.json');
239
+ if (existsSync(rootPackageJsonPath)) {
240
+ const { readFileSync, writeFileSync } = await import('fs');
241
+ const packageJson = JSON.parse(readFileSync(rootPackageJsonPath, 'utf-8'));
242
+
243
+ if (packageJson.workspaces) {
244
+ const workspaces = packageJson.workspaces.filter((ws: string) => {
245
+ if (!platforms.includes('native') && ws.includes('apps/native')) return false;
246
+ if (!platforms.includes('web') && ws.includes('apps/web')) return false;
247
+ return true;
248
+ });
249
+ packageJson.workspaces = workspaces;
250
+ writeFileSync(rootPackageJsonPath, JSON.stringify(packageJson, null, 2));
251
+ log.info(' ✓ Updated workspace configuration');
252
+ }
253
+ }
254
+
255
+ // Update turbo.json
256
+ const turboJsonPath = join(projectPath, 'turbo.json');
257
+ if (existsSync(turboJsonPath)) {
258
+ const { readFileSync, writeFileSync } = await import('fs');
259
+ const turboJson = JSON.parse(readFileSync(turboJsonPath, 'utf-8'));
260
+
261
+ if (turboJson.pipeline) {
262
+ // Remove platform-specific tasks
263
+ const tasksToRemove: string[] = [];
264
+
265
+ if (!platforms.includes('native')) {
266
+ tasksToRemove.push('native:*', 'dev:native', 'build:native');
267
+ }
268
+ if (!platforms.includes('web')) {
269
+ tasksToRemove.push('web:*', 'dev:web', 'build:web');
270
+ }
271
+
272
+ tasksToRemove.forEach(task => {
273
+ if (turboJson.pipeline[task]) {
274
+ delete turboJson.pipeline[task];
275
+ }
276
+ });
277
+
278
+ writeFileSync(turboJsonPath, JSON.stringify(turboJson, null, 2));
279
+ log.info(' ✓ Updated Turbo configuration');
280
+ }
281
+ }
282
+ },
283
+ {
284
+ successText: '✓ Platform cleanup complete',
285
+ }
286
+ );
287
+
288
+ log.plain('');
289
+ }
290
+
291
+ // Step 4: Check for pnpm and install dependencies
292
+
145
293
  if (!options.skipInstall) {
146
294
  // Check if pnpm is installed
147
295
  log.info('Checking for pnpm...');
@@ -276,6 +424,122 @@ export const initCommand = new Command('init')
276
424
  log.plain('');
277
425
  }
278
426
 
427
+ // Step 6.5: Install selected features (if custom setup)
428
+ if (starterType === 'custom' && selectedFeatures.length > 0) {
429
+ log.plain('');
430
+ log.info('📦 Installing selected features...');
431
+ log.plain('');
432
+
433
+ // We need to be in the project directory for feature installation
434
+ process.chdir(projectPath);
435
+
436
+ for (const featureName of selectedFeatures) {
437
+ try {
438
+ log.plain('');
439
+ log.plain('━'.repeat(60));
440
+ log.info(`Installing ${featureName}...`);
441
+ log.plain('');
442
+
443
+ // Import and use the add command logic
444
+ const { getToken } = await import('../core/auth.js');
445
+ const { fetchRecipe, downloadZip } = await import('../core/http.js');
446
+ const { extractZipSafe } = await import('../core/archive.js');
447
+ const { copyTree, readFileContent } = await import('../core/fsx.js');
448
+ const { addEntry } = await import('../core/journal.js');
449
+ const { hashFiles } = await import('../core/hash.js');
450
+ const { insertNavLinkNative } = await import('../core/codemod.js');
451
+ const { getDeviceInfo } = await import('../core/auth.js');
452
+ const { validateSignature } = await import('../core/validate.js');
453
+ const { getPaths } = await import('../core/paths.js');
454
+
455
+ const paths = getPaths();
456
+ const token = await getToken();
457
+ const device = await getDeviceInfo();
458
+ const config = await validateSignature(paths.signatureFile);
459
+
460
+ // Fetch recipe
461
+ const response = await fetchRecipe({
462
+ token: token!,
463
+ device,
464
+ feature: featureName,
465
+ target: 'native',
466
+ starter: { name: config.name, version: config.version },
467
+ });
468
+
469
+ if (!response.ok || (!response.signedUrl && !response.zipData)) {
470
+ log.warn(`⚠ Could not fetch ${featureName}: ${response.error || 'Unknown error'}`);
471
+ log.info(`You can install it later with: vf add ${featureName}`);
472
+ continue;
473
+ }
474
+
475
+ // Download and extract
476
+ const zipPath = response.zipData
477
+ ? await downloadZip(response.zipData, true)
478
+ : await downloadZip(response.signedUrl!);
479
+
480
+ const extractDir = zipPath.replace('.zip', '');
481
+ await extractZipSafe(zipPath, extractDir);
482
+
483
+ // Read manifest
484
+ const manifestPath = join(extractDir, 'recipe.json');
485
+ const manifestContent = await readFileContent(manifestPath);
486
+ const manifest = JSON.parse(manifestContent);
487
+
488
+ // Copy files
489
+ const copiedFiles: string[] = [];
490
+ const { resolve: resolvePath } = await import('path');
491
+ for (const copySpec of manifest.copy) {
492
+ const srcPath = resolvePath(extractDir, copySpec.from);
493
+ const destPath = resolvePath(projectPath, copySpec.to);
494
+ const result = await copyTree(srcPath, destPath, { force: true });
495
+ copiedFiles.push(...result.files);
496
+ }
497
+
498
+ // Add navigation
499
+ let navInserted = false;
500
+ if (manifest.nav) {
501
+ navInserted = await insertNavLinkNative(paths.nativeNavFile, manifest.nav, {});
502
+ }
503
+
504
+ // Hash and journal
505
+ const fileHashes = await hashFiles(copiedFiles);
506
+ const fileEntries = Array.from(fileHashes.entries()).map(([path, hash]) => ({
507
+ path,
508
+ hash,
509
+ }));
510
+
511
+ await addEntry(paths.journalFile, {
512
+ feature: manifest.name,
513
+ target: manifest.target,
514
+ files: fileEntries,
515
+ insertedNav: navInserted,
516
+ navHref: manifest.nav?.href,
517
+ navLabel: manifest.nav?.label,
518
+ ts: Date.now(),
519
+ manifest: {
520
+ version: manifest.version,
521
+ manualSteps: manifest.manualSteps,
522
+ env: manifest.env,
523
+ },
524
+ });
525
+
526
+ log.success(`✓ ${featureName} installed successfully!`);
527
+
528
+ } catch (error: any) {
529
+ log.warn(`⚠ Failed to install ${featureName}: ${error.message}`);
530
+ log.info(`You can install it later with: vf add ${featureName}`);
531
+ }
532
+ }
533
+
534
+ // Go back to original directory
535
+ process.chdir('..');
536
+
537
+ log.plain('');
538
+ log.plain('━'.repeat(60));
539
+ log.success(`✓ Installed ${selectedFeatures.length} feature(s)`);
540
+ log.plain('');
541
+ }
542
+
279
543
  // Step 7: Login with license key (REQUIRED)
280
544
  let licenseKey = options.license;
281
545
 
@@ -334,31 +598,57 @@ export const initCommand = new Command('init')
334
598
  log.plain('');
335
599
  log.success('🎉 Project initialized successfully!');
336
600
  log.plain('');
601
+ log.info(`Setup: ${starterType === 'clean' ? 'Clean' : 'Custom'}`);
602
+ log.info(`Platforms: ${platforms.join(' + ')}`);
603
+ if (starterType === 'custom' && selectedFeatures.length > 0) {
604
+ log.info(`Features: ${selectedFeatures.join(', ')}`);
605
+ }
606
+ log.plain('');
337
607
  log.info('Next steps:');
338
608
  log.plain(` 1. cd ${projectName}`);
339
609
 
340
- // Check if setup script exists
341
- const setupScriptExists = existsSync(join(projectPath, 'apps/native/scripts/starter-setup.mjs'));
610
+ // Check if setup script exists (only for native)
611
+ const setupScriptExists = platforms.includes('native') &&
612
+ existsSync(join(projectPath, 'apps/native/scripts/starter-setup.mjs'));
342
613
 
343
614
  if (setupScriptExists && !options.skipInstall) {
344
615
  log.plain(' 2. Start developing:');
345
- log.plain(' • pnpm dev:native (start dev server)');
346
- log.plain(' • pnpm native:ios (run on iOS)');
347
- log.plain(' • pnpm native:android (run on Android)');
616
+ if (platforms.includes('native')) {
617
+ log.plain(' • pnpm dev:native (start native dev server)');
618
+ log.plain(' • pnpm native:ios (run on iOS)');
619
+ log.plain(' • pnpm native:android (run on Android)');
620
+ }
621
+ if (platforms.includes('web')) {
622
+ log.plain(' • pnpm dev:web (start web dev server)');
623
+ log.plain(' • pnpm web:build (build for production)');
624
+ }
348
625
  } else {
349
- log.plain(' 2. Run starter setup (if not done):');
350
- log.plain(` cd ${projectName}/apps/native`);
351
- log.plain(' node scripts/starter-setup.mjs');
352
- log.plain(' 3. Start developing:');
353
- log.plain(' • pnpm dev:native (start dev server)');
354
- log.plain(' pnpm native:ios (run on iOS)');
355
- log.plain(' • pnpm native:android (run on Android)');
626
+ if (setupScriptExists) {
627
+ log.plain(' 2. Run starter setup (if not done):');
628
+ log.plain(` cd ${projectName}/apps/native`);
629
+ log.plain(' node scripts/starter-setup.mjs');
630
+ }
631
+ log.plain(` ${setupScriptExists ? '3' : '2'}. Start developing:`);
632
+ if (platforms.includes('native')) {
633
+ log.plain(' • pnpm dev:native (start native dev server)');
634
+ log.plain(' • pnpm native:ios (run on iOS)');
635
+ log.plain(' • pnpm native:android (run on Android)');
636
+ }
637
+ if (platforms.includes('web')) {
638
+ log.plain(' • pnpm dev:web (start web dev server)');
639
+ log.plain(' • pnpm web:build (build for production)');
640
+ }
356
641
  }
357
642
 
358
643
  log.plain('');
359
644
  log.info('Add features:');
360
645
  log.plain(' • vf list # See available features');
361
- log.plain(' • vf add <feature> # Add features to your project');
646
+ if (platforms.includes('native')) {
647
+ log.plain(' • vf add chatbot # Add native feature');
648
+ }
649
+ if (platforms.includes('web')) {
650
+ log.plain(' • vf add quiz --target web # Add web feature');
651
+ }
362
652
 
363
653
  log.plain('');
364
654
  log.info('📚 Documentation: https://vibefast.pro/docs');