---
name: project-run-commands
description: Lokale Start- und Build-Befehle für plato-customer (BE + FE) nach BFF-Umbau am 2026-05-22.
metadata: 
  node_type: memory
  type: project
  originSessionId: 4657cfc7-6fae-499b-a8f3-9118720952d7
---

**BE starten (Port 3000, serviert FE-Statics aus `dist/apps/plato-customer-fe`):**

```bash
OIDC_CLIENT_SECRET='62glD9SMpaa8JAtQqb4055aYGV6KQStE5okhe9lAeDdtah6BcBIDE479mBCucxUW' SESSION_SECRET='dev-secret-local-only' npx nx serve plato-customer-be
```

Bequemer: `./scripts/dev-be.sh` (lokales, gitignoriertes Skript mit beiden Secrets + `nx serve`).

**FE neu bauen (nach jeder FE-Änderung notwendig, weil kein Vite-Dev-Server mehr läuft):**

```bash
npx nx build plato-customer-fe
```

**Why:** Nach BFF-Umbau läuft kein Vite-Dev-Server mehr (kein HMR). BE serviert die gebauten FE-Statics. Marcus hat das explizit so akzeptiert — "ich muss dann lokal jede Änderung mit build publizieren". OIDC-Client ist confidential → `OIDC_CLIENT_SECRET` ist zwingend erforderlich, sonst crasht BE beim Boot mit klarer Meldung. `SESSION_SECRET` ist seit dem Session-Store-Umbau EBENFALLS Pflicht (`main.ts:38` wirft hart, kein Default mehr) — ohne crasht der Boot noch vor dem OIDC-Check.

**How to apply:** Standard-Workflow nach jeder Code-Änderung am FE: build → Browser neu laden. BE läuft per nx-Watch und startet sich bei BE-Änderungen selbst neu (außer Port hängt — dann `lsof -ti:3000 | xargs kill`). Browser-Einstiegspunkt: `http://localhost:3000`. Siehe [[project-idp-witglobal]] für die OIDC-Architektur und [[project-cleanup-timeline]] für den Gesamtstand.
