create-koppajs 1.2.1 → 1.2.3

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 (80) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +116 -21
  3. package/bin/create-koppajs.js +10 -16
  4. package/package.json +10 -7
  5. package/template/README.md +19 -209
  6. package/template/_gitignore +0 -3
  7. package/template/index.html +1 -1
  8. package/template/package.json +9 -46
  9. package/template/public/favicon.png +0 -0
  10. package/template/public/koppajs-logo.png +0 -0
  11. package/template/src/app-view.kpa +1 -3
  12. package/template/tsconfig.json +2 -9
  13. package/template/vite.config.mjs +0 -35
  14. package/template-overlays/router/README.md +25 -203
  15. package/template-overlays/router/index.html +1 -1
  16. package/template-overlays/router/package.json +10 -47
  17. package/template-overlays/router/src/app-view.kpa +21 -78
  18. package/template-overlays/router/src/home-page.kpa +23 -60
  19. package/template-overlays/router/src/main.ts +0 -9
  20. package/template-overlays/router/src/not-found-page.kpa +16 -48
  21. package/template-overlays/router/src/router-page.kpa +34 -69
  22. package/template-overlays/router/src/style.css +5 -29
  23. package/template/AI_CONSTITUTION.md +0 -50
  24. package/template/ARCHITECTURE.md +0 -86
  25. package/template/CHANGELOG.md +0 -34
  26. package/template/CONTRIBUTING.md +0 -92
  27. package/template/DECISION_HIERARCHY.md +0 -32
  28. package/template/DEVELOPMENT_RULES.md +0 -57
  29. package/template/LICENSE +0 -201
  30. package/template/RELEASE.md +0 -230
  31. package/template/ROADMAP.md +0 -34
  32. package/template/TESTING_STRATEGY.md +0 -93
  33. package/template/_editorconfig +0 -12
  34. package/template/_github/instructions/ai-workflow.md +0 -33
  35. package/template/_github/workflows/ci.yml +0 -38
  36. package/template/_github/workflows/release.yml +0 -58
  37. package/template/_husky/commit-msg +0 -8
  38. package/template/_husky/pre-commit +0 -1
  39. package/template/_prettierignore +0 -7
  40. package/template/commitlint.config.mjs +0 -6
  41. package/template/docs/adr/0001-keep-the-starter-minimal.md +0 -32
  42. package/template/docs/adr/0002-adopt-a-living-meta-layer.md +0 -30
  43. package/template/docs/adr/0003-normalize-kpa-plugin-output.md +0 -24
  44. package/template/docs/adr/0004-adopt-an-automated-quality-baseline.md +0 -31
  45. package/template/docs/adr/0005-adopt-a-tag-driven-release-baseline.md +0 -45
  46. package/template/docs/adr/0006-adopt-commit-message-conventions.md +0 -39
  47. package/template/docs/adr/README.md +0 -37
  48. package/template/docs/adr/TEMPLATE.md +0 -18
  49. package/template/docs/architecture/module-boundaries.md +0 -48
  50. package/template/docs/meta/maintenance.md +0 -40
  51. package/template/docs/quality/quality-gates.md +0 -39
  52. package/template/docs/specs/README.md +0 -36
  53. package/template/docs/specs/TEMPLATE.md +0 -34
  54. package/template/docs/specs/app-bootstrap.md +0 -46
  55. package/template/docs/specs/counter-component.md +0 -48
  56. package/template/docs/specs/quality-workflow.md +0 -62
  57. package/template/eslint.config.mjs +0 -54
  58. package/template/playwright.config.ts +0 -31
  59. package/template/pnpm-lock.yaml +0 -3777
  60. package/template/prettier.config.mjs +0 -6
  61. package/template/public/favicon.svg +0 -15
  62. package/template/tests/e2e/app.spec.ts +0 -18
  63. package/template/tests/integration/main-bootstrap.test.ts +0 -33
  64. package/template/tests/unit/normalize-kpa-module-export.test.ts +0 -46
  65. package/template/vite.config.d.mts +0 -7
  66. package/template/vitest.config.mjs +0 -19
  67. package/template-overlays/router/ARCHITECTURE.md +0 -86
  68. package/template-overlays/router/CHANGELOG.md +0 -44
  69. package/template-overlays/router/DEVELOPMENT_RULES.md +0 -57
  70. package/template-overlays/router/ROADMAP.md +0 -34
  71. package/template-overlays/router/TESTING_STRATEGY.md +0 -67
  72. package/template-overlays/router/docs/adr/0001-keep-the-starter-minimal.md +0 -32
  73. package/template-overlays/router/docs/architecture/module-boundaries.md +0 -39
  74. package/template-overlays/router/docs/meta/maintenance.md +0 -38
  75. package/template-overlays/router/docs/specs/README.md +0 -19
  76. package/template-overlays/router/docs/specs/app-bootstrap.md +0 -42
  77. package/template-overlays/router/docs/specs/router-navigation.md +0 -41
  78. package/template-overlays/router/pnpm-lock.yaml +0 -3786
  79. package/template-overlays/router/tests/e2e/app.spec.ts +0 -38
  80. package/template-overlays/router/tests/integration/main-bootstrap.test.ts +0 -150
