From 8f9f988d57fec56cb1034b1dbf5c79e9ba099df6 Mon Sep 17 00:00:00 2001
From: JUSN
Date: Wed, 15 Jul 2026 08:40:15 +0200
Subject: [PATCH] Landingpage mit Warteliste + Aktions-Code (5 statt 3
Gratis-Analysen)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Webseite: neue Landingpage (Hero, Features, Warteliste-Anmeldung per
Mail-Interim, FAQ); Datenschutz um Warteliste-Abschnitt ergänzt
- App: Aktions-Code-Einlösung in den Einstellungen (FRUEHSTART -> 5
Gratis-Analysen), ScanScreen nutzt dynamisches Kontingent
- Newsletter-Dienst (Brevo/MailerLite) folgt: Formular-Embed ersetzt
dann den Mail-Button, Datenschutz-Platzhalter ausfuellen
Co-Authored-By: Claude Fable 5
---
rechtliches/datenschutzerklaerung.md | 16 ++-
src/screens/EinstellungenScreen.tsx | 63 +++++++++-
src/screens/ScanScreen.tsx | 19 ++-
src/services/storage.ts | 28 +++++
webseite/datenschutz.html | 17 ++-
webseite/index.html | 176 +++++++++++++++++++++------
6 files changed, 275 insertions(+), 44 deletions(-)
diff --git a/rechtliches/datenschutzerklaerung.md b/rechtliches/datenschutzerklaerung.md
index 7a1b8ca..425f2ca 100644
--- a/rechtliches/datenschutzerklaerung.md
+++ b/rechtliches/datenschutzerklaerung.md
@@ -91,13 +91,25 @@ Gerät — dort können Sie sie selbst einsehen und löschen. Für Anfragen zu d
serverseitig verarbeiteten Daten wenden Sie sich an:
behoerdenbriefhelfer@gmail.com
-## 7. Keine Rechtsberatung
+## 7. Warteliste / Launch-Benachrichtigung (Webseite)
+
+Auf unserer Webseite können Sie sich für die Warteliste anmelden. Dabei
+verarbeiten wir Ihre E-Mail-Adresse auf Grundlage Ihrer Einwilligung
+(Art. 6 Abs. 1 lit. a DSGVO), ausschließlich für die Launch-Benachrichtigung
+und Informationen zur App. Abmeldung jederzeit möglich; die Adresse wird dann
+gelöscht.
+
+> [NACH BREVO/MAILERLITE-EINRICHTUNG ERGÄNZEN: Anbieter des
+> Newsletter-Dienstes als Auftragsverarbeiter benennen, z. B. „Brevo GmbH,
+> Köpenicker Str. 126, 10179 Berlin" + Double-Opt-in-Verfahren erwähnen.]
+
+## 8. Keine Rechtsberatung
BehördenKlar erklärt Briefe verständlich, ersetzt aber keine Rechtsberatung.
Bei rechtlich wichtigen Entscheidungen (z. B. Widerspruch) wenden Sie sich an
eine Beratungsstelle oder eine Anwältin/einen Anwalt.
-## 8. Änderungen
+## 9. Änderungen
Wir passen diese Datenschutzerklärung an, wenn sich die App oder die
Rechtslage ändert. Die aktuelle Fassung finden Sie immer in der App unter
diff --git a/src/screens/EinstellungenScreen.tsx b/src/screens/EinstellungenScreen.tsx
index 342bc5c..a4b32ee 100644
--- a/src/screens/EinstellungenScreen.tsx
+++ b/src/screens/EinstellungenScreen.tsx
@@ -8,7 +8,14 @@ import { Alert, ScrollView, StyleSheet, Text, TextInput, View } from 'react-nati
import * as Notifications from 'expo-notifications';
import { NativeStackScreenProps } from '@react-navigation/native-stack';
import { RootStackParamList } from '../types';
-import { holeApiKey, speichereApiKey, loescheAlleDaten } from '../services/storage';
+import {
+ BONUS_ANALYSEN,
+ holeApiKey,
+ holeBonusAktiv,
+ loeseBonusCodeEin,
+ loescheAlleDaten,
+ speichereApiKey,
+} from '../services/storage';
import { NUTZT_PROXY } from '../services/claudeClient';
import { useAppStore } from '../store/useAppStore';
import { GrossButton } from '../components/GrossButton';
@@ -21,11 +28,31 @@ export function EinstellungenScreen({ navigation }: Props) {
const [apiKey, setApiKey] = useState('');
const [keyVorhanden, setKeyVorhanden] = useState(false);
const [gespeichert, setGespeichert] = useState(false);
+ const [bonusCode, setBonusCode] = useState('');
+ const [bonusAktiv, setBonusAktiv] = useState(false);
useEffect(() => {
holeApiKey().then((k) => setKeyVorhanden(!!k));
+ holeBonusAktiv().then(setBonusAktiv);
}, []);
+ const codeEinloesen = async () => {
+ const erfolg = await loeseBonusCodeEin(bonusCode);
+ if (erfolg) {
+ setBonusAktiv(true);
+ setBonusCode('');
+ Alert.alert(
+ 'Code eingelöst! 🎉',
+ `Sie haben jetzt ${BONUS_ANALYSEN} kostenlose Brief-Analysen.`
+ );
+ } else {
+ Alert.alert(
+ 'Code ungültig',
+ 'Bitte prüfen Sie die Schreibweise. Den Code finden Sie in Ihrer Anmelde-E-Mail.'
+ );
+ }
+ };
+
const speichern = async () => {
await speichereApiKey(apiKey);
setKeyVorhanden(!!apiKey.trim());
@@ -94,6 +121,40 @@ export function EinstellungenScreen({ navigation }: Props) {
>
)}
+ Aktions-Code
+ {bonusAktiv ? (
+
+
+ Code eingelöst ✓
+ {' '}
+ — Sie haben {BONUS_ANALYSEN} kostenlose Analysen.
+
+ ) : (
+ <>
+
+ Sie haben sich auf behoerdenklar.pages.dev angemeldet? Lösen Sie
+ hier den Code aus Ihrer E-Mail ein.
+
+
+
+ >
+ )}
+
+
+
Datenschutz
diff --git a/src/screens/ScanScreen.tsx b/src/screens/ScanScreen.tsx
index 9c71d30..9d992c3 100644
--- a/src/screens/ScanScreen.tsx
+++ b/src/screens/ScanScreen.tsx
@@ -13,7 +13,12 @@ import { NativeStackScreenProps } from '@react-navigation/native-stack';
import { RootStackParamList, BriefEintrag } from '../types';
import { analysiereBrief } from '../services/analyse';
import { ClaudeFehler, NUTZT_PROXY } from '../services/claudeClient';
-import { GRATIS_ANALYSEN, holeAnzahlAnalysen, zaehleAnalyse } from '../services/storage';
+import {
+ GRATIS_ANALYSEN,
+ holeAnzahlAnalysen,
+ holeGratisKontingent,
+ zaehleAnalyse,
+} from '../services/storage';
import { planeErinnerungen } from '../services/erinnerungen';
import { useAppStore, neueId } from '../store/useAppStore';
import { GrossButton } from '../components/GrossButton';
@@ -54,17 +59,21 @@ export function ScanScreen({ navigation }: Props) {
const addBrief = useAppStore((s) => s.addBrief);
const [laedt, setLaedt] = useState(false);
const [verbraucht, setVerbraucht] = useState(0);
+ const [kontingent, setKontingent] = useState(GRATIS_ANALYSEN);
- // Zähler bei jedem Screen-Besuch frisch laden
+ // Zähler + Kontingent bei jedem Screen-Besuch frisch laden
+ // (Kontingent kann sich ändern, wenn in den Einstellungen ein
+ // Aktions-Code eingelöst wurde)
useFocusEffect(
useCallback(() => {
holeAnzahlAnalysen().then(setVerbraucht);
+ holeGratisKontingent().then(setKontingent);
}, [])
);
// Freemium gilt nur im Produktionsmodus (Proxy). Im Dev-Modus mit
// eigenem API-Key zahlt der Entwickler selbst — kein Limit nötig.
- const uebrig = GRATIS_ANALYSEN - verbraucht;
+ const uebrig = kontingent - verbraucht;
const kontingentLeer = NUTZT_PROXY && uebrig <= 0;
/** Prüft das Gratis-Kontingent; false = Analyse nicht starten. */
@@ -72,7 +81,7 @@ export function ScanScreen({ navigation }: Props) {
if (!kontingentLeer) return true;
Alert.alert(
'Gratis-Analysen aufgebraucht',
- `Sie haben Ihre ${GRATIS_ANALYSEN} kostenlosen Brief-Analysen genutzt. Bald können Sie hier ein Abo abschließen, um weiter Briefe zu analysieren.`
+ `Sie haben Ihre ${kontingent} kostenlosen Brief-Analysen genutzt. Bald können Sie hier ein Abo abschließen, um weiter Briefe zu analysieren.`
);
return false;
};
@@ -180,7 +189,7 @@ export function ScanScreen({ navigation }: Props) {
{kontingentLeer
? 'Gratis-Analysen aufgebraucht — Abo folgt in Kürze'
- : `Noch ${uebrig} von ${GRATIS_ANALYSEN} kostenlosen Analysen`}
+ : `Noch ${uebrig} von ${kontingent} kostenlosen Analysen`}
)}
diff --git a/src/services/storage.ts b/src/services/storage.ts
index e11737e..6cc3d15 100644
--- a/src/services/storage.ts
+++ b/src/services/storage.ts
@@ -25,6 +25,33 @@ const KEY_SCAN_ANZAHL = 'behoerdenklar_scan_anzahl';
*/
export const GRATIS_ANALYSEN = 3;
+/** Erhöhtes Kontingent für Warteliste-Anmelder (Code aus der Willkommens-Mail). */
+export const BONUS_ANALYSEN = 5;
+const KEY_BONUS = 'behoerdenklar_bonus';
+
+/**
+ * Aktions-Codes der Landingpage-Warteliste. Bewusst ein geteilter Code
+ * (kein Einmal-Code): Der "Schaden" bei Weitergabe sind 2 Extra-Analysen
+ * (~5 Cent) — dafür brauchen wir keinerlei Server-Logik.
+ */
+const GUELTIGE_CODES = ['FRUEHSTART'];
+
+export async function holeBonusAktiv(): Promise {
+ return (await AsyncStorage.getItem(KEY_BONUS)) === 'ja';
+}
+
+/** true = Code war gültig und wurde eingelöst. */
+export async function loeseBonusCodeEin(code: string): Promise {
+ if (!GUELTIGE_CODES.includes(code.trim().toUpperCase())) return false;
+ await AsyncStorage.setItem(KEY_BONUS, 'ja');
+ return true;
+}
+
+/** Aktuelles Gratis-Kontingent dieses Geräts (3, mit Aktions-Code 5). */
+export async function holeGratisKontingent(): Promise {
+ return (await holeBonusAktiv()) ? BONUS_ANALYSEN : GRATIS_ANALYSEN;
+}
+
// ---- API-Key (sensibel -> SecureStore) ----
export async function holeApiKey(): Promise {
@@ -113,6 +140,7 @@ export async function loescheAlleDaten(): Promise {
KEY_CONSENT,
KEY_GERAETE_ID,
KEY_SCAN_ANZAHL,
+ KEY_BONUS,
]);
await SecureStore.deleteItemAsync(KEY_API);
}
diff --git a/webseite/datenschutz.html b/webseite/datenschutz.html
index 69298c6..c99edfa 100644
--- a/webseite/datenschutz.html
+++ b/webseite/datenschutz.html
@@ -128,14 +128,27 @@
behoerdenbriefhelfer@gmail.com
- 7. Keine Rechtsberatung
+ 7. Warteliste / Launch-Benachrichtigung (Webseite)
+
+ Auf unserer Webseite können Sie sich für die Warteliste anmelden, um
+ benachrichtigt zu werden, wenn die App verfügbar ist. Dabei
+ verarbeiten wir Ihre E-Mail-Adresse auf Grundlage Ihrer Einwilligung
+ (Art. 6 Abs. 1 lit. a DSGVO). Wir verwenden die Adresse ausschließlich
+ für die Launch-Benachrichtigung und Informationen zur App — keine
+ Werbung Dritter, keine Weitergabe. Sie können sich jederzeit abmelden
+ (Link in jeder E-Mail oder formlos an
+ behoerdenbriefhelfer@gmail.com);
+ Ihre Adresse wird dann gelöscht.
+
+
+ 8. Keine Rechtsberatung
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.
- 8. Änderungen
+ 9. Änderungen
Wir passen diese Datenschutzerklärung an, wenn sich die App oder die
Rechtslage ändert. Die aktuelle Fassung finden Sie immer auf dieser
diff --git a/webseite/index.html b/webseite/index.html
index c1f0598..7288942 100644
--- a/webseite/index.html
+++ b/webseite/index.html
@@ -3,8 +3,8 @@
- BehördenKlar – Behördenbriefe einfach verstehen
-
+ BehördenKlar – Brief vom Amt? In 1 Minute verstehen.
+
+
📬
- BehördenKlar
- Behördenbriefe fotografieren – und einfach verstehen.
+ Brief vom Amt?
In 1 Minute verstehen.
+
+ BehördenKlar erklärt Behördenbriefe in einfacher Sprache —
+ mit allen Fristen, Terminen und dem, was Sie jetzt tun müssen.
+
+ 📱 Bald für iPhone verfügbar
+
+ Jetzt anmelden – 5 Gratis-Analysen sichern
+
So einfach geht es
-
Was ist BehördenKlar?
+
+
1
+
Brief fotografieren Einfach mit dem Handy — auch PDF möglich.
+
+
+
2
+
Sofort verstehen „Was will das Amt von mir?" in einfachen Worten. Auf Wunsch in 9 weiteren Sprachen.
+
+
+
3
+
Richtig reagieren Checkliste, Frist-Erinnerung und fertiger Antwort-Entwurf.
+
+
+
+
Was BehördenKlar kann
+
+
🚦Dringlichkeits-AmpelRot, Gelb oder Grün — Sie sehen sofort, wie eilig es ist.
+
🌐9 SprachenTürkçe, العربية, English, Русский, Українська und mehr.
+
✍️Antwort-HilfeFertige Entwürfe: Termin verschieben, Widerspruch, Unterlagen nachreichen.
+
⏰Nichts verpassenErinnerungen vor jeder Frist, Termine direkt in den Kalender.
+
🔒PrivatIhre Briefe bleiben auf Ihrem Handy. Kein Konto nötig.
+
📖Amts-WörterbuchSchwere Begriffe einfach erklärt — auch ohne Internet.
+
+
+
+
Als Erste/r dabei sein
- 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.
+ Melden Sie sich für die Warteliste an. Wir schreiben Ihnen genau
+ einmal — wenn die App im App Store ist.
+
+
+ 🎁 Ihr Dankeschön: Sie starten mit
+ 5 statt 3 kostenlosen Brief-Analysen.
+ Den Code dafür bekommen Sie per E-Mail.
+
+
+ 📧 Per E-Mail anmelden
+
+
+ Mit der Anmeldung stimmen Sie zu, dass wir Ihre E-Mail-Adresse für die
+ Launch-Benachrichtigung speichern. Abmeldung jederzeit möglich —
+ Details in der Datenschutzerklärung.
-
-
Support & Kontakt
-
- Sie haben eine Frage, ein Problem mit der App oder einen Verbesserungsvorschlag?
- Schreiben Sie uns — wir antworten so schnell wie möglich:
-
-
+
Häufige Fragen
+
+ Was kostet die App?
+ Der Download ist kostenlos, die ersten Brief-Analysen auch (3 — oder 5 mit Warteliste-Code). Danach gibt es ein günstiges Abo für unbegrenzte Analysen.
+
+
+ Was passiert mit meinen Briefen?
+ Ihre Briefe und alle Ergebnisse bleiben auf Ihrem Handy. Für die Analyse wird das Foto einmalig verschlüsselt an den KI-Dienst gesendet und dort nach spätestens 30 Tagen gelöscht. Kein Konto, keine Registrierung. Alles Weitere in der Datenschutzerklärung.
+
+
+ Ersetzt die App einen Anwalt?
+ Nein. BehördenKlar erklärt Briefe verständlich, ist aber keine Rechtsberatung. Bei wichtigen Entscheidungen (z. B. Widerspruch) hilft eine Beratungsstelle oder eine Anwältin/ein Anwalt.
+
+
+ Gibt es die App auch für Android?
+ Die iPhone-Version kommt zuerst, Android ist danach geplant. Melden Sie sich auf der Warteliste an — wir informieren Sie.
+
+
+
Kontakt & Support
+
-
-
Wichtiger Hinweis
-
- 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.
-
-
-