create-solostack 1.3.1 → 1.3.2
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 +67 -42
- package/package.json +1 -1
- package/src/index.js +16 -9
- package/src/utils/logger.js +64 -54
package/README.md
CHANGED
|
@@ -1,26 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# 🚀 SoloStack
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## Features
|
|
5
|
+
**The complete SaaS boilerplate for indie hackers**
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
[](https://github.com/danish296/create-solostack)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
[](https://nodejs.org/)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Generate a production-ready Next.js 15 SaaS application with authentication, payments, database, and email - all pre-configured and working out of the box.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
**Built with ❤️ by [Danish Akhtar](https://github.com/danish296)**
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
[Documentation](#) • [Report Bug](#) • [Request Feature](#)
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
</div>
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
---
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
## ✨ Features
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
| Feature | Description |
|
|
24
|
+
|---------|-------------|
|
|
25
|
+
| 🚀 **Quick Setup** | Get a full SaaS up and running in minutes, not weeks |
|
|
26
|
+
| 🔐 **Authentication** | NextAuth.js with email/password and OAuth (Google, GitHub) |
|
|
27
|
+
| 💳 **Payments** | Stripe integration for subscriptions and one-time payments |
|
|
28
|
+
| 📧 **Emails** | Resend for transactional emails with React Email templates |
|
|
29
|
+
| 🗄️ **Database** | Prisma + PostgreSQL with pre-built models |
|
|
30
|
+
| 🎨 **UI Components** | shadcn/ui components with Tailwind CSS |
|
|
31
|
+
| 📱 **Responsive** | Mobile-first design out of the box |
|
|
32
|
+
| 🔒 **Type-Safe** | Full TypeScript support |
|
|
24
33
|
|
|
25
34
|
## Workflows & Architecture
|
|
26
35
|
|
|
@@ -74,13 +83,15 @@ sequenceDiagram
|
|
|
74
83
|
A-->>U: Access Granted
|
|
75
84
|
```
|
|
76
85
|
|
|
77
|
-
## Installation
|
|
86
|
+
## 🚀 Installation
|
|
87
|
+
|
|
88
|
+
Get started in seconds with one command:
|
|
78
89
|
|
|
79
90
|
```bash
|
|
80
91
|
npx create-solostack my-saas-app
|
|
81
92
|
```
|
|
82
93
|
|
|
83
|
-
|
|
94
|
+
**Alternative package managers:**
|
|
84
95
|
|
|
85
96
|
```bash
|
|
86
97
|
# pnpm
|
|
@@ -90,22 +101,23 @@ pnpm create solostack my-saas-app
|
|
|
90
101
|
yarn create solostack my-saas-app
|
|
91
102
|
```
|
|
92
103
|
|
|
93
|
-
## Usage
|
|
104
|
+
## 📖 Usage
|
|
94
105
|
|
|
95
|
-
Run the CLI and
|
|
106
|
+
Run the CLI and follow the interactive prompts:
|
|
96
107
|
|
|
97
108
|
```bash
|
|
98
109
|
npx create-solostack my-app
|
|
99
110
|
```
|
|
100
111
|
|
|
101
|
-
The CLI will
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
112
|
+
**The CLI will guide you through:**
|
|
113
|
+
|
|
114
|
+
- 📝 Project name
|
|
115
|
+
- 🔐 Authentication provider (NextAuth.js)
|
|
116
|
+
- 🗄️ Database (PostgreSQL + Prisma)
|
|
117
|
+
- 💳 Payment provider (Stripe)
|
|
118
|
+
- 📧 Email provider (Resend)
|
|
119
|
+
- 🎨 Include shadcn/ui components? (Y/n)
|
|
120
|
+
- 🔧 Initialize git repository? (Y/n)
|
|
109
121
|
|
|
110
122
|
## What's Included
|
|
111
123
|
|
|
@@ -262,36 +274,43 @@ For GitHub OAuth:
|
|
|
262
274
|
2. Create a new OAuth App
|
|
263
275
|
3. Add to `.env`
|
|
264
276
|
|
|
265
|
-
## Tech Stack
|
|
277
|
+
## 🛠️ Tech Stack
|
|
266
278
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
279
|
+
<div align="center">
|
|
280
|
+
|
|
281
|
+
| Category | Technology |
|
|
282
|
+
|----------|-----------|
|
|
283
|
+
| **Framework** | Next.js 15 (App Router) |
|
|
284
|
+
| **Language** | TypeScript |
|
|
285
|
+
| **Styling** | Tailwind CSS |
|
|
286
|
+
| **UI Components** | shadcn/ui + Radix UI |
|
|
287
|
+
| **Database** | PostgreSQL + Prisma |
|
|
288
|
+
| **Authentication** | NextAuth.js 5 |
|
|
289
|
+
| **Payments** | Stripe |
|
|
290
|
+
| **Email** | Resend + React Email |
|
|
291
|
+
| **Form Handling** | React Hook Form + Zod |
|
|
292
|
+
|
|
293
|
+
</div>
|
|
276
294
|
|
|
277
295
|
## Requirements
|
|
278
296
|
|
|
279
297
|
- Node.js 18 or higher
|
|
280
298
|
- PostgreSQL database (local or hosted)
|
|
281
299
|
|
|
282
|
-
## Support
|
|
300
|
+
## 📚 Support & Resources
|
|
283
301
|
|
|
284
|
-
- [Documentation](https://github.com/
|
|
285
|
-
- [Issues](https://github.com/
|
|
286
|
-
- [Discussions](https://github.com/
|
|
302
|
+
- 📖 [Documentation](https://github.com/danish296/create-solostack)
|
|
303
|
+
- 🐛 [Report Issues](https://github.com/danish296/create-solostack/issues)
|
|
304
|
+
- 💬 [Discussions](https://github.com/danish296/create-solostack/discussions)
|
|
305
|
+
- ⭐ [Star on GitHub](https://github.com/danish296/create-solostack)
|
|
287
306
|
|
|
288
307
|
## License
|
|
289
308
|
|
|
290
309
|
MIT © Danish Akhtar
|
|
291
310
|
|
|
292
|
-
## Roadmap
|
|
311
|
+
## 🗺️ Roadmap
|
|
293
312
|
|
|
294
|
-
### Free Version
|
|
313
|
+
### ✅ Free Version
|
|
295
314
|
- ✅ Next.js 15 + TypeScript
|
|
296
315
|
- ✅ Authentication (NextAuth.js)
|
|
297
316
|
- ✅ Database (Prisma + PostgreSQL)
|
|
@@ -299,7 +318,7 @@ MIT © Danish Akhtar
|
|
|
299
318
|
- ✅ Emails (Resend)
|
|
300
319
|
- ✅ UI Components (shadcn/ui)
|
|
301
320
|
|
|
302
|
-
### Pro Version ($99)
|
|
321
|
+
### 💎 Pro Version ($99)
|
|
303
322
|
- 🔜 Multi-tenancy support
|
|
304
323
|
- 🔜 Team/workspace management
|
|
305
324
|
- 🔜 Advanced admin dashboard
|
|
@@ -311,4 +330,10 @@ MIT © Danish Akhtar
|
|
|
311
330
|
|
|
312
331
|
---
|
|
313
332
|
|
|
333
|
+
<div align="center">
|
|
334
|
+
|
|
314
335
|
**Built with ❤️ for indie hackers and solo founders**
|
|
336
|
+
|
|
337
|
+
Made by [Danish Akhtar](https://github.com/danish296) • [GitHub](https://github.com/danish296/create-solostack) • Version 1.3.1
|
|
338
|
+
|
|
339
|
+
</div>
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -28,16 +28,23 @@ import {
|
|
|
28
28
|
* Main CLI function - orchestrates the entire project generation
|
|
29
29
|
*/
|
|
30
30
|
export async function main() {
|
|
31
|
-
// Display banner
|
|
31
|
+
// Display enhanced banner
|
|
32
32
|
console.log(chalk.cyan(`
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
╔═══════════════════════════════════════════════════════════╗
|
|
34
|
+
║ ║
|
|
35
|
+
║ ███████╗ ██████╗ ██╗ ██████╗ ███████╗████████╗ ║
|
|
36
|
+
║ ██╔════╝██╔═══██╗██║ ██╔═══██╗██╔════╝╚══██╔══╝ ║
|
|
37
|
+
║ ███████╗██║ ██║██║ ██║ ██║███████╗ ██║ ║
|
|
38
|
+
║ ╚════██║██║ ██║██║ ██║ ██║╚════██║ ██║ ║
|
|
39
|
+
║ ███████║╚██████╔╝███████╗╚██████╔╝███████║ ██║ ║
|
|
40
|
+
║ ╚══════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝ ╚═╝ ║
|
|
41
|
+
║ ║
|
|
42
|
+
║ The complete SaaS boilerplate for indie hackers ║
|
|
43
|
+
║ ║
|
|
44
|
+
╚═══════════════════════════════════════════════════════════╝
|
|
45
|
+
`));
|
|
46
|
+
|
|
47
|
+
console.log(chalk.gray(` Version ${chalk.cyan('1.3.1')} • Built by ${chalk.cyan('Danish Akhtar')} • ${chalk.blue('github.com/danish296')}\n`));
|
|
41
48
|
|
|
42
49
|
// Parse command line arguments
|
|
43
50
|
program
|
package/src/utils/logger.js
CHANGED
|
@@ -6,35 +6,40 @@ import chalk from 'chalk';
|
|
|
6
6
|
* @param {string} projectPath - Absolute path to the project
|
|
7
7
|
*/
|
|
8
8
|
export function printSuccess(projectName, projectPath) {
|
|
9
|
-
console.log(chalk.green('\n
|
|
10
|
-
|
|
11
|
-
console.log(chalk.
|
|
12
|
-
console.log(chalk.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
console.log(chalk.
|
|
16
|
-
console.log(chalk.white(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
console.log(chalk.
|
|
20
|
-
console.log(chalk.white('
|
|
21
|
-
console.log(chalk.white('
|
|
22
|
-
|
|
23
|
-
console.log(chalk.cyan('
|
|
24
|
-
console.log(chalk.white('
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
console.log(chalk.
|
|
28
|
-
console.log(chalk.white('
|
|
29
|
-
|
|
30
|
-
console.log(chalk.
|
|
31
|
-
|
|
32
|
-
console.log(chalk.
|
|
33
|
-
console.log(chalk.white('
|
|
34
|
-
console.log(chalk.white('
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
console.log(chalk.
|
|
9
|
+
console.log(chalk.green.bold('\n╔═══════════════════════════════════════════════════════════╗'));
|
|
10
|
+
console.log(chalk.green.bold('║ ║'));
|
|
11
|
+
console.log(chalk.green.bold('║ ✅ Success! Your SaaS boilerplate is ready! ║'));
|
|
12
|
+
console.log(chalk.green.bold('║ ║'));
|
|
13
|
+
console.log(chalk.green.bold('╚═══════════════════════════════════════════════════════════╝\n'));
|
|
14
|
+
|
|
15
|
+
console.log(chalk.cyan.bold('📁 Project Location:'));
|
|
16
|
+
console.log(chalk.white(` ${chalk.gray('→')} ${projectPath}\n`));
|
|
17
|
+
|
|
18
|
+
console.log(chalk.cyan.bold('🚀 Quick Start:\n'));
|
|
19
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${chalk.yellow(`cd ${projectName}`)}`));
|
|
20
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${chalk.yellow('cp .env.example .env')}`));
|
|
21
|
+
console.log(chalk.white(` ${chalk.gray('#')} ${chalk.gray('Add your environment variables to .env')}\n`));
|
|
22
|
+
|
|
23
|
+
console.log(chalk.cyan.bold('🗄️ Database Setup:\n'));
|
|
24
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${chalk.yellow('npm run db:push')} ${chalk.gray('# Push schema to database')}`));
|
|
25
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${chalk.yellow('npm run db:seed')} ${chalk.gray('# Seed with sample data')}\n`));
|
|
26
|
+
|
|
27
|
+
console.log(chalk.cyan.bold('⚡ Start Development:\n'));
|
|
28
|
+
console.log(chalk.white(` ${chalk.gray('$')} ${chalk.yellow('npm run dev')}\n`));
|
|
29
|
+
|
|
30
|
+
console.log(chalk.cyan.bold('📚 Documentation & Resources:\n'));
|
|
31
|
+
console.log(chalk.white(` ${chalk.gray('•')} NextAuth: ${chalk.blue('https://next-auth.js.org')}`));
|
|
32
|
+
console.log(chalk.white(` ${chalk.gray('•')} Prisma: ${chalk.blue('https://prisma.io')}`));
|
|
33
|
+
console.log(chalk.white(` ${chalk.gray('•')} Stripe: ${chalk.blue('https://stripe.com/docs')}`));
|
|
34
|
+
console.log(chalk.white(` ${chalk.gray('•')} Resend: ${chalk.blue('https://resend.com/docs')}\n`));
|
|
35
|
+
|
|
36
|
+
console.log(chalk.yellow.bold('⚠️ Important Reminders:\n'));
|
|
37
|
+
console.log(chalk.white(` ${chalk.gray('•')} Set up a PostgreSQL database (Neon, Supabase, etc.)`));
|
|
38
|
+
console.log(chalk.white(` ${chalk.gray('•')} Get API keys for Stripe and Resend`));
|
|
39
|
+
console.log(chalk.white(` ${chalk.gray('•')} Configure OAuth providers (optional)\n`));
|
|
40
|
+
|
|
41
|
+
console.log(chalk.magenta.bold('💡 Happy building! 🚀\n'));
|
|
42
|
+
console.log(chalk.gray(` Built with ❤️ by ${chalk.cyan('Danish Akhtar')} • ${chalk.blue('github.com/danish296')}\n`));
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
/**
|
|
@@ -67,29 +72,34 @@ export function printInfo(message) {
|
|
|
67
72
|
* @param {string} projectPath - Absolute path to the project
|
|
68
73
|
*/
|
|
69
74
|
export function printProSuccess(projectName, projectPath) {
|
|
70
|
-
console.log(chalk.green.bold('\n
|
|
71
|
-
|
|
72
|
-
console.log(chalk.
|
|
73
|
-
console.log(chalk.
|
|
74
|
-
console.log(chalk.
|
|
75
|
-
|
|
76
|
-
console.log(chalk.
|
|
77
|
-
console.log(chalk.white('
|
|
78
|
-
console.log(chalk.white('
|
|
79
|
-
|
|
80
|
-
console.log(chalk.
|
|
81
|
-
console.log(chalk.white(`
|
|
82
|
-
console.log(chalk.white(`
|
|
83
|
-
|
|
84
|
-
console.log(chalk.
|
|
85
|
-
console.log(chalk.white(`
|
|
86
|
-
|
|
87
|
-
console.log(chalk.
|
|
88
|
-
console.log(chalk.white('
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
console.log(chalk.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
console.log(chalk.
|
|
75
|
+
console.log(chalk.green.bold('\n╔═══════════════════════════════════════════════════════════╗'));
|
|
76
|
+
console.log(chalk.green.bold('║ ║'));
|
|
77
|
+
console.log(chalk.green.bold('║ 💎 Your Pro SaaS is ready! 🎉 ║'));
|
|
78
|
+
console.log(chalk.green.bold('║ ║'));
|
|
79
|
+
console.log(chalk.green.bold('╚═══════════════════════════════════════════════════════════╝\n'));
|
|
80
|
+
|
|
81
|
+
console.log(chalk.cyan.bold('💎 Pro Features Included:\n'));
|
|
82
|
+
console.log(chalk.white(` ${chalk.green('✓')} OAuth (Google & GitHub)`));
|
|
83
|
+
console.log(chalk.white(` ${chalk.green('✓')} Advanced Stripe (subscriptions, webhooks)`));
|
|
84
|
+
console.log(chalk.white(` ${chalk.green('✓')} Admin panel`));
|
|
85
|
+
console.log(chalk.white(` ${chalk.green('✓')} API key system`));
|
|
86
|
+
console.log(chalk.white(` ${chalk.green('✓')} Email templates (verification, reset, etc.)`));
|
|
87
|
+
console.log(chalk.white(` ${chalk.green('✓')} Full database schema\n`));
|
|
88
|
+
|
|
89
|
+
console.log(chalk.yellow.bold('📝 Next Steps:\n'));
|
|
90
|
+
console.log(chalk.white(` ${chalk.gray('1.')} ${chalk.yellow(`cd ${projectName}`)}`));
|
|
91
|
+
console.log(chalk.white(` ${chalk.gray('2.')} ${chalk.yellow('cp .env.example .env')}`));
|
|
92
|
+
console.log(chalk.white(` ${chalk.gray('3.')} Add your API keys to .env`));
|
|
93
|
+
console.log(chalk.white(` ${chalk.gray('4.')} ${chalk.yellow('npx prisma db push')}`));
|
|
94
|
+
console.log(chalk.white(` ${chalk.gray('5.')} ${chalk.yellow('npm run dev')}\n`));
|
|
95
|
+
|
|
96
|
+
console.log(chalk.cyan.bold('🔧 Setup Verification:\n'));
|
|
97
|
+
console.log(chalk.white(` ${chalk.gray('→')} Visit ${chalk.blue('http://localhost:3000/setup')} to verify all integrations\n`));
|
|
98
|
+
|
|
99
|
+
console.log(chalk.cyan.bold('👤 Admin Access:\n'));
|
|
100
|
+
console.log(chalk.white(` ${chalk.gray('→')} Visit ${chalk.blue('http://localhost:3000/admin')} (requires admin role)\n`));
|
|
101
|
+
|
|
102
|
+
console.log(chalk.gray(' Need help? Join our Discord: ') + chalk.blue('https://discord.gg/solostack'));
|
|
103
|
+
console.log(chalk.gray(' Documentation: ') + chalk.blue('https://solostack.dev/docs'));
|
|
104
|
+
console.log(chalk.gray(`\n Built with ❤️ by ${chalk.cyan('Danish Akhtar')} • ${chalk.blue('github.com/danish296')}\n`));
|
|
95
105
|
}
|