christian 51aa85df6f feat(frontend): Tailwind UI + Whitelabel + Multi-Tenant Components
Tech:
- Tailwind 3.4 + PostCSS + Autoprefixer
- Inter via rsms.me, Slate + Indigo (brand-* Farbpalette)
- Komponenten-Klassen .btn-{primary|secondary|danger|ghost}, .input, .label, .card, .badge-*

Visuelles Refresh:
- Logo entfernt - Wortmarke Pfandsystem mit Mono-Box
- Login: zentriertes Card-Layout mit Tenant-Slug-Toggle
- TopNav: cleanes Header mit Tabs + User-Menue, Demo-Badge
- Konsistente Card/Table/Badge-Patterns ueber alle Views
- Mobile-First (Tabellen scrollen, Filter wrap)

Komponenten neu/umgebaut:
- Auth/Login.jsx        - Tenant-Slug aus URL-Param ?tenant=...
- Auth/PasswordChange.jsx
- Dashboard/Dashboard.jsx
- Dashboard/TopNav.jsx  - inkl. Mobile-Hamburger
- Dashboard/Account.jsx (neu)
- Dashboard/AdminDashboard.jsx - Soll-Ist mit CSV-Export
- Dashboard/VorgangsListe.jsx
- Dashboard/BildModal.jsx
- Eingabe/VorgangForm.jsx - Kunden-Info-Popup mit Hinweis+Bildern+Maps
- KundenVerwaltung.jsx - inkl. Anlieferungshinweis, Lieferzeit, Bilder-Modal
- MitarbeiterVerwaltung.jsx - Aktiv-Toggle, Fahrer-Rolle
- Geraete.jsx (neu) - CRUD mit Status-Badges, Filter
- TourPlanung.jsx (neu) - Sortiert nach Lieferzeit, Navi-Button, Done-Persistenz
- SuperAdmin.jsx (neu) - Tenant-Liste + Demo-Anlage-Modal + Verlaengern

API Client:
- relative URL /api (Traefik-Proxy)
- Tenant-Slug im Login
- Endpoints fuer tenants, geraete, kunden-bilder

Sonstiges:
- nginx.conf: SSL raus (Traefik macht TLS), Host-Lock raus, Gzip, immutable Cache
- docker-compose: Frontend baut via Dockerfile (multi-stage)
- Manifest/Theme: #4338ca (Indigo)
- Aufgeraeumt: alte Supabase-Reste, Logout-Komponente (jetzt im Menu),
               nicht mehr noetige Deploy-Skripte
2026-05-26 13:18:13 +00:00

Pfandsystem Demo (Whitelabel)

Whitelabel-Demo des Pfandsystems mit Multi-Tenant-Verwaltung für 30-Tage Demo-Accounts. Basis: borbaecker-pfand.dockly.de — neu aufgesetzt mit Tailwind-UI, ohne Branding.

  • Domain: pfandsystem.dockly.de
  • Server: 51.15.249.253 (Scaleway, borbaecker-pfand.dockly.de Instanz)
  • Pfad auf Server: /root/pfandsystem-demo
  • Gitea: ssh://git@49.13.154.75:2244/christian/pfandsystem-demo.git

Architektur

  • Frontend: React 18 + Vite + Tailwind, PWA-fähig
  • Backend: Node.js (Express) + MySQL 8 + JWT
  • Reverse-Proxy: Traefik v3 (geteilt mit borbaecker + pfandsystem-dev)
  • Container: pfandsystem-demo-{mysql,phpmyadmin,backend,frontend}
  • Ports (alle 127.0.0.1): MySQL 3308, phpMyAdmin 8083, Backend 3003

Multi-Tenant-Modell

Eine MySQL-DB, jede Datentabelle hat eine tenant_id. Mitarbeiter sind einem Tenant zugeordnet — Ausnahme: rolle='superadmin' mit tenant_id=NULL, darf neue Demo-Tenants anlegen.

Demo-Tenants haben typ='demo' + demo_expires_at (default +30 Tage). Nach Ablauf wird status='abgelaufen' gesetzt (Cron).

Erweiterungen (Iteration 1)

  1. Kundenbilder & Anlieferungshinweisekunden_bilder-Tabelle + kunden.anlieferungshinweis
  2. Seriennummern-Verwaltunggeraete-Tabelle (Typ, SN, Status, Kunde-Zuordnung)
  3. Tourenplanung Stufe 1 — Navi-Button (Maps-Link), kunden.lieferzeit_bis

BBN-Schnittstelle vorerst nicht enthalten (klärungsbedürftig).

Deployment

ssh -i ~/.ssh/id_rsa root@51.15.249.253
cd /root/pfandsystem-demo
cp .env.example .env  # Werte setzen!
docker-compose up -d --build
# Traefik in das Netzwerk joinen (einmalig):
docker network connect pfandsystem-demo_pfandsystem-demo-net pfandsystem-traefik
Description
Pfandsystem Whitelabel Demo (Multi-Tenant, Tailwind UI)
Readme 440 KiB
Languages
JavaScript 95.7%
Shell 2.2%
CSS 1.2%
Dockerfile 0.5%
HTML 0.4%