Throwing Outstanding Shade. Wir werfen keine Steine mehr. Wir werfen die AGBs.
Hassprediger, Queerfeinde und Demokratiefeinde wohnen im Netz nur zur Miete. Sashay 404 findet ihre Dienstleister (Hosting, CDN, Analytics, Payment, Social-Plattformen) und schreibt für jeden eine erschütternd höfliche, juristisch makellose Meldung. Der Betreiber kann mitinformiert werden — nie bedroht. Weaponized Politeness.
Grundsatz: Fairness, Stellungnahme-Möglichkeit, freiwillige Abhilfe, dokumentierte Vorab-Kommunikation. Niemals Druck- oder Drohmittel. Für Stonewall. Für ACT UP. Für alle, die heute noch gelesen werden müssen.
- Next.js 15 App Router, deployed via
@cloudflare/next-on-pages - Cloudflare D1 (SQLite) — alle Daten
- Cloudflare Workers Runtime für alle API-Routen (
runtime = "edge") - Cloudflare Email Workers für Inbound-Mail (
workers/inbound-email) - Resend — einzige externe Abhängigkeit, für Outbound-E-Mail
- Workers AI (
@cf/meta/llama-3.3-70b-instruct-fp8-fast) — Entwurfsgenerierung (6 Varianten mit Policy-Gate)
pnpm install
# D1
wrangler d1 create operator_notify # then paste database_id into wrangler.toml
pnpm db:apply:local
# Secrets
wrangler secret put RESEND_API_KEY
# Dev
pnpm dev # Next.js dev (no D1 binding — use pages:dev)
pnpm pages:build && pnpm pages:dev # Full Cloudflare simulation incl. D1pnpm db:apply:remote
pnpm pages:build && pnpm pages:deploy
cd workers/inbound-email && wrangler deploy
# In Cloudflare dashboard: Email Routing → catch-all `reply+*@yourdomain` → this Worker- draft_only — nur Entwurf, nie Versand
- manual — Versand nur nach expliziter Freigabe (Default)
- routine — automatisch nur bei
severity=low, min-confidence ≥ 0.9, Template-Match, Feature-Flag, kein Evidence-Destruction-Risiko
- Rate-Limit pro Domain (default 3 / 30 Tage, in
app_settings) - Max 1 Initial-Kontakt pro (Case, Contact); Follow-up nur mit neuer Evidenz (Findings-Hash)
- Content-Policy-Gate mit Blacklist gegen Drohsprache, unreasonable Fristen, Vorverurteilung
- Freemail-Filter ausserhalb Impressum
- Legal-Threat / Denial-Antworten →
needs_human=true, keine Auto-Antwort
POST /api/casesmit Findings → Case + Eskalations-EmpfehlungPOST /api/discover→ Impressum / Kontaktseiten / SupportPOST /api/generate-draft→ 6 Varianten, jede durchläuft Blacklist-Gate- Manuelle Freigabe im UI (
/cases/[id]/draft/[variant]) POST /api/send→ Resend, Rate-Limit-Check- Inbound-Mail an
reply+<communication_id>@...→workers/inbound-emailklassifiziert, schreibt D1
pnpm test33 Tests: Escalation, Guardrails, Prompt-Blacklist, Modus-Resolution, Response-Klassifikation, Contact-Discovery.