# 🍪 COOKIE CONSENT IMPLEMENTIERUNG - KOMPLETT-GUIDE
**IntelSight / Aegis-Sight**
**Datum:** 2025-11-09
**Version:** 1.0
**Status:** ✅ Implementation Complete
---
# PHASE 1: BESTANDSAUFNAHME ✅
## Dienste & Cookies Katalog
### **Dienste im Einsatz:**
- ✅ **IntelSight Analytics** (Self-Hosted, Deutschland)
- ❌ Keine Google Analytics
- ❌ Keine Facebook Pixel
- ❌ Keine Third-Party CDNs
- ❌ Keine Social Media Widgets
### **Cookies:**
| Cookie | Zweck | Laufzeit | Opt-In? |
|--------|-------|----------|---------|
| `_insights_session` | Session-Tracking | 30 Min. | ✅ Ja |
| `insights-consent` | Consent-Status | 12 Mon. | ❌ Nein (technisch) |
| `insights-theme` | Dark Mode | ∞ | ❌ Nein (funktional) |
### **Tracking-Daten:**
- Browser, OS, Device, Screen Resolution
- Stadt, Land, Koordinaten (GeoIP)
- Seiten, Referrer, Session-Dauer, Bounce
- Traffic Source, UTM-Parameter
### **Personenbezug:** ⚠️ Ja (IP + Fingerprinting)
**Rechtsgrundlage:** Art. 6 Abs. 1 lit. a DSGVO (Einwilligung)
---
# PHASE 2: ENTSCHEIDUNG & DESIGN ✅
## **Entscheidung: CUSTOM BANNER**
**Gründe:**
- Nur 1 Dienst → CMP wäre Overkill
- Volle Kontrolle, keine Abhängigkeiten
- Schneller (<5KB vs. 50-100KB)
- Kostenlos vs. €50-500/Monat für CMP
---
## **UI-Design: Slim Layer**
### Banner (Primary):
```
┌─────────────────────────────────────────┐
│ 🍪 Diese Website nutzt Cookies │
│ │
│ Text: Self-Hosted, Deutschland, keine │
│ Weitergabe an Dritte... │
│ │
│ [Details & Einstellungen] │
│ [✓ Alle akzeptieren] [✗ Nur notw.] │
└─────────────────────────────────────────┘
```
### Settings Modal:
```
┌─────────────────────────────────┐
│ Cookie-Einstellungen [✕] │
├─────────────────────────────────┤
│ ☑ Notwendig (immer aktiv) │
│ ☐ Statistik & Analyse │
│ └─ IntelSight Analytics │
│ • _insights_session (30min)│
│ • Deutschland, kein 3rd │
│ │
│ [Auswahl speichern] [Alle ✓] │
└─────────────────────────────────┘
```
---
## **Texte (DE/EN)**
**Deutsch:**
- Titel: "Diese Website nutzt Cookies 🍪"
- Text: "Selbst gehostet, Deutschland, keine Dritte..."
- Buttons: "Alle akzeptieren" / "Nur notwendige"
**Englisch:**
- Title: "This website uses cookies 🍪"
- Text: "Self-hosted, Germany, no third parties..."
- Buttons: "Accept all" / "Only necessary"
---
# PHASE 3: IMPLEMENTATIONSPLAN ✅
## **3.1 Gating-Pattern (Opt-In)**
```
Page Load
↓
Check LocalStorage['insights-consent']
↓
├─→ null → Show Banner + Block Tracking
├─→ 'accepted' → Load /insights/t.js
└─→ 'rejected' → Block Tracking
```
**Kritisch:** Script `/insights/t.js` wird ERST nach Zustimmung geladen!
---
## **3.2 Storage-Schema**
### LocalStorage Keys:
```javascript
// Consent Status
"insights-consent": {
value: "accepted" | "rejected",
expires: 1730832000000 // Timestamp
}
// Consent Details (Audit-Trail)
"insights-consent-details": {
timestamp: "2025-11-09T18:00:00Z",
version: "1.0",
categories: { necessary: true, analytics: true },
language: "de",
userAgent: "Mozilla/5.0...",
gpcSignal: false
}
```
---
## **3.3 Footer-Link (Persistent)**
```html
```
**Funktion:** Öffnet Banner erneut, ermöglicht Widerruf
---
## **3.4 Re-Prompt Regeln**
**Banner erneut zeigen bei:**
1. Consent abgelaufen (nach 12 Monaten)
2. Version-Change (neue Dienste hinzugefügt)
3. User löscht LocalStorage
4. Click auf "Cookie-Einstellungen"
5. GPC-Signal erkannt (optional)
---
## **3.5 Global Privacy Control (GPC)**
**Was:** HTTP-Header `Sec-GPC: 1` → User will nicht getrackt werden
**Implementierung:**
```javascript
if (navigator.globalPrivacyControl === true) {
// Auto-reject analytics
localStorage.setItem('insights-consent', 'rejected');
}
```
**Rechtlich:** CCPA-bindend (Kalifornien), EU empfohlen
---
# PHASE 4: UMSETZUNG + TESTS ✅
## **4.1 Dateien erstellt**
### **1. cookie-consent.html** (Demo-Seite)
- Test-Seite zum Testen des Banners
- Live-Status-Anzeige
- Test-Buttons (Reset, Show Banner)
### **2. cookie-consent.css** (2.4 KB)
- Responsive Design (Mobile-First)
- Accessibility (Focus-Trap, ARIA, Keyboard)
- Animations (Fade-In, Slide-Up)
- Dark Mode kompatibel
- High Contrast Support
### **3. cookie-consent.js** (14 KB)
- Consent Management Logic
- GPC Detection
- LocalStorage mit Expiry
- Multilingual (DE/EN)
- Public API
- Version Control
### **4. DATENSCHUTZ_ANALYTICS.md**
- Fertige Datenschutzerklärung
- DSGVO-konforme Texte
- Cookie-Liste
- FAQ-Sektion
---
## **4.2 Features implementiert**
✅ **Opt-In vor Tracking** (Gating)
✅ **Backdrop-Overlay** (verhindert Interaktion)
✅ **Two-Step Design** (Banner → Settings)
✅ **Consent-Versionierung** (Re-Prompt bei Updates)
✅ **GPC/DNT Support** (Auto-Reject)
✅ **LocalStorage mit Expiry** (12 Monate)
✅ **Audit-Trail** (Consent-Details)
✅ **Multilingual** (DE/EN, erweiterbar)
✅ **Accessibility** (ARIA, Focus-Trap, Keyboard)
✅ **Responsive** (Mobile-optimiert)
✅ **Public API** (programmatischer Zugriff)
---
## **4.3 Test-Checkliste**
### **Desktop Tests:**
- [ ] **Chrome (Windows)**
- [ ] Banner erscheint beim ersten Besuch
- [ ] "Alle akzeptieren" lädt Tracking-Script
- [ ] "Nur notwendige" blockiert Tracking
- [ ] Cookie `_insights_session` wird gesetzt (bei Accept)
- [ ] LocalStorage `insights-consent` wird gespeichert
- [ ] Re-Visit: Kein Banner (Consent gespeichert)
- [ ] Footer-Link öffnet Banner erneut
- [ ] Settings Modal funktioniert
- [ ] Analytics-Toggle funktioniert
- [ ] "Auswahl speichern" speichert Einstellung
- [ ] **Firefox (Windows)**
- [ ] Alle oben genannten Tests
- [ ] GPC-Signal wird erkannt (wenn aktiviert)
- [ ] **Safari (macOS)**
- [ ] Alle oben genannten Tests
- [ ] ITP (Intelligent Tracking Prevention) respektiert
- [ ] **Edge (Windows)**
- [ ] Alle oben genannten Tests
### **Mobile Tests:**
- [ ] **Chrome Mobile (Android)**
- [ ] Banner ist scrollbar
- [ ] Buttons sind touchbar (mind. 44x44px)
- [ ] Settings Modal ist lesbar
- [ ] Overlay verhindert Scroll
- [ ] **Safari Mobile (iOS)**
- [ ] Alle oben genannten Tests
- [ ] Kein horizontal scroll
### **Sprach-Tests:**
- [ ] **Deutsch (`lang="de"`)**
- [ ] Alle Texte auf Deutsch
- [ ] Datenschutz-Link auf Deutsch
- [ ] **Englisch (`lang="en"`)**
- [ ] Alle Texte auf Englisch
- [ ] Privacy Policy Link auf Englisch
### **GPC-Tests:**
- [ ] **Firefox mit Tracking-Schutz**
- [ ] Banner zeigt GPC-Notice
- [ ] Analytics automatisch deaktiviert
- [ ] User kann trotzdem manuell akzeptieren
- [ ] **Brave Browser**
- [ ] GPC standardmäßig aktiv
- [ ] Auto-Reject funktioniert
### **Accessibility Tests:**
- [ ] **Screen Reader (NVDA/JAWS)**
- [ ] Banner wird vorgelesen
- [ ] Buttons sind beschriftet
- [ ] ARIA-Attribute korrekt
- [ ] **Keyboard Navigation**
- [ ] Tab durchläuft alle Buttons
- [ ] Enter/Space aktiviert Buttons
- [ ] Esc schließt Settings Modal
- [ ] Focus-Trap funktioniert
- [ ] **High Contrast Mode**
- [ ] Banner ist lesbar
- [ ] Borders sind sichtbar
### **Funktional Tests:**
- [ ] **Consent-Speicherung**
- [ ] Akzeptiert → `/insights/t.js` geladen
- [ ] Abgelehnt → Kein Script geladen
- [ ] LocalStorage korrekt befüllt
- [ ] Expiry-Timestamp korrekt
- [ ] **Widerruf**
- [ ] Footer-Link öffnet Banner
- [ ] Von Akzeptiert → Abgelehnt funktioniert
- [ ] Script wird nicht mehr geladen
- [ ] Cookie wird gelöscht
- [ ] **Ablauf (Expiry)**
- [ ] Nach 12 Monaten: Re-Prompt
- [ ] Vor Ablauf: Kein Banner
- [ ] **Version-Change**
- [ ] Version 1.0 → 1.1: Re-Prompt
- [ ] Consent Details werden aktualisiert
- [ ] **LocalStorage löschen**
- [ ] Banner erscheint erneut
- [ ] Consent muss neu erteilt werden
### **Integration Tests:**
- [ ] **Tracking-Script**
- [ ] `/insights/t.js` lädt ERST nach Consent
- [ ] Pageview wird getrackt (200 OK)
- [ ] Cookie `_insights_session` gesetzt
- [ ] Daten in DB (Nuremberg, DE, etc.)
- [ ] **Datenschutzerklärung**
- [ ] Link funktioniert
- [ ] Alle Dienste aufgelistet
- [ ] Opt-Out erklärt
---
## **4.4 Browser-Kompatibilität**
| Browser | Version | Getestet | Status |
|---------|---------|----------|--------|
| Chrome | 120+ | ⏳ Pending | - |
| Firefox | 121+ | ⏳ Pending | - |
| Safari | 17+ | ⏳ Pending | - |
| Edge | 120+ | ⏳ Pending | - |
| Chrome Mobile | 120+ | ⏳ Pending | - |
| Safari iOS | 17+ | ⏳ Pending | - |
**Minimum Support:** ES6 (2015+), LocalStorage, Fetch API
---
# PHASE 5: DATENSCHUTZERKLÄRUNG ✅
## **5.1 Textbausteine erstellt**
**Datei:** `DATENSCHUTZ_ANALYTICS.md`
**Enthält:**
- ✅ Art und Umfang der Datenverarbeitung
- ✅ Rechtsgrundlage (Art. 6 Abs. 1 lit. a DSGVO)
- ✅ Zweck der Verarbeitung
- ✅ Empfänger (keine Dritte!)
- ✅ Datenübermittlung Drittländer (keine!)
- ✅ Speicherdauer (90 Tage)
- ✅ Widerruf der Einwilligung
- ✅ GPC-Unterstützung
- ✅ Betroffenenrechte (Art. 15-21 DSGVO)
- ✅ Opt-Out Möglichkeiten
- ✅ Technische Sicherheitsmaßnahmen
- ✅ Cookie-Liste (Tabellenform)
- ✅ FAQ-Sektion
---
## **5.2 Integration in Website**
### **Datenschutz-Seite:**
```html
4. Website-Analyse