@clubedge/create-clubedge-app 0.13.0 → 0.14.1
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 +9 -0
- package/README.md +123 -76
- package/package.json +3 -3
- package/template/.env.example +16 -0
- package/template/README.md +184 -51
- package/template/SETUP.md +36 -0
- package/template/apps/start/.env.example +16 -0
- package/template/apps/start/package.json +4 -1
- package/template/apps/start/src/nitro/plugins/jobs.ts +2 -2
- package/template/apps/start/src/nitro/plugins/observability.ts +10 -0
- package/template/apps/start/src/routes/api/webhooks/payments.ts +2 -1
- package/template/apps/start/src/server/auth-forms.ts +4 -4
- package/template/apps/start/src/server/auth.ts +2 -2
- package/template/apps/start/src/server/email.ts +3 -2
- package/template/apps/start/src/server/jobs.functions.ts +2 -1
- package/template/apps/start/src/server/jobs.test.ts +27 -0
- package/template/apps/start/src/server/jobs.ts +26 -6
- package/template/apps/start/src/server/observability.test.ts +23 -0
- package/template/apps/start/src/server/observability.ts +44 -0
- package/template/apps/start/src/server/payments.ts +12 -8
- package/template/apps/start/src/server/storage.ts +3 -2
- package/template/apps/start/src/server/users.ts +2 -1
- package/template/apps/start/src/server/variants/auth.better-auth.ts +2 -2
- package/template/apps/start/src/server/variants/email.resend.ts +3 -2
- package/template/apps/start/src/server/variants/observability.sentry.ts +50 -0
- package/template/apps/start/src/server/variants/storage.supabase.ts +3 -2
- package/template/apps/start/src/start.ts +40 -1
- package/template/apps/web/next-env.d.ts +2 -2
- package/template/apps/web/package.json +4 -1
- package/template/apps/web/src/app/actions/auth.ts +4 -4
- package/template/apps/web/src/app/api/webhooks/payments/route.ts +2 -1
- package/template/apps/web/src/app/dashboard/_components/jobs-card.tsx +2 -1
- package/template/apps/web/src/instrumentation.ts +27 -1
- package/template/apps/web/src/server/email.ts +3 -2
- package/template/apps/web/src/server/jobs.ts +26 -6
- package/template/apps/web/src/server/observability.ts +44 -0
- package/template/apps/web/src/server/payments.ts +12 -8
- package/template/apps/web/src/server/storage.ts +3 -2
- package/template/apps/web/src/server/users.ts +2 -1
- package/template/apps/web/src/server/variants/email.resend.ts +3 -2
- package/template/apps/web/src/server/variants/observability.sentry.ts +50 -0
- package/template/apps/web/src/server/variants/storage.supabase.ts +3 -2
- package/template/apps/web/src/variants/proxy.better-auth.ts +2 -1
- package/template/clubedge.template.json +48 -0
- package/template/e2e/observability.spec.ts +28 -0
- package/template/e2e/telemetry-fake.ts +91 -0
- package/template/package.json +1 -1
- package/template/packages/auth/package.json +1 -1
- package/template/packages/auth-better-auth/package.json +1 -1
- package/template/packages/auth-better-auth/src/index.ts +2 -2
- package/template/packages/auth-supabase/package.json +1 -1
- package/template/packages/cache/package.json +1 -1
- package/template/packages/cache-redis/package.json +1 -1
- package/template/packages/core/package.json +1 -1
- package/template/packages/core/src/errors.ts +3 -1
- package/template/packages/core/src/index.ts +9 -0
- package/template/packages/core/src/telemetry.test.ts +86 -0
- package/template/packages/core/src/telemetry.ts +79 -0
- package/template/packages/db/package.json +1 -1
- package/template/packages/email/package.json +1 -1
- package/template/packages/email-resend/package.json +1 -1
- package/template/packages/email-smtp/package.json +1 -1
- package/template/packages/jobs/package.json +1 -1
- package/template/packages/jobs-pg-boss/package.json +1 -1
- package/template/packages/jobs-pg-boss/src/index.test.ts +40 -3
- package/template/packages/jobs-pg-boss/src/index.ts +23 -10
- package/template/packages/local-db/package.json +1 -1
- package/template/packages/observability/package.json +21 -0
- package/template/packages/observability/src/index.ts +65 -0
- package/template/packages/observability/tsconfig.json +4 -0
- package/template/packages/observability-otel/package.json +30 -0
- package/template/packages/observability-otel/src/index.test.ts +93 -0
- package/template/packages/observability-otel/src/index.ts +176 -0
- package/template/packages/observability-otel/tsconfig.json +4 -0
- package/template/packages/observability-sentry/package.json +22 -0
- package/template/packages/observability-sentry/src/index.test.ts +70 -0
- package/template/packages/observability-sentry/src/index.ts +69 -0
- package/template/packages/observability-sentry/tsconfig.json +4 -0
- package/template/packages/payments/package.json +1 -1
- package/template/packages/payments-stripe/package.json +1 -1
- package/template/packages/storage/package.json +1 -1
- package/template/packages/storage-s3/package.json +1 -1
- package/template/packages/storage-supabase/package.json +1 -1
- package/template/packages/ui/package.json +1 -1
- package/template/pnpm-lock.yaml +592 -0
- package/template.lock.json +24 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `create-clubedge-app` are documented here.
|
|
4
4
|
|
|
5
|
+
## 0.14.1
|
|
6
|
+
|
|
7
|
+
- Default to Starter `v0.13.1`. In projects with background jobs or observability, a configuration error such as a missing `DATABASE_URL` no longer stops the server at startup; pages that need no database keep working, and the error is reported once.
|
|
8
|
+
|
|
9
|
+
## 0.14.0
|
|
10
|
+
|
|
11
|
+
- Default to Starter `v0.13.0`, which adds observability (`--observability otel|sentry`): request tracing and server error reporting through OpenTelemetry, to any OTLP collector, or Sentry, behind provider-neutral hooks in `@clubedge/core`. `--observability` needs no CLI code: it comes from the Starter's manifest.
|
|
12
|
+
- Test an observability project in CI and in the release smoke test, and add the observability module in the change-modules job.
|
|
13
|
+
|
|
5
14
|
## 0.13.0
|
|
6
15
|
|
|
7
16
|
- Default to Starter `v0.12.0`, which adds background jobs (`--jobs pg-boss`): jobs stored in the project's PostgreSQL, run by a worker inside the app server, with retries and schedules, and `/api/jobs/run` for serverless hosts. `--jobs` needs no CLI code: it comes from the Starter's manifest.
|
package/README.md
CHANGED
|
@@ -1,76 +1,57 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
1
3
|
# create-clubedge-app
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
[](LICENSE)
|
|
5
|
+
**Create a production-ready Next.js or TanStack Start app with one command, and keep it up to date.**
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
Pick only the modules you need: auth, storage, email, payments, jobs, observability, deployment.<br>
|
|
8
|
+
Add, remove, or upgrade them later without losing your own changes.
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
[](https://www.npmjs.com/package/@clubedge/create-clubedge-app)
|
|
11
|
+
[](https://www.npmjs.com/package/@clubedge/create-clubedge-app)
|
|
12
|
+
[](https://github.com/Clubedge/create-clubedge-app/actions/workflows/ci.yml)
|
|
13
|
+
[](https://github.com/Clubedge/create-clubedge-app/releases)
|
|
14
|
+
[](LICENSE)
|
|
9
15
|
|
|
10
|
-
|
|
16
|
+
[Website](https://starter.clubedge.live) ·
|
|
17
|
+
[Clubedge Starter](https://github.com/Clubedge/clubedge-starter) ·
|
|
18
|
+
[Changelog](CHANGELOG.md) ·
|
|
19
|
+
[Roadmap](ROADMAP.md) ·
|
|
20
|
+
[Contributing](CONTRIBUTING.md)
|
|
11
21
|
|
|
12
|
-
|
|
22
|
+
</div>
|
|
13
23
|
|
|
14
|
-
```
|
|
15
|
-
create-clubedge-app
|
|
16
|
-
|
|
|
17
|
-
v
|
|
18
|
-
Clubedge Starter v0.12.0
|
|
19
|
-
commit 445add73c3505cd8505faccb3b0b7061a29f5356
|
|
24
|
+
```sh
|
|
25
|
+
pnpm dlx @clubedge/create-clubedge-app my-app
|
|
20
26
|
```
|
|
21
27
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
| CLI release | Default Starter release | Meaning |
|
|
25
|
-
| --- | --- | --- |
|
|
26
|
-
| `create-clubedge-app@0.13.0` | `clubedge-starter@v0.12.0` | The CLI's required, tested default |
|
|
27
|
-
|
|
28
|
-
This means the same CLI version always scaffolds the same Starter revision by default. The CLI does not silently follow Starter `main`.
|
|
28
|
+
## Why create-clubedge-app
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
`445add73c3505cd8505faccb3b0b7061a29f5356`. The CLI verifies this before
|
|
32
|
-
scaffolding with the default reference and fails rather than silently using a
|
|
33
|
-
moved tag.
|
|
30
|
+
Copying a starter is easy; living with it is not. You delete the services you don't use by hand, and once you've changed the code, every later improvement to the starter has to be copied over by hand too.
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
create-clubedge-app generates a project from a tested release of [Clubedge Starter](https://github.com/Clubedge/clubedge-starter) with only the modules you choose. A module you leave out is removed completely: its package, its provider SDK, its environment variables, its documentation, and its lockfile entries. The project records exactly what it was generated from, so later the CLI can add a module, remove one, or upgrade to a newer Starter release by merging the change into your code. Files you never touched are updated; your edits are kept.
|
|
36
33
|
|
|
37
|
-
|
|
34
|
+
Every CLI release is pinned to one Starter release and verified against it, so the same command always produces the same project.
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
- pnpm 10.9.0 or newer. The generated project is a pnpm workspace, so dependencies are installed with pnpm even when you start the CLI with `npx`; the CLI falls back to `corepack pnpm` when `pnpm` is not on your path.
|
|
41
|
-
- Git, when using the default Git initialization.
|
|
42
|
-
- Internet access to install dependencies. The default Starter release ships inside the CLI package, so GitHub is only contacted for `--ref`.
|
|
36
|
+
## Quick start
|
|
43
37
|
|
|
44
|
-
|
|
38
|
+
You need Node.js 22.12 or newer and pnpm 10.9.0 or newer. Git is used for the default repository initialization.
|
|
45
39
|
|
|
46
40
|
```sh
|
|
47
41
|
pnpm dlx @clubedge/create-clubedge-app my-app
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Or run it with npm:
|
|
51
|
-
|
|
52
|
-
```sh
|
|
53
|
-
npx @clubedge/create-clubedge-app my-app
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
After scaffolding:
|
|
57
|
-
|
|
58
|
-
```sh
|
|
59
42
|
cd my-app
|
|
60
43
|
pnpm dev
|
|
61
44
|
```
|
|
62
45
|
|
|
63
|
-
|
|
46
|
+
Or start it with npm: `npx @clubedge/create-clubedge-app my-app`. The generated project is a pnpm workspace, so dependencies are installed with pnpm either way; the CLI falls back to `corepack pnpm` when `pnpm` is not on your path. Without a destination, the CLI asks where to create the project.
|
|
64
47
|
|
|
65
|
-
|
|
48
|
+
The generated project includes `apps/web/.env.local`, created from the example and pointing at the local services you chose. Its `SETUP.md` describes every variable and provider. The root route is a landing page named after your project, and the dashboard is at `/dashboard`.
|
|
66
49
|
|
|
67
|
-
|
|
68
|
-
pnpm dlx @clubedge/create-clubedge-app
|
|
69
|
-
```
|
|
50
|
+
The default Starter release ships inside the CLI package, so GitHub is only contacted when you pass `--ref`. Internet access is needed to install dependencies.
|
|
70
51
|
|
|
71
|
-
|
|
52
|
+
## Choosing a framework
|
|
72
53
|
|
|
73
|
-
The Starter ships the same application for two React frameworks. Next.js is the default; pick TanStack Start with `--framework`, or choose interactively
|
|
54
|
+
The Starter ships the same application for two React frameworks. Next.js is the default; pick TanStack Start with `--framework`, or choose interactively:
|
|
74
55
|
|
|
75
56
|
```sh
|
|
76
57
|
pnpm dlx @clubedge/create-clubedge-app my-app --framework tanstack-start
|
|
@@ -83,9 +64,9 @@ pnpm dlx @clubedge/create-clubedge-app my-app --framework tanstack-start
|
|
|
83
64
|
|
|
84
65
|
Either way, the app lives in `apps/web` and uses the same shared packages, so the project layout, root scripts, and Docker commands are identical.
|
|
85
66
|
|
|
86
|
-
|
|
67
|
+
## Choosing modules
|
|
87
68
|
|
|
88
|
-
Authentication, file storage, caching, email, payments, background jobs, local infrastructure, and deployment are modules. Each has a default, and anything you leave out is removed completely
|
|
69
|
+
Authentication, file storage, caching, email, payments, background jobs, observability, local infrastructure, and deployment are modules. Each has a default, and anything you leave out is removed completely. The Starter's `clubedge.template.json` defines the modules, so a module a newer Starter adds gets its `--<module>` flag without a CLI change; `--help` lists the modules of the Starter this CLI release creates.
|
|
89
70
|
|
|
90
71
|
| Flag | Options | Default |
|
|
91
72
|
| ----------- | ------------------------------------------ | ---------- |
|
|
@@ -95,40 +76,46 @@ Authentication, file storage, caching, email, payments, background jobs, local i
|
|
|
95
76
|
| `--email` | `smtp` (any provider, or a local inbox), `resend`, `none` | `smtp` |
|
|
96
77
|
| `--payments` | `stripe`, `none` (needs an auth module) | `none` |
|
|
97
78
|
| `--jobs` | `pg-boss`, `none` | `none` |
|
|
79
|
+
| `--observability` | `otel` (OpenTelemetry, to any OTLP collector), `sentry`, `none` | `none` |
|
|
98
80
|
| `--deploy` | `docker` (any container host), `fly`, `railway`, `render`, `vercel`, `netlify` | `docker` |
|
|
99
81
|
| `--infra` | `docker` (Docker Compose), `supabase` (Supabase CLI), `local` (no Docker: PGlite and a local folder), `none` | `docker` |
|
|
100
82
|
|
|
101
83
|
```sh
|
|
102
84
|
# Only the monorepo, UI, database, and tooling
|
|
103
|
-
pnpm dlx @clubedge/create-clubedge-app my-app --auth none --storage none --cache memory
|
|
85
|
+
pnpm dlx @clubedge/create-clubedge-app my-app --auth none --storage none --cache memory --email none
|
|
86
|
+
|
|
87
|
+
# A SaaS starting point: your own auth, payments, and background jobs, no Docker needed
|
|
88
|
+
pnpm dlx @clubedge/create-clubedge-app my-app --auth better-auth --payments stripe --jobs pg-boss --infra local
|
|
104
89
|
```
|
|
105
90
|
|
|
106
|
-
Interactive runs ask whether to customize these after the framework question.
|
|
91
|
+
Interactive runs ask whether to customize these after the framework question.
|
|
107
92
|
|
|
108
93
|
## Options
|
|
109
94
|
|
|
110
95
|
```text
|
|
111
|
-
Usage:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
--
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
--
|
|
119
|
-
|
|
120
|
-
--
|
|
121
|
-
|
|
122
|
-
--
|
|
123
|
-
--
|
|
124
|
-
|
|
125
|
-
-
|
|
96
|
+
Usage:
|
|
97
|
+
pnpm dlx @clubedge/create-clubedge-app [project-directory] [options]
|
|
98
|
+
pnpm dlx @clubedge/create-clubedge-app add [module] [option] (inside a project)
|
|
99
|
+
pnpm dlx @clubedge/create-clubedge-app remove [module] (inside a project)
|
|
100
|
+
pnpm dlx @clubedge/create-clubedge-app upgrade [--ref <tag>] (inside a project)
|
|
101
|
+
|
|
102
|
+
Options:
|
|
103
|
+
--framework <id> App framework, such as next or tanstack-start
|
|
104
|
+
--<module> <option> A module option, such as --auth none; the Starter lists its modules
|
|
105
|
+
--ref <ref> Download this Starter tag, branch, or commit from GitHub instead
|
|
106
|
+
(upgrade: the Starter to upgrade to)
|
|
107
|
+
--template-dir <path> Scaffold from a local Starter checkout (for Starter development)
|
|
108
|
+
--dry-run Show what would be created or changed without writing anything
|
|
109
|
+
--force add/remove: change a project with uncommitted changes or without Git
|
|
110
|
+
-y, --yes Accept defaults and never prompt (default directory: my-app)
|
|
111
|
+
--no-install Skip dependency installation
|
|
112
|
+
--no-git Skip Git repository initialization
|
|
113
|
+
-h, --help Show this help
|
|
114
|
+
-v, --version Show the CLI version
|
|
126
115
|
```
|
|
127
116
|
|
|
128
117
|
The target directory must be empty or not exist. The CLI never deletes or overwrites existing files, and if scaffolding fails it removes whatever it wrote, so a failed run leaves nothing behind.
|
|
129
118
|
|
|
130
|
-
Every generated project records its CLI version, Starter repository, Starter ref, Starter commit, framework, and modules in `package.json` and `README.md`.
|
|
131
|
-
|
|
132
119
|
```sh
|
|
133
120
|
# Preview the files and edits without writing anything
|
|
134
121
|
pnpm dlx @clubedge/create-clubedge-app my-app --dry-run
|
|
@@ -140,7 +127,7 @@ pnpm dlx @clubedge/create-clubedge-app my-app --yes --no-git --framework tanstac
|
|
|
140
127
|
pnpm dlx @clubedge/create-clubedge-app my-app --ref main
|
|
141
128
|
|
|
142
129
|
# Reproduce a specific Starter release or commit
|
|
143
|
-
pnpm dlx @clubedge/create-clubedge-app my-app --ref v0.
|
|
130
|
+
pnpm dlx @clubedge/create-clubedge-app my-app --ref v0.13.1
|
|
144
131
|
pnpm dlx @clubedge/create-clubedge-app my-app --ref <commit-sha>
|
|
145
132
|
|
|
146
133
|
# Test local Starter changes before releasing them
|
|
@@ -157,7 +144,7 @@ pnpm dlx @clubedge/create-clubedge-app add cache redis # or switch: add aut
|
|
|
157
144
|
pnpm dlx @clubedge/create-clubedge-app remove storage
|
|
158
145
|
pnpm dlx @clubedge/create-clubedge-app add infra local --dry-run
|
|
159
146
|
pnpm dlx @clubedge/create-clubedge-app@latest upgrade # to the newest CLI's Starter release
|
|
160
|
-
pnpm dlx @clubedge/create-clubedge-app upgrade --ref v0.
|
|
147
|
+
pnpm dlx @clubedge/create-clubedge-app upgrade --ref v0.13.1 # or a specific tag, branch, or commit
|
|
161
148
|
```
|
|
162
149
|
|
|
163
150
|
The CLI renders the project twice, from the Starter commit and modules recorded in your `package.json` and from the new state, and merges the difference into your project. The new state has other modules for `add` and `remove`, and the newer Starter with the same modules for `upgrade`. Modules a newer Starter introduces start as `none` where possible, so an upgrade never adds a service on its own.
|
|
@@ -170,6 +157,35 @@ The CLI renders the project twice, from the Starter commit and modules recorded
|
|
|
170
157
|
|
|
171
158
|
The project must be a Git repository without uncommitted changes, so you can review the result with `git diff` and undo it. Pass `--force` to skip this check. Add `--no-install` to skip `pnpm install`. Afterward, run `pnpm db:migrate` and `pnpm check:services` if the change added tables or services.
|
|
172
159
|
|
|
160
|
+
## Version relationship
|
|
161
|
+
|
|
162
|
+
Each CLI release is tested against one specific Starter release:
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
create-clubedge-app v0.14.1
|
|
166
|
+
|
|
|
167
|
+
v
|
|
168
|
+
Clubedge Starter v0.13.1
|
|
169
|
+
commit 28bfbf98c85ae500ace6a062dd10d67746e1a330
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
The current relationship is:
|
|
173
|
+
|
|
174
|
+
| CLI release | Default Starter release | Meaning |
|
|
175
|
+
| --- | --- | --- |
|
|
176
|
+
| `create-clubedge-app@0.14.1` | `clubedge-starter@v0.13.1` | The CLI's required, tested default |
|
|
177
|
+
|
|
178
|
+
This means the same CLI version always scaffolds the same Starter revision by default. The CLI does not silently follow Starter `main`.
|
|
179
|
+
|
|
180
|
+
The `v0.13.1` tag is expected to resolve to commit
|
|
181
|
+
`28bfbf98c85ae500ace6a062dd10d67746e1a330`. The CLI verifies this before
|
|
182
|
+
scaffolding with the default reference and fails rather than silently using a
|
|
183
|
+
moved tag.
|
|
184
|
+
|
|
185
|
+
When the Starter changes, its maintainers first publish a new versioned release, such as `v0.13.1`. The CLI is then updated to use that release, all generated-project checks must pass, and a new CLI version is published. This keeps Starter and CLI releases independently versioned while preserving a tested compatibility relationship.
|
|
186
|
+
|
|
187
|
+
Every generated project records its CLI version, Starter repository, Starter ref, Starter commit, framework, and modules in `package.json` and `README.md`.
|
|
188
|
+
|
|
173
189
|
## How it works
|
|
174
190
|
|
|
175
191
|
Each CLI release bundles one Starter release. When the release is built, `scripts/bundle-template.mjs` clones the pinned Starter tag, verifies that it resolves to the pinned commit, and copies its tracked files into the package (`template/` and `template.lock.json`). Running the CLI then needs no GitHub access for the default Starter.
|
|
@@ -181,11 +197,23 @@ The CLI first builds a plan (the files to copy and the edits to make), which `--
|
|
|
181
197
|
```text
|
|
182
198
|
src/
|
|
183
199
|
cli/ argument parsing and terminal output
|
|
184
|
-
core/ manifest, template sources, customizations, planning, and execution
|
|
200
|
+
core/ manifest, template sources, customizations, planning, merging, and execution
|
|
185
201
|
steps/ Git initialization and dependency installation
|
|
186
202
|
utils/ file listing and copying, processes, and naming
|
|
187
203
|
```
|
|
188
204
|
|
|
205
|
+
## Documentation
|
|
206
|
+
|
|
207
|
+
| I want to | Read |
|
|
208
|
+
| --- | --- |
|
|
209
|
+
| Configure a generated project | Its `SETUP.md`, also in the [Starter repository](https://github.com/Clubedge/clubedge-starter/blob/main/SETUP.md) |
|
|
210
|
+
| Change modules or upgrade a project | [Change an existing project](#change-an-existing-project) |
|
|
211
|
+
| Reproduce an exact Starter version | [Version relationship](#version-relationship) |
|
|
212
|
+
| See what changed in each release | [CHANGELOG.md](CHANGELOG.md) |
|
|
213
|
+
| See what is planned next | [ROADMAP.md](ROADMAP.md) |
|
|
214
|
+
| Contribute code | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
215
|
+
| Report a security problem | [SECURITY.md](SECURITY.md) |
|
|
216
|
+
|
|
189
217
|
## Development
|
|
190
218
|
|
|
191
219
|
```sh
|
|
@@ -199,7 +227,7 @@ node ./bin/create.mjs my-app --template-dir ../clubedge-starter --dry-run
|
|
|
199
227
|
|
|
200
228
|
Without a bundled template, a local build downloads the pinned Starter release from GitHub and verifies its commit. Run `pnpm bundle-template` to bundle it, or `pnpm bundle-template --from ../clubedge-starter` to bundle a local checkout.
|
|
201
229
|
|
|
202
|
-
CI packs the CLI with `npm pack`, scaffolds
|
|
230
|
+
CI packs the CLI with `npm pack`, scaffolds clean projects from the packed tarball, installs their dependencies, runs linting, typechecking, unit tests, browser checks, and a production build, then starts each generated app and checks the landing page, sign-up page, dashboard, health endpoint, logo, and favicon. It also adds and removes modules in an existing project and upgrades a project from an older Starter. A scheduled, non-blocking compatibility job checks Starter `main`.
|
|
203
231
|
|
|
204
232
|
## Release workflow
|
|
205
233
|
|
|
@@ -208,7 +236,7 @@ CI packs the CLI with `npm pack`, scaffolds a clean project from the packed tarb
|
|
|
208
236
|
1. Make and validate changes in `clubedge-starter`.
|
|
209
237
|
2. Run lint, typecheck, unit tests, browser tests, and production build.
|
|
210
238
|
3. Update the Starter package versions.
|
|
211
|
-
4. Commit `main`, create a release tag such as `v0.
|
|
239
|
+
4. Commit `main`, create a release tag such as `v0.13.1`, and publish the Starter release.
|
|
212
240
|
|
|
213
241
|
### CLI maintainers
|
|
214
242
|
|
|
@@ -220,9 +248,28 @@ CI packs the CLI with `npm pack`, scaffolds a clean project from the packed tarb
|
|
|
220
248
|
|
|
221
249
|
The required CI job always tests the pinned default. The scheduled compatibility job tests Starter `main` early, but unreleased Starter changes must not change the stable CLI default.
|
|
222
250
|
|
|
223
|
-
##
|
|
251
|
+
## Roadmap
|
|
252
|
+
|
|
253
|
+
Each phase ends with a Starter release and a CLI release pinned to it. The full plan is in [ROADMAP.md](ROADMAP.md).
|
|
224
254
|
|
|
225
|
-
|
|
255
|
+
| CLI release | Starter release | Theme |
|
|
256
|
+
| --- | --- | --- |
|
|
257
|
+
| 0.5.0 to 0.9.0 | v0.5.0 to v0.8.0 | Optional modules, local services, `add`, `remove`, and `upgrade` |
|
|
258
|
+
| 0.10.0 | v0.9.0 | Module flags from the Starter's manifest, and email |
|
|
259
|
+
| 0.11.0 | v0.10.0 | Deployment |
|
|
260
|
+
| 0.12.0 | v0.11.0 | Payments |
|
|
261
|
+
| 0.13.0 | v0.12.0 | Background jobs |
|
|
262
|
+
| 0.14.0 | v0.13.0 | Observability |
|
|
263
|
+
| next | | `status` and `doctor` commands, several modules in one change, macOS CI |
|
|
264
|
+
|
|
265
|
+
## Community
|
|
266
|
+
|
|
267
|
+
- **[Issues](https://github.com/Clubedge/create-clubedge-app/issues)** for problems creating, changing, or upgrading a project.
|
|
268
|
+
- **[Clubedge Starter issues](https://github.com/Clubedge/clubedge-starter/issues)** for problems in the generated application itself.
|
|
269
|
+
- **[Pull requests](https://github.com/Clubedge/create-clubedge-app/pulls)** are welcome; start with [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
270
|
+
- **Security problems** go through the private process in [SECURITY.md](SECURITY.md), not public issues.
|
|
271
|
+
|
|
272
|
+
Everyone taking part is expected to follow the [code of conduct](CODE_OF_CONDUCT.md).
|
|
226
273
|
|
|
227
274
|
## License
|
|
228
275
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clubedge/create-clubedge-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.1",
|
|
4
4
|
"description": "Create a Next.js or TanStack Start application from the Clubedge Starter reference implementation.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@10.9.0",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
},
|
|
23
23
|
"clubedge": {
|
|
24
24
|
"starterRepository": "Clubedge/clubedge-starter",
|
|
25
|
-
"starterRef": "v0.
|
|
26
|
-
"starterCommit": "
|
|
25
|
+
"starterRef": "v0.13.1",
|
|
26
|
+
"starterCommit": "28bfbf98c85ae500ace6a062dd10d67746e1a330"
|
|
27
27
|
},
|
|
28
28
|
"license": "Apache-2.0",
|
|
29
29
|
"repository": {
|
package/template/.env.example
CHANGED
|
@@ -68,6 +68,22 @@ JOBS_WORKER=
|
|
|
68
68
|
CRON_SECRET=
|
|
69
69
|
# clubedge:end
|
|
70
70
|
|
|
71
|
+
# clubedge:if observability=otel
|
|
72
|
+
# OpenTelemetry: where traces and error logs go over OTLP/HTTP, such as a collector, Grafana
|
|
73
|
+
# Cloud, or Honeycomb. Empty sends nothing. Headers are key=value pairs separated by commas.
|
|
74
|
+
OTEL_EXPORTER_OTLP_ENDPOINT=
|
|
75
|
+
OTEL_EXPORTER_OTLP_HEADERS=
|
|
76
|
+
OTEL_SERVICE_NAME=
|
|
77
|
+
# clubedge:end
|
|
78
|
+
|
|
79
|
+
# clubedge:if observability=sentry
|
|
80
|
+
# Sentry (https://sentry.io): the DSN from the project's Client Keys settings. Empty sends nothing.
|
|
81
|
+
# The traces sample rate is the share of requests traced, from 0 to 1 (default 0.1).
|
|
82
|
+
SENTRY_DSN=
|
|
83
|
+
SENTRY_ENVIRONMENT=
|
|
84
|
+
SENTRY_TRACES_SAMPLE_RATE=
|
|
85
|
+
# clubedge:end
|
|
86
|
+
|
|
71
87
|
# clubedge:if storage=s3
|
|
72
88
|
# S3-compatible storage (AWS S3, Cloudflare R2, MinIO)
|
|
73
89
|
STORAGE_BUCKET= # clubedge:only infra!=docker
|