create-solostack 1.3.2 → 1.3.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.
- package/README.md +2 -2
- package/package.json +1 -1
- package/src/index.js +24 -15
- package/src/utils/logger.js +42 -39
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**The complete SaaS boilerplate for indie hackers**
|
|
6
6
|
|
|
7
|
-
[](https://github.com/danish296/create-solostack)
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
[](https://nodejs.org/)
|
|
10
10
|
|
|
@@ -334,6 +334,6 @@ MIT © Danish Akhtar
|
|
|
334
334
|
|
|
335
335
|
**Built with ❤️ for indie hackers and solo founders**
|
|
336
336
|
|
|
337
|
-
Made by [Danish Akhtar](https://github.com/danish296) • [GitHub](https://github.com/danish296/create-solostack) • Version 1.3.
|
|
337
|
+
Made by [Danish Akhtar](https://github.com/danish296) • [GitHub](https://github.com/danish296/create-solostack) • Version 1.3.3
|
|
338
338
|
|
|
339
339
|
</div>
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -28,23 +28,32 @@ import {
|
|
|
28
28
|
* Main CLI function - orchestrates the entire project generation
|
|
29
29
|
*/
|
|
30
30
|
export async function main() {
|
|
31
|
-
// Display enhanced banner
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
║
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
31
|
+
// Display enhanced banner with orange theme
|
|
32
|
+
const orange = chalk.hex('#FF8C00');
|
|
33
|
+
const orangeBright = chalk.hex('#FFA500');
|
|
34
|
+
const orangeDim = chalk.hex('#FF7F00');
|
|
35
|
+
|
|
36
|
+
console.log(orange(`
|
|
37
|
+
╔════════════════════════════════════════════════════════════════╗
|
|
38
|
+
║ ║
|
|
39
|
+
║ ███████ ██████ ██ ██████ ║
|
|
40
|
+
║ ██ ██ ██ ██ ██ ██ ║
|
|
41
|
+
║ ███████ ██ ██ ██ ██ ██ ║
|
|
42
|
+
║ ██ ██ ██ ██ ██ ██ ║
|
|
43
|
+
║ ███████ ██████ ███████ ██████ ║
|
|
44
|
+
║ ║
|
|
45
|
+
║ ███████ ████████ █████ ██████ ██ ██ ║
|
|
46
|
+
║ ██ ██ ██ ██ ██ ██ ██ ║
|
|
47
|
+
║ ███████ ██ ███████ ██ █████ ║
|
|
48
|
+
║ ██ ██ ██ ██ ██ ██ ██ ║
|
|
49
|
+
║ ███████ ██ ██ ██ ██████ ██ ██ ║
|
|
50
|
+
║ ║
|
|
51
|
+
║ The complete SaaS boilerplate for indie hackers ║
|
|
52
|
+
║ ║
|
|
53
|
+
╚════════════════════════════════════════════════════════════════╝
|
|
45
54
|
`));
|
|
46
55
|
|
|
47
|
-
console.log(chalk.gray(` Version ${
|
|
56
|
+
console.log(chalk.gray(` Version ${orangeBright('1.3.3')} • Built by ${orangeBright('Danish Akhtar')} • ${orangeBright('github.com/danish296')}\n`));
|
|
48
57
|
|
|
49
58
|
// Parse command line arguments
|
|
50
59
|
program
|
package/src/utils/logger.js
CHANGED
|
@@ -6,32 +6,33 @@ import chalk from 'chalk';
|
|
|
6
6
|
* @param {string} projectPath - Absolute path to the project
|
|
7
7
|
*/
|
|
8
8
|
export function printSuccess(projectName, projectPath) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
console.log(
|
|
12
|
-
console.log(
|
|
13
|
-
console.log(
|
|
14
|
-
|
|
15
|
-
console.log(
|
|
9
|
+
const orange = chalk.hex('#FF8C00');
|
|
10
|
+
const orangeBold = chalk.hex('#FF8C00').bold;
|
|
11
|
+
console.log(orangeBold('\n╔═══════════════════════════════════════════════════════════╗'));
|
|
12
|
+
console.log(orangeBold('║ ║'));
|
|
13
|
+
console.log(orangeBold('║ ✅ Success! Your SaaS boilerplate is ready! ║'));
|
|
14
|
+
console.log(orangeBold('║ ║'));
|
|
15
|
+
console.log(orangeBold('╚═══════════════════════════════════════════════════════════╝\n'));
|
|
16
|
+
console.log(orangeBold('📁 Project Location:'));
|
|
16
17
|
console.log(chalk.white(` ${chalk.gray('→')} ${projectPath}\n`));
|
|
17
18
|
|
|
18
|
-
console.log(
|
|
19
|
-
console.log(chalk.white(` ${chalk.gray('$')} ${
|
|
20
|
-
console.log(chalk.white(` ${chalk.gray('$')} ${
|
|
19
|
+
console.log(orangeBold('🚀 Quick Start:\n'));
|
|
20
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${orange(`cd ${projectName}`)}`));
|
|
21
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${orange('cp .env.example .env')}`));
|
|
21
22
|
console.log(chalk.white(` ${chalk.gray('#')} ${chalk.gray('Add your environment variables to .env')}\n`));
|
|
22
23
|
|
|
23
|
-
console.log(
|
|
24
|
-
console.log(chalk.white(` ${chalk.gray('$')} ${
|
|
25
|
-
console.log(chalk.white(` ${chalk.gray('$')} ${
|
|
24
|
+
console.log(orangeBold('🗄️ Database Setup:\n'));
|
|
25
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${orange('npm run db:push')} ${chalk.gray('# Push schema to database')}`));
|
|
26
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${orange('npm run db:seed')} ${chalk.gray('# Seed with sample data')}\n`));
|
|
26
27
|
|
|
27
|
-
console.log(
|
|
28
|
-
console.log(chalk.white(` ${chalk.gray('$')} ${
|
|
28
|
+
console.log(orangeBold('⚡ Start Development:\n'));
|
|
29
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${orange('npm run dev')}\n`));
|
|
29
30
|
|
|
30
|
-
console.log(
|
|
31
|
-
console.log(chalk.white(` ${chalk.gray('•')} NextAuth: ${
|
|
32
|
-
console.log(chalk.white(` ${chalk.gray('•')} Prisma: ${
|
|
33
|
-
console.log(chalk.white(` ${chalk.gray('•')} Stripe: ${
|
|
34
|
-
console.log(chalk.white(` ${chalk.gray('•')} Resend: ${
|
|
31
|
+
console.log(orangeBold('📚 Documentation & Resources:\n'));
|
|
32
|
+
console.log(chalk.white(` ${chalk.gray('•')} NextAuth: ${orange('https://next-auth.js.org')}`));
|
|
33
|
+
console.log(chalk.white(` ${chalk.gray('•')} Prisma: ${orange('https://prisma.io')}`));
|
|
34
|
+
console.log(chalk.white(` ${chalk.gray('•')} Stripe: ${orange('https://stripe.com/docs')}`));
|
|
35
|
+
console.log(chalk.white(` ${chalk.gray('•')} Resend: ${orange('https://resend.com/docs')}\n`));
|
|
35
36
|
|
|
36
37
|
console.log(chalk.yellow.bold('⚠️ Important Reminders:\n'));
|
|
37
38
|
console.log(chalk.white(` ${chalk.gray('•')} Set up a PostgreSQL database (Neon, Supabase, etc.)`));
|
|
@@ -39,7 +40,7 @@ export function printSuccess(projectName, projectPath) {
|
|
|
39
40
|
console.log(chalk.white(` ${chalk.gray('•')} Configure OAuth providers (optional)\n`));
|
|
40
41
|
|
|
41
42
|
console.log(chalk.magenta.bold('💡 Happy building! 🚀\n'));
|
|
42
|
-
console.log(chalk.gray(` Built with ❤️ by ${
|
|
43
|
+
console.log(chalk.gray(` Built with ❤️ by ${orange('Danish Akhtar')} • ${orange('github.com/danish296')}\n`));
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
/**
|
|
@@ -72,13 +73,15 @@ export function printInfo(message) {
|
|
|
72
73
|
* @param {string} projectPath - Absolute path to the project
|
|
73
74
|
*/
|
|
74
75
|
export function printProSuccess(projectName, projectPath) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
console.log(
|
|
78
|
-
console.log(
|
|
79
|
-
console.log(
|
|
80
|
-
|
|
81
|
-
console.log(
|
|
76
|
+
const orange = chalk.hex('#FF8C00');
|
|
77
|
+
const orangeBold = chalk.hex('#FF8C00').bold;
|
|
78
|
+
console.log(orangeBold('\n╔═══════════════════════════════════════════════════════════╗'));
|
|
79
|
+
console.log(orangeBold('║ ║'));
|
|
80
|
+
console.log(orangeBold('║ 💎 Your Pro SaaS is ready! 🎉 ║'));
|
|
81
|
+
console.log(orangeBold('║ ║'));
|
|
82
|
+
console.log(orangeBold('╚═══════════════════════════════════════════════════════════╝\n'));
|
|
83
|
+
|
|
84
|
+
console.log(orangeBold('💎 Pro Features Included:\n'));
|
|
82
85
|
console.log(chalk.white(` ${chalk.green('✓')} OAuth (Google & GitHub)`));
|
|
83
86
|
console.log(chalk.white(` ${chalk.green('✓')} Advanced Stripe (subscriptions, webhooks)`));
|
|
84
87
|
console.log(chalk.white(` ${chalk.green('✓')} Admin panel`));
|
|
@@ -87,19 +90,19 @@ export function printProSuccess(projectName, projectPath) {
|
|
|
87
90
|
console.log(chalk.white(` ${chalk.green('✓')} Full database schema\n`));
|
|
88
91
|
|
|
89
92
|
console.log(chalk.yellow.bold('📝 Next Steps:\n'));
|
|
90
|
-
console.log(chalk.white(` ${chalk.gray('1.')} ${
|
|
91
|
-
console.log(chalk.white(` ${chalk.gray('2.')} ${
|
|
93
|
+
console.log(chalk.white(` ${chalk.gray('1.')} ${orange(`cd ${projectName}`)}`));
|
|
94
|
+
console.log(chalk.white(` ${chalk.gray('2.')} ${orange('cp .env.example .env')}`));
|
|
92
95
|
console.log(chalk.white(` ${chalk.gray('3.')} Add your API keys to .env`));
|
|
93
|
-
console.log(chalk.white(` ${chalk.gray('4.')} ${
|
|
94
|
-
console.log(chalk.white(` ${chalk.gray('5.')} ${
|
|
96
|
+
console.log(chalk.white(` ${chalk.gray('4.')} ${orange('npx prisma db push')}`));
|
|
97
|
+
console.log(chalk.white(` ${chalk.gray('5.')} ${orange('npm run dev')}\n`));
|
|
95
98
|
|
|
96
|
-
console.log(
|
|
97
|
-
console.log(chalk.white(` ${chalk.gray('→')} Visit ${
|
|
99
|
+
console.log(orangeBold('🔧 Setup Verification:\n'));
|
|
100
|
+
console.log(chalk.white(` ${chalk.gray('→')} Visit ${orange('http://localhost:3000/setup')} to verify all integrations\n`));
|
|
98
101
|
|
|
99
|
-
console.log(
|
|
100
|
-
console.log(chalk.white(` ${chalk.gray('→')} Visit ${
|
|
102
|
+
console.log(orangeBold('👤 Admin Access:\n'));
|
|
103
|
+
console.log(chalk.white(` ${chalk.gray('→')} Visit ${orange('http://localhost:3000/admin')} (requires admin role)\n`));
|
|
101
104
|
|
|
102
|
-
console.log(chalk.gray(' Need help? Join our Discord: ') +
|
|
103
|
-
console.log(chalk.gray(' Documentation: ') +
|
|
104
|
-
console.log(chalk.gray(`\n Built with ❤️ by ${
|
|
105
|
+
console.log(chalk.gray(' Need help? Join our Discord: ') + orange('https://discord.gg/solostack'));
|
|
106
|
+
console.log(chalk.gray(' Documentation: ') + orange('https://solostack.dev/docs'));
|
|
107
|
+
console.log(chalk.gray(`\n Built with ❤️ by ${orange('Danish Akhtar')} • ${orange('github.com/danish296')}\n`));
|
|
105
108
|
}
|