diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..924b642
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+# Lagebild-Daten (werden per Cron-Sync vom Monitor regeneriert)
+lagebild/data/
diff --git a/COOKIE_CONSENT_IMPLEMENTATION.md b/COOKIE_CONSENT_IMPLEMENTATION.md
index 8e99f65..29a8129 100644
--- a/COOKIE_CONSENT_IMPLEMENTATION.md
+++ b/COOKIE_CONSENT_IMPLEMENTATION.md
@@ -1,51 +1,54 @@
-# đȘ COOKIE CONSENT IMPLEMENTIERUNG - KOMPLETT-GUIDE
+# ANALYTICS IMPLEMENTATION - KOMPLETT-GUIDE
-**IntelSight / Aegis-Sight**
-**Datum:** 2025-11-09
-**Version:** 1.0
-**Status:** â
Implementation Complete
+**AegisSight UG**
+**Datum:** 2026-03-20
+**Version:** 2.0
+**Status:** Implementation Complete
---
-# PHASE 1: BESTANDSAUFNAHME â
+# PHASE 1: BESTANDSAUFNAHME
-## Dienste & Cookies Katalog
+## Dienste & Tracking Katalog
### **Dienste im Einsatz:**
-- â
**IntelSight Analytics** (Self-Hosted, Deutschland)
-- â Keine Google Analytics
-- â Keine Facebook Pixel
-- â Keine Third-Party CDNs
-- â Keine Social Media Widgets
+- **AegisSight Analytics (Umami v3.0.3)** - 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:**
+**Keine.** Umami arbeitet vollstÀndig cookieless. Es werden weder Session-Cookies noch Tracking-Cookies gesetzt. Die Identifikation erfolgt ohne Cookies und ohne Fingerprinting.
+
+| Eintrag | Zweck | Typ | Opt-In? |
+|---------|-------|-----|---------|
+| `analytics-consent` (LocalStorage) | Consent-Status | LocalStorage | Nein (technisch) |
+
+### **Tracking-Daten (anonymisiert):**
- Browser, OS, Device, Screen Resolution
-- Stadt, Land, Koordinaten (GeoIP)
-- Seiten, Referrer, Session-Dauer, Bounce
+- Land, Region (kein Stadtlevel, kein GeoIP-Lookup)
+- Seiten, Referrer, Session-Dauer
- Traffic Source, UTM-Parameter
-### **Personenbezug:** â ïž Ja (IP + Fingerprinting)
+### **Personenbezug:** Nein
-**Rechtsgrundlage:** Art. 6 Abs. 1 lit. a DSGVO (Einwilligung)
+Umami speichert keine IP-Adressen und verwendet kein Fingerprinting. Alle Daten sind aggregiert und nicht auf einzelne Nutzer rĂŒckfĂŒhrbar.
+
+**Rechtsgrundlage:** Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse) - da cookieless und ohne Personenbezug ist kein Opt-In zwingend erforderlich. Der Consent-Banner wird dennoch aus TransparenzgrĂŒnden eingesetzt.
---
-# PHASE 2: ENTSCHEIDUNG & DESIGN â
+# PHASE 2: ENTSCHEIDUNG & DESIGN
## **Entscheidung: CUSTOM BANNER**
**GrĂŒnde:**
-- Nur 1 Dienst â CMP wĂ€re Overkill
+- 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
+- Schneller (<5KB vs. 50-100KB fĂŒr CMP)
+- Kostenlos
---
@@ -54,29 +57,31 @@
### Banner (Primary):
```
âââââââââââââââââââââââââââââââââââââââââââ
-â đȘ Diese Website nutzt Cookies â
+â Website-Analyse â
â â
-â Text: Self-Hosted, Deutschland, keine â
-â Weitergabe an Dritte... â
+â Text: Cookieless Analytics, Self- â
+â Hosted in Deutschland, keine â
+â Weitergabe an Dritte... â
â â
-â [Details & Einstellungen] â
-â [â Alle akzeptieren] [â Nur notw.] â
+â [Details & Einstellungen] â
+â [Alles akzeptieren] [Nur notwendige] â
âââââââââââââââââââââââââââââââââââââââââââ
```
### Settings Modal:
```
-âââââââââââââââââââââââââââââââââââ
-â Cookie-Einstellungen [â] â
-âââââââââââââââââââââââââââââââââââ€
-â â Notwendig (immer aktiv) â
-â â Statistik & Analyse â
-â ââ IntelSight Analytics â
-â âą _insights_session (30min)â
-â âą Deutschland, kein 3rd â
-â â
-â [Auswahl speichern] [Alle â] â
-âââââââââââââââââââââââââââââââââââ
+âââââââââââââââââââââââââââââââââââââââ
+â Analyse-Einstellungen [Ă] â
+âââââââââââââââââââââââââââââââââââââââ€
+â â Notwendig (immer aktiv) â
+â â Statistik & Analyse â
+â ââ AegisSight Analytics (Umami) â
+â âą Keine Cookies â
+â âą Keine IP-Speicherung â
+â âą Self-Hosted, Deutschland â
+â â
+â [Auswahl speichern] [Alle akz.] â
+âââââââââââââââââââââââââââââââââââââââ
```
---
@@ -84,64 +89,82 @@
## **Texte (DE/EN)**
**Deutsch:**
-- Titel: "Diese Website nutzt Cookies đȘ"
-- Text: "Selbst gehostet, Deutschland, keine Dritte..."
-- Buttons: "Alle akzeptieren" / "Nur notwendige"
+- Titel: "Website-Analyse"
+- Text: "Wir nutzen cookielose Analyse-Software auf unserem eigenen Server in Deutschland. Es werden keine persönlichen Daten gespeichert und nichts an Dritte weitergegeben."
+- Buttons: "Alles akzeptieren" / "Nur notwendige"
**Englisch:**
-- Title: "This website uses cookies đȘ"
-- Text: "Self-hosted, Germany, no third parties..."
+- Title: "Website Analytics"
+- Text: "We use cookieless analytics software on our own server in Germany. No personal data is stored and nothing is shared with third parties."
- Buttons: "Accept all" / "Only necessary"
---
-# PHASE 3: IMPLEMENTATIONSPLAN â
+# PHASE 3: IMPLEMENTATIONSPLAN
-## **3.1 Gating-Pattern (Opt-In)**
+## **3.1 Gating-Pattern**
```
Page Load
â
-Check LocalStorage['insights-consent']
+Check LocalStorage['analytics-consent']
â
âââ null â Show Banner + Block Tracking
- âââ 'accepted' â Load /insights/t.js
+ âââ 'accepted' â Load Umami Script
âââ 'rejected' â Block Tracking
```
-**Kritisch:** Script `/insights/t.js` wird ERST nach Zustimmung geladen!
+**Ablauf:** Das Umami-Script `/analytics-und-so/datenblick.js` wird erst nach Zustimmung geladen.
---
-## **3.2 Storage-Schema**
+## **3.2 Script-Einbindung**
+
+### Umami Tracking-Script (wird dynamisch geladen bei Consent):
+
+```html
+
+```
+
+### API-Endpoint:
+```
+POST /analytics-und-so/api/erfassen
+```
+
+---
+
+## **3.3 Storage-Schema**
### LocalStorage Keys:
```javascript
// Consent Status
-"insights-consent": {
+"analytics-consent": {
value: "accepted" | "rejected",
- expires: 1730832000000 // Timestamp
+ expires: 1774051200000 // Timestamp (12 Monate)
}
// Consent Details (Audit-Trail)
-"insights-consent-details": {
- timestamp: "2025-11-09T18:00:00Z",
- version: "1.0",
+"analytics-consent-details": {
+ timestamp: "2026-03-20T12:00:00Z",
+ version: "2.0",
categories: { necessary: true, analytics: true },
language: "de",
- userAgent: "Mozilla/5.0...",
gpcSignal: false
}
```
---
-## **3.3 Footer-Link (Persistent)**
+## **3.4 Footer-Link (Persistent)**
```html
```
@@ -149,297 +172,183 @@ Check LocalStorage['insights-consent']
---
-## **3.4 Re-Prompt Regeln**
+## **3.5 Re-Prompt Regeln**
**Banner erneut zeigen bei:**
1. Consent abgelaufen (nach 12 Monaten)
-2. Version-Change (neue Dienste hinzugefĂŒgt)
+2. Version-Change (z.B. 2.0 â 2.1)
3. User löscht LocalStorage
-4. Click auf "Cookie-Einstellungen"
-5. GPC-Signal erkannt (optional)
+4. Klick auf "Analyse-Einstellungen"
---
-## **3.5 Global Privacy Control (GPC)**
+## **3.6 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');
+ localStorage.setItem('analytics-consent', JSON.stringify({
+ value: 'rejected',
+ expires: Date.now() + 365 * 24 * 60 * 60 * 1000
+ }));
}
```
-**Rechtlich:** CCPA-bindend (Kalifornien), EU empfohlen
-
---
-# PHASE 4: UMSETZUNG + TESTS â
+# PHASE 4: UMSETZUNG + TESTS
-## **4.1 Dateien erstellt**
+## **4.1 Dateien**
-### **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)
+### **1. cookie-consent.css**
- 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)
+### **2. cookie-consent.js**
- Consent Management Logic
- GPC Detection
- LocalStorage mit Expiry
- Multilingual (DE/EN)
- Public API
- Version Control
+- Dynamisches Laden von `/analytics-und-so/datenblick.js`
-### **4. DATENSCHUTZ_ANALYTICS.md**
+### **3. 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)
+- **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)
+- **Accessibility** (ARIA, Focus-Trap, Keyboard)
+- **Responsive** (Mobile-optimiert)
+- **Public API** (programmatischer Zugriff)
+- **Cookieless Tracking** (keine Cookies nötig)
---
## **4.3 Test-Checkliste**
-### **Desktop Tests:**
+### **Funktional:**
+- [ ] Banner erscheint beim ersten Besuch
+- [ ] "Alles akzeptieren" lÀdt `/analytics-und-so/datenblick.js`
+- [ ] "Nur notwendige" blockiert Script-Laden
+- [ ] Re-Visit: Kein Banner (Consent gespeichert)
+- [ ] Footer-Link öffnet Banner erneut
+- [ ] Widerruf funktioniert (Accept â Reject)
+- [ ] GPC-Signal wird erkannt und respektiert
+- [ ] Version-Change löst Re-Prompt aus
-- [ ] **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
+### **Script-Integration:**
+- [ ] Script hat korrektes `data-website-id="598ef5fd-d2dc-4540-9e65-602889981dac"`
+- [ ] Pageview wird an `/analytics-und-so/api/erfassen` gesendet
+- [ ] Keine Cookies im Browser nach Tracking
-- [ ] **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
+### **Accessibility & Responsive:**
+- [ ] Keyboard-Navigation funktioniert (Tab, Enter, Esc)
+- [ ] Screen Reader liest Banner korrekt vor
+- [ ] Mobile: Buttons sind touchbar, kein horizontaler Scroll
---
## **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 | - |
+| Browser | Version | Status |
+|---------|---------|--------|
+| Chrome | 120+ | - |
+| Firefox | 121+ | - |
+| Safari | 17+ | - |
+| Edge | 120+ | - |
+| Chrome Mobile | 120+ | - |
+| Safari iOS | 17+ | - |
**Minimum Support:** ES6 (2015+), LocalStorage, Fetch API
---
-# PHASE 5: DATENSCHUTZERKLĂRUNG â
+# PHASE 5: DATENSCHUTZERKLĂRUNG
-## **5.1 Textbausteine erstellt**
+## **5.1 Textbausteine**
**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
+- Art und Umfang der Datenverarbeitung
+- Rechtsgrundlage (Art. 6 Abs. 1 lit. f DSGVO - berechtigtes Interesse)
+- Hinweis auf cookieloses Tracking
+- Keine IP-Speicherung, kein Fingerprinting
+- Self-Hosted auf eigenem Server (Deutschland)
+- Keine DatenĂŒbermittlung an Dritte
+- Widerruf der Einwilligung
+- GPC-UnterstĂŒtzung
+- Betroffenenrechte (Art. 15-21 DSGVO)
---
## **5.2 Integration in Website**
-### **Datenschutz-Seite:**
-
```html
Wir nutzen AegisSight Analytics (Umami), eine cookielose, datenschutzfreundliche
+ Analyse-Software. Diese wird auf unserem eigenen Server in Deutschland betrieben.
+ Es werden keine Cookies gesetzt, keine IP-Adressen gespeichert und kein
+ Fingerprinting eingesetzt. Die erhobenen Daten sind nicht auf einzelne Personen
+ rĂŒckfĂŒhrbar.4. Website-Analyse
-
+