package/CHANGELOG.md CHANGED
@@ -16,6 +16,61 @@ _No unreleased changes yet._
16
16
 
17
17
  ---
18
18
 
19
+ ## [1.2.3] — Lean Starter Maintenance
20
+
21
+ **2026-04-24**
22
+
23
+ Patch release to keep generated projects focused on runnable KoppaJS app code.
24
+ This is a maintainer-approved patch exception to the versioning policy because
25
+ the CLI invocation contract stays unchanged while the generated starter tree is
26
+ intentionally reduced.
27
+
28
+ ### Changed
29
+
30
+ - trimmed generated starters to app source, README, and Vite/TypeScript build
31
+ files
32
+ - switched generated starter views from the remote KoppaJS logo URL to a local
33
+ `public/koppajs-logo.png` asset
34
+ - switched generated starter favicon output from `public/favicon.svg` to
35
+ `public/favicon.png`
36
+ - stopped patching generated `CHANGELOG.md` and `RELEASE.md`; those files are
37
+ no longer included in new apps
38
+ - refreshed the compatible generated-starter toolchain to `vite@7.3.2` and
39
+ `@types/node@25.6.0` while keeping `typescript@5.9.3` within the current
40
+ `@koppajs/koppajs-vite-plugin` peer range
41
+ - raised repository and generated-starter pnpm metadata to `pnpm@10.33.2`,
42
+ with a declared minimum of `>=10.24.0`
43
+ - raised repository and generated-starter Node.js metadata to `>=22.12.0`
44
+
45
+ ### Removed
46
+
47
+ - removed governance, ADR/spec docs, GitHub workflows, Husky hooks, commitlint,
48
+ lint-staged, release files, changelog files, license files, and starter
49
+ lockfiles from generated projects
50
+ - removed generated-starter lint, format, and test tooling, including ESLint,
51
+ Prettier, Vitest, Playwright, their configs, scripts, dependencies, and test
52
+ files
53
+
54
+ ---
55
+
56
+ ## [1.2.2] — Node & Validation Baseline Alignment
57
+
58
+ **2026-03-27**
59
+
60
+ ### Changed
61
+
62
+ - raised the repository and bundled starter minimum Node.js version to `>=22`
63
+ and expanded CI coverage to Node 24
64
+ - aligned CI and release validation around `pnpm validate`, added a packed-CLI
65
+ smoke test, and switched release automation to the maintainer default from
66
+ `.nvmrc`
67
+ - refreshed bundled starter dependencies to the current `@koppajs/koppajs-core`,
68
+ `@koppajs/koppajs-vite-plugin`, and `@koppajs/koppajs-router` baselines
69
+ - removed the obsolete starter-local `.kpa` export wrapper now that the Vite
70
+ plugin emits valid ES modules itself
71
+
72
+ ---
73
+
19
74
  ## [1.2.1] — Starter Source Of Truth Cleanup
