Commit Graph
15 Commits
Author SHA1 Message Date
Fidelis HuberandClaude Sonnet 5.5 0f1fb5a46f Kabelliste: Profibus DP, CAN-Bus, LiYCY und LiYCY paarig (Meinhart) ergänzt
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 9s
Build and Deploy / deploy (push) Successful in 1s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 19:53:02 +02:00
Fidelis HuberandClaude Sonnet 5.5 9645b6edea Kabelliste: Netzwerkkabel (Meinhart LAN) und Buskabel (J-Y(ST)Y, KNX) ergänzt
Build and Deploy / version (push) Successful in 2s
Build and Deploy / build (push) Successful in 8s
Build and Deploy / deploy (push) Successful in 1s
Kabelrechner-Auswahl nutzt jetzt Name|kg/m, da gleiche kg/m bei verschiedenen Typen vorkommen.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 19:49:38 +02:00
Fidelis HuberandClaude Sonnet 5.5 564125a282 Einheit kg im Material-Auswahlmenü ergänzt
Build and Deploy / version (push) Successful in 2s
Build and Deploy / build (push) Successful in 10s
Build and Deploy / deploy (push) Successful in 2s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-09 19:39:48 +02:00
Fidelis HuberandClaude Sonnet 5 3a82a22135 Microsoft-Login auf Redirect statt Popup umgestellt (Handy/Tablet-Fix)
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 9s
Build and Deploy / deploy (push) Successful in 1s
Der Popup-basierte Login/Logout und die stille Token-Erneuerung per
Hintergrund-iFrame sind in installierten PWAs auf iOS/Android unzuverlässig -
Popups werden blockiert oder verlieren die Verbindung zum öffnenden Fenster,
und iOS' ITP blockiert oft den iFrame-Speicherzugriff für die stille
Erneuerung. Das zwang Monteure am Handy/Tablet zu ständigen Neuanmeldungen,
während es am PC funktionierte. Login/Logout laufen jetzt über einen vollen
Redirect, scheiternde stille Token-Erneuerung fällt sauber auf einen Redirect
zurück statt mit einem Fehler abzubrechen, und storeAuthStateInCookie ist
aktiviert (Microsofts eigene Empfehlung für Safari/iOS).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 23:02:09 +02:00
Fidelis HuberandClaude Sonnet 5 61a39682de Logo auf hellem Hintergrund + Export als echtes VenDoc-Aufmaßblatt (xlsm)
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 21s
Build and Deploy / deploy (push) Successful in 2s
Login-Logo war im hellen Modus weiß-auf-weiß unsichtbar (Karte wechselt mit
dem Theme, Logo war hart auf die dunkle Variante codiert) - zeigt jetzt je
nach Theme die passende Logo-Tinte, gleiches Problem beim "Willkommen"-Titel
behoben. PDF-Export verlor den schwarzen Banner beim Drucken, da Browser
Hintergrundfarben standardmäßig nicht drucken - jetzt über
print-color-adjust erzwungen.

Export ist jetzt eine echte .xlsm-Datei statt CSV, mit Spaltenlayout 1:1 aus
einem echten VenDoc-Aufmaßblatt-Export des Nutzers übernommen (Blatt
"Aufmaß", Position/Aufmaß/EH/Positionstext in den exakt gleichen Spalten).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 08:45:31 +02:00
Fidelis HuberandClaude Sonnet 5 18a3a636dd Monteur-Dropdown + VenDoc-Spaltennamen im CSV-Export angepasst
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 8s
Build and Deploy / deploy (push) Successful in 2s
Monteur ist jetzt ein Dropdown (Michael/Daniel/Dietmar/Fidelis) mit freiem
Textfeld für "Andere". CSV-Export nutzt jetzt VenDocs eigene Spaltennamen
(Position/EH/Positionstext/Aufmaß), ermittelt aus einem echten VenDoc-
Aufmaßblatt-Export des Nutzers; Art.-Nr. wird wie dort im Positionstext
eingebettet, da VenDoc keine eigene Artikelnummer-Spalte führt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 08:29:44 +02:00
Fidelis Huber 36d5246187 Löschfunktion für abgeschlossene Projekte + VenDoc-CSV-Export
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 14s
Build and Deploy / deploy (push) Successful in 2s
Abgeschlossene Materialscheine können jetzt gelöscht werden (serverseitig
auf Status=Abgeschlossen beschränkt, mit Bestätigungsdialog). Neues Feld
Auftrags-Nr. am Projekt für die Zuordnung zum VenDoc-Auftrag. Neuer CSV-Export
(Semikolon, Komma-Dezimal, UTF-8 BOM) als Positionstabelle für den Import ins
ERP.
2026-09-11 08:08:19 +02:00
Fidelis HuberandClaude Sonnet 5 fc1e4d0e25 Use the real BergVOLT logo instead of a CSS-recreated text wordmark
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 9s
Build and Deploy / deploy (push) Successful in 2s
Echtes Firmenlogo (2 WhatsApp-Dateien vom Nutzer) per Farbschlüssel-
Freistellung (PowerShell/System.Drawing) in echte transparente PNGs
umgewandelt und zugeschnitten: bergvolt-logo-dark.png (weiß/cyan, für
dunklen Hintergrund) und bergvolt-logo-light.png (schwarz/cyan, für hellen
Hintergrund - aktuell noch ungenutzt, da Header/Login/Druckbanner bewusst
immer dunkel bleiben, aber für später mit im Repo).

