create-skateboard-app 1.1.0 → 1.1.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/CHANGELOG.md +2 -0
- package/README.md +29 -25
- package/bin/cli.js +8 -31
- package/package.json +14 -5
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# Create Skateboard App
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/create-skateboard-app)
|
|
4
|
+
[](https://www.npmjs.com/package/create-skateboard-app)
|
|
5
|
+
[](https://github.com/stevederico/create-skateboard-app/blob/master/LICENSE)
|
|
6
|
+
|
|
7
|
+
The fastest way to create a full-stack React app with authentication, payments, and database support.
|
|
8
|
+
|
|
9
|
+
## What is Skateboard?
|
|
10
|
+
|
|
11
|
+
[Skateboard](https://github.com/stevederico/skateboard) is a production-ready boilerplate for building SaaS applications. It includes user authentication, Stripe subscriptions, database adapters, and 50+ UI components out of the box.
|
|
4
12
|
|
|
5
13
|
## Quick Start
|
|
6
14
|
|
|
@@ -12,7 +20,7 @@ npm run start
|
|
|
12
20
|
|
|
13
21
|
## Usage
|
|
14
22
|
|
|
15
|
-
### Interactive Mode (
|
|
23
|
+
### Interactive Mode (Recommended)
|
|
16
24
|
```bash
|
|
17
25
|
npx create-skateboard-app
|
|
18
26
|
```
|
|
@@ -24,37 +32,32 @@ npx create-skateboard-app my-app
|
|
|
24
32
|
|
|
25
33
|
## What You Get
|
|
26
34
|
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
- 🗃️ Database selection (SQLite, PostgreSQL, MongoDB)
|
|
35
|
+
- React 19 with Vite
|
|
36
|
+
- TailwindCSS v4
|
|
37
|
+
- Shadcn/ui components
|
|
38
|
+
- Hono backend server
|
|
39
|
+
- JWT authentication
|
|
40
|
+
- Stripe payments
|
|
41
|
+
- Database support (SQLite, PostgreSQL, MongoDB)
|
|
42
|
+
- Dark mode
|
|
43
|
+
- Mobile responsive
|
|
44
|
+
- Protected routes
|
|
38
45
|
|
|
39
46
|
## Features Included
|
|
40
47
|
|
|
41
|
-
- Sign up/Sign in pages
|
|
48
|
+
- Sign up / Sign in pages
|
|
42
49
|
- Landing page
|
|
43
|
-
- Settings page
|
|
50
|
+
- Settings page
|
|
44
51
|
- Legal pages (Privacy, Terms, EULA)
|
|
45
52
|
- 404 error handling
|
|
46
|
-
- Protected routes
|
|
47
53
|
- Mobile tab bar
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
- Color and icon selection
|
|
51
|
-
- Database configuration
|
|
54
|
+
- Rate limiting
|
|
55
|
+
- CSRF protection
|
|
52
56
|
|
|
53
57
|
## Requirements
|
|
54
58
|
|
|
55
59
|
- Node.js 22.5+
|
|
56
|
-
-
|
|
57
|
-
- git, curl, or npx (for template download)
|
|
60
|
+
- git or curl (for template download)
|
|
58
61
|
|
|
59
62
|
## Configuration
|
|
60
63
|
|
|
@@ -66,13 +69,14 @@ After creating your app:
|
|
|
66
69
|
```
|
|
67
70
|
|
|
68
71
|
2. Update `backend/.env` with your credentials:
|
|
72
|
+
- `JWT_SECRET` - Token signing key
|
|
73
|
+
- `STRIPE_KEY` - Stripe secret key
|
|
74
|
+
- `STRIPE_ENDPOINT_SECRET` - Webhook secret
|
|
69
75
|
- Database connection string (if using PostgreSQL/MongoDB)
|
|
70
|
-
- Stripe API keys
|
|
71
|
-
- Other environment-specific variables
|
|
72
76
|
|
|
73
77
|
## Contributing
|
|
74
78
|
|
|
75
|
-
Contributions
|
|
79
|
+
Contributions welcome! Please open an issue or PR.
|
|
76
80
|
|
|
77
81
|
## License
|
|
78
82
|
|
package/bin/cli.js
CHANGED
|
@@ -384,40 +384,17 @@ async function main() {
|
|
|
384
384
|
if (existsSync(backendConfigPath)) {
|
|
385
385
|
const backendConfig = JSON.parse(readFileSync(backendConfigPath, 'utf8'));
|
|
386
386
|
|
|
387
|
-
//
|
|
388
|
-
if (backendConfig.
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
dbConfig.dbType = config.database.value;
|
|
393
|
-
dbConfig.db = config.appName.replace(/\s+/g, '');
|
|
394
|
-
dbConfig.origin = config.devBackendURL;
|
|
395
|
-
|
|
387
|
+
// Update the database configuration
|
|
388
|
+
if (backendConfig.database) {
|
|
389
|
+
backendConfig.database.dbType = config.database.value;
|
|
390
|
+
backendConfig.database.db = config.appName.replace(/\s+/g, '');
|
|
391
|
+
|
|
396
392
|
if (config.database.value === 'sqlite') {
|
|
397
|
-
|
|
393
|
+
backendConfig.database.connectionString = config.database.connectionString;
|
|
398
394
|
} else if (config.database.value === 'postgresql') {
|
|
399
|
-
|
|
395
|
+
backendConfig.database.connectionString = '${POSTGRES_URL}';
|
|
400
396
|
} else if (config.database.value === 'mongodb') {
|
|
401
|
-
|
|
402
|
-
}
|
|
403
|
-
} else {
|
|
404
|
-
// Fallback for old format - handle both array and single object formats defensively
|
|
405
|
-
const configArray = Array.isArray(backendConfig) ? backendConfig : [backendConfig];
|
|
406
|
-
|
|
407
|
-
configArray.forEach(configObj => {
|
|
408
|
-
configObj.dbType = config.database.value;
|
|
409
|
-
if (config.database.value === 'sqlite') {
|
|
410
|
-
configObj.connectionString = config.database.connectionString;
|
|
411
|
-
} else if (config.database.value === 'postgresql') {
|
|
412
|
-
configObj.connectionString = '${POSTGRES_URL}';
|
|
413
|
-
} else if (config.database.value === 'mongodb') {
|
|
414
|
-
configObj.connectionString = '${MONGODB_URL}';
|
|
415
|
-
}
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
// Update backendConfig reference for old format
|
|
419
|
-
if (!Array.isArray(backendConfig)) {
|
|
420
|
-
Object.assign(backendConfig, configArray[0]);
|
|
397
|
+
backendConfig.database.connectionString = '${MONGODB_URL}';
|
|
421
398
|
}
|
|
422
399
|
}
|
|
423
400
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-skateboard-app",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Create a
|
|
3
|
+
"version": "1.1.2",
|
|
4
|
+
"description": "Create a full-stack React app with authentication, Stripe payments, and database support in seconds",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -17,13 +17,22 @@
|
|
|
17
17
|
"tailwindcss",
|
|
18
18
|
"vite",
|
|
19
19
|
"skateboard",
|
|
20
|
-
"cli"
|
|
20
|
+
"cli",
|
|
21
|
+
"starter",
|
|
22
|
+
"scaffold",
|
|
23
|
+
"fullstack",
|
|
24
|
+
"hono",
|
|
25
|
+
"sqlite",
|
|
26
|
+
"stripe",
|
|
27
|
+
"authentication",
|
|
28
|
+
"create-app",
|
|
29
|
+
"saas"
|
|
21
30
|
],
|
|
22
31
|
"author": "stevederico",
|
|
23
32
|
"license": "MIT",
|
|
24
33
|
"dependencies": {},
|
|
25
34
|
"engines": {
|
|
26
|
-
"node": ">=
|
|
35
|
+
"node": ">=22.5.0"
|
|
27
36
|
},
|
|
28
37
|
"repository": {
|
|
29
38
|
"type": "git",
|
|
@@ -32,5 +41,5 @@
|
|
|
32
41
|
"bugs": {
|
|
33
42
|
"url": "https://github.com/stevederico/create-skateboard-app/issues"
|
|
34
43
|
},
|
|
35
|
-
"homepage": "https://github.com/stevederico/
|
|
44
|
+
"homepage": "https://github.com/stevederico/skateboard#readme"
|
|
36
45
|
}
|