20
75
 
21
76
  **2026-03-26**
package/README.md CHANGED
@@ -1,9 +1,63 @@
1
- # create-koppajs
2
-
3
- `create-koppajs` is the official KoppaJS CLI scaffolder. It creates a new
4
- project by copying the versioned base starter in `template/`, optionally
5
- applying a supported starter overlay from `template-overlays/`, and patching a
6
- small, explicit set of identity files.
1
+ <a id="readme-top"></a>
2
+
3
+ <div align="center">
4
+ <img src="https://public-assets-1b57ca06-687a-4142-a525-0635f7649a5c.s3.eu-central-1.amazonaws.com/koppajs/koppajs-logo-text-900x226.png" width="500" alt="KoppaJS Logo">
5
+ </div>
6
+
7
+ <br>
8
+
9
+ <div align="center">
10
+ <a href="https://www.npmjs.com/package/create-koppajs"><img src="https://img.shields.io/npm/v/create-koppajs?style=flat-square" alt="npm version"></a>
11
+ <a href="https://github.com/koppajs/create-koppajs/actions"><img src="https://img.shields.io/github/actions/workflow/status/koppajs/create-koppajs/ci.yml?branch=main&style=flat-square" alt="CI Status"></a>
12
+ <a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square" alt="License"></a>
13
+ </div>
14
+
15
+ <br>
16
+
17
+ <div align="center">
18
+ <h1 align="center">create-koppajs</h1>
19
+ <h3 align="center">Official project scaffolder for KoppaJS</h3>
20
+ <p align="center">
21
+ <i>Generate a ready-to-run KoppaJS starter in one command.</i>
22
+ </p>
23
+ </div>
24
+
25
+ <br>
26
+
27
+ <div align="center">
28
+ <p align="center">
29
+ <a href="https://github.com/koppajs/koppajs-documentation">Documentation</a>
30
+ &middot;
31
+ <a href="https://github.com/koppajs/koppajs-core">KoppaJS Core</a>
32
+ &middot;
33
+ <a href="https://github.com/koppajs/koppajs-vite-plugin">Vite Plugin</a>
34
+ &middot;
35
+ <a href="https://github.com/koppajs/koppajs-router">Router</a>
36
+ &middot;
37
+ <a href="https://github.com/koppajs/create-koppajs/issues">Issues</a>
38
+ </p>
39
+ </div>
40
+
41
+ <br>
42
+
43
+ <details>
44
+ <summary>Table of Contents</summary>
45
+ <ol>
46
+ <li><a href="#purpose">Purpose</a></li>
47
+ <li><a href="#repository-classification">Repository Classification</a></li>
48
+ <li><a href="#ownership-boundaries">Ownership Boundaries</a></li>
49
+ <li><a href="#public-contract">Public Contract</a></li>
50
+ <li><a href="#usage">Usage</a></li>
51
+ <li><a href="#requirements">Requirements</a></li>
52
+ <li><a href="#generated-starters">Generated Starters</a></li>
53
+ <li><a href="#ecosystem-fit">Ecosystem Fit</a></li>
54
+ <li><a href="#architecture-governance">Architecture & Governance</a></li>
55
+ <li><a href="#community-contribution">Community & Contribution</a></li>
56
+ <li><a href="#license">License</a></li>
57
+ </ol>
58
+ </details>
59
+
60
+ ---
7
61
 
8
62
  ## Purpose
9
63
 
@@ -17,6 +71,8 @@ This repository exists to do one job well:
17
71
  It is not a runtime package and it does not own application behavior after
18
72
  generation.
19
73
 
74
+ ---
75
+
20
76
  ## Repository Classification
21
77
 
22
78
  - Repo type: CLI scaffolding package with a bundled starter family
@@ -27,6 +83,8 @@ generation.
27
83
  - UI surface: none at the repository root; the generated starter owns the UI
