Datenschutz-Ausbau: Archiv-Verschlüsselung, App-Sperre, Auto-Löschen

- Brief-Archiv jetzt AES-256-GCM-verschlüsselt (expo-crypto, Schlüssel im
  SecureStore); Migration alter Klartext-Bestände beim ersten Laden;
  im Simulator auf der Platte verifiziert (nur Chiffrat, kein Klartext)
- AppSchutz-Komponente: optionale App-Sperre (Face ID / Geräte-Code,
  expo-local-authentication) + Sichtschutz im App-Umschalter
- Auto-Löschen alter Briefe (30/90 Tage, Einstellungen), pure Filter-
  Funktion mit Tests
- UTF-8-Helfer (Umlaute/Arabisch/Emoji-sicher) mit Tests; gesamt 30 Tests
- Einstellungen: neuer Abschnitt "Sicherheit"
- Datenschutzerklärung (Web + Entwurf) um die neuen Maßnahmen ergänzt
- Neu: rechtliches/datenschutz-factsheet.md für Kooperations-Pitches
- EU-Verarbeitung geprüft: inference_geo bietet aktuell nur us/global,
  keine EU-Option (Haiku 4.5 gar nicht) — als Ausbaupfad dokumentiert

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 15:30:19 +02:00
parent 12ebf514fb
commit ad1c2bf76c
16 changed files with 639 additions and 18 deletions

View File

@@ -4,7 +4,8 @@
*/
import { create } from 'zustand';
import { BriefEintrag, Uebersetzung, AntwortTyp } from '../types';
import { ladeBriefe, speichereBriefe } from '../services/storage';
import { holeAutoLoeschTage, ladeBriefe, speichereBriefe } from '../services/storage';
import { filtereAlteBriefe } from '../utils/aufbewahrung';
interface AppState {
briefe: BriefEintrag[];
@@ -28,7 +29,14 @@ export const useAppStore = create<AppState>((set, get) => ({
geladen: false,
initialisiere: async () => {
const briefe = await ladeBriefe();
let briefe = await ladeBriefe();
// Auto-Löschen (Datensparsamkeit): abgelaufene Briefe beim Start entfernen
const aufbewahrungTage = await holeAutoLoeschTage();
const gefiltert = filtereAlteBriefe(briefe, aufbewahrungTage);
if (gefiltert.length !== briefe.length) {
briefe = gefiltert;
await speichereBriefe(briefe);
}
set({ briefe, geladen: true });
},