portfolify 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/commands/generate.d.ts +7 -0
  2. package/dist/commands/generate.d.ts.map +1 -0
  3. package/dist/commands/generate.js +129 -0
  4. package/dist/commands/generate.js.map +1 -0
  5. package/dist/commands/portfolio.d.ts +12 -0
  6. package/dist/commands/portfolio.d.ts.map +1 -0
  7. package/dist/commands/portfolio.js +292 -0
  8. package/dist/commands/portfolio.js.map +1 -0
  9. package/dist/generator/index.d.ts +3 -0
  10. package/dist/generator/index.d.ts.map +1 -0
  11. package/dist/generator/index.js +572 -0
  12. package/dist/generator/index.js.map +1 -0
  13. package/dist/generator/portfolio-generator.d.ts +4 -0
  14. package/dist/generator/portfolio-generator.d.ts.map +1 -0
  15. package/dist/generator/portfolio-generator.js +1577 -0
  16. package/dist/generator/portfolio-generator.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +40 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/prompts/index.d.ts +81 -0
  22. package/dist/prompts/index.d.ts.map +1 -0
  23. package/dist/prompts/index.js +330 -0
  24. package/dist/prompts/index.js.map +1 -0
  25. package/dist/prompts/portfolio-prompts.d.ts +60 -0
  26. package/dist/prompts/portfolio-prompts.d.ts.map +1 -0
  27. package/dist/prompts/portfolio-prompts.js +635 -0
  28. package/dist/prompts/portfolio-prompts.js.map +1 -0
  29. package/dist/themes/index.d.ts +15 -0
  30. package/dist/themes/index.d.ts.map +1 -0
  31. package/dist/themes/index.js +64 -0
  32. package/dist/themes/index.js.map +1 -0
  33. package/dist/utils/file.d.ts +5 -0
  34. package/dist/utils/file.d.ts.map +1 -0
  35. package/dist/utils/file.js +33 -0
  36. package/dist/utils/file.js.map +1 -0
  37. package/dist/utils/logger.d.ts +9 -0
  38. package/dist/utils/logger.d.ts.map +1 -0
  39. package/dist/utils/logger.js +22 -0
  40. package/dist/utils/logger.js.map +1 -0
  41. package/dist/utils/validator.d.ts +27 -0
  42. package/dist/utils/validator.d.ts.map +1 -0
  43. package/dist/utils/validator.js +322 -0
  44. package/dist/utils/validator.js.map +1 -0
  45. package/package.json +66 -0
  46. package/templates/index.html +16 -0
  47. package/templates/package.json +37 -0
  48. package/templates/postcss.config.js +6 -0
  49. package/templates/src/App.tsx +56 -0
  50. package/templates/src/components/Blog.tsx +119 -0
  51. package/templates/src/components/Footer.tsx +206 -0
  52. package/templates/src/components/Hero.tsx +182 -0
  53. package/templates/src/components/Projects.tsx +130 -0
  54. package/templates/src/components/SEO.tsx +38 -0
  55. package/templates/src/components/Skills.tsx +107 -0
  56. package/templates/src/components/ThemeToggle.tsx +39 -0
  57. package/templates/src/config/portfolio.json +61 -0
  58. package/templates/src/content/blog/welcome.mdx +29 -0
  59. package/templates/src/lib/blog.ts +63 -0
  60. package/templates/src/lib/utils.ts +6 -0
  61. package/templates/src/main.tsx +13 -0
  62. package/templates/src/styles/globals.css +123 -0
  63. package/templates/tailwind.config.js +65 -0
  64. package/templates/tsconfig.json +37 -0
  65. package/templates/tsconfig.node.json +12 -0
  66. package/templates/vite.config.ts +24 -0