28
84
  - Maturity level: stable, contract-governed, maintenance-first
29
85
 
86
+ ---
87
+
30
88
  ## Ownership Boundaries
31
89
 
32
90
  - `bin/create-koppajs.js` owns argument parsing, prompting, validation, starter
@@ -45,6 +103,8 @@ The root package must not take on runtime concerns that belong in generated
45
103
  applications, and generated applications must not depend on unpublished root
46
104
  files after scaffold completion.
47
105
 
106
+ ---
107
+
48
108
  ## Public Contract
49
109
 
50
110
  The stable public contract of this repository is:
@@ -58,9 +118,8 @@ The stable public contract of this repository is:
58
118
  target directories
59
119
  - recursive copying of the bundled `template/` directory plus any selected
60
120
  overlay
61
- - restoration of publish-safe dotfiles and dotdirectories during copy
62
- - patching of generated `package.json`, `README.md`, `CHANGELOG.md`, and
63
- `RELEASE.md`
121
+ - restoration of publish-safe dotfiles during copy
122
+ - patching of generated `package.json` and `README.md`
64
123
  - the generated starter baselines defined by `template/` and
65
124
  `template-overlays/`
66
125
  - the npm package payload: `bin/`, `template/`, `template-overlays/`,
@@ -71,6 +130,8 @@ The governing specs for that contract are:
71
130
  - [docs/specs/cli-scaffolding.md](./docs/specs/cli-scaffolding.md)
72
131
  - [docs/specs/template-starter-contract.md](./docs/specs/template-starter-contract.md)
73
132
 
133
+ ---
134
+
74
135
  ## Usage
75
136
 
76
137
  Default starter:
@@ -107,11 +168,14 @@ pnpm install
107
168
  pnpm dev
