Macht die App-Nodes zustandslos (horizontal skalierbar): Hintergrund-PDFs
und Schriften liegen nicht mehr lokal, sondern im S3-kompatiblen Object
Storage (Flysystem + async-aws). In der DB stehen Storage-Keys.
- flysystem-bundle + async-aws (Storage "card_assets"), env-getrieben
(S3_ENDPOINT/REGION/BUCKET/KEY/SECRET/PATH_STYLE) → lokal MinIO, prod Hetzner OS
- CardAssetUploadController: Upload/Read/Delete über Storage; GET streamt PDF
- CardPdfRenderer: liest Hintergrund (FPDI StreamReader) & Schriften (Temp-Datei) aus S3
- docker-compose: minio + minio-init (Bucket) + zweiter App-Node php2 (Profil scale-test)
- app:render-card Command für den Cross-Node-Nachweis
Verifiziert: Upload über Node 1 → identisches PDF-Render (51897 B, mit
Hintergrund) auf Node 2, der nur DB + Object Storage liest.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Karten-Einstellungen im Eigenschaften-Panel (wenn kein Element gewählt):
Name, Breite/Höhe, Beschnitt und Sicherheitsabstand — wirken live im Canvas
und fließen beim Speichern ins Druck-PDF (Seitengröße + Schnittmarken).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Hintergrund-PDF wird per pdf.js echt im Canvas gerendert (WYSIWYG);
neuer Endpunkt GET .../card-template/background liefert das PDF
- Resize-Anfasser am ausgewählten Element (Breite/Höhe)
- Undo (↶ / Strg+Z) mit Snapshot-History; Snapshot erst bei echter Änderung
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Assets-Leiste: Hintergrund-PDF hochladen/entfernen (+ "aktiv"-Badge),
Schrift hochladen (TTF/OTF) mit Familien-Chips
- Schriftart-Auswahl pro Text/Feld (Helvetica/Times/Courier + eigene)
- Canvas-Hinweis bei aktivem Hintergrund (echte Darstellung in PDF-Vorschau)
- Uploads aktualisieren State ohne Verlust des aktuellen Layouts
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>