Schnellstart
Ein Template-Paket mit dem Generator oder als eigenständiges Repo anlegen.
Mit dem Generator (im Plattform-Monorepo)
pnpm new:template mein-template --kinds org,portal --description "Kurzbeschreibung für die Galerie"| Option | Bedeutung |
|---|---|
--kinds a,b | Website-Arten: org, person, portal (Standard: org) |
--display-name "…" | Anzeigename in der Galerie |
--description "…" | Ein-Satz-Beschreibung |
--license MIT|UNLICENSED | Software-Lizenz des Pakets (MIT legt eine LICENSE an) |
--catalog-key k | Lizenz-Katalogeintrag für ein buchbares Template, z. B. template.mein-template |
--edition e | kleinste Edition mit diesem Template, z. B. enterprise (nur mit --catalog-key) |
--dry-run | nur anzeigen, nichts schreiben |
Der Generator überschreibt nie etwas und legt an:
packages/template-mein-template/–package.json, Manifest, Render-Funktion, Tests, README, CHANGELOG,.gitleaks.tomlund.github/workflows/ci.yml(Gitleaks + Build/Test)- die Abhängigkeit in
apps/webundapps/apisowie die generierten Template-Listen - auf Wunsch die Einträge im Projekt-Brain (Paket-Notiz, Inventar, Board)
pnpm install
pnpm --filter @patriotconnect/template-mein-template build
pnpm --filter @patriotconnect/template-mein-template test
pnpm verifyEigenständig (ohne Zugriff auf die Plattform)
Ein Template baut nur gegen @patriotconnect/template-sdk. Für ein eigenes Repo genügt:
@patriotconnect:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}{
"name": "@patriotconnect/template-mein-template",
"patriotconnect": { "kind": "template", "templateId": "mein-template" },
"dependencies": {
"@patriotconnect/template-sdk": "^0.1.0",
"zod": "^3.25.76"
},
"peerDependencies": { "react": "^19.0.0", "react-dom": "^19.0.0" }
}Das Token braucht nur read:packages und gehört in die Umgebung (z. B. Secret-Manager oder CI-Secret), nie in
das Repo. Im Monorepo steht stattdessen workspace:*; der CI-Workflow eines eigenständigen Repos schreibt das
Protokoll vor dem Install automatisch auf eine Registry-Version um.
Kopieren Sie für den Start template-beispiel oder das Generator-Gerüst – nicht ein eingebautes Template der
Plattform. Eingebaute Templates nutzen interne Komponenten, die nicht Teil des Vertrags sind.
Paketstruktur und Exporte
src/
shared/manifest.ts Manifest + Einstellungs-Schema (framework-frei)
shared/index.ts
manifest.ts export { … as templateManifest }
frontend/index.ts export const webTemplate = defineWebTemplate(manifest, Render-Funktion)
frontend/<name>-template.tsx
frontend/__tests__/<name>-template.test.tsx
.gitleaks.toml
.github/workflows/ci.yml| Subpath | Inhalt | Wer lädt es |
|---|---|---|
./manifest | templateManifest (ohne React) | API: Katalog, Prüfung, Galerie |
./frontend | webTemplate (Manifest + Darstellung) | Web-App: Template-Registry |
./shared | Manifest, Einstellungs-Schema | Tests, andere Pakete |
Die Kennung in package.json (patriotconnect.templateId) und im Manifest müssen übereinstimmen.