108
169
  ```
109
170
 
171
+ ---
172
+
110
173
  ## Requirements
111
174
 
112
- - for `create-koppajs`: Node.js `>=20`
113
- - for generated starter projects: pnpm `>=10` and a starter-supported Node.js
114
- line, currently `20.19+`, `22.13+`, or `24+`
175
+ - for `create-koppajs`: Node.js `>=22.12.0` and pnpm `>=10.24.0`
176
+ - for generated starter projects: Node.js `>=22.12.0` and pnpm `>=10.24.0`
177
+
178
+ ---
115
179
 
116
180
  ## Generated Starters
117
181
 
@@ -124,15 +188,20 @@ The generated project includes one of two supported starters:
124
188
 
125
189
  Every starter also includes:
126
190
 
127
- - quality tooling through ESLint, Prettier, Vitest, and Playwright
128
- - local workflow guards through Husky, lint-staged, and commitlint
129
- - starter governance files, ADR/spec structure, and release-process documents
130
- - GitHub workflows for CI and tagged releases
191
+ - a focused README with setup, scripts, and project structure
192
+
193
+ The generated project intentionally excludes repository governance files,
194
+ release automation, GitHub workflows, Git hooks, changelog files, lockfiles,
195
+ and lint/format/test tooling. Those files belong to this scaffolder repository
196
+ or to project-specific app decisions, not to every new application created from
197
+ it.
131
198
 
132
199
  The root repository treats those starters as versioned product surface, not
133
200
  test data. `template/` plus the supported overlays are the only source of truth
134
201
  for starter behavior.
135
202
 
203
+ ---
204
+
136
205
  ## Ecosystem Fit
137
206
 
138
207
  `create-koppajs` is the canonical entry point for starting a new KoppaJS
@@ -147,9 +216,11 @@ application. It complements:
147
216
  The repository stays intentionally narrow so the CLI, starter contract, and
148
217
  governance baseline can evolve together without hidden behavior.
149
218
 
150
- ## Governance
219
+ ---
151
220
 
152
- The root meta layer defines how this repository changes:
221
+ ## Architecture & Governance
222
+
223
+ Project intent, contributor rules, and documentation contracts live in the local repo meta layer:
153
224
 
154
225
  - [AI_CONSTITUTION.md](./AI_CONSTITUTION.md)
155
226
  - [ARCHITECTURE.md](./ARCHITECTURE.md)
@@ -158,12 +229,36 @@ The root meta layer defines how this repository changes:
158
229
  - [TESTING_STRATEGY.md](./TESTING_STRATEGY.md)
159
230
  - [RELEASE.md](./RELEASE.md)
160
231
  - [ROADMAP.md](./ROADMAP.md)
161
- - [docs/meta/README.md](./docs/meta/README.md)
232
+ - [CHANGELOG.md](./CHANGELOG.md)
233
+ - [CONTRIBUTING.md](./CONTRIBUTING.md)
234
+ - [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)
235
+ - [docs/specs/README.md](./docs/specs/README.md)
236
+ - [docs/specs/repository-documentation-contract.md](./docs/specs/repository-documentation-contract.md)
162
237
  - [docs/architecture/README.md](./docs/architecture/README.md)
238
+ - [docs/meta/README.md](./docs/meta/README.md)
163
239
  - [docs/quality/README.md](./docs/quality/README.md)
164
240
 
165
- Tagged releases are documented in [CHANGELOG.md](./CHANGELOG.md). Contributor
166
- workflow rules live in [CONTRIBUTING.md](./CONTRIBUTING.md).
241
+ The file-shape contract for `README.md`, `CHANGELOG.md`, `CODE_OF_CONDUCT.md`, and `CONTRIBUTING.md` is defined in [docs/specs/repository-documentation-contract.md](./docs/specs/repository-documentation-contract.md).
242
+
243
+ Run the local document guard before committing:
244
+
245
+ ```bash
246
+ pnpm run check:docs
247
+ ```
248
+
249
+ ---
250
+
251
+ ## Community & Contribution
252
+
253
+ Issues and pull requests are welcome:
254
+
255
+ https://github.com/koppajs/create-koppajs/issues
256
+
257
+ Contributor workflow details live in [CONTRIBUTING.md](./CONTRIBUTING.md).
258
+
259
+ Community expectations live in [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md).
260
+
261
+ ---
167
262
 
168
263
  ## License
169
264
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, copyFileSync, statSync } from "node:fs";
3
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, copyFileSync, statSync, realpathSync } from "node:fs";
4
4
  import { basename, join, dirname, resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { createInterface } from "node:readline";
@@ -206,13 +206,9 @@ export function ensureTargetDir(targetPath) {
206
206
  // npm excludes .gitignore from published packages — ship as _gitignore
207
207
  // and rename during scaffolding (same approach as create-vite).
208
208
  const RENAME_FILES = {
209
- _editorconfig: ".editorconfig",
210
209
  _gitattributes: ".gitattributes",
211
- _github: ".github",
212
210
  _gitignore: ".gitignore",
213
- _husky: ".husky",
214
211
  _npmrc: ".npmrc",
215
- _prettierignore: ".prettierignore",
216
212
  };
217
213
 
218
214
  export function copyDirRecursive(src, dest) {
@@ -261,14 +257,6 @@ export function patchReadme(destDir, projectName) {
261
257
  patchTextFile(destDir, "README.md", projectName);
262
258
  }
263
259
 
264
- export function patchChangelog(destDir, projectName) {
265
- patchTextFile(destDir, "CHANGELOG.md", projectName);
266
- }
267
-
268
- export function patchReleaseNotes(destDir, projectName) {
269
- patchTextFile(destDir, "RELEASE.md", projectName);
270
- }
271
-
272
260
  // ── Final output ────────────────────────────────────────────────────
273
261
 
274
262
  export function printNextSteps(projectName) {
@@ -327,15 +315,21 @@ export async function runCli(
327
315
  copyStarterTemplate(templateName, targetDir);
328
316
  patchPackageJson(targetDir, projectName);
329
317
  patchReadme(targetDir, projectName);
330
- patchChangelog(targetDir, projectName);
331
- patchReleaseNotes(targetDir, projectName);
332
318
  printNextSteps(projectName);
333
319
 
334
320
  return 0;
335
321
  }
336
322
 
337
323
  function isDirectExecution() {
338
- return Boolean(process.argv[1]) && resolve(process.argv[1]) === __filename;
324
+ if (!process.argv[1]) {
325
+ return false;
326
+ }
327
+
328
+ try {
329
+ return realpathSync(process.argv[1]) === realpathSync(__filename);
330
+ } catch {
331
+ return resolve(process.argv[1]) === __filename;
332
+ }
339
333
  }
340
334
 
341
335
  if (isDirectExecution()) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-koppajs",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Scaffold a new KoppaJS project in seconds.",
@@ -15,10 +15,10 @@
15
15
  "README.md",
16
16
  "LICENSE"
17
17
  ],
18
- "packageManager": "pnpm@10.12.1",
18
+ "packageManager": "pnpm@10.33.2",
19
19
  "engines": {
20
- "node": ">=20",
21
- "pnpm": ">=10"
20
+ "node": ">=22.12.0",
21
+ "pnpm": ">=10.24.0"
22
22
  },
23
23
  "scripts": {
24
24
  "check:meta": "node scripts/check-meta-layer.mjs",
@@ -29,12 +29,15 @@
29
29
  "test:watch": "node scripts/run-unit-tests.mjs --watch",
30
30
  "test:smoke": "node scripts/smoke-test.mjs",
31
31
  "test:template-build": "node scripts/template-build-test.mjs",
32
+ "test:package": "node scripts/test-package-smoke.mjs",
32
33
  "test": "npm run test:unit && npm run test:smoke",
33
34
  "pack:dry-run": "npm pack --dry-run",
34
- "check": "npm run check:meta && npm run lint && npm run format:check && npm run check:cli && npm test && npm run pack:dry-run",
35
- "release:check": "npm run check && npm run test:template-build",
35
+ "check": "pnpm run check:docs && npm run check:meta && npm run lint && npm run format:check && npm run check:cli && npm test && npm run pack:dry-run",
36
+ "validate": "pnpm run check && pnpm run test:template-build && pnpm run test:package",
37
+ "release:check": "pnpm run validate",
36
38
  "prepare": "husky",
37
- "clean": "node scripts/clean.mjs"
39
+ "clean": "node scripts/clean.mjs",
40
+ "check:docs": "node scripts/check-doc-contract.mjs"
38
41
  },
39
42
  "author": "Bastian Bensch",
40
43
  "license": "Apache-2.0",
@@ -1,93 +1,11 @@
1
- <a id="readme-top"></a>
1
+ # __PROJECT_NAME__
2
2
 
3
- <div align="center">
4
- <img src="https://public-assets-1b57ca06-687a-4142-a525-0635f7649a5c.s3.eu-central-1.amazonaws.com/koppajs/koppajs-logo-text-900x226.png" width="500" alt="KoppaJS Logo">
5
- </div>
6
-
7
- <br>
8
-
9
- <div align="center">
10
- <a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square" alt="License"></a>
11
- </div>
12
-
13
- <br>
14
-
15
- <div align="center">
16
- <h1 align="center">__PROJECT_NAME__</h1>
17
- <h3 align="center">KoppaJS starter project</h3>
18
- <p align="center">
19
- <i>Scaffolded from the current official KoppaJS starter baseline.</i>
20
- </p>
21
- </div>
22
-
23
- <br>
24
-
25
- <div align="center">
26
- <p align="center">
27
- <a href="https://github.com/koppajs/koppajs-documentation">Documentation</a>
28
- &middot;
29
- <a href="https://github.com/koppajs/koppajs-core">KoppaJS Core</a>
30
- &middot;
31
- <a href="https://github.com/koppajs/koppajs-vite-plugin">Vite Plugin</a>
32
- </p>
33
- </div>
34
-
35
- <br>
36
-
37
- <details>
38
- <summary>Table of Contents</summary>
39
- <ol>
40
- <li><a href="#what-is-this">What is this?</a></li>
41
- <li><a href="#requirements">Requirements</a></li>
42
- <li><a href="#getting-started">Getting Started</a></li>
43
- <li><a href="#quality-workflow">Quality Workflow</a></li>
44
- <li><a href="#release-workflow">Release Workflow</a></li>
45
- <li><a href="#project-structure">Project Structure</a></li>
46
- <li><a href="#meta-layer">Meta Layer</a></li>
47
- <li><a href="#community--contribution">Community & Contribution</a></li>
48
- <li><a href="#license">License</a></li>
49
- </ol>
50
- </details>
51
-
52
- ---
53
-
54
- ## What is this?
55
-
56
- This project was scaffolded from the current official minimal starter baseline
57
- for KoppaJS.
58
-
59
- It keeps the runtime intentionally small:
60
-
61
- - one HTML shell
62
- - one TypeScript bootstrap file
63
- - one root view
64
- - one stateful child component
65
-
66
- It also carries a small quality baseline so the starter stays runnable and trustworthy:
67
-
68
- - ESLint for source and tooling files
69
- - Prettier plus `.editorconfig` for supported text formats
70
- - Vitest for local unit and integration coverage
71
- - Playwright for a real-browser smoke test
72
- - Husky plus lint-staged for fast staged-file checks
73
- - Conventional Commits enforcement via `commitlint`
74
- - a tag-driven GitHub release baseline with `CHANGELOG.md` and `RELEASE.md`
75
-
76
- Use it as a starting point for new KoppaJS projects or as a reference for how components are registered, composed, and validated.
77
-
78
- > **Note:** This repository uses published npm packages, so it works as a standalone starter after `pnpm install`.
79
-
80
- ---
3
+ KoppaJS starter project scaffolded with `create-koppajs`.
81
4
 
82
5
  ## Requirements
83
6
 
84
- - Node.js 20.19+, 22.13+, or 24+
85
- - pnpm >= 10
86
-
87
- Node 23 is intentionally not treated as supported here because the current
88
- upstream frontend toolchain excludes it.
89
-
90
- ---
7
+ - Node.js >= 22.12.0
8
+ - pnpm >= 10.24.0
91
9
 
92
10
  ## Getting Started
93
11
 
@@ -96,146 +14,38 @@ pnpm install
96
14
  pnpm dev
97
15
  ```
