Files
beh-rde-brief/proxy
JUSNandClaude Opus 5.5 2af4b7ed41 Korrekturen aus zwei Pruefrunden vor der MBE-Vorfuehrung
Demo-Seite:
- Ampel in Kalendertagen, naechstes kommendes Datum, "Termin am"/"Frist bis"
- nie "Deutsch | Deutsch"; Beraterin bekommt immer Deutsch (d=1), das Handy
  erkennt seine Sprache selbst und speichert die PC-Vorgabe nicht dauerhaft
- Code-Feld ausserhalb von #eingabe; tolerante Code-Eingabe; Ablaufdatum
  im Banner; leeres/abgelaufenes Einrichtungs-Kontingent ohne Kaufangebot,
  mit Telefonnummer; nach Aufladen reicht ein Neuladen
- Handy-Modus: endet nach dem ersten Brief, uebersteht ein Neuladen
  (sessionStorage), keine Sackgasse ohne Zugang, ehrlicher Hinweis +
  "Noch einmal senden", wenn das Ergebnis den PC nicht erreicht
- PC wartet geduldig, solange verbunden; meldet langsame Analysen, fehlende
  Verbindung, fehlenden Zugang; Warnung beim Verlassen
- Einwilligung pro Brief, nennt Gesundheit/Herkunft/Aufenthalt
- localStorage nur ueber abgesicherten Helfer; Dateifeld wird geleert
- RTL (bdi, dir=auto), Sprachliste mit deutschem Zusatz, groesserer QR

Worker: KI-Aufruf und Router-catch liefern immer JSON mit CORS; Logs ohne
Briefinhalt; [observability]; Nutzungszaehler je Analyse (Datum, Sprache,
390 Tage); normCode + 30 Fehlversuche; Uebergabe-TTL gleitend.
Werkzeug: Auswertung pro Woche/Sprache, Eingabepruefung, --bis in der Hilfe.
Datenschutz: SCC statt DPF, "in der Regel 30 Tage", Server-Protokolle,
Nutzungszaehler.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:34:15 +02:00
..

BehördenKlar Backend-Proxy

Cloudflare Worker, der den Anthropic-API-Key serverseitig hält. Die App schickt ihre Claude-Anfragen an diesen Worker statt direkt an Anthropic — kein API-Key in der App, Missbrauchsschutz inklusive.

Was der Worker macht

  1. Prüft die anonyme Geräte-ID (x-geraete-id-Header) und setzt ein Tageslimit pro Gerät durch (Standard: 20 Anfragen, siehe wrangler.toml)
  2. Erlaubt nur die Modelle, die die App nutzt, und deckelt max_tokens
  3. Leitet den Request-Body unverändert an api.anthropic.com/v1/messages weiter und setzt dabei serverseitig x-api-key + anthropic-version
  4. Gibt die Anthropic-Antwort unverändert zurück

Deployment (einmalig)

cd proxy
npm install

# Bei Cloudflare anmelden (kostenloser Account reicht für den Start)
npx wrangler login

# KV-Namespace für das Rate-Limit anlegen …
npx wrangler kv namespace create RATE_LIMIT
# … und die ausgegebene ID in wrangler.toml bei [[kv_namespaces]] eintragen

# Anthropic-API-Key als Secret hinterlegen (von console.anthropic.com)
npx wrangler secret put ANTHROPIC_API_KEY

# Deployen
npm run deploy

Der Deploy gibt eine URL aus, z. B. https://behoerdenklar-proxy.<account>.workers.dev.

App umstellen

In src/services/claudeClient.ts die URL eintragen:

const PROXY_URL: string | null = 'https://behoerdenklar-proxy.<account>.workers.dev';

Fertig — die App braucht dann keinen API-Key mehr in den Einstellungen.

Lokal testen

npm run dev   # startet den Worker auf http://localhost:8787

Dann in claudeClient.ts vorübergehend PROXY_URL = 'http://localhost:8787' setzen (im Simulator; auf echtem Gerät die LAN-IP des Rechners verwenden).

Später ergänzen (wenn Abo/IAP kommt)

  • Abo-Prüfung: RevenueCat-Webhook oder Receipt-Validierung vor dem Weiterleiten
  • Tageslimit je nach Abo-Stufe (Free: 3, Abo: 20+)
  • Die Geräte-ID durch eine echte Nutzer-ID ersetzen