- Datenmodell: Tenant.tier (Default PROFI), lotseChatSeats, lotseChatHardLimit;
Tabelle lotse_chat_seats (RLS, TENANT_MODELS, pii-fields), Index für die
Monatszählung der Chat-Nachrichten (Migration 20260921100000_pakete)
- src/lib/plans.ts: Stufenregeln, 150 Chats je Platz, Mehrverbrauch in 100er-Paketen
- src/server/plan.ts: effektive Freischaltung = Stufe UND TenantModule, genutzt von
requireModule, assertModuleEnabled, API, Sync (Offline-Op → rejected mit Klartext),
Navigation, isLotseEnabled und planningAccess (Planung nur in Profi)
- Lotse-Chat: Platzprüfung (no_seat), Testphase ohne Platz, Kontingent mit
hartem Limit (quota_exhausted); Platzvergabe durch den Mandanten-Admin
- Betreiber: Stufe/Plätze/hartes Limit im Mandantendetail mit Bestätigung
und Plattform-Audit, Verbrauch laufender Monat/Vormonat, Stufe als Badge
- Demo-Seed: demo = Profi mit 3 Plätzen, demo2 = Basis
- Tests: test-pakete-{rules,gates,seats}
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Craftvia
Handwerk. Digital auf Kurs. — mandantenfähige Einsatz-PWA für Handwerks- und Montagebetriebe.
- Spezifikation: docs/craftvia/SPEC-CRAFTVIA.md
- Architektur/Datenmodell: docs/craftvia/ARCHITEKTUR.md (folgt)
- Projektregeln für Entwickler und Agenten: AGENTS.md
- Branding: docs/craftvia/BRANDBOOK.md, docs/craftvia/BRANDING.md
- Migrationen & RLS: docs/craftvia/MIGRATIONS.md
Stand
Fundament aus Certvia übernommen (Auth/Identity/MFA/WebAuthn, Mandanten, RBAC, Audit-Log, Mail, Objektspeicher, Backup/DSGVO, Plattform-Administration, i18n). Die ISMS-Fachlichkeit ist entfernt; die Craftvia-Fachmodule haben Routen-Platzhalter, Modul-Gates, Navigation und Rollen/Permissions als Andockpunkte.
Schnellstart (lokal)
Voraussetzungen: Node 22, Docker.
cp .env.example .env # AUTH_SECRET/PASSWORD_PEPPER erzeugen (siehe Kommentare)
npm ci
docker compose up -d postgres redis garage
GARAGE_ADMIN_URL=http://localhost:3903 npx tsx scripts/garage-provision.ts
npx prisma migrate deploy
npx prisma db seed
npx tsx scripts/geocode-backfill.ts --tenant=demo # Koordinaten für Karte/Empfehlungen (1 Anfrage/s)
npx tsx scripts/planning-demo.ts # Beispielbelegung der Plantafel (heute + 4 Werktage)
npm run dev # http://localhost:3000
Login: admin@demo.example / Demo1234! (weitere Demo-Nutzer siehe AGENTS.md).
Befehle
| Befehl | Zweck |
|---|---|
npm run dev |
Entwicklungsserver |
npm run lint / npx tsc --noEmit |
Lint / Typprüfung |
npm run build |
Produktions-Build (inkl. Modul-Guard-Check) |
npm run test |
alle scripts/test-*.ts gegen die lokale Infra |
npm run gate |
generate + tsc + lint + build + test |
npm run worker:mail / worker:backup |
Hintergrund-Worker |
npm run brand:icons |
Favicon/PWA-Icons aus dem Signet erzeugen |
Betrieb
Container-Build über das Multi-Stage-Dockerfile (Targets runner, migrate, garage, worker),
Deployment mit docker-compose.coolify.yml bzw. docker-compose.coolify.prebuilt.yml.
Hinweise: docs/craftvia/DEPLOY.md (Betrieb, Secrets, Worker, RLS, Backup),
docs/craftvia/API.md (/api/v1). Übernommene Certvia-Dokumente liegen in
docs/_certvia-archiv/.