Entwicklerportal
Templates

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"
OptionBedeutung
--kinds a,bWebsite-Arten: org, person, portal (Standard: org)
--display-name "…"Anzeigename in der Galerie
--description "…"Ein-Satz-Beschreibung
--license MIT|UNLICENSEDSoftware-Lizenz des Pakets (MIT legt eine LICENSE an)
--catalog-key kLizenz-Katalogeintrag für ein buchbares Template, z. B. template.mein-template
--edition ekleinste Edition mit diesem Template, z. B. enterprise (nur mit --catalog-key)
--dry-runnur anzeigen, nichts schreiben

Der Generator überschreibt nie etwas und legt an:

  • packages/template-mein-template/ – package.json, Manifest, Render-Funktion, Tests, README, CHANGELOG, .gitleaks.toml und .github/workflows/ci.yml (Gitleaks + Build/Test)
  • die Abhängigkeit in apps/web und apps/api sowie 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 verify

Eigenständig (ohne Zugriff auf die Plattform)

Ein Template baut nur gegen @patriotconnect/template-sdk. Für ein eigenes Repo genügt:

.npmrc
@patriotconnect:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}
package.json (Auszug)
{
  "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
SubpathInhaltWer lädt es
./manifesttemplateManifest (ohne React)API: Katalog, Prüfung, Galerie
./frontendwebTemplate (Manifest + Darstellung)Web-App: Template-Registry
./sharedManifest, Einstellungs-SchemaTests, andere Pakete

Die Kennung in package.json (patriotconnect.templateId) und im Manifest müssen übereinstimmen.

On this page