Gleiche Haertung wie im healthjournal-Stack: DATABASE_URL zeigt auf den
expliziten Netz-Alias materialschein-db statt auf den container_name.
Reine DNS-Aenderung, Datenverzeichnis und Env bleiben unangetastet.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRprKS68jGmJCSZURn99Y
Der Service-Name "db" wurde als DNS-Alias im geteilten dockernetwork
registriert und hat dort die Aufloesung von Host=db fuer fremde Stacks
gekapert (healthjournal-api bekam 28P01 gegen den falschen Postgres).
db haengt jetzt nur noch im neuen internen Netz, web in beiden.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRprKS68jGmJCSZURn99Y
Neues "users"-Table (bcrypt-Hash, nie Klartext), POST /api/auth/login gibt ein
selbst-signiertes JWT (HS256) aus. requireAuth unterscheidet MSAL- (RS256) und
lokale Tokens (HS256) anhand des alg-Headers. Server legt beim Start optional
ein erstes lokales Konto an, wenn SEED_ADMIN_USERNAME/SEED_ADMIN_PASSWORD als
Stack-Env gesetzt sind (idempotent, Klartext-Passwort landet nie im Repo).
Frontend: Login-Screen hat jetzt einen Alternativ-Link zu Benutzername/Passwort,
App.tsx kombiniert MSAL- und lokalen Auth-Status.
Temporärer test-build-only.yml Workflow zur Docker-Build-Verifikation ohne
Registry-Push (wird nach dem Test wieder entfernt).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Materialschein & Kabelrechner für BergVOLT Elektrotechnik, portiert von der
vorherigen Single-File-HTML-Version. Microsoft-Entra-ID-Login (MSAL), Projekt-
Dashboard statt einer Datei pro Kunde, Retour-Buchen-Zusammenführung, 111
Kabeltypen aus den offiziellen Meinhart-Datenblättern. gitops/ nach
PROX/deploy-standard: git-backed Portainer-Stack, versionierte Docker-Images,
CI-Commit-back auf gitops/stack.yml.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>