Release-Vorbereitung: Proxy, Kostenoptimierung, Freemium, Store-Assets

- Backend-Proxy (Cloudflare Worker in proxy/): API-Key serverseitig,
  Modell-Whitelist, max_tokens-Deckel, Tageslimits pro Gerät und IP
- Modell-Split: Analyse auf Sonnet 5, Übersetzung/Antwort auf Haiku 4.5
- Bild-Downscaling auf 2000px vor dem Upload (ScanScreen)
- Expo SDK 56 -> 57 Upgrade
- Freemium: 3 Gratis-Analysen mit lokalem Zähler und Paywall-Hinweis
- Einstellungen: API-Key-Feld nur noch im Dev-Modus (NUTZT_PROXY)
- Build-Setup: Bundle-IDs, eas.json, Splash-Screen-Plugin
- Tests: jest-expo + 17 Tests für die Ampel-/Fristlogik
- Rechtliches: Datenschutzerklärung (Entwurf), Webseite (webseite/,
  live auf behoerdenklar.pages.dev), Store-Texte (store/)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 14:14:00 +02:00
parent 88c49e1b54
commit 9dc1d8d87b
26 changed files with 6587 additions and 480 deletions

149
webseite/datenschutz.html Normal file
View File

@@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Datenschutzerklärung BehördenKlar</title>
<meta name="robots" content="noindex">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
color: #1a1a2e; background: #f4f8fb; line-height: 1.7;
}
.wrap { max-width: 640px; margin: 0 auto; padding: 32px 20px 64px; }
h1 { font-size: 28px; color: #144d8c; margin: 24px 0 4px; }
.stand { color: #4a5568; margin-bottom: 16px; }
h2 { font-size: 20px; color: #144d8c; margin: 24px 0 8px; }
h3 { font-size: 17px; color: #1a1a2e; margin: 16px 0 6px; }
p, li { margin-bottom: 8px; }
ul { padding-left: 24px; }
.karte {
background: #fff; border-radius: 16px; padding: 24px;
box-shadow: 0 2px 8px rgba(20, 77, 140, 0.08);
}
a { color: #1a6bc4; }
.zurueck { display: inline-block; margin-top: 24px; }
</style>
</head>
<body>
<div class="wrap">
<h1>Datenschutzerklärung</h1>
<p class="stand">für die App „BehördenKlar" — Stand: 14.07.2026</p>
<div class="karte">
<h2>1. Verantwortlicher</h2>
<p>
Justin Klein<br>
Am Schwimmbad 10<br>
67722 Winnweiler<br>
E-Mail: <a href="mailto:behoerdenbriefhelfer@gmail.com">behoerdenbriefhelfer@gmail.com</a>
</p>
<h2>2. Was macht die App?</h2>
<p>
BehördenKlar hilft Ihnen, Behördenbriefe zu verstehen: Sie fotografieren
einen Brief, und eine Künstliche Intelligenz (KI) erklärt den Inhalt in
einfacher Sprache, findet Fristen und Termine und hilft beim Antworten.
</p>
<h2>3. Welche Daten werden verarbeitet?</h2>
<h3>a) Brieffotos und PDF-Dateien (nur mit Ihrer Einwilligung)</h3>
<p>Wenn Sie einen Brief scannen, wird das Foto bzw. die PDF-Datei zur Analyse übertragen an:</p>
<ul>
<li>
<strong>Unseren Server</strong> (Cloudflare Workers, Anbieter:
Cloudflare, Inc., USA) — er leitet die Anfrage nur weiter und
speichert den Briefinhalt nicht.
</li>
<li>
<strong>Anthropic PBC (USA)</strong> — den Betreiber des KI-Modells
„Claude". Anthropic verarbeitet die Daten ausschließlich zur
Erstellung der Analyse, speichert sie maximal 30 Tage (zur
Missbrauchserkennung) und verwendet sie nicht zum Training der KI.
</li>
</ul>
<p>
<strong>Wichtig:</strong> Behördenbriefe können sehr persönliche und
besondere Kategorien von Daten enthalten (z. B. Angaben zu
Sozialleistungen, Gesundheit oder finanzieller Situation). Die Analyse
erfolgt deshalb nur nach Ihrer ausdrücklichen Einwilligung, die Sie vor
dem ersten Scan erteilen (Art. 6 Abs. 1 lit. a, Art. 9 Abs. 2 lit. a
DSGVO). Sie können die Einwilligung jederzeit widerrufen, indem Sie in
den Einstellungen „Alle Daten löschen" wählen.
</p>
<h3>b) Analyse-Ergebnisse, Übersetzungen, Antwort-Entwürfe</h3>
<p>
Alle Ergebnisse werden ausschließlich lokal auf Ihrem Gerät gespeichert.
Wir betreiben keine Nutzerkonten und keine Cloud-Speicherung Ihrer Briefe.
</p>
<h3>c) Anonyme Geräte-Kennung</h3>
<p>
Die App erzeugt eine zufällige, anonyme Kennung. Sie enthält keine
Angaben über Sie oder Ihr Gerät und dient ausschließlich dazu, ein
tägliches Nutzungslimit pro Installation durchzusetzen (Schutz vor
Missbrauch, Art. 6 Abs. 1 lit. f DSGVO). Sie wird zusammen mit einem
Tageszähler für maximal 48 Stunden auf unserem Server gespeichert.
</p>
<h3>d) Kalender, Erinnerungen, Vorlesen</h3>
<p>
Kalendereinträge und Frist-Erinnerungen werden nur auf Ihrem Gerät
angelegt (mit Ihrer Erlaubnis über die iOS-/Android-Berechtigungen).
Die Vorlese-Funktion nutzt die Sprachausgabe Ihres Geräts. Dabei werden
keine Daten an uns übertragen.
</p>
<h2>4. Übermittlung in die USA</h2>
<p>
Anthropic PBC und Cloudflare, Inc. haben ihren Sitz in den USA. Die
Übermittlung stützt sich auf den Angemessenheitsbeschluss der
EU-Kommission zum EU-U.S. Data Privacy Framework bzw. auf
EU-Standardvertragsklauseln (Art. 46 DSGVO).
</p>
<h2>5. Speicherdauer</h2>
<ul>
<li>Brieffotos bei Anthropic: maximal 30 Tage, danach automatische Löschung</li>
<li>Anonyme Geräte-Kennung + Tageszähler auf unserem Server: maximal 48 Stunden</li>
<li>Daten auf Ihrem Gerät: bis Sie sie löschen („Alle Daten löschen" in den Einstellungen oder Deinstallation der App)</li>
</ul>
<h2>6. Ihre Rechte</h2>
<p>
Sie haben nach der DSGVO das Recht auf Auskunft (Art. 15), Berichtigung
(Art. 16), Löschung (Art. 17), Einschränkung der Verarbeitung (Art. 18),
Datenübertragbarkeit (Art. 20) und Widerspruch (Art. 21). Außerdem
können Sie sich bei einer Datenschutz-Aufsichtsbehörde beschweren
(Art. 77 DSGVO), z. B. beim Landesbeauftragten für den Datenschutz und
die Informationsfreiheit Rheinland-Pfalz.
</p>
<p>
Da wir keine Nutzerkonten führen, liegen die meisten Daten nur auf
Ihrem Gerät — dort können Sie sie selbst einsehen und löschen. Für
Anfragen zu den serverseitig verarbeiteten Daten wenden Sie sich an:
<a href="mailto:behoerdenbriefhelfer@gmail.com">behoerdenbriefhelfer@gmail.com</a>
</p>
<h2>7. Keine Rechtsberatung</h2>
<p>
BehördenKlar erklärt Briefe verständlich, ersetzt aber keine
Rechtsberatung. Bei rechtlich wichtigen Entscheidungen wenden Sie sich
an eine Beratungsstelle oder eine Anwältin/einen Anwalt.
</p>
<h2>8. Änderungen</h2>
<p>
Wir passen diese Datenschutzerklärung an, wenn sich die App oder die
Rechtslage ändert. Die aktuelle Fassung finden Sie immer auf dieser
Seite.
</p>
</div>
<a class="zurueck" href="index.html">← Zurück zur Startseite</a>
</div>
</body>
</html>

46
webseite/impressum.html Normal file
View File

@@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Impressum BehördenKlar</title>
<meta name="robots" content="noindex">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
color: #1a1a2e; background: #f4f8fb; line-height: 1.7;
}
.wrap { max-width: 640px; margin: 0 auto; padding: 32px 20px 64px; }
h1 { font-size: 28px; color: #144d8c; margin: 24px 0 16px; }
.karte {
background: #fff; border-radius: 16px; padding: 24px;
box-shadow: 0 2px 8px rgba(20, 77, 140, 0.08);
}
a { color: #1a6bc4; }
.zurueck { display: inline-block; margin-top: 24px; }
</style>
</head>
<body>
<div class="wrap">
<h1>Impressum</h1>
<div class="karte">
<p><strong>Angaben gemäß § 5 DDG:</strong></p>
<p style="margin-top: 12px;">
Justin Klein<br>
Am Schwimmbad 10<br>
67722 Winnweiler<br>
Deutschland
</p>
<p style="margin-top: 12px;">
E-Mail: <a href="mailto:behoerdenbriefhelfer@gmail.com">behoerdenbriefhelfer@gmail.com</a>
</p>
<p style="margin-top: 16px;">
<strong>Verantwortlich für den Inhalt:</strong><br>
Justin Klein (Anschrift wie oben)
</p>
</div>
<a class="zurueck" href="index.html">← Zurück zur Startseite</a>
</div>
</body>
</html>

75
webseite/index.html Normal file
View File

@@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BehördenKlar Behördenbriefe einfach verstehen</title>
<meta name="description" content="BehördenKlar erklärt Behördenbriefe in einfacher Sprache. Support und Kontakt.">
<style>
:root { color-scheme: light; }
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
color: #1a1a2e; background: #f4f8fb; line-height: 1.7;
}
.wrap { max-width: 640px; margin: 0 auto; padding: 32px 20px 64px; }
header { text-align: center; padding: 48px 0 32px; }
.logo { font-size: 56px; }
h1 { font-size: 32px; margin-top: 12px; color: #144d8c; }
.slogan { font-size: 18px; color: #4a5568; margin-top: 8px; }
.karte {
background: #fff; border-radius: 16px; padding: 24px;
margin-top: 24px; box-shadow: 0 2px 8px rgba(20, 77, 140, 0.08);
}
h2 { font-size: 20px; color: #144d8c; margin-bottom: 12px; }
a { color: #1a6bc4; }
.kontakt { font-size: 18px; font-weight: 600; }
footer { text-align: center; margin-top: 40px; font-size: 15px; color: #4a5568; }
footer a { margin: 0 10px; }
</style>
</head>
<body>
<div class="wrap">
<header>
<div class="logo">📬</div>
<h1>BehördenKlar</h1>
<p class="slogan">Behördenbriefe fotografieren und einfach verstehen.</p>
</header>
<div class="karte">
<h2>Was ist BehördenKlar?</h2>
<p>
BehördenKlar ist eine App für iPhone: Sie fotografieren einen Brief vom
Amt, und die App erklärt ihn in einfacher Sprache — mit allen Fristen,
Terminen und einer Checkliste, was zu tun ist. Auf Wunsch übersetzt in
9 weitere Sprachen.
</p>
</div>
<div class="karte">
<h2>Support &amp; Kontakt</h2>
<p>
Sie haben eine Frage, ein Problem mit der App oder einen Verbesserungsvorschlag?
Schreiben Sie uns — wir antworten so schnell wie möglich:
</p>
<p class="kontakt" style="margin-top: 12px;">
📧 <a href="mailto:behoerdenbriefhelfer@gmail.com">behoerdenbriefhelfer@gmail.com</a>
</p>
</div>
<div class="karte">
<h2>Wichtiger Hinweis</h2>
<p>
BehördenKlar erklärt Briefe verständlich, ersetzt aber keine
Rechtsberatung. Bei rechtlich wichtigen Entscheidungen wenden Sie sich
bitte an eine Beratungsstelle oder eine Anwältin/einen Anwalt.
</p>
</div>
<footer>
<a href="impressum.html">Impressum</a> ·
<a href="datenschutz.html">Datenschutzerklärung</a>
</footer>
</div>
</body>
</html>