Skip to content
All work

Bots

antiTCK

Anonymous incident reports with human moderation

Node.js 22TypeScriptgrammYPostgreSQL + PrismaZodpinoDockerVitest

Problem

A channel where people report incidents owes its senders protection. Auto-publishing here isn't a feature — it's a way to expose someone via a face in the background or a number in the text.

System

A step-by-step submission wizard in the bot's DMs (media, description, location), then a private moderator chat where a report is approved, rejected, or sent back for clarification. Publication happens only after human approval and an automatic sanitization pass: sanitizeSubmission strips phone numbers, emails, @usernames, URLs, licence plates and document numbers, and coordinates are rounded to roughly district level. Submissions calling for violence are blocked automatically, and every moderator action is audited.

Role

Solo build: threat model, moderation pipeline, sanitization.

Outcome

There is no auto-publish path in the codebase — that's an architectural invariant, not a setting. Test-covered, deployable with a single compose file.