Inspiration

Reddit moderators handle enormous queues with no triage support. Every post looks the same priority — spam sits next to genuine rule violations, and low-effort posts crowd out harassment that needs fast action. I wanted to bring AI-assisted classification to Reddit's volunteer mod workflow.

What it does

mod-triage-bot is a Devvit app that runs inside any subreddit and gives moderators an AI-powered triage dashboard:

  • Classifier — scores each post across 9 categories (spam, self-promo, rule violation, misinformation, harassment, off-topic, low-effort, borderline, clean)
  • Priority queue — each decision gets a 1-5 priority score so the highest-risk posts surface first
  • Confidence score — tells mods how certain the classifier is, making human review easy to direct
  • Mod notes — auto-generated action guidance ("remove immediately", "check author history", etc.)
  • Live dashboard — custom Devvit post showing the last 20 triage decisions, updated via Redis sorted sets
  • Audit log — every classify call is stored with timestamp, category, action, and priority

How I built it

Built entirely on the Devvit platform using TypeScript:

  • Devvit triggers on PostCreate and CommentCreate events to catch new content automatically
  • Menu items for manual mod-queue triage on any post
  • Redis sorted sets for the audit log (zAdd with timestamp score, zRange reversed for newest-first display, zRemRangeByRank to trim to 200 entries)
  • useAsync hook in the Devvit UI layer to fetch the audit log for the dashboard post
  • A pure TypeScript classifier that reads post signals (karma, account age, flair, report reasons) and returns a structured TriageDecision

Challenges

  • Devvit Redis API differs from standard Redis — no list ops; redesigned the audit log around sorted sets
  • getModQueue lives on the Subreddit object, not the top-level Reddit API
  • useAsync JSONValue constraint requires all async return types to be JSON-serializable primitives; solved by serializing to a JSON string and deserializing in the render function

What's next

  • Connect a real ML classifier (Perspective API for toxicity, custom fine-tune for community rules)
  • Bulk-action buttons in the dashboard
  • Per-category stats and charts over time
Share this project:

Updates