- 1-3 Bilder: normales AJAX ohne blob, JSON-Response direkt parsen
- 4+ Bilder: nativer XMLHttpRequest mit blob fuer ZIP-Download
- Fehler-Handler zeigt jetzt den echten Server-Fehler an
(vorher war xhr.responseJSON immer undefined wegen blob)
- ZIP-Fehler: Blob wird als Text gelesen und JSON geparst
- Download-Dateiname aus URL extrahiert statt leer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Selection-Click nutzt jetzt addEventListener mit capture:true
auf #main, feuert garantiert VOR Poptrox und kann nicht entfernt werden
- Bild-Name/Ordner als data-Attribute auf .thumb gespeichert
- Mobile: Nav-Icons 1rem -> 1.3rem, bessere Touch-Targets
- Mobile: Selection-Checkboxen groesser (1.8em statt 1.4em)
- Mobile: Toolbar-Buttons mit mehr Padding
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Toolbar wird jetzt am oberen Bildschirmrand angezeigt (Desktop),
damit sie nicht mehr den Header/Nav ueberlagert. Auf Mobile
bleibt sie unterhalb des Headers. Cancel/Download-Buttons nutzen
direktes Binding auf $toolbar statt Delegation auf document.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
initSelectionMode wird jetzt VOR initPoptrox aufgerufen und nutzt
einen direkten Click-Handler auf a.image mit stopImmediatePropagation,
damit Poptrox im Selection-Mode nicht mehr die Lightbox oeffnet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Selection-Mode: Bilder in Galerie per Klick auswaehlen
- 1-3 Bilder: einzeln herunterladen, 4+: als ZIP
- Ordner-Download: ganzen zugewiesenen Ordner als ZIP
- Sicherheit: Zugriffspruefung + Path-Traversal-Schutz
- archiver Package fuer Streaming-ZIP-Erstellung
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- admin.js: .fail() Handler zeigt Fehlermeldung in der Tabelle statt stille Leere
- server.js: Fallback-Query (SELECT *) wenn role/created_at Spalten fehlen
- Server loggt DB-Fehler statt sie zu verschlucken
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Sende Nutzer-Daten als JSON (konsistent mit anderen Admin-Endpoints)
- Zeige Erfolgs-Alert nach Erstellung
- Bessere Fehlermeldungen mit HTTP-Status
- Client-side Validierung vor dem Absenden
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Alpine packt Format-Dekoder separat - ohne libjpeg-turbo, libpng, libwebp
kann magick keine JPG/PNG/WebP Dateien lesen ("no decode delegate").
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- express.urlencoded() hinzugefuegt (Login war komplett kaputt)
- Oeffentliche Galerie zeigt jetzt alle Bilder (statt leere Galerie)
- loadGallery() Aufruf in main.js eingefuegt (fehlte komplett)
- main.min.js neu gebaut mit gulp (Galerie-Code fehlte in minified Version)
- Watchtower Container in docker-compose.yml (auto-updates alle 5 Min)
- Docker-Socket und docker-cli aus Photography-Container entfernt
- runs.json Muell-Datei geloescht
- Brain.md und Feature-Request.md aktualisiert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Sicheres HTTPS-Formular, keine Browser-Warnung mehr
- Nachrichten kommen direkt an tom@mischlabs.de
- Spam-Schutz (Honeypot-Feld)
- Redirect zurueck zur Website nach Absenden
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix: GHCR image name muss lowercase sein (Kroonk -> kroonk)
- Feature Request: Admin One-Click Update Button hinzugefuegt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GitHub Actions Workflow baut Docker-Image bei jedem Push
- Image wird zu ghcr.io/kroonk/photography gepusht
- Feature-Request.md mit Nutzerverwaltung/Login-System angelegt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>