What it does

Triage is a Devvit app that replaces the raw Reddit modqueue with a ranked, transparent, multi-moderator triage console.

  • Smart ranking. Every reported post and comment gets a transparent triageScore from five signals: a boost for genuine community (human) reports, report volume, report-reason severity, author risk (prior removals in that subreddit), and queue staleness. Human-reported items rise above automod noise.
  • De-collapsed report reasons. Reddit collapses spam reports under one label. Triage breaks them back out into the individual reasons with counts, and separates community reports from moderator/automated ones.
  • "Why this score." Each card opens a breakdown showing exactly what each signal contributed — the ranking is never a black box.
  • Tunable. Moderators adjust every weight and the severity map from a settings panel; the queue re-ranks instantly.
  • Coordination. A moderator can claim an item; other mods see it locked so two people never review the same thing. Stale claims auto-release.
  • Self-healing. A scheduled reconcile job syncs against the live modqueue, adding anything a trigger missed and pruning anything resolved elsewhere.

Inspiration

We started from a documented problem, not a guess. A 2026 CHI paper (Bajpai & Chandrasekharan, "In the Queue") surveyed 110 moderators across 400+ subreddits and found three recurring modqueue pain points: mods cannot sort human reports above automod reports and fall back to sorting by newest; spam reports collapse under a single label, losing the granularity of why something was flagged; and there is no review coordination, so mods duplicate work.

Triage targets all three directly. The coordination piece is the part that could only be built now: shared, low-latency state across a mod team was impractical on the old Data API, but Devvit's Redis and realtime primitives make it native.

How we built it

Triage is a Devvit Web app — a React custom post plus a Hono server, both hosted on Reddit's platform.

  • Triggers (onPostReport, onCommentReport, onModAction) feed the queue as events happen.
  • A pure scoring engine computes triageScore. Keeping it side-effect-free made it fully unit-testable — settings come in as an argument.
  • Redis stores each item as a hash and the ranked queue as a sorted set, so retrieval is already ordered.
  • A scheduled reconcile job reconciles against the live modqueue every two minutes and expires stale claims.
  • A realtime channel propagates claim and queue changes between open boards.

We ran the build as a tight, phased pipeline — a versioned spec and per-phase task files, each verified live on a dedicated dev subreddit before moving on.

Challenges we ran into

  • Report attribution. The report trigger payload exposes the reason but not the reporter's identity or a human-vs-AutoModerator flag. We use Reddit's userReportReasons as the community signal and modReportReasons as the moderator/automated signal — an honest, well-defined split, with the exact- attribution limitation documented rather than papered over.
  • Verifying a live event-driven system. Triggers, Redis, and scheduled jobs are hard to observe. We leaned on deployed logs plus live re-tests after every build to confirm real behavior, not just passing local tests.
  • Scoping under a deadline. We split the work so a complete product (smart ranked queue + moderation) existed early, with coordination layered on top — and held a hard cut line, shipping the claim system and cutting lower-value extras cleanly rather than leaving anything half-built.

What we learned

Grounding the idea in real moderator research changed every design decision — "human reports first" and "de-collapse spam" came straight from documented pain, not intuition. We also learned how much an event-driven platform rewards a self-healing design: triggers will occasionally miss, and a reconcile job is what makes the tool trustworthy instead of merely demo-able.

What's next

Reporter-trust weighting, an active-moderator presence strip, and one-tap round-robin distribution of the queue across an online mod team.

Built With

Share this project:

Updates