Skip to content

tmaeder/operator-notify

Repository files navigation

Sashay 404

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.

Stack (Cloudflare-first)

  • 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)

Setup

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. D1

Deploy

pnpm 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

Kommunikationsmodi

  • 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

Schutzmechanismen

  • 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

Kern-Flow

  1. POST /api/cases mit Findings → Case + Eskalations-Empfehlung
  2. POST /api/discover → Impressum / Kontaktseiten / Support
  3. POST /api/generate-draft → 6 Varianten, jede durchläuft Blacklist-Gate
  4. Manuelle Freigabe im UI (/cases/[id]/draft/[variant])
  5. POST /api/send → Resend, Rate-Limit-Check
  6. Inbound-Mail an reply+<communication_id>@...workers/inbound-email klassifiziert, schreibt D1

Tests

pnpm test

33 Tests: Escalation, Guardrails, Prompt-Blacklist, Modus-Resolution, Response-Klassifikation, Contact-Discovery.

About

Melde Websites und ihre Inhalte bei den richtigen Dienstleistern (CDN, Analytics, Social-Plattformen, Impressum). Deep-Scan + AI-Entwürfe mit Policy-Gate.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors