diff --git a/TODO.md b/TODO.md
index cb11347..4b40349 100644
--- a/TODO.md
+++ b/TODO.md
@@ -44,7 +44,14 @@ Neue Struktur: Datenbank in src/data/db und bilder in src/data/images
## Backend
[x] Erweiterung der API um die Funktion bestehende Daten zu editieren/aktualisieren
[x] Preview Generierung für hochgeladene Bilder
-[ ] Automatisches Löschen von Groupen, welche nach einer bestimmten Zeit (z.B. 5 Tage) nicht freigegeben wurden
+[ ] **Automatisches Löschen nicht freigegebener Gruppen** 🚧
+ - **Status**: In Planung
+ - **Feature Plan**: `docs/FEATURE_PLAN-delete-unproved-groups.md`
+ - **Branch**: `feature/DeleteUnprovedGroups`
+ - **Aufgaben**: 11 Tasks (DB Migration + Backend Cleanup Service + Cron-Job + Frontend UI)
+ - **Geschätzte Zeit**: 2-3 Tage
+ - **Löschfrist**: 7 Tage nach Upload (nur nicht freigegebene Gruppen)
+ - **Cron-Job**: Täglich 10:00 Uhr
[ ] Integration eines Benachrichtigungssystems (E-Mail, Push-Benachrichtigungen) wenn eine neue Slideshow hochgeladen wurde
[ ] Implementierung eines Logging-Systems zur Nachverfolgung von Änderungen und Aktivitäten
@@ -52,7 +59,7 @@ Neue Struktur: Datenbank in src/data/db und bilder in src/data/images
[x] Erweiterung der Benutzeroberfläche um eine Editierfunktion für bestehende Einträge in ModerationPage.js
[x] In der angezeigten Gruppen soll statt Bilder ansehen Gruppe editieren stehen
[x] Diese bestehende Ansicht (Bilder ansehen) soll als eigene Seite implementiert werden
- [ ] Ergänzung der Möglichkeit eine Beschreibung zu den Bildern hinzuzufügen
+ [x] Ergänzung der Möglichkeit eine Beschreibung zu den Bildern hinzuzufügen
[ ] Erweiterung der ModerationPage um reine Datenbankeditor der sqlite Datenbank.
diff --git a/docs/FEATURE_PLAN-delete-unproved-groups.md b/docs/FEATURE_PLAN-delete-unproved-groups.md
new file mode 100644
index 0000000..e8d39d2
--- /dev/null
+++ b/docs/FEATURE_PLAN-delete-unproved-groups.md
@@ -0,0 +1,633 @@
+# Feature Plan: Automatisches Löschen nicht freigegebener Gruppen
+
+## 📋 Übersicht
+
+**Feature**: Automatisches Löschen von nicht freigegebenen Gruppen nach 7 Tagen
+**Ziel**: Verhindern, dass rechtlich oder sozial anstößige Inhalte dauerhaft auf dem Server verbleiben
+**Priorität**: Hoch (Sicherheit & Compliance)
+**Geschätzte Implementierungszeit**: 2-3 Tage
+
+## 🎯 Funktionale Anforderungen
+
+### Must-Have
+- [ ] **Automatische Löschung**: Gruppen mit `approved = false` werden nach 7 Tagen ab Upload-Zeitpunkt gelöscht
+- [ ] **Vollständige Löschung**: Datenbank-Einträge, Originalbilder und Preview-Bilder werden entfernt
+- [ ] **Cron-Job**: Tägliche Ausführung um 10:00 Uhr morgens
+- [ ] **Deletion Log**: Protokollierung gelöschter Gruppen in eigener Datenbanktabelle
+- [ ] **Anonymisierung**: Keine personenbezogenen Daten (Titel, Name, Beschreibung) im Log
+- [ ] **Countdown-Anzeige**: In ModerationPage wird Restzeit bis zur Löschung angezeigt
+- [ ] **Admin-Übersicht**: Geschützter Bereich in ModerationPage für Lösch-Historie
+- [ ] **Freigabe-Schutz**: Freigegebene Gruppen (`approved = true`) werden niemals automatisch gelöscht
+
+### Nice-to-Have
+- [ ] **Manuelle Verzögerung**: Admin kann Löschfrist verlängern (z.B. um weitere 7 Tage)
+- [ ] **Batch-Delete Preview**: Vorschau welche Gruppen beim nächsten Cron-Lauf gelöscht würden
+- [ ] **Email-Benachrichtigung**: Warnung an Admin 24h vor automatischer Löschung
+
+## 🔧 Technische Umsetzung
+
+### 1. Database Schema Erweiterung
+
+#### 1.1 Groups-Tabelle Status ✅ **BEREITS VORHANDEN**
+**Datei**: `backend/src/database/DatabaseManager.js`
+
+**Status:** Die `approved` Spalte existiert bereits!
+```javascript
+// Zeile 60-63 in DatabaseManager.js
+CREATE TABLE IF NOT EXISTS groups (
+ // ...
+ approved BOOLEAN DEFAULT FALSE,
+ // ...
+)
+```
+
+**Migration:** Wird automatisch bei jedem Server-Start ausgeführt (Zeile 67-75):
+```javascript
+try {
+ await this.run('ALTER TABLE groups ADD COLUMN approved BOOLEAN DEFAULT FALSE');
+} catch (error) {
+ // Feld existiert bereits - das ist okay
+}
+```
+
+**Zusätzlicher Index für Performance (neu hinzufügen):**
+```sql
+CREATE INDEX IF NOT EXISTS idx_groups_cleanup ON groups(approved, upload_date);
+CREATE INDEX IF NOT EXISTS idx_groups_approved ON groups(approved);
+```
+
+#### 1.2 Neue Tabelle: Deletion Log
+**Datei**: `backend/src/database/schema.sql`
+
+```sql
+-- Deletion Log für gelöschte Gruppen (Compliance & Audit Trail)
+CREATE TABLE IF NOT EXISTS deletion_log (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ group_id TEXT NOT NULL, -- Original Group ID (zur Referenz)
+ year INTEGER NOT NULL, -- Jahr des Uploads
+ image_count INTEGER NOT NULL, -- Anzahl gelöschter Bilder
+ upload_date DATETIME NOT NULL, -- Ursprünglicher Upload-Zeitpunkt
+ deleted_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Zeitpunkt der Löschung
+ deletion_reason TEXT DEFAULT 'auto_cleanup_7days', -- Grund der Löschung
+ total_file_size INTEGER -- Gesamtgröße der gelöschten Dateien (in Bytes)
+);
+
+-- Index für schnelle Abfragen nach Löschdatum
+CREATE INDEX IF NOT EXISTS idx_deletion_log_deleted_at ON deletion_log(deleted_at DESC);
+
+-- Index für Jahresfilterung
+CREATE INDEX IF NOT EXISTS idx_deletion_log_year ON deletion_log(year);
+```
+
+**Wichtig**: Keine personenbezogenen Daten (title, name, description) werden gespeichert!
+
+### 2. Backend-Implementierung
+
+#### 2.1 Migration Script
+**Datei**: `backend/src/database/migrations/005_add_approved_column.sql` (neu erstellen)
+
+```sql
+-- Migration 005: Add approved column to groups table
+ALTER TABLE groups ADD COLUMN approved BOOLEAN DEFAULT FALSE;
+
+-- Index für schnelle Abfragen nicht freigegebener Gruppen
+CREATE INDEX IF NOT EXISTS idx_groups_approved ON groups(approved);
+
+-- Index für Lösch-Kandidaten (approved=false + alte upload_date)
+CREATE INDEX IF NOT EXISTS idx_groups_cleanup ON groups(approved, upload_date);
+```
+
+#### 2.2 Cleanup Service
+**Datei**: `backend/src/services/GroupCleanupService.js` (neu erstellen)
+
+**Verantwortlichkeiten:**
+- Identifizierung löschbarer Gruppen (nicht freigegeben + älter als 7 Tage)
+- Berechnung der Löschfrist pro Gruppe
+- Vollständige Löschung (DB + Dateien)
+- Protokollierung in `deletion_log`
+
+**Hauptmethoden:**
+```javascript
+class GroupCleanupService {
+ // Findet alle Gruppen, die gelöscht werden müssen
+ async findGroupsForDeletion()
+
+ // Löscht eine Gruppe vollständig (Transaktion)
+ async deleteGroupCompletely(groupId)
+
+ // Erstellt Eintrag im Deletion Log
+ async logDeletion(groupData)
+
+ // Hauptmethode: Führt kompletten Cleanup durch
+ async performScheduledCleanup()
+
+ // Berechnet verbleibende Tage bis zur Löschung
+ getDaysUntilDeletion(uploadDate)
+}
+```
+
+#### 2.3 Repository-Erweiterungen
+**Datei**: `backend/src/repositories/GroupRepository.js`
+
+**Bestehende Methoden (werden wiederverwendet):** ✅
+```javascript
+// ✅ BEREITS VORHANDEN - Zeile 207
+async updateGroupApproval(groupId, approved) { }
+
+// ✅ BEREITS VORHANDEN - Zeile 217
+async deleteImage(groupId, imageId) { }
+```
+
+**Neue Methoden:**
+```javascript
+// Findet Gruppen, die zum Löschen anstehen (approved=false & älter als 7 Tage)
+async findUnapprovedGroupsOlderThan(days) { }
+
+// Löscht Gruppe komplett (inkl. Bilder-Referenzen) - erweitert bestehende Logik
+async deleteGroupCompletely(groupId) { }
+
+// Hole Statistiken für Gruppe (für Deletion Log)
+async getGroupStatistics(groupId) { }
+```
+
+**Datei**: `backend/src/repositories/DeletionLogRepository.js` (neu erstellen)
+
+```javascript
+class DeletionLogRepository {
+ // Erstellt Lösch-Protokoll
+ async createDeletionEntry(logData) { }
+
+ // Hole letzte N Einträge
+ async getRecentDeletions(limit = 10) { }
+
+ // Hole alle Einträge (für Admin-Übersicht)
+ async getAllDeletions() { }
+
+ // Statistiken (Anzahl gelöschte Gruppen, Bilder, Speicherplatz)
+ async getDeletionStatistics() { }
+}
+```
+
+#### 2.4 Cron-Job Implementation
+**Datei**: `backend/src/services/SchedulerService.js` (neu erstellen)
+
+**Library**: `node-cron`
+```bash
+cd backend
+npm install node-cron
+```
+
+**Implementation:**
+```javascript
+const cron = require('node-cron');
+const GroupCleanupService = require('./GroupCleanupService');
+
+class SchedulerService {
+ start() {
+ // Jeden Tag um 10:00 Uhr
+ cron.schedule('0 10 * * *', async () => {
+ console.log('[Scheduler] Running daily cleanup at 10:00 AM...');
+ await GroupCleanupService.performScheduledCleanup();
+ });
+ }
+}
+```
+
+**Integration in**: `backend/src/server.js`
+```javascript
+const SchedulerService = require('./services/SchedulerService');
+
+// Nach Server-Start
+app.listen(PORT, () => {
+ console.log(`Server running on port ${PORT}`);
+
+ // Starte Scheduler
+ const scheduler = new SchedulerService();
+ scheduler.start();
+});
+```
+
+#### 2.5 API-Endpunkte
+
+**Route**: `backend/src/routes/groups.js`
+
+**Bestehender Endpoint (wird wiederverwendet):** ✅
+```javascript
+// ✅ BEREITS VORHANDEN - Zeile 102
+PATCH /groups/:groupId/approve
+Body: { approved: true/false }
+Response: { success: true, message: "Gruppe freigegeben", approved: true }
+```
+
+**Neue Admin-Endpunkte:**
+```javascript
+// Neu: Hole Deletion Log
+GET /api/admin/deletion-log?limit=10
+Response: { deletions: [...], total: 123 }
+
+// Neu: Hole alle Deletion Logs
+GET /api/admin/deletion-log/all
+Response: { deletions: [...] }
+
+// Neu: Deletion Statistiken
+GET /api/admin/deletion-log/stats
+Response: {
+ totalDeleted: 45,
+ totalImages: 234,
+ totalSize: '1.2 GB',
+ lastCleanup: '2025-11-08T10:00:00Z'
+}
+```
+
+### 3. Frontend-Implementierung
+
+#### 3.1 ModerationGroupPage Erweiterungen
+**Datei**: `frontend/src/Components/Pages/ModerationGroupPage.js`
+
+**Neue Features:**
+- Countdown-Anzeige für jede nicht freigegebene Gruppe
+- Farbcodierung optional (aktuell nicht gewünscht)
+- Button "Gruppe freigeben" (approved setzen)
+
+**UI-Änderungen:**
+```jsx
+
+
+ {group.title}
+
+ {/* Neu: Countdown-Anzeige */}
+ {!group.approved && (
+
+ ⏰ Wird automatisch gelöscht in: {daysRemaining} Tagen
+
+
+ Upload: {formatDate(group.upload_date)}
+
+
+ )}
+
+ {/* Neu: Freigabe-Button */}
+
+
+
+```
+
+#### 3.2 Deletion Log Übersicht (Admin-Bereich)
+**Datei**: `frontend/src/Components/Pages/DeletionLogPage.js` (neu erstellen)
+
+**Features:**
+- Tabelle mit letzten 10 gelöschten Gruppen (expandierbar auf alle)
+- Spalten: Group ID, Jahr, Anzahl Bilder, Upload-Datum, Lösch-Datum
+- Statistiken: Gesamt gelöschte Gruppen, Bilder, freigegebener Speicher
+- Toggle-Button: "Letzte 10" ↔ "Alle anzeigen"
+
+**Mockup:**
+```
+┌─────────────────────────────────────────────────────────┐
+│ Gelöschte Gruppen - Übersicht │
+├─────────────────────────────────────────────────────────┤
+│ Statistiken: │
+│ • Gesamt gelöscht: 45 Gruppen (234 Bilder) │
+│ • Freigegebener Speicher: 1.2 GB │
+│ • Letzter Cleanup: 08.11.2025 10:00 Uhr │
+├─────────────────────────────────────────────────────────┤
+│ [Letzte 10 anzeigen] [Alle anzeigen ▼] │
+├──────────┬──────┬────────┬─────────────┬──────────────┤
+│ Group ID │ Jahr │ Bilder │ Upload-Dat. │ Gelöscht am │
+├──────────┼──────┼────────┼─────────────┼──────────────┤
+│ abc123 │ 2024 │ 15 │ 01.11.2025 │ 08.11.2025 │
+│ xyz789 │ 2024 │ 23 │ 31.10.2025 │ 07.11.2025 │
+│ ... │ ... │ ... │ ... │ ... │
+└──────────┴──────┴────────┴─────────────┴──────────────┘
+```
+
+#### 3.3 Service-Funktionen
+**Datei**: `frontend/src/services/groupService.js` (erweitern)
+
+```javascript
+// Setze Approval-Status
+export const approveGroup = async (groupId) => {
+ return sendRequest(`/api/groups/${groupId}/approve`, 'PUT', {
+ approved: true
+ });
+};
+
+// Hole Deletion Log
+export const getDeletionLog = async (limit = 10) => {
+ return sendRequest(`/api/admin/deletion-log?limit=${limit}`, 'GET');
+};
+
+// Hole alle Deletion Logs
+export const getAllDeletionLogs = async () => {
+ return sendRequest('/api/admin/deletion-log/all', 'GET');
+};
+
+// Hole Statistiken
+export const getDeletionStatistics = async () => {
+ return sendRequest('/api/admin/deletion-log/stats', 'GET');
+};
+```
+
+#### 3.4 Routing
+**Datei**: `frontend/src/App.js`
+
+```javascript
+// Neue Route für Deletion Log (nur für Admins)
+} />
+```
+
+**Navigation in ModerationPage:**
+```jsx
+
+
+ {/* Neu */}
+
+```
+
+## 📝 Implementierungs-Aufgaben
+
+### Phase 1: Database & Schema (Aufgaben 1-2)
+
+#### Aufgabe 1: Database Schema für approved-Spalte prüfen ✅ **BEREITS VORHANDEN**
+- [x] ~~Migration Script erstellen~~ **NICHT NÖTIG** - approved-Spalte existiert bereits!
+- [x] ~~approved-Spalte zu groups-Tabelle hinzufügen~~ **BEREITS VORHANDEN** (DatabaseManager.js, Zeile 60)
+- [x] ~~Migration in DatabaseManager integrieren~~ **BEREITS VORHANDEN** (Zeile 67-75)
+- [x] ~~Indizes erstellen~~ **Performance-Index für cleanup hinzufügen**
+- [ ] Index für Cleanup-Abfragen hinzufügen: `CREATE INDEX IF NOT EXISTS idx_groups_cleanup ON groups(approved, upload_date)`
+
+**Akzeptanzkriterien:**
+- ✅ Spalte `approved` existiert bereits mit DEFAULT FALSE
+- ✅ Migration läuft automatisch bei jedem Server-Start (DatabaseManager.js)
+- ⏳ Zusätzlicher Index für Cleanup-Performance hinzufügen
+- ✅ Keine Datenverluste - Bestehende Gruppen haben `approved = false`
+
+#### Aufgabe 2: Deletion Log Tabelle erstellen
+- [ ] `deletion_log` Tabelle im Schema definieren
+- [ ] Indizes für schnelle Abfragen erstellen
+- [ ] Migration Script erstellen
+- [ ] Validierung der Tabellenstruktur
+
+**Akzeptanzkriterien:**
+- Tabelle enthält alle definierten Spalten
+- Keine personenbezogenen Daten im Schema
+- Indizes für `deleted_at` und `year` existieren
+- Struktur ist optimal für Abfragen (letzte 10, alle, Statistiken)
+
+### Phase 2: Backend Core Logic (Aufgaben 3-5)
+
+#### Aufgabe 3: GroupCleanupService implementieren
+- [ ] Service-Klasse erstellen
+- [ ] `findGroupsForDeletion()` - SQL-Query für Gruppen älter als 7 Tage
+- [ ] `deleteGroupCompletely()` - Transaktion für DB + Dateien
+- [ ] `logDeletion()` - Eintrag in deletion_log
+- [ ] `getDaysUntilDeletion()` - Berechnung Restzeit
+- [ ] File-Deletion für Bilder und Previews
+- [ ] Error-Handling und Logging
+
+**Akzeptanzkriterien:**
+- Service findet korrekt alle löschbaren Gruppen (approved=false + älter 7 Tage)
+- Dateien werden physisch vom Dateisystem entfernt
+- Datenbank-Transaktionen sind atomar (Rollback bei Fehler)
+- Deletion Log wird korrekt befüllt (ohne personenbezogene Daten)
+- Freigegebene Gruppen werden niemals gelöscht
+- Logging für alle Aktionen (Info + Error)
+
+#### Aufgabe 4: Repository-Methoden erweitern
+- [ ] `GroupRepository.findUnapprovedGroupsOlderThan()` implementieren
+- [ ] `GroupRepository.deleteGroupById()` mit CASCADE-Logik
+- [ ] `GroupRepository.getGroupStatistics()` für Log-Daten
+- [ ] `GroupRepository.setApprovalStatus()` für Freigabe
+- [ ] `DeletionLogRepository` komplett implementieren
+- [ ] Unit-Tests für alle Methoden
+
+**Akzeptanzkriterien:**
+- SQL-Queries sind optimiert (nutzen Indizes)
+- DELETE CASCADE funktioniert für Bilder
+- Statistiken enthalten: Anzahl Bilder, Dateigröße
+- setApprovalStatus validiert groupId
+- DeletionLogRepository unterstützt Pagination
+
+#### Aufgabe 5: Cron-Job einrichten
+- [ ] `node-cron` installieren
+- [ ] `SchedulerService` erstellen
+- [ ] Cron-Job für 10:00 Uhr konfigurieren
+- [ ] Integration in `server.js`
+- [ ] Logging für Scheduler-Start und -Ausführung
+- [ ] Manueller Test-Trigger für Entwicklung
+
+**Akzeptanzkriterien:**
+- Cron-Job läuft täglich um 10:00 Uhr
+- Scheduler startet automatisch beim Server-Start
+- Fehler im Cleanup brechen Server nicht ab
+- Entwicklungs-Modus: Manueller Trigger möglich
+- Logging zeigt Ausführungszeit und Anzahl gelöschter Gruppen
+
+### Phase 3: Backend API (Aufgabe 6)
+
+#### Aufgabe 6: API-Endpunkte implementieren
+- [x] ~~`PUT /api/groups/:groupId/approve` für Freigabe~~ **BEREITS VORHANDEN** (groups.js, Zeile 102)
+- [ ] `GET /api/admin/deletion-log` mit Limit-Parameter
+- [ ] `GET /api/admin/deletion-log/all` für komplette Historie
+- [ ] `GET /api/admin/deletion-log/stats` für Statistiken
+- [ ] Request-Validation und Error-Handling für neue Endpoints
+- [ ] API-Dokumentation aktualisieren
+
+**Akzeptanzkriterien:**
+- ✅ Approval-Endpoint existiert bereits und funktioniert
+- Alle neuen Admin-Endpunkte sind unter `/api/admin/` erreichbar
+- Admin-Endpunkte erfordern Authentifizierung (falls vorhanden)
+- Response-Formate sind konsistent (JSON)
+- HTTP-Status-Codes sind korrekt (200, 400, 404, 500)
+- Fehler-Responses enthalten hilfreiche Messages
+
+### Phase 4: Frontend UI (Aufgaben 7-9)
+
+#### Aufgabe 7: ModerationGroupPage - Countdown anzeigen
+- [ ] Countdown-Komponente erstellen
+- [ ] Berechnung verbleibender Tage (Client-Side)
+- [ ] Alert-Box für nicht freigegebene Gruppen
+- [ ] Formatierung Upload-Datum und Lösch-Datum
+- [ ] Responsive Design für Mobile
+
+**Akzeptanzkriterien:**
+- Countdown zeigt korrekte Anzahl Tage bis Löschung
+- Alert ist nur bei nicht freigegebenen Gruppen sichtbar
+- Format: "Wird automatisch gelöscht in: X Tagen"
+- UI ist mobile-optimiert
+- Keine Performance-Probleme bei vielen Gruppen
+
+#### Aufgabe 8: Freigabe-Button implementieren
+- [ ] Button "Gruppe freigeben" in ModerationGroupPage
+- [ ] API-Call zu `/api/groups/:groupId/approve`
+- [ ] Loading-State während API-Call
+- [ ] Success-Feedback (SweetAlert2)
+- [ ] UI-Update nach Freigabe (Countdown verschwindet)
+- [ ] Error-Handling mit User-Feedback
+
+**Akzeptanzkriterien:**
+- Button ist nur bei nicht freigegebenen Gruppen sichtbar
+- Freigabe funktioniert mit einem Klick
+- UI aktualisiert sich sofort (optimistic update)
+- Success-Message: "Gruppe wurde freigegeben"
+- Fehler werden benutzerfreundlich angezeigt
+
+#### Aufgabe 9: DeletionLogPage erstellen
+- [ ] Neue Page-Komponente erstellen
+- [ ] Tabelle für Deletion Log mit MUI DataGrid/Table
+- [ ] Toggle "Letzte 10" ↔ "Alle anzeigen"
+- [ ] Statistik-Cards (Gesamt, Bilder, Speicher)
+- [ ] Formatierung von Daten und Dateigrößen
+- [ ] Pagination für große Datenmengen
+- [ ] Integration in ModerationPage (Tab)
+- [ ] Routing einrichten
+
+**Akzeptanzkriterien:**
+- Tabelle zeigt: Group ID, Jahr, Bilder, Upload-Datum, Lösch-Datum
+- Standard: Letzte 10 Einträge
+- Toggle lädt alle Einträge nach
+- Statistiken sind prominent sichtbar
+- Dateigröße in lesbarem Format (MB, GB)
+- Responsive Design
+- Nur für Admins zugänglich (geschützter Bereich)
+
+### Phase 5: Testing & Documentation (Aufgaben 10-11)
+
+#### Aufgabe 10: Integration Testing
+- [ ] Test: Gruppe älter als 7 Tage wird automatisch gelöscht
+- [ ] Test: Freigegebene Gruppe bleibt bestehen (auch nach 7 Tagen)
+- [ ] Test: Deletion Log wird korrekt befüllt
+- [ ] Test: Dateien werden physisch gelöscht
+- [ ] Test: Countdown-Anzeige zeigt korrekte Werte
+- [ ] Test: Freigabe-Button funktioniert
+- [ ] Test: DeletionLogPage lädt Daten korrekt
+- [ ] Performance-Test: Cleanup mit 100+ Gruppen
+
+**Akzeptanzkriterien:**
+- Alle Haupt-Szenarien sind getestet
+- Cron-Job läuft ohne Fehler
+- Keine Memory-Leaks bei Scheduler
+- Performance ist akzeptabel (< 5s für Cleanup)
+- Frontend aktualisiert sich korrekt
+
+#### Aufgabe 11: Dokumentation
+- [ ] README.md aktualisieren (Feature beschreiben)
+- [ ] API-Dokumentation für neue Endpunkte
+- [ ] ENV-Variable für Löschfrist (optional, aktuell hardcoded 7 Tage)
+- [ ] Admin-Anleitung: Wie Deletion Log einsehen
+- [ ] Deployment-Hinweise (Cron-Job in Docker)
+- [ ] CHANGELOG.md aktualisieren
+
+**Akzeptanzkriterien:**
+- README beschreibt automatische Löschung
+- API-Endpunkte sind dokumentiert
+- Admin-Workflow ist klar beschrieben
+- Deployment-Schritte sind vollständig
+- CHANGELOG enthält alle Änderungen
+
+## 🧪 Testing-Strategie
+
+### Unit Tests
+- Repository-Methoden (findUnapprovedGroupsOlderThan, deleteGroupById)
+- GroupCleanupService (getDaysUntilDeletion)
+- DeletionLogRepository (alle Methoden)
+
+### Integration Tests
+- Kompletter Cleanup-Prozess (DB + Files + Log)
+- API-Endpunkte mit verschiedenen Szenarien
+- Frontend-Integration (Countdown, Freigabe)
+
+### Manuelle Tests
+- Cron-Job Ausführung beobachten
+- Deletion Log UI testen (Letzte 10 / Alle)
+- Mobile-Ansicht der ModerationPage
+
+### Edge Cases
+- Gruppe wird genau am Tag 7 gelöscht
+- Gruppe wird 5 Minuten vor Cron-Job freigegeben
+- Sehr große Gruppen (100+ Bilder)
+- Dateisystem-Fehler beim Löschen
+- Gleichzeitige Freigabe während Cleanup
+
+## 📊 Success Metrics
+
+### Technisch
+- ✅ Cron-Job läuft täglich ohne Fehler
+- ✅ Durchschnittliche Cleanup-Zeit < 5 Sekunden
+- ✅ Keine Fehler in Production-Logs
+- ✅ 100% Datenlöschung (DB + Files)
+
+### Funktional
+- ✅ Countdown in ModerationPage ist immer korrekt
+- ✅ Freigegebene Gruppen werden niemals gelöscht
+- ✅ Deletion Log ist vollständig und korrekt
+- ✅ Admin kann Historie einsehen (letzte 10 / alle)
+
+### Sicherheit & Compliance
+- ✅ Keine personenbezogenen Daten in deletion_log
+- ✅ Alle Benutzerdaten werden nach 7 Tagen entfernt
+- ✅ Physische Dateien werden gelöscht (nicht nur DB-Einträge)
+
+## 🚀 Deployment-Checkliste
+
+- [ ] Database Migrations ausführen (005_add_approved_column.sql)
+- [ ] `node-cron` Dependency ist installiert
+- [ ] ENV-Variable `CLEANUP_DAYS` (optional, default: 7)
+- [ ] Scheduler startet automatisch beim Server-Start
+- [ ] Logs für Cleanup sind aktiviert
+- [ ] Monitoring für fehlgeschlagene Cleanup-Läufe
+- [ ] Backup-Strategie für deletion_log
+- [ ] Admin-Zugang zu DeletionLogPage testen
+
+## 🔮 Future Enhancements
+
+### Phase 2 (Nice-to-Have)
+- [ ] Admin kann Löschfrist manuell verlängern (+ 7 Tage Button)
+- [ ] Email-Benachrichtigung 24h vor automatischer Löschung
+- [ ] Batch-Delete Preview: "Diese Gruppen werden morgen gelöscht"
+- [ ] Konfigurierbare Löschfrist per ENV (aktuell hardcoded 7 Tage)
+- [ ] Export der Deletion Log als CSV
+- [ ] Soft-Delete Option (Gruppen markieren statt sofort löschen)
+
+### Phase 3 (Erweiterte Features)
+- [ ] Automatische Archivierung statt Löschung (ZIP-Download)
+- [ ] Wiederherstellungs-Funktion (aus Archiv)
+- [ ] Dashboard mit Cleanup-Statistiken (Chart.js)
+- [ ] Whitelist für bestimmte Uploader (niemals automatisch löschen)
+
+## 📚 Technologie-Stack
+
+### Backend
+- **Cron-Job**: `node-cron` v3.0.3
+- **Database**: SQLite3 (bestehend)
+- **File Operations**: `fs.promises` (Node.js native)
+
+### Frontend
+- **UI Framework**: Material-UI (MUI) v5
+- **Date Handling**: `date-fns` (bereits vorhanden)
+- **Notifications**: SweetAlert2 (bereits vorhanden)
+
+## 🎯 Zeitplan
+
+| Phase | Aufgaben | Geschätzte Zeit |
+|-------|----------|-----------------|
+| Phase 1 | Database Schema | 2-3 Stunden |
+| Phase 2 | Backend Core Logic | 6-8 Stunden |
+| Phase 3 | Backend API | 2-3 Stunden |
+| Phase 4 | Frontend UI | 4-6 Stunden |
+| Phase 5 | Testing & Docs | 3-4 Stunden |
+| **Total** | **11 Aufgaben** | **17-24 Stunden** |
+
+**Empfohlene Reihenfolge**: Phase 1 → 2 → 3 → 4 → 5 (sequenziell)
+
+---
+
+**Status**: 🟡 In Planung
+**Branch**: `feature/DeleteUnprovedGroups`
+**Erstellt**: 08.11.2025
+**Letzte Aktualisierung**: 08.11.2025