98
16
 
99
- Install the Playwright browser once if you want to run the browser smoke test locally:
100
-
101
- ```bash
102
- pnpm exec playwright install chromium
103
- ```
104
-
105
- Useful commands:
17
+ ## Scripts
106
18
 
107
19
  ```bash
108
- pnpm lint
109
- pnpm format:check
110
- pnpm typecheck
111
- pnpm test:run
112
- pnpm test:coverage
113
20
  pnpm build
21
+ pnpm typecheck
114
22
  pnpm serve
115
- pnpm release:check
116
- ```
117
-
118
- Commit messages follow Conventional Commits, for example:
119
-
120
- ```text
121
- feat: add release workflow
122
- docs: update starter governance
123
- fix: align counter button labels
124
- ```
125
-
126
- ---
127
-
128
- ## Quality Workflow
129
-
130
- Fast local baseline:
131
-
132
- ```bash
133
- pnpm check
134
- ```
135
-
136
- Full validation, including Playwright:
137
-
138
- ```bash
139
- pnpm validate
140
- ```
141
-
142
- Standalone browser smoke test:
143
-
144
- ```bash
145
- pnpm test:e2e
146
23
  ```
147
24
 
148
- ---
149
-
150
- ## Release Workflow
151
-
152
- Tagged releases are documented in `CHANGELOG.md`.
153
- The maintainer procedure lives in `RELEASE.md`.
154
-
155
- Release tags must use the form `vX.Y.Z` and match `package.json`.
156
- The included automation creates GitHub Releases only. If your project later
157
- needs npm publishing or deployment-specific release steps, update `RELEASE.md`
158
- and `.github/workflows/release.yml` together.
159
-
160
- ---
161
-
162
25
  ## Project Structure
