Datenschutz & Compliance
Sämtliche personenbezogenen Daten und alle KI-Anfragen verbleiben in der Europäischen Union. Dieser Nachweis ist Vertragsbestandteil für öffentliche Auftraggeber (z. B. Land Hessen).
| Komponente | Anbieter | Region | Zweck |
|---|---|---|---|
| Web-App (Frontend + SSR) | Cloudflare Workers (EU) | 🇪🇺 EU (Frankfurt, Amsterdam, Dublin u. a.) | Auslieferung der App, serverseitiges Rendering |
| Datenbank & Auth | Managed Postgres (Supabase, EU) | 🇪🇺 EU — Frankfurt (eu-central-1) | Nutzerdaten, Lernfortschritt, Klassen, Lizenzpool |
| Datei-Speicher | Object Storage (EU) | 🇪🇺 EU — Frankfurt | Avatare, Uploads, optionale PDF-Einwilligungen |
| KI-Inferenz (Gateway) | AI-Gateway (EU) → Google Vertex AI | 🇪🇺 EU (europe-west*) | Diagnose, Bewertung Freitext, Lernvorschläge |
| Transaktionale E-Mail | Resend (EU) | 🇪🇺 EU — Irland | Auth-Mails, Eltern-Einwilligung Double-Opt-In |
Jeder KI-Aufruf der App durchläuft serverseitig den Modul-Guard src/lib/ai-eu-guard.ts. Modelle außerhalb der Allowlist werden hart abgelehnt (Fehler, kein Fallback). Damit ist ausgeschlossen, dass Anfragen an US-only-Modelle (z. B. OpenAI Standard-Endpunkte) abgesetzt werden.
google/gemini-3-flash-preview— Google Vertex AI, europe-westgoogle/gemini-2.5-flash— Google Vertex AI, europe-westgoogle/gemini-2.5-flash-lite— Google Vertex AI, europe-westgoogle/gemini-2.5-pro— Google Vertex AI, europe-westexport function assertEuModel(model: string) {
if (!EU_ALLOWED_MODELS.includes(model)) {
throw new Error(`[EU-AI-Guard] Modell "${model}" nicht in EU-Allowlist`);
}
}
// Jeder fetch zum AI-Gateway läuft über euChatCompletion(),
// das vor dem Request assertEuModel() aufruft und den
// Marker-Header X-EU-Routing: enforced setzt.Stand der Allowlist
Änderungen an der Modell-Allowlist werden versioniert (Git-Historie der Datei src/lib/ai-eu-guard.ts) und sind im Audit-Log nachvollziehbar.