@techstream/quark-create-app 1.5.0 → 1.5.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 +1 -2
- package/package.json +3 -2
- package/src/index.js +11 -11
- package/templates/base-project/README.md +17 -3
- package/templates/base-project/apps/web/package.json +4 -3
- package/templates/base-project/apps/worker/package.json +2 -1
- package/templates/base-project/docker-compose.yml +17 -2
- package/templates/base-project/package.json +5 -1
- package/templates/base-project/packages/db/package.json +3 -3
- package/templates/base-project/turbo.json +17 -4
- package/templates/config/src/index.js +1 -1
- package/templates/config/src/validate-env.js +5 -5
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ The CLI scaffolds a complete project structure with:
|
|
|
12
12
|
- **Next.js** web application
|
|
13
13
|
- **Prisma** database schema and migrations
|
|
14
14
|
- **BullMQ** job queues
|
|
15
|
-
- **Docker Compose** setup (PostgreSQL, Redis,
|
|
15
|
+
- **Docker Compose** setup (PostgreSQL, Redis, Mailpit)
|
|
16
16
|
- **JavaScript** monorepo with `pnpm` workspaces
|
|
17
17
|
|
|
18
18
|
## Quick Setup
|
|
@@ -20,7 +20,6 @@ The CLI scaffolds a complete project structure with:
|
|
|
20
20
|
```bash
|
|
21
21
|
cd my-awesome-app
|
|
22
22
|
docker compose up -d
|
|
23
|
-
pnpm db:generate
|
|
24
23
|
pnpm db:migrate
|
|
25
24
|
pnpm dev
|
|
26
25
|
```
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@techstream/quark-create-app",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"quark-create-app": "src/index.js",
|
|
7
|
-
"create-quark-app": "src/index.js"
|
|
7
|
+
"create-quark-app": "src/index.js",
|
|
8
|
+
"quark-update": "src/index.js"
|
|
8
9
|
},
|
|
9
10
|
"files": [
|
|
10
11
|
"src",
|
package/src/index.js
CHANGED
|
@@ -444,12 +444,12 @@ REDIS_PORT=6379
|
|
|
444
444
|
# Optional: Set REDIS_URL to override the dynamic construction above
|
|
445
445
|
# REDIS_URL="redis://localhost:6379"
|
|
446
446
|
|
|
447
|
-
# ---
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
# Optional: Set
|
|
452
|
-
#
|
|
447
|
+
# --- Mail Configuration (Mailpit in development) ---
|
|
448
|
+
MAIL_HOST=localhost
|
|
449
|
+
MAIL_SMTP_PORT=1025
|
|
450
|
+
MAIL_UI_PORT=8025
|
|
451
|
+
# Optional: Set MAIL_SMTP_URL to override the dynamic construction above
|
|
452
|
+
# MAIL_SMTP_URL="smtp://localhost:1025"
|
|
453
453
|
|
|
454
454
|
# --- Application URL ---
|
|
455
455
|
# In development, APP_URL is derived automatically from PORT — no need to set it.
|
|
@@ -544,9 +544,9 @@ REDIS_HOST=localhost
|
|
|
544
544
|
REDIS_PORT=${redisPort}
|
|
545
545
|
|
|
546
546
|
# --- Mail Configuration ---
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
547
|
+
MAIL_HOST=localhost
|
|
548
|
+
MAIL_SMTP_PORT=${mailSmtpPort}
|
|
549
|
+
MAIL_UI_PORT=${mailUiPort}
|
|
550
550
|
|
|
551
551
|
# --- NextAuth Configuration ---
|
|
552
552
|
NEXTAUTH_SECRET=${nextAuthSecret}
|
|
@@ -637,7 +637,7 @@ STORAGE_PROVIDER=local
|
|
|
637
637
|
console.log(chalk.cyan("Next steps:"));
|
|
638
638
|
console.log(chalk.white(` 1. cd ${projectName}`));
|
|
639
639
|
console.log(chalk.white(` 2. docker compose up -d`));
|
|
640
|
-
console.log(chalk.white(` 3. pnpm
|
|
640
|
+
console.log(chalk.white(` 3. pnpm db:migrate`));
|
|
641
641
|
console.log(chalk.white(` 4. pnpm dev\n`));
|
|
642
642
|
|
|
643
643
|
console.log(chalk.cyan("Important:"));
|
|
@@ -647,7 +647,7 @@ STORAGE_PROVIDER=local
|
|
|
647
647
|
),
|
|
648
648
|
);
|
|
649
649
|
console.log(
|
|
650
|
-
chalk.white(` •
|
|
650
|
+
chalk.white(` • Or run: npx @techstream/quark-create-app update\n`),
|
|
651
651
|
);
|
|
652
652
|
|
|
653
653
|
console.log(chalk.cyan("Learn more:"));
|
|
@@ -6,15 +6,19 @@ A modern, scalable monorepo built with Quark.
|
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
pnpm install
|
|
9
|
+
docker compose up -d
|
|
10
|
+
pnpm db:migrate
|
|
9
11
|
pnpm dev
|
|
10
12
|
```
|
|
11
13
|
|
|
14
|
+
Open http://localhost:3000
|
|
15
|
+
|
|
12
16
|
## Services
|
|
13
17
|
|
|
14
18
|
- **Docker**: `docker compose up -d`
|
|
15
|
-
- **Database**: PostgreSQL
|
|
16
|
-
- **Cache**: Redis
|
|
17
|
-
- **Email**:
|
|
19
|
+
- **Database**: PostgreSQL
|
|
20
|
+
- **Cache**: Redis
|
|
21
|
+
- **Email**: Mailpit
|
|
18
22
|
|
|
19
23
|
## Development
|
|
20
24
|
|
|
@@ -29,6 +33,16 @@ pnpm test
|
|
|
29
33
|
pnpm lint
|
|
30
34
|
```
|
|
31
35
|
|
|
36
|
+
## Database
|
|
37
|
+
|
|
38
|
+
| Task | Command |
|
|
39
|
+
|------|--------|
|
|
40
|
+
| Run migrations | `pnpm db:migrate` |
|
|
41
|
+
| Push schema (no migration) | `pnpm db:push` |
|
|
42
|
+
| Generate Prisma client | `pnpm db:generate` |
|
|
43
|
+
| Seed database | `pnpm db:seed` |
|
|
44
|
+
| Open Prisma Studio | `pnpm db:studio` |
|
|
45
|
+
|
|
32
46
|
## Structure
|
|
33
47
|
|
|
34
48
|
- `apps/` - Applications (web, worker, etc.)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@quark
|
|
3
|
-
"version": "
|
|
2
|
+
"name": "@techstream/quark-web",
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": true,
|
|
6
6
|
"scripts": {
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
"next-auth": "5.0.0-beta.30",
|
|
22
22
|
"pg": "^8.18.0",
|
|
23
23
|
"react": "19.2.0",
|
|
24
|
-
"react-dom": "19.2.0"
|
|
24
|
+
"react-dom": "19.2.0",
|
|
25
|
+
"zod": "^4.3.6"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
27
28
|
"@techstream/quark-config": "workspace:*",
|
|
@@ -11,6 +11,11 @@ services:
|
|
|
11
11
|
POSTGRES_DB: ${POSTGRES_DB}
|
|
12
12
|
volumes:
|
|
13
13
|
- postgres_data:/var/lib/postgresql/data
|
|
14
|
+
healthcheck:
|
|
15
|
+
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-quark_user}"]
|
|
16
|
+
interval: 5s
|
|
17
|
+
timeout: 5s
|
|
18
|
+
retries: 5
|
|
14
19
|
|
|
15
20
|
# --- 2. Redis Cache & Job Queue ---
|
|
16
21
|
redis:
|
|
@@ -21,6 +26,11 @@ services:
|
|
|
21
26
|
command: redis-server --appendonly yes
|
|
22
27
|
volumes:
|
|
23
28
|
- redis_data:/data
|
|
29
|
+
healthcheck:
|
|
30
|
+
test: ["CMD", "redis-cli", "ping"]
|
|
31
|
+
interval: 5s
|
|
32
|
+
timeout: 5s
|
|
33
|
+
retries: 5
|
|
24
34
|
|
|
25
35
|
# --- 3. Mailpit (Local SMTP Server) ---
|
|
26
36
|
mailpit:
|
|
@@ -28,9 +38,14 @@ services:
|
|
|
28
38
|
restart: always
|
|
29
39
|
ports:
|
|
30
40
|
# SMTP port (used by application to send mail)
|
|
31
|
-
- "${
|
|
41
|
+
- "${MAIL_SMTP_PORT:-1025}:1025"
|
|
32
42
|
# Web UI port (to view sent emails)
|
|
33
|
-
- "${
|
|
43
|
+
- "${MAIL_UI_PORT:-8025}:8025"
|
|
44
|
+
healthcheck:
|
|
45
|
+
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8025"]
|
|
46
|
+
interval: 10s
|
|
47
|
+
timeout: 5s
|
|
48
|
+
retries: 3
|
|
34
49
|
|
|
35
50
|
volumes:
|
|
36
51
|
postgres_data:
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
"test": "turbo run test",
|
|
12
12
|
"docker:up": "docker compose up -d",
|
|
13
13
|
"docker:down": "docker compose down",
|
|
14
|
-
"db:generate": "turbo run db:generate"
|
|
14
|
+
"db:generate": "turbo run db:generate",
|
|
15
|
+
"db:migrate": "turbo run db:migrate",
|
|
16
|
+
"db:push": "turbo run db:push",
|
|
17
|
+
"db:seed": "turbo run db:seed",
|
|
18
|
+
"db:studio": "turbo run db:studio"
|
|
15
19
|
},
|
|
16
20
|
"keywords": [],
|
|
17
21
|
"author": "",
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@techstream/quark-config": "workspace:*",
|
|
25
25
|
"bcryptjs": "^3.0.3",
|
|
26
|
-
"prisma": "^7.
|
|
26
|
+
"prisma": "^7.4.0"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@prisma/adapter-pg": "^7.
|
|
30
|
-
"@prisma/client": "^7.
|
|
29
|
+
"@prisma/adapter-pg": "^7.4.0",
|
|
30
|
+
"@prisma/client": "^7.4.0",
|
|
31
31
|
"dotenv": "^17.2.4",
|
|
32
32
|
"pg": "^8.18.0",
|
|
33
33
|
"zod": "^4.3.6"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://turbo.build/schema.json",
|
|
3
3
|
"tasks": {
|
|
4
4
|
"build": {
|
|
5
|
-
"dependsOn": ["^build"],
|
|
5
|
+
"dependsOn": ["^build", "db:generate"],
|
|
6
6
|
"outputs": ["dist/**", ".next/**"],
|
|
7
7
|
"env": ["NODE_ENV"]
|
|
8
8
|
},
|
|
@@ -17,6 +17,19 @@
|
|
|
17
17
|
"cache": false,
|
|
18
18
|
"outputs": ["node_modules/.prisma/client"]
|
|
19
19
|
},
|
|
20
|
+
"db:migrate": {
|
|
21
|
+
"cache": false
|
|
22
|
+
},
|
|
23
|
+
"db:push": {
|
|
24
|
+
"cache": false
|
|
25
|
+
},
|
|
26
|
+
"db:seed": {
|
|
27
|
+
"cache": false
|
|
28
|
+
},
|
|
29
|
+
"db:studio": {
|
|
30
|
+
"cache": false,
|
|
31
|
+
"persistent": true
|
|
32
|
+
},
|
|
20
33
|
"dev": {
|
|
21
34
|
"cache": false,
|
|
22
35
|
"persistent": true,
|
|
@@ -29,9 +42,9 @@
|
|
|
29
42
|
"POSTGRES_DB",
|
|
30
43
|
"REDIS_HOST",
|
|
31
44
|
"REDIS_PORT",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
45
|
+
"MAIL_HOST",
|
|
46
|
+
"MAIL_SMTP_PORT",
|
|
47
|
+
"MAIL_UI_PORT",
|
|
35
48
|
"NEXTAUTH_SECRET",
|
|
36
49
|
"APP_URL",
|
|
37
50
|
"WORKER_CONCURRENCY",
|
|
@@ -22,11 +22,11 @@ const envSchema = {
|
|
|
22
22
|
REDIS_HOST: { required: false, description: "Redis host" },
|
|
23
23
|
REDIS_PORT: { required: false, description: "Redis port" },
|
|
24
24
|
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
// Mail (local SMTP server)
|
|
26
|
+
MAIL_SMTP_URL: { required: false, description: "Mail SMTP URL" },
|
|
27
|
+
MAIL_HOST: { required: false, description: "Mail host" },
|
|
28
|
+
MAIL_SMTP_PORT: { required: false, description: "Mail SMTP port" },
|
|
29
|
+
MAIL_UI_PORT: { required: false, description: "Mail UI port" },
|
|
30
30
|
|
|
31
31
|
// NextAuth
|
|
32
32
|
NEXTAUTH_SECRET: {
|