163
26
 
164
27
  ```text
165
28
  __PROJECT_NAME__/
166
- ├── .editorconfig
167
- ├── .github/
29
+ ├── .gitattributes
168
30
  ├── .gitignore
169
- ├── .husky/
170
31
  ├── .npmrc
171
- ├── .prettierignore
172
- ├── CHANGELOG.md
173
- ├── commitlint.config.mjs
174
- ├── AI_CONSTITUTION.md
175
- ├── ARCHITECTURE.md
176
- ├── CONTRIBUTING.md
177
- ├── DECISION_HIERARCHY.md
178
- ├── DEVELOPMENT_RULES.md
179
- ├── RELEASE.md
180
- ├── ROADMAP.md
181
- ├── TESTING_STRATEGY.md
182
- ├── eslint.config.mjs
32
+ ├── README.md
183
33
  ├── index.html
184
34
  ├── package.json
185
- ├── playwright.config.ts
186
- ├── pnpm-lock.yaml
187
- ├── prettier.config.mjs
188
35
  ├── tsconfig.json
189
36
  ├── vite.config.mjs
190
- ├── vitest.config.mjs
191
- ├── docs/
192
- │ ├── adr/
193
- │ ├── architecture/
194
- │ ├── meta/
195
- │ ├── quality/
196
- │ └── specs/
197
37
  ├── public/
198
- └── favicon.svg
199
- ├── src/
200
- │ ├── main.ts
201
- ├── style.css
202
- ├── app-view.kpa
203
- │ └── counter-component.kpa
204
- └── tests/
205
- ├── e2e/
206
- ├── integration/
207
- └── unit/
38
+ ├── favicon.png
39
+ │ └── koppajs-logo.png
40
+ └── src/
41
+ ├── app-view.kpa
42
+ ├── counter-component.kpa
43
+ ├── main.ts
44
+ └── style.css
208
45
  ```
