Stratify
Legal and compliance

Dsgvo Data Flow

docs/compliance/dsgvo-data-flow.md

Source updated 03. Aug. 2026

DSGVO — Datenfluss-Map (v2.1 pre-license)

Status: Operativ-gültiges Dokument für Phase A. Stand 2026-05-19. ROPA-ready. Owner: Antonios. Update bei jedem Processor-Wechsel.

1. Controller / Joint Controllers / Processors

AkteurRolleSitz
Stratify (wait, what.)Controller (B2C-Subscriber-Daten, Pilot-Daten, Partner-Daten, Audit-Log)Schweiz (Zürich)
SupabaseProcessor (DB + Auth + Storage + Realtime)EU (eu-central-1)
VercelProcessor (Hosting, Logs, Observability)EU (fra1)
ResendProcessor (Transactional + Broadcast Email)EU + US (Email-Routing)
Stripe Payments Europe LtdJoint Controller (Zahlungsdaten)Irland
PostHogProcessor (Analytics)EU (eu.i.posthog.com)
SentryProcessor (Error-Telemetrie)EU
Apple Push Notification ServiceProcessor (Push-Routing iOS)US
Google Firebase / FCMProcessor (Push-Routing Android)US/EU
Expo Push APISub-Processor (Push-Tokens)US

2. Datenkategorien

KategorieQuelleSpeicherortRetention
Account (email, user_id, Sprache)Sign-up (Magic Link)Supabase EU subscribersBis Account-Löschung; +30 Tage Backup
Aktives MandatSelf-select B2CSupabase EU user_active_mandateWie Account
Subscription-StatusStripe WebhookSupabase EU subscribers.statusWie Account
Stripe-Customer-IDStripe CheckoutSupabase EU subscribers.stripe_customer_idWie Account
Zahlungsdaten (Karten, IBAN)Stripe CheckoutStripe Ireland (Stratify hat keinen Zugang)Stripe-eigene Retention
Web-Push-Subscription (Endpoint, Schlüssel)Browser APISupabase EU web_push_subscriptionsBis Revoke oder Endpoint-410
Expo Push TokenOS APISupabase EU expo_push_tokensBis Revoke oder DeviceNotRegistered
Waitlist-Email + SourceFormSupabase EU waitlist24 Monate ab Eintrag
Referral-Code-CookieBrowser CookieBrowser (90 Tage) + ggf. subscribers.referred_by90 Tage / Account-Lebensdauer
Signal-Delivery-LogAppSupabase EU signal_deliveries24 Monate (Phase A); flippable auf 7 Jahre bei FMA-Lizenz
Audit-Log (chain-hashed)AppSupabase EU audit_log24 Monate (Phase A); flippable auf 7 Jahre bei FMA-Lizenz
PostHog-EventsWeb/MobilePostHog EU12 Monate Default-Retention
Sentry-ErrorsWeb/MobileSentry EU30 Tage Default; 90 Tage auf Paid-Plan
Email-Inhalt (Signal-Broadcast)App → ResendResend Logs7 Tage in Resend; permanent im Stratify-Audit-Log
Partner-User-Antrag (legal name, applicant name)/partners/sandboxSupabase EU partner_usersWie Account
API-Request-Log (Rate-Limit)B2B-API CallsSupabase EU api_request_log24h rolling (daily purge geplant)

3. Rechtsgrundlagen (Art. 6 DSGVO)

VerarbeitungGrundlage
Subscriber-Account + Mandat-WahlArt. 6(1)(b) Vertragsdurchführung
Email-Signal-Broadcast (Paid Subs)Art. 6(1)(b)
Email-Signal-Broadcast (Free Subs / Newsletter)Art. 6(1)(a) Einwilligung beim Sign-up
Stripe-ZahlungArt. 6(1)(b)
Audit-Log + Signal-Delivery-LogArt. 6(1)(c) Compliance / berechtigtes Interesse Art. 6(1)(f)
PostHog / SentryArt. 6(1)(f) berechtigtes Interesse + Opt-out im UI
Referral-CookieArt. 6(1)(f) + DSGVO/ePrivacy: nur funktionaler Cookie, kein Tracking-Pixel
Partner-User-AntragArt. 6(1)(b) Vertragsanbahnung

4. Datenflüsse — Signal-Lebenszyklus

Pilot (User mit role=pilot)
  → /pilot/strategy/new → publishSignalAction
  → publishSignal()  ←  packages/shared/src/signal.schema.ts
       writes:
         signals (Supabase)
         signal_deliveries × N (Supabase)
         audit_log (Supabase, chain-hashed)

