Files
beh-rde-brief/proxy
JUSNandClaude Opus 5.5 fe6899da3d Web: Frist in den Kalender + Anruf-Hilfe — die Unterschiede zu ChatGPT ins Web geholt
Der Nutzer konnte in einer Praesentation nicht kontern, und die Ursache war
real: Alles, was BehoerdenKlar von ChatGPT unterscheidet (Erinnerungen,
Kalender, Antwort-Entwurf), steckte in der App — und die ist noch nicht
veroeffentlicht. Das Web-Produkt, das Kunden heute kaufen, war im Kern nur
'Brief erklaeren'.

Kalender (.ics, rein im Browser, nichts wird hochgeladen):
- Frist und Termin mit Erinnerung 3 Tage und 1 Tag vorher
- Zeilen nach BYTES gefaltet (RFC 5545), damit Arabisch/Tigrinya nicht reissen
- Termin 23:30 endet korrekt am naechsten Tag
- Wanduhrzeit ohne Zeitzone = Ortszeit des Geraets
- getestet: Frist, Termin mit Uhrzeit, Mitternacht, langer arabischer Text,
  Brief ohne Datum (-> keine Datei)

Anruf-Hilfe (Worker-Schema um kontakt + anruf erweitert):
- Telefonnummer als tel:-Knopf, Aktenzeichen hervorgehoben
- Spickzettel: Satz auf Deutsch + Bedeutung in der Nutzersprache
- Prompt-Regel: Kontaktdaten nur, wenn woertlich im Brief. Getestet mit Brief
  ohne Nummer -> telefon: null, nichts erfunden.

Nebenbei zwei bestehende Fehler behoben:
- Optionale Ergebniskarten wurden nie ausgeblendet: Beim zweiten Brief stand
  die Checkliste des ERSTEN Briefs noch da. Jetzt Reset zu Beginn.
- dir=auto auf den Ergebnistexten: Arabisch/Farsi/Urdu wurden im Web
  linksbuendig dargestellt (in der App war das schon behoben).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 15:26:23 +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