Files
craftvia/AGENTS.md
T
msolarczekandClaude Opus 5 1701db0a62 Fundament: Doku, Testanpassungen, Restbereinigung
- AGENTS.md und README.md auf Craftvia umgeschrieben (Regeln, Andockpunkte,
  Stack mit Garage, tsx-Tests, Gate, Demo-Logins)
- ISMS-Dokumente entfernt (SPEC, Prototypen, Lane-Prompts, Übergaben, Konzepte
  Incidents/Framework); Fundament-Doku (Deploy, Sicherheit, Backup, Identity) bleibt
- Fundament-Tests an Craftvia-Rollen/Branding angepasst, Resttreffer
  certvia/isms in Skripten und Kommentaren bereinigt

Gate: prisma generate, migrate status, tsc, lint, build, 22/22 Testskripte grün.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 11:44:58 +02:00

5.1 KiB

This is NOT the Next.js you know

This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in node_modules/next/dist/docs/ before writing any code. Heed deprecation notices.

Craftvia — Projektregeln

Mandantenfähige Einsatz-PWA für Handwerks- und Montagebetriebe: Kunden, Objekte, Teams, Aufträge (inkl. PDF-Import), mobile Einsatzbearbeitung, Berichte, Notdienst, Dokumente, KI-Assistent „Lotse".

Maßgebliche Spezifikation: docs/craftvia/SPEC-CRAFTVIA.md (Rollen, Module, Abläufe, Akzeptanzkriterien) und docs/craftvia/ARCHITEKTUR.md (Datenmodell, Schnitte; wird separat geliefert). Marke: docs/craftvia/BRANDBOOK.md, Umsetzung im Code: docs/craftvia/BRANDING.md.

Eiserne Regeln

  1. Mandanten-Isolation: Kein DB-Zugriff an Prisma vorbei, kein Query ohne Tenant-Kontext. Fachliche Tabellen tragen tenant_id; Zugriff nur über dbForTenant(tenantId) (src/server/db.ts), zusätzlich Postgres RLS. Neue Tenant-Tabelle ⇒ SELECT enable_tenant_rls('<tabelle>'); in der Migration und Eintrag in beiden TENANT_MODELS-Listen (src/server/db.ts, src/server/backup/topology.ts) — siehe docs/craftvia/MIGRATIONS.md.
  2. RBAC serverseitig: Jede Mutation/Query prüft Permissions am Server (customer:write, work_order:assign, …; Katalog in src/server/rbac.ts). UI-Ausblenden ist nur Komfort, nie Sicherheit.
  3. Modul-Gating: Routen eines Moduls haben ein layout.tsx mit await requireModule("<moduleKey>"); Server-Actions liegen in src/server/actions/<moduleKey>/*.ts und laufen über moduleGuard("<moduleKey>") + await guard(...). scripts/check-module-guards.ts erzwingt das (prebuild).
  4. Audit-Log: Jede schreibende Aktion erzeugt einen AuditLog-Eintrag (before/after, writeAuditLog in src/server/audit.ts).
  5. i18n: Keine hartkodierten UI-Texte — alle Strings über den Message-Katalog (de default, en gepflegt). Ein File je Namespace: messages/<locale>/<namespace>.json.
  6. DSGVO: Felder, die Personen referenzieren (User.id), in src/server/dsgvo/pii-fields.ts eintragen.

Andockpunkte für Fachmodule

Was Wo
Modul-Keys src/lib/modules.ts (customers, sites, teams, work_orders, imports, field, reports, emergency, documents, notifications, lotse)
Sidebar (Backoffice) src/lib/nav.ts (Modul + Permission-Filter)
Routen-Platzhalter src/app/(app)/<route>/{layout,page}.tsx — Lane ersetzt page.tsx
Server-Actions src/server/actions/<moduleKey>/*.ts
Rollen/Permissions src/server/rbac.ts (danach scripts/sync-role-permissions.ts)
Texte messages/de/<namespace>.json + messages/en/<namespace>.json
Benachrichtigungen notifyUser() in src/server/mail/notifications.ts
Dateien src/server/storage/* (Keys mit Präfix <tenantId>/), Download /files/<key>
KI src/server/ai/client.ts
Provisionierung neuer Mandanten src/server/provision.ts

Stack & Konventionen

  • Next.js 16 (App Router, src/proxy.ts statt Middleware) + TypeScript, Tailwind CSS 4, shadcn/ui (Base UI), lucide-react, next-intl.
  • Prisma 7 (prisma.config.ts, Adapter @prisma/adapter-pg) + PostgreSQL 16 (pgvector), BullMQ + Redis (Mail-/Backup-Worker), Garage (S3-kompatibel) als Objektspeicher, Auth.js v5 (Credentials, Argon2id + Pepper, TOTP/WebAuthn, getrennte Plattform-Auth).
  • Tests: tsx-Skripte scripts/test-*.ts gegen die lokale Infra; Runner npm run test.
  • Qualitäts-Gate vor jedem Commit: npm run gate (= prisma generate && tsc --noEmit && lint && build && test).
  • Sprache: UI und Fachbegriffe Deutsch; Code (Bezeichner) Englisch, Kommentare Deutsch oder Englisch.

Rollen (Spec §4)

tenant-admin (Mandantenadministrator), backoffice, team-lead (Teamleiter), technician (Monteur). Plattform-Administratoren sind ein getrennter Store (/platform/login) ohne Zugriff auf Mandanten-Fachdaten. Rechte liegen im JWT und wirken für Lesepfade nach erneutem Login; Mutationen prüfen autoritativ gegen die DB (moduleGuard).

Entwicklung

docker compose up -d postgres redis garage          # Infrastruktur (+ --profile dev für mailhog)
GARAGE_ADMIN_URL=http://localhost:3903 npx tsx scripts/garage-provision.ts   # Bucket/Key (einmalig)
npx prisma migrate deploy && npx prisma db seed     # Schema + Demo-Daten
npm run dev                                         # App auf :3000
npm run gate                                        # vollständiges Qualitäts-Gate

Demo-Logins (Passwort Demo1234! bzw. SEED_PASSWORD): admin@demo.example, backoffice@demo.example, teamleiter@demo.example, monteur@demo.example (Mandant „Musterbau Haustechnik GmbH"), admin2@demo.example (demo2), multi@demo.example (beide Mandanten), Plattform: platform@demo.example.