+```
+
+### Warum separate Uploads für Gallery?
+
+Events nutzen den Gallery-Upload, weil:
+- Beide brauchen WebP-Konvertierung
+- Beide nutzen gleichen Storage
+- Vermeidet Code-Duplikation
+- Gallery kann eigenständige Bildergalerie haben
+
+## 🎨 Admin-Panel Features
+
+### Events-Verwaltung:
+- ✅ Event erstellen (mit Bild-Upload)
+- ✅ Events auflisten
+- ✅ Events löschen
+- ✅ Reihenfolge ändern (Drag & Drop)
+- ✅ Events veröffentlichen/verstecken (isPublished)
+
+### Gallery-Verwaltung: (NEU!)
+- ✅ Bild hochladen
+- ✅ Gallery auflisten
+- ✅ Bilder löschen
+- ✅ Reihenfolge ändern (Drag & Drop)
+- ✅ Bilder veröffentlichen/verstecken (isPublished)
+
+### Publish:
+- Git-Integration (für statische Seiten-Updates)
+- Commit & Push zu Repository
+
+## 🚀 Deployment-Prozess
+
+### Was passiert beim Deploy?
+
+1. **Woodpecker CI** triggered bei Push zu `main`
+2. **Frontend Deploy** (gallus-pub):
+ - Build Astro SSG
+ - Deploy zu Fly.io
+
+3. **Backend Deploy** (gallus-cms-backend):
+ - Docker Build:
+ ```dockerfile
+ # Backend-Code kompilieren
+ npm run build → dist/
+
+ # Migrierte Bilder einpacken
+ COPY backend/data/images → /app/migration-images
+
+ # Migration-Script kopieren
+ COPY migrate-production.js → /app/
+ ```
+ - Deploy zu Fly.io
+ - **Volume bleibt erhalten** (SQLite DB + hochgeladene Bilder)
+
+4. **Nach erstem Deploy**: Migration ausführen
+ ```bash
+ fly ssh console -a gallus-cms-backend
+ node migrate-production.js
+ ```
+ - Kopiert Bilder: `/app/migration-images/` → `/app/data/images/`
+ - Befüllt DB mit Event/Gallery-Einträgen
+
+## 🔍 Troubleshooting
+
+### "Bilder werden nicht angezeigt"
+
+**Prüfe:**
+1. Backend logs: `fly logs -a gallus-cms-backend`
+2. Bild existiert: `fly ssh console -a gallus-cms-backend`
+ ```bash
+ ls -la /app/data/images/gallery/
+ ```
+3. DB-Eintrag korrekt:
+ ```bash
+ sqlite3 /app/data/gallus_cms.db
+ SELECT * FROM gallery_images;
+ ```
+4. Static-Route funktioniert:
+ ```bash
+ curl https://cms.gallus-pub.ch/static/images/gallery/xyz.webp
+ ```
+
+### "SQLite locked" Fehler
+
+- Nur ein Writer zur Zeit erlaubt
+- Bei hohem Traffic: Wechsel zu PostgreSQL empfohlen
+- Für Gallus Pub: ausreichend (wenig Writes)
+
+### "Volume voll"
+
+```bash
+fly volumes list -a gallus-cms-backend
+fly volumes extend