@@ -0,0 +1,7 @@
1
+ interface GenerateOptions {
2
+ yes?: boolean;
3
+ theme?: string;
4
+ }
5
+ export declare function generateCommand(projectName?: string, options?: GenerateOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAaA,UAAU,eAAe;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwGxG"}
@@ -0,0 +1,129 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import ora from 'ora';
4
+ import chalk from 'chalk';
5
+ import validateNpmPackageName from 'validate-npm-package-name';
6
+ import { collectUserData, getDefaultUserData, themes } from '../prompts/index.js';
7
+ import { generatePortfolio } from '../generator/index.js';
8
+ import { logger } from '../utils/logger.js';
9
+ import { exec } from 'child_process';
10
+ import { promisify } from 'util';
11
+ const execAsync = promisify(exec);
12
+ export async function generateCommand(projectName, options = {}) {
13
+ try {
14
+ // Get project name
15
+ let finalProjectName = projectName;
16
+ if (!finalProjectName) {
17
+ if (options.yes) {
18
+ finalProjectName = 'my-portfolio';
19
+ }
20
+ else {
21
+ const inquirer = (await import('inquirer')).default;
22
+ const { name } = await inquirer.prompt([
23
+ {
24
+ type: 'input',
25
+ name: 'name',
26
+ message: 'What is your project name?',
27
+ default: 'my-portfolio',
28
+ validate: (input) => {
29
+ const validation = validateNpmPackageName(input);
30
+ if (!validation.validForNewPackages) {
31
+ return validation.errors?.[0] || 'Invalid project name';
32
+ }
33
+ return true;
34
+ }
35
+ }
36
+ ]);
37
+ finalProjectName = name;
38
+ }
39
+ }
40
+ if (!finalProjectName) {
41
+ throw new Error('Project name is required');
42
+ }
43
+ // Validate project name
44
+ const validation = validateNpmPackageName(finalProjectName);
45
+ if (!validation.validForNewPackages) {
46
+ logger.error(`Invalid project name: ${validation.errors?.[0]}`);
47
+ process.exit(1);
48
+ }
49
+ const targetDir = path.resolve(process.cwd(), finalProjectName);
50
+ // Check if directory exists
51
+ if (await fs.pathExists(targetDir)) {
52
+ logger.error(`Directory "${finalProjectName}" already exists!`);
53
+ process.exit(1);
54
+ }
55
+ // Display welcome banner
56
+ console.log('\n');
57
+ console.log(chalk.cyan.bold('╔════════════════════════════════════════════════════════════╗'));
58
+ console.log(chalk.cyan.bold('║') + chalk.white.bold(' 🚀 Portfolify - Create Beautiful Portfolios in Seconds ') + chalk.cyan.bold('║'));
59
+ console.log(chalk.cyan.bold('╚════════════════════════════════════════════════════════════╝'));
60
+ console.log('\n');
61
+ // Collect user data
62
+ let userData;
63
+ if (options.yes) {
64
+ // Use defaults with optional theme override
65
+ const themeValue = options.theme || 'developer';
66
+ const selectedTheme = themes.find(t => t.value === themeValue) || themes[0];
67
+ userData = getDefaultUserData(selectedTheme);
68
+ console.log(chalk.green(`✓ Using theme: ${selectedTheme.emoji} ${selectedTheme.name}`));
69
+ console.log(chalk.gray(` Category: ${selectedTheme.category}`));
70
+ console.log(chalk.gray(` Style: ${selectedTheme.layout.heroStyle} hero layout`));
71
+ }
72
+ else {
73
+ userData = await collectUserData();
74
+ }
75
+ // Generate portfolio
76
+ console.log('\n');
77
+ logger.header('🎨 Generating your portfolio...');
78
+ await generatePortfolio(finalProjectName, userData, targetDir);
79
+ // Install dependencies
80
+ logger.header('📦 Installing dependencies...');
81
+ const spinner = ora('Installing packages...').start();
82
+ try {
83
+ await execAsync('npm install', { cwd: targetDir });
84
+ spinner.succeed('Dependencies installed!');
85
+ }
86
+ catch (error) {
87
+ spinner.warn('Failed to install dependencies automatically');
88
+ logger.info('You can install them manually by running: npm install');
89
+ }
90
+ // Initialize git
91
+ try {
92
+ await execAsync('git init', { cwd: targetDir });
93
+ await execAsync('git add .', { cwd: targetDir });
94
+ await execAsync('git commit -m "Initial commit from Portfolify"', { cwd: targetDir });
95
+ logger.success('Git repository initialized');
96
+ }
97
+ catch (error) {
98
+ // Git init is optional, don't fail if it doesn't work
99
+ }
100
+ // Success message
101
+ printSuccessMessage(finalProjectName, userData.name);
102
+ }
103
+ catch (error) {
104
+ logger.error('An error occurred during generation');
105
+ console.error(error);
106
+ process.exit(1);
107
+ }
108
+ }
109
+ function printSuccessMessage(projectName, userName) {
110
+ console.log('\n');
111
+ console.log(chalk.green.bold('🎉 Success! Your portfolio is ready!'));
112
+ console.log('\n');
113
+ console.log(chalk.cyan('Next steps:'));
114
+ console.log(chalk.white(` cd ${projectName}`));
115
+ console.log(chalk.white(' npm run dev'));
116
+ console.log('\n');
117
+ console.log(chalk.cyan('Deploy to:'));
118
+ console.log(chalk.white(' • Vercel: vercel'));
119
+ console.log(chalk.white(' • Netlify: netlify deploy'));
120
+ console.log(chalk.white(' • GitHub Pages: npm run build'));
121
+ console.log('\n');
122
+ console.log(chalk.magenta.bold('📢 Share your portfolio!'));
123
+ console.log(chalk.white(' Tweet about it with #Portfolify'));
124
+ console.log(chalk.white(' Star us on GitHub: https://github.com/halloffame12/portfolify'));
125
+ console.log('\n');
126
+ console.log(chalk.gray('Built with ❤️ using Portfolify'));
127
+ console.log('\n');
128
+ }
129
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface PortfolioCommandOptions {
2
+ all?: boolean;
3
+ deployReady?: boolean;
4
+ customAssets?: string;
5
+ git?: boolean;
6
+ skipValidation?: boolean;
7
+ autoFix?: boolean;
8
+ yes?: boolean;
9
+ type?: string;
10
+ }
11
+ export declare function portfolioCommand(projectName?: string, options?: PortfolioCommandOptions): Promise<void>;
12
+ //# sourceMappingURL=portfolio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../../src/commands/portfolio.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,uBAAuB;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4HjH"}
@@ -0,0 +1,292 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import ora from 'ora';
4
+ import chalk from 'chalk';
5
+ import validateNpmPackageName from 'validate-npm-package-name';
6
+ import { collectPortfolioData, portfolioTypes } from '../prompts/portfolio-prompts.js';
7
+ import { generatePortfolioProject } from '../generator/portfolio-generator.js';
8
+ import { validateProject } from '../utils/validator.js';
9
+ import { logger } from '../utils/logger.js';
10
+ import { exec } from 'child_process';
11
+ import { promisify } from 'util';
12
+ const execAsync = promisify(exec);
13
+ export async function portfolioCommand(projectName, options = {}) {
14
+ try {
15
+ console.log(chalk.bold.magenta('\n🚀 ForgeStack Portfolio Generator\n'));
16
+ console.log(chalk.gray('Create production-ready portfolio websites with validation\n'));
17
+ // Debug: show if using defaults
18
+ if (options.yes) {
19
+ logger.info('Running in non-interactive mode with defaults');
20
+ }
21
+ // Handle --all flag to generate all portfolio types
22
+ if (options.all) {
23
+ await generateAllPortfolios(options);
24
+ return;
25
+ }
26
+ // Get project name
27
+ let finalProjectName = projectName;
28
+ if (!finalProjectName) {
29
+ if (options.yes) {
30
+ finalProjectName = 'my-portfolio';
31
+ }
32
+ else {
33
+ const inquirer = (await import('inquirer')).default;
34
+ const { name } = await inquirer.prompt([
35
+ {
36
+ type: 'input',
37
+ name: 'name',
38
+ message: 'What is your project name?',
39
+ default: 'my-portfolio',
40
+ validate: (input) => {
41
+ const validation = validateNpmPackageName(input);
42
+ if (!validation.validForNewPackages) {
43
+ return validation.errors?.[0] || 'Invalid project name';
44
+ }
45
+ return true;
46
+ }
47
+ }
48
+ ]);
49
+ finalProjectName = name;
50
+ }
51
+ }
52
+ if (!finalProjectName) {
53
+ throw new Error('Project name is required');
54
+ }
55
+ // Validate project name
56
+ const validation = validateNpmPackageName(finalProjectName);
57
+ if (!validation.validForNewPackages) {
58
+ logger.error(`Invalid project name: ${validation.errors?.[0]}`);
59
+ process.exit(1);
60
+ }
61
+ const targetDir = path.resolve(process.cwd(), finalProjectName);
62
+ // Check if directory exists
63
+ if (await fs.pathExists(targetDir)) {
64
+ logger.error(`Directory "${finalProjectName}" already exists!`);
65
+ process.exit(1);
66
+ }
67
+ // Collect portfolio configuration
68
+ logger.header('📝 Configure your portfolio');
69
+ let portfolioConfig;
70
+ if (options.yes) {
71
+ portfolioConfig = getDefaultPortfolioConfig(options.type);
72
+ logger.info(`Using default configuration for: ${portfolioConfig.type.name}`);
73
+ }
74
+ else {
75
+ portfolioConfig = await collectPortfolioData();
76
+ }
77
+ // Generate portfolio
78
+ logger.header('🎨 Generating your portfolio...');
79
+ const spinner = ora('Creating project files...').start();
80
+ try {
81
+ await generatePortfolioProject(finalProjectName, portfolioConfig, targetDir, options);
82
+ spinner.succeed('Project files created!');
83
+ }
84
+ catch (error) {
85
+ spinner.fail('Failed to create project files');
86
+ throw error;
87
+ }
88
+ // Install dependencies
89
+ logger.header('📦 Installing dependencies...');
90
+ const installSpinner = ora('Installing packages...').start();
91
+ try {
92
+ await execAsync('npm install', { cwd: targetDir });
93
+ installSpinner.succeed('Dependencies installed!');
94
+ }
95
+ catch (error) {
96
+ installSpinner.warn('Failed to install dependencies automatically');
97
+ logger.info('You can install them manually by running: npm install');
98
+ }
99
+ // Run validation if not skipped
100
+ let validationResult = null;
101
+ if (!options.skipValidation) {
102
+ logger.header('🔍 Validating generated code...');
103
+ validationResult = await validateProject(targetDir, options.autoFix);
104
+ }
105
+ // Initialize git if requested
106
+ if (options.git) {
107
+ try {
108
+ await execAsync('git init', { cwd: targetDir });
109
+ await execAsync('git add .', { cwd: targetDir });
110
+ await execAsync('git commit -m "Initial commit from ForgeStack Portfolio"', { cwd: targetDir });
111
+ logger.success('Git repository initialized');
112
+ }
113
+ catch (error) {
114
+ logger.warning('Failed to initialize git repository');
115
+ }
116
+ }
117
+ // Print summary report
118
+ printSummaryReport(finalProjectName, portfolioConfig, validationResult, options);
119
+ }
120
+ catch (error) {
121
+ logger.error('An error occurred during generation');
122
+ console.error(error);
123
+ process.exit(1);
124
+ }
125
+ }
126
+ async function generateAllPortfolios(options) {
127
+ logger.header('🎯 Generating all portfolio types for demo/testing');
128
+ const baseDir = path.resolve(process.cwd(), 'forgestack-portfolios');
129
+ if (await fs.pathExists(baseDir)) {
130
+ logger.error(`Directory "forgestack-portfolios" already exists!`);
131
+ process.exit(1);
132
+ }
133
+ await fs.ensureDir(baseDir);
134
+ const results = [];
135
+ for (const type of portfolioTypes) {
136
+ const projectName = `portfolio-${type.value}`;
137
+ const targetDir = path.join(baseDir, projectName);
138
+ const spinner = ora(`Generating ${type.name}...`).start();
139
+ try {
140
+ const config = getDefaultPortfolioConfig(type.value);
141
+ await generatePortfolioProject(projectName, config, targetDir, options);
142
+ // Install dependencies
143
+ await execAsync('npm install', { cwd: targetDir });
144
+ // Validate if not skipped
145
+ if (!options.skipValidation) {
146
+ await validateProject(targetDir, options.autoFix);
147
+ }
148
+ spinner.succeed(`${type.name} generated successfully`);
149
+ results.push({ name: type.name, success: true });
150
+ }
151
+ catch (error) {
152
+ spinner.fail(`Failed to generate ${type.name}`);
153
+ results.push({ name: type.name, success: false, error: String(error) });
154
+ }
155
+ }
156
+ // Print summary
157
+ console.log('\n');
158
+ console.log(chalk.bold.cyan('📊 Generation Summary:'));
159
+ console.log(chalk.gray('─'.repeat(50)));
160
+ const successful = results.filter(r => r.success).length;
161
+ const failed = results.filter(r => !r.success).length;
162
+ for (const result of results) {
163
+ if (result.success) {
164
+ console.log(chalk.green(` ✓ ${result.name}`));
165
+ }
166
+ else {
167
+ console.log(chalk.red(` ✗ ${result.name}: ${result.error}`));
168
+ }
169
+ }
170
+ console.log(chalk.gray('─'.repeat(50)));
171
+ console.log(chalk.white(` Total: ${results.length} | `), chalk.green(`Success: ${successful} | `), failed > 0 ? chalk.red(`Failed: ${failed}`) : chalk.gray('Failed: 0'));
172
+ console.log('\n');
173
+ console.log(chalk.cyan(`All portfolios generated in: ${baseDir}`));
174
+ }
175
+ function getDefaultPortfolioConfig(typeValue) {
176
+ const type = portfolioTypes.find(t => t.value === typeValue) || portfolioTypes[0];
177
+ return {
178
+ type,
179
+ colorScheme: {
180
+ name: 'Default',
181
+ value: 'default',
182
+ colors: type.defaultColors
183
+ },
184
+ layout: 'single-page',
185
+ framework: 'react-vite',
186
+ features: {
187
+ contactForm: true,
188
+ gallery: type.category === 'Creative' || type.category === 'Beauty',
189
+ blog: type.category === 'Professional',
190
+ testimonials: type.category === 'Business' || type.category === 'Beauty'
191
+ },
192
+ userData: {
193
+ name: 'John Doe',
194
+ role: type.defaultRole,
195
+ bio: type.defaultBio,
196
+ skills: type.defaultSkills,
197
+ email: 'hello@example.com'
198
+ },
199
+ runValidation: true
200
+ };
201
+ }
202
+ function printSummaryReport(projectName, config, validation, options) {
203
+ console.log('\n');
204
+ console.log(chalk.bold.green('═'.repeat(60)));
205
+ console.log(chalk.bold.green(' 🎉 Portfolio Generation Complete!'));
206
+ console.log(chalk.bold.green('═'.repeat(60)));
207
+ console.log('\n');
208
+ // Project info
209
+ console.log(chalk.cyan('📁 Project Details:'));
210
+ console.log(chalk.gray('─'.repeat(40)));
211
+ console.log(chalk.white(` Location: ${chalk.bold('./' + projectName)}`));
212
+ console.log(chalk.white(` Type: ${chalk.bold(config.type.name)} ${config.type.emoji}`));
213
+ console.log(chalk.white(` Framework: ${chalk.bold(getFrameworkName(config.framework))}`));
214
+ console.log(chalk.white(` Layout: ${chalk.bold(config.layout === 'single-page' ? 'Single Page' : 'Multi-Page')}`));
215
+ console.log('\n');
216
+ // Features
217
+ console.log(chalk.cyan('✨ Features Enabled:'));
218
+ console.log(chalk.gray('─'.repeat(40)));
219
+ if (config.features.contactForm)
220
+ console.log(chalk.white(' ✓ Contact Form'));
221
+ if (config.features.gallery)
222
+ console.log(chalk.white(' ✓ Gallery/Portfolio'));
223
+ if (config.features.blog)
224
+ console.log(chalk.white(' ✓ Blog'));
225
+ if (config.features.testimonials)
226
+ console.log(chalk.white(' ✓ Testimonials'));
227
+ console.log('\n');
228
+ // Validation results
229
+ if (validation) {
230
+ console.log(chalk.cyan('🔍 Validation Results:'));
231
+ console.log(chalk.gray('─'.repeat(40)));
232
+ if (validation.typescript.success) {
233
+ console.log(chalk.green(' ✅ TypeScript: no errors'));
234
+ }
235
+ else {
236
+ console.log(chalk.red(` ❌ TypeScript: ${validation.typescript.errors.length} error(s)`));
237
+ validation.typescript.errors.slice(0, 3).forEach(err => {
238
+ console.log(chalk.red(` • ${err}`));
239
+ });
240
+ }
241
+ if (validation.eslint.success) {
242
+ console.log(chalk.green(' ✅ ESLint: clean'));
243
+ }
244
+ else {
245
+ console.log(chalk.yellow(` ⚠️ ESLint: ${validation.eslint.warnings} warning(s), ${validation.eslint.errors.length} error(s)`));
246
+ }
247
+ if (validation.dependencies.success) {
248
+ console.log(chalk.green(' ✅ All dependencies installed'));
249
+ }
250
+ else {
251
+ console.log(chalk.yellow(` ⚠️ Missing dependencies: ${validation.dependencies.missing.join(', ')}`));
252
+ }
253
+ if (validation.files.success) {
254
+ console.log(chalk.green(' ✅ All required files present'));
255
+ }
256
+ else {
257
+ console.log(chalk.yellow(` ⚠️ Missing files: ${validation.files.missing.join(', ')}`));
258
+ }
259
+ if (validation.assets.warnings.length > 0) {
260
+ validation.assets.warnings.forEach(warning => {
261
+ console.log(chalk.yellow(` ⚠️ ${warning}`));
262
+ });
263
+ }
264
+ console.log('\n');
265
+ }
266
+ // Next steps
267
+ console.log(chalk.cyan('🚀 Next Steps:'));
268
+ console.log(chalk.gray('─'.repeat(40)));
269
+ console.log(chalk.white(` cd ${projectName}`));
270
+ console.log(chalk.white(' npm run dev'));
271
+ console.log('\n');
272
+ // Deploy info
273
+ if (options.deployReady) {
274
+ console.log(chalk.cyan('☁️ Deploy Ready:'));
275
+ console.log(chalk.gray('─'.repeat(40)));
276
+ console.log(chalk.white(' • Vercel: vercel deploy'));
277
+ console.log(chalk.white(' • Netlify: netlify deploy'));
278
+ console.log(chalk.white(' • Build: npm run build'));
279
+ console.log('\n');
280
+ }
281
+ console.log(chalk.gray('Built with ❤️ using ForgeStack Portfolio Generator'));
282
+ console.log('\n');
283
+ }
284
+ function getFrameworkName(framework) {
285
+ const names = {
286
+ 'react-vite': 'React + Vite',
287
+ 'nextjs': 'Next.js',
288
+ 'sveltekit': 'SvelteKit'
289
+ };
290
+ return names[framework] || framework;
291
+ }
292
+ //# sourceMappingURL=portfolio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/commands/portfolio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { PortfolioData } from '../prompts/index.js';
2
+ export declare function generatePortfolio(projectName: string, data: PortfolioData, targetDir: string): Promise<void>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOpD,wBAAsB,iBAAiB,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAuHf"}