Inspiration
Reddit mods are volunteer firefighters working with a garden hose. The native modqueue shows items in a flat chronological list with no sense of urgency, no way to coordinate with teammates, and no record of who did what. When the Data API changed, the third-party tools that filled these gaps disappeared overnight.
I wanted to build something that lives inside Reddit — no browser extensions, no Discord side-channels, no spreadsheets — and gives mod teams the situational awareness they've always needed.
What it does
ModTriage is a Devvit custom post that serves as a live mod queue command center:
- Priority queue — items are scored by report count, report severity (harassment escalates immediately), and age. The most urgent content rises to the top automatically.
- One-tap actions — tap any item to expand it and approve, remove, or mark as spam without leaving the post.
- Co-mod presence — a live badge shows how many mods have the dashboard open. When anyone takes an action, all open sessions get a broadcast toast and silently refresh, eliminating duplicate work.
- Action audit log — every approve/remove/spam is recorded with the actor's username and timestamp, accessible in the Log tab.
- Hourly digest — a scheduled job posts a formatted stats comment every hour: queue depth, high-priority count, spam volume, oldest item age.
- Filter sidebar — narrow the queue by report type (spam, rule violation, harassment, misinformation) or switch between priority and recency sorting.
How I built it
The entire app runs on Reddit's Developer Platform. The Custom Post UI is a Devvit JSX component using useAsync to fetch the modqueue and useChannel for realtime co-mod broadcasting. Queue data is cached in Devvit's KV Store with a 3-minute TTL to stay within API rate limits. A Devvit.addSchedulerJob cron handles the hourly digest. Priority scoring is a pure function: (reportCount × 3) + harassmentBonus + (ageHours × 2) − (score / 100).
Challenges
The hardest part was cache invalidation — when mod A removes an item, mod B's cached queue needs to update within seconds without hammering the Reddit API. The solution was combining a short KV TTL with a realtime channel broadcast that triggers a re-fetch on the receiving end, giving near-instant consistency without redundant API calls.
Devvit's custom post height constraints also required careful layout work to fit the filter sidebar, queue list, and action buttons into a usable vertical space across different screen sizes.
What I learned
Devvit's realtime primitives are genuinely powerful for coordination tools. The useChannel + useInterval combination gives you most of what you'd expect from a dedicated WebSocket server, but hosted and authenticated for free. I also came away with deep respect for how much mod tooling has historically relied on fragile third-party infrastructure — there's a real opportunity to rebuild it on a stable foundation.
What's next
- Bulk select and bulk action (approve/remove all spam in one tap)
- Keyword-based auto-flag rules (configurable per subreddit)
- Toolbox usernote integration for viewing a user's note history inline
- Mobile layout optimizations
Built With
- api
- devvit
- devvit-kv-store
- devvit-realtime
- devvit-scheduler
- mod
- reddit-developer-platform
- typescript
Log in or sign up for Devpost to join the conversation.