christian a7f74eaf1c feat: Produktpflege mit Bildupload + Beschreibung + Aktiv-Status
Backend (routes/artikel.js):
- 3 neue Spalten via Auto-Migration (bootstrap.js):
  - bild_url VARCHAR(500)
  - beschreibung TEXT
  - aktiv TINYINT(1) DEFAULT 1
- POST/PUT/DELETE Routes jetzt unter requireRole(admin)
- GET unterstuetzt ?all=1 fuer inaktive Produkte (Produktpflege-Ansicht)
- POST /artikel/:id/bild und DELETE /artikel/:id/bild fuer Bildverwaltung
- DELETE faengt FK-Constraint ab (Hinweis: stattdessen inaktiv setzen)

Frontend:
- Neue Komponente Produkte.jsx als Kartenraster
  - Bildupload, Beschreibung, Pfandbetrag, Aktiv-Toggle, Edit/Loeschen
  - Inaktive werden ausgegraut dargestellt
- TopNav: neuer Admin-Menupunkt Produkte (FaTags Icon)
- Dashboard.jsx: Route eingebaut
- client.js: api.getArtikel(true) fuer inaktive, uploadArtikelBild, deleteArtikelBild
2026-06-02 09:44:14 +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%