@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.
Files changed (86) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +123 -76
  3. package/package.json +3 -3
  4. package/template/.env.example +16 -0
  5. package/template/README.md +184 -51
  6. package/template/SETUP.md +36 -0
  7. package/template/apps/start/.env.example +16 -0
  8. package/template/apps/start/package.json +4 -1
  9. package/template/apps/start/src/nitro/plugins/jobs.ts +2 -2
  10. package/template/apps/start/src/nitro/plugins/observability.ts +10 -0
  11. package/template/apps/start/src/routes/api/webhooks/payments.ts +2 -1
  12. package/template/apps/start/src/server/auth-forms.ts +4 -4
  13. package/template/apps/start/src/server/auth.ts +2 -2
  14. package/template/apps/start/src/server/email.ts +3 -2
  15. package/template/apps/start/src/server/jobs.functions.ts +2 -1
  16. package/template/apps/start/src/server/jobs.test.ts +27 -0
  17. package/template/apps/start/src/server/jobs.ts +26 -6
  18. package/template/apps/start/src/server/observability.test.ts +23 -0
  19. package/template/apps/start/src/server/observability.ts +44 -0
  20. package/template/apps/start/src/server/payments.ts +12 -8
  21. package/template/apps/start/src/server/storage.ts +3 -2
  22. package/template/apps/start/src/server/users.ts +2 -1
  23. package/template/apps/start/src/server/variants/auth.better-auth.ts +2 -2
  24. package/template/apps/start/src/server/variants/email.resend.ts +3 -2
  25. package/template/apps/start/src/server/variants/observability.sentry.ts +50 -0
  26. package/template/apps/start/src/server/variants/storage.supabase.ts +3 -2
  27. package/template/apps/start/src/start.ts +40 -1
  28. package/template/apps/web/next-env.d.ts +2 -2
  29. package/template/apps/web/package.json +4 -1
  30. package/template/apps/web/src/app/actions/auth.ts +4 -4
  31. package/template/apps/web/src/app/api/webhooks/payments/route.ts +2 -1
  32. package/template/apps/web/src/app/dashboard/_components/jobs-card.tsx +2 -1
  33. package/template/apps/web/src/instrumentation.ts +27 -1
  34. package/template/apps/web/src/server/email.ts +3 -2
  35. package/template/apps/web/src/server/jobs.ts +26 -6
  36. package/template/apps/web/src/server/observability.ts +44 -0
  37. package/template/apps/web/src/server/payments.ts +12 -8
  38. package/template/apps/web/src/server/storage.ts +3 -2
  39. package/template/apps/web/src/server/users.ts +2 -1
  40. package/template/apps/web/src/server/variants/email.resend.ts +3 -2
  41. package/template/apps/web/src/server/variants/observability.sentry.ts +50 -0
  42. package/template/apps/web/src/server/variants/storage.supabase.ts +3 -2
  43. package/template/apps/web/src/variants/proxy.better-auth.ts +2 -1
  44. package/template/clubedge.template.json +48 -0
  45. package/template/e2e/observability.spec.ts +28 -0
  46. package/template/e2e/telemetry-fake.ts +91 -0
  47. package/template/package.json +1 -1
  48. package/template/packages/auth/package.json +1 -1
  49. package/template/packages/auth-better-auth/package.json +1 -1
  50. package/template/packages/auth-better-auth/src/index.ts +2 -2
  51. package/template/packages/auth-supabase/package.json +1 -1
  52. package/template/packages/cache/package.json +1 -1
  53. package/template/packages/cache-redis/package.json +1 -1
  54. package/template/packages/core/package.json +1 -1
  55. package/template/packages/core/src/errors.ts +3 -1
  56. package/template/packages/core/src/index.ts +9 -0
  57. package/template/packages/core/src/telemetry.test.ts +86 -0
  58. package/template/packages/core/src/telemetry.ts +79 -0
  59. package/template/packages/db/package.json +1 -1
  60. package/template/packages/email/package.json +1 -1
  61. package/template/packages/email-resend/package.json +1 -1
  62. package/template/packages/email-smtp/package.json +1 -1
  63. package/template/packages/jobs/package.json +1 -1
  64. package/template/packages/jobs-pg-boss/package.json +1 -1
  65. package/template/packages/jobs-pg-boss/src/index.test.ts +40 -3
  66. package/template/packages/jobs-pg-boss/src/index.ts +23 -10
  67. package/template/packages/local-db/package.json +1 -1
  68. package/template/packages/observability/package.json +21 -0
  69. package/template/packages/observability/src/index.ts +65 -0
  70. package/template/packages/observability/tsconfig.json +4 -0
  71. package/template/packages/observability-otel/package.json +30 -0
  72. package/template/packages/observability-otel/src/index.test.ts +93 -0
  73. package/template/packages/observability-otel/src/index.ts +176 -0
  74. package/template/packages/observability-otel/tsconfig.json +4 -0
  75. package/template/packages/observability-sentry/package.json +22 -0
  76. package/template/packages/observability-sentry/src/index.test.ts +70 -0
  77. package/template/packages/observability-sentry/src/index.ts +69 -0
  78. package/template/packages/observability-sentry/tsconfig.json +4 -0
  79. package/template/packages/payments/package.json +1 -1
  80. package/template/packages/payments-stripe/package.json +1 -1
  81. package/template/packages/storage/package.json +1 -1
  82. package/template/packages/storage-s3/package.json +1 -1
  83. package/template/packages/storage-supabase/package.json +1 -1
  84. package/template/packages/ui/package.json +1 -1
  85. package/template/pnpm-lock.yaml +592 -0
  86. 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
