A real-time moderation dashboard built directly in Reddit — spam cluster detection, repeat-offender tracking, AutoMod rule suggestions, and one-tap actions in a single Devvit panel.
how it works
ModStream replaces the flat report list with a live, structured view — so mods act on evidence, not instinct.
Queue length, pending items (≥2 reports), and items removed today. Colour-coded green→yellow→red based on severity thresholds.
Regex-based pattern grouping across title+body. Surfaces follower farms, link farms, and commercial DM prompts before you open the first post.
Users appearing multiple times in the queue are surfaced with violation count, total reports, and their last mod log action.
Approve / Remove / Ban 30d / Mute — live Reddit API calls. Item disappears optimistically on success. No page reload.
Dashboard data cached 60 seconds per subreddit. Absorbs rapid refresh cycles during active spam waves without burning Reddit API quota.
Empty queue? ModStream auto-injects three realistic demo items so judges and new mods see the full interface immediately.
When a spam cluster hits 3+ posts, ModStream generates a ready-to-copy AutoModerator YAML rule — detect the wave, then lock it down with one click.
build notes
Two Devvit iFrame entrypoints:
Backend runs on Devvit's serverless Node.js environment via Hono. tRPC v11 handles the client↔server type contract.
Pattern matching against combined title + body text. Grouping signatures:
window.open, alert, geolocation blocked — replaced with navigateTo + optimistic queue removalbuildDemoData()npm install npm run type-check # ✓ zero errors npm run build # ✓ client + server npx devvit login npx devvit playtest <your-sub>
Requires moderator access to your target subreddit and Devvit CLI authentication.
judge-facing proof
npm run type-check passes with zero errors against exactOptionalPropertyTypes:true
Vite production build: client/splash.html, client/game.html, server/ — all outputs verified
modstream · deployed as u/v0iddo · devvit.json and devvit.yaml present
buildDemoData() fires when queue is empty — judges see full interface on any test subreddit
generateAutoModRule() produces copy-ready AutoModerator YAML for any detected spam cluster with 3+ posts