Cron drainers (every 2 min)
  → drain-email      → Resend (EU+US)     → Empfänger-Inbox
  → drain-push       → web-push lib       → Browser-VAPID-Endpoint
  → drain-expo-push  → Expo Push API (US) → APNs / FCM → Gerät
  → drain-webhooks   → Partner-URL (HTTPS HMAC-SHA256-signed)

Alle Steps schreiben Status zurück in signal_deliveries. Audit-Eintrag pro Step.

5. Datenflüsse — Subscriber-Lebenszyklus

Sign-up
  → Supabase Auth (Magic Link via Resend)
  → auth.user_created webhook → POST /api/webhooks/supabase
  → subscribers row + audit_log

Upgrade
  → /upgrade → Stripe Checkout (Ireland)
  → checkout.completed → POST /api/webhooks/stripe
  → subscribers.status='paid' + subscribers.stripe_customer_id + audit_log

Unsubscribe
  → /account/unsubscribe → subscribers.status='cancelled'
  → user opens Stripe Portal → cancels → customer.subscription.deleted → audit_log
  → bei period_end: drainer hört auf, dem User Email-Signale zu senden

6. Drittlandsübermittlungen

  • Resend (Email): Routing via US-Provider möglich. Verarbeitung primär EU, Übermittlung in Drittland für Zustellung an US-Empfänger gestützt auf SCC + EU-US Data Privacy Framework.
  • APNs (Apple) / FCM (Google) / Expo Push API: notwendig zur App-Funktion. SCC + DPF.
  • Stripe Ireland (EU); Stripe-eigene Subprocessors (US) via SCC.

7. Subjects-Rechte (Art. 15–22 DSGVO)

RechtImplementation
Auskunft (Art. 15)Manuelle Auskunftserteilung via DPO-Mailbox ([email protected]). Mid-term: Export-Endpoint auf /account.
Berichtigung (Art. 16)/account/* Self-Service.
Löschung (Art. 17)Manuell durch DPO-Anfrage; Supabase Auth Cascade-Delete entfernt alle FK-Rows. Audit-Log behält Hash, anonymisiert Payload (subscriber.id → tombstone).
Einschränkung (Art. 18)Manuell.
Datenübertragbarkeit (Art. 20)NDJSON-Export geplant für Phase B.
Widerspruch (Art. 21)/account/unsubscribe + Email-Unsub-Link.
Automatisierte Entscheidungen (Art. 22)Keine. Signale sind 1:N redaktionell.

8. Datenschutzfolgenabschätzung (DSFA) — Aufschiebung

  • Phase A erfordert keine DSFA (Art. 35), da:
  • keine systematische Profilbildung (1:N-Signale)
  • keine sensiblen Datenkategorien (Art. 9)
  • kein automatisches Entscheidungssystem (Art. 22)
  • DSFA wird re-evaluiert bei Phase C (Suitability-Engine, KYC, Stripe Connect Pilot-Payouts).

9. Sicherheits-Maßnahmen (Art. 32)

  • TLS 1.3 für alle Endpoints (Vercel + Supabase).
  • Bcrypt-equivalent (SHA-256 + secret prefix) für Partner-API-Keys.
  • Web-Push-Subs sind self-RLS (User darf nur eigene sehen).
  • Audit-Log append-only via Postgres-Trigger + chain-hashed (apps/web/lib/audit/chain.ts).
  • Sentry: PII Sanitization aktiviert.
  • PostHog: kein Autocapture; expliziter identify() nur post-Sign-up.
  • Backups: Supabase PITR (siehe docs/runbooks/db-recovery.md).

10. Auftragsverarbeitungsverträge (AVV / DPA)

ProcessorDPA-LinkStand
Supabasehttps://supabase.com/legal/dpabeizog
Vercelhttps://vercel.com/legal/dpabeizog
Resendhttps://resend.com/legal/dpabeizog
Stripehttps://stripe.com/legal/dpabeizog
PostHoghttps://posthog.com/legal/dpabeizog
Sentryhttps://sentry.io/legal/dpabeizog

(Alle Links Stand 2026-05-19; Antonios reviewed quartalsweise.)

11. Decision Log

DatumEntscheidungAktor
2026-05-19v2.1 Processor-Map etabliert (Supabase ersetzt Clerk + Neon + S3)Toby
2026-05-19Audit-Log-Retention 2y in Phase A, 7y bei FMA-GrantToby
TBDCounsel-Review v2.1Antonios

v2.1 — 2026-05-19. ROPA-ready.