- [![CI](https://github.com/Clubedge/create-clubedge-app/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/Clubedge/create-clubedge-app/actions/workflows/ci.yml)
4
- [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE)
5
+ **Create a production-ready Next.js or TanStack Start app with one command, and keep it up to date.**
5
6
 
6
- Create a Next.js or TanStack Start application from the [Clubedge Starter](https://github.com/Clubedge/clubedge-starter) reference implementation.
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
- The CLI downloads a tested Starter release, names the generated project, creates `apps/web/.env.local` from the example, initializes Git, and installs dependencies. The Starter remains the source of truth for the generated architecture.
10
+ [![npm](https://img.shields.io/npm/v/@clubedge/create-clubedge-app?style=flat-square)](https://www.npmjs.com/package/@clubedge/create-clubedge-app)
11
+ [![npm downloads](https://img.shields.io/npm/dm/@clubedge/create-clubedge-app?style=flat-square)](https://www.npmjs.com/package/@clubedge/create-clubedge-app)
12
+ [![CI](https://img.shields.io/github/actions/workflow/status/Clubedge/create-clubedge-app/ci.yml?branch=main&label=CI&style=flat-square)](https://github.com/Clubedge/create-clubedge-app/actions/workflows/ci.yml)
13
+ [![Release](https://img.shields.io/github/v/release/Clubedge/create-clubedge-app?style=flat-square)](https://github.com/Clubedge/create-clubedge-app/releases)
14
+ [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square)](LICENSE)
9
15
 
10
- ## Version relationship
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
- Each CLI release is tested against one specific Starter release:
22
+ </div>
13
23
 
14
- ```text
15
- create-clubedge-app v0.13.0
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
- The current relationship is:
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
- The `v0.12.0` tag is expected to resolve to commit
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
- When the Starter changes, its maintainers first publish a new versioned release, such as `v0.12.0`. 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.
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
- ## Requirements
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
- - Node.js 22.12 or newer.
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
- ## Usage
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
- The generated project includes `.env.local`; fill in `DATABASE_URL` to start the app and configure Supabase Auth or other providers as needed. The root route is a project-named landing page, and the reference dashboard is available at `/dashboard`. See its `SETUP.md` for database, Redis, storage, and Docker setup.
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
- When no destination is provided, the CLI asks where to create the project:
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
- ```sh
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
- ### Choosing a framework
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 when the Starter offers more than one:
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
- ### Choosing services
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: its package, its provider SDK, its environment variables, its documentation, and its lockfile entries. 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.
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. The options come from the Starter's manifest, so `--help` lists the ones the bundled Starter offers.
91
+ Interactive runs ask whether to customize these after the framework question.
107
92
 
108
93
  ## Options
109
94
 
110
95
  ```text
111
- Usage: pnpm dlx @clubedge/create-clubedge-app [project-directory] [options]
112
-
113
- --framework <id> App framework: next (default) or tanstack-start
114
- --auth <id> Authentication: supabase (default), better-auth, or none
115
- --storage <id> File storage: s3 (default), supabase, or none
116
- --cache <id> Cache and rate limits: redis (default) or memory
117
- --infra <id> Local services: docker (default), supabase, local, or none
118
- --ref <ref> Download this Starter tag, branch, or commit from GitHub instead
119
- --template-dir <path> Scaffold from a local Starter checkout (for Starter development)
120
- --dry-run Show what would be created without writing anything
121
- -y, --yes Accept defaults and never prompt (default directory: my-app)
122
- --no-install Skip dependency installation
123
- --no-git Skip Git initialization
124
- -h, --help Show help
125
- -v, --version Show the CLI version
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.12.0
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.12.0 # or a specific tag, branch, or commit
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 a clean project from the packed tarball, installs its dependencies, runs linting, typechecking, unit tests, browser checks, and a production build, then starts the generated app and checks the landing page, sign-up page, dashboard, health endpoint, logo, and favicon. A scheduled, non-blocking compatibility job also checks Starter `main`.
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.12.0`, and publish the Starter release.
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
- ## Contributing
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
- See [CONTRIBUTING.md](CONTRIBUTING.md) for development and pull request guidance, and [ROADMAP.md](ROADMAP.md) for the planned phases. Report vulnerabilities privately as described in [SECURITY.md](SECURITY.md).
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.13.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.12.0",
26
- "starterCommit": "445add73c3505cd8505faccb3b0b7061a29f5356"
25
+ "starterRef": "v0.13.1",
26
+ "starterCommit": "28bfbf98c85ae500ace6a062dd10d67746e1a330"
27
27
  },
28
28
  "license": "Apache-2.0",
29
29
  "repository": {
@@ -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