209
46
 
210
- ---
211
-
212
- ## Meta Layer
213
-
214
- The repository includes an explicit meta layer so architecture, testing, and contributor rules evolve together with the codebase.
215
-
216
- Start here:
217
-
218
- - `DECISION_HIERARCHY.md`
219
- - `AI_CONSTITUTION.md`
220
- - `ARCHITECTURE.md`
221
- - `DEVELOPMENT_RULES.md`
222
- - `TESTING_STRATEGY.md`
223
- - `CHANGELOG.md`
224
- - `RELEASE.md`
225
- - `docs/quality/quality-gates.md`
226
- - `docs/adr/`
227
- - `docs/specs/`
228
-
229
- ---
230
-
231
- ## Community & Contribution
232
-
233
- Contribution workflow details live in `CONTRIBUTING.md`.
234
- Update this section with your own repository links once the project has a
235
- canonical home.
236
-
237
- ---
238
-
239
- ## License
47
+ ## Useful Links
240
48
 
241
- Apache License 2.0 — © 2026 KoppaJS, Bastian Bensch
49
+ - [KoppaJS documentation](https://github.com/koppajs/koppajs-documentation)
50
+ - [KoppaJS core](https://github.com/koppajs/koppajs-core)
51
+ - [KoppaJS Vite plugin](https://github.com/koppajs/koppajs-vite-plugin)
@@ -1,9 +1,6 @@
1
1
  node_modules
2
- coverage
3
2
  dist
4
3
  .ai
5
- playwright-report
6
- test-results
7
4
  pnpm-debug.log*
8
5
  *.log
9
6
  *.local
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>KoppaJS Minimal Starter</title>
7
- <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
7
+ <link rel="icon" type="image/png" href="/favicon.png" />
8
8
  <link rel="stylesheet" href="/src/style.css" />
9
9
  </head>
10
10
  <body>