Ersetzt die nachgebaute Text-Version in Header, Login-Screen und
Druck-Banner durch <img> mit dem echten Logo.

Temporärer test-build-only.yml Workflow zur Verifikation ohne Registry-Push.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 10:16:58 +02:00
Fidelis HuberandClaude Sonnet 5 f8374c3324 Fix invisible text in light mode (hardcoded white on now-white backgrounds)
.proj-name, .detail-title und die mobile Karten-Bezeichnung (.td-bez) hatten
color:#fff fix codiert statt var(--text) - auf dunklem Grund unsichtbar
unproblematisch, im neuen Hell-Modus aber weiße Schrift auf weißer Karte.
Zusätzlich die native <select>-Options-Liste (label.field select option) auf
Hell umgestellt, war sonst dunkler Hintergrund mit jetzt ebenfalls dunklem
(unlesbarem) Text.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-22 17:38:36 +02:00
Fidelis HuberandClaude Sonnet 5 c1bb51b480 Add light/dark theme with system-preference detection
Build and Deploy / version (push) Successful in 2s
Build and Deploy / build (push) Successful in 8s
Build and Deploy / deploy (push) Successful in 1s
Neues client/src/lib/theme.ts verwaltet die Wahl (system/light/dark) in
localStorage. Umschalter-Button im Header (zyklisch: System -> Hell -> Dunkel),
Icon zeigt den aktuellen Modus. CSS-Variablen (--bg/--card/--text/--muted/
--bor/--cyan) bekommen einen Hell-Override über [data-theme="light"] bzw.
@media(prefers-color-scheme:light) ohne explizites [data-theme="dark"] - so
gewinnt eine manuelle Wahl in beide Richtungen gegen die Systemeinstellung.
Header/Tabs/Login bleiben bewusst immer dunkel-navy (Markenidentität), nur
der Content-Bereich wechselt. Inline-Script in index.html verhindert ein
kurzes Aufblitzen des falschen Farbschemas vor dem ersten Paint.

Temporärer test-build-only.yml Workflow zur Verifikation ohne Registry-Push.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-22 17:33:15 +02:00
Fidelis HuberandClaude Sonnet 5 cda971be5d Persist login across app restarts (localStorage instead of sessionStorage)
Build and Deploy / version (push) Successful in 2s
Build and Deploy / build (push) Successful in 14s
Build and Deploy / deploy (push) Successful in 2s
sessionStorage wird geleert, sobald die (installierte) PWA am Handy
geschlossen wird - deshalb war nach jedem Neustart ein erneuter Login nötig.
Sowohl MSAL-Cache als auch das lokale Login-Token liegen jetzt in
localStorage, MSAL erneuert den Token beim Start still im Hintergrund
(acquireTokenSilent), das lokale Token ist 30 Tage gültig.

Temporärer test-build-only.yml Workflow zur Verifikation ohne Registry-Push.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 19:42:55 +02:00
Fidelis HuberandClaude Sonnet 5 a910d1e399 Replace horizontal-scroll table with a stacked card layout on mobile
Build and Deploy / version (push) Successful in 2s
Build and Deploy / build (push) Successful in 11s
Build and Deploy / deploy (push) Successful in 2s
Materialliste war auf schmalen Screens nur per Seitwärts-Scrollen lesbar.
Ab 680px Breite wird jede Zeile jetzt als Karte dargestellt (CSS Grid mit
benannten Areas, Bezeichnung prominent oben, Menge/Einheit/Art.-Nr./Notiz
darunter beschriftet, Position + Löschen-Button in der Kopfzeile der Karte).
Die Grid-Areas ordnen die Felder unabhängig von der DOM-Reihenfolge um, die
Desktop-Tabelle bleibt unverändert in der ursprünglichen Spaltenreihenfolge.

Temporärer test-build-only.yml Workflow zur Verifikation ohne Registry-Push.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 19:38:07 +02:00
Fidelis HuberandClaude Sonnet 5 ed7b3d0ea4 Redesign print/PDF export to match official BergVOLT invoice branding
Build and Deploy / version (push) Successful in 2s
Build and Deploy / build (push) Successful in 7s
Build and Deploy / deploy (push) Successful in 1s
Neuer Druck-Header mit dem Firmenlogo und der cyanen Diagonalfläche wie auf
der Rechnung, Adress-/Infoblock im gleichen Tabellenstil, Materialtabelle mit
durchgezogenen Rahmenlinien statt Karten-Optik, Firmenfußzeile (Adresse,
Bank, Firmenbuch, Kontakt) am Ende. Die interaktiven Karten (Baustelle-Formular,
Kabelrechner, Manuell-Eintrag) bleiben beim Drucken ausgeblendet, nur die
neuen Print-only-Blöcke werden sichtbar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 19:23:14 +02:00
Fidelis HuberandClaude Sonnet 5 97c4aa1c68 Add local username/password login as fallback when Microsoft login isn't available
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 21s
Build and Deploy / deploy (push) Successful in 1s
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>
2026-08-21 17:56:40 +02:00
Fidelis HuberandClaude Sonnet 5 13cef3c96d Initial scaffold: React/Vite/TS PWA + Express/Prisma/Postgres backend
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Failing after 1s
Build and Deploy / deploy (push) Skipped
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>
2026-08-21 17:24:38 +02:00