The Idea

I moderate a subreddit. Every week, I open the mod queue and see the same thing: a flat list of reported items with no signal, no priority, no sense of what actually needs my attention first. A post reported by fifteen coordinated bot accounts looks exactly the same as a single report from a five-year community member. I would spend twenty minutes clicking through items one by one, opening each author's profile, checking their history by hand, trying to remember which domains I had seen before. Then I would do it again the next day.

Reddit's native mod tools are powerful, but the queue itself has not evolved. There is no scoring, no pattern detection, no way to act on twenty spam posts at once. The gap between what moderators need and what the queue provides has been growing for years, and nobody had filled it.

So I built queuezero.

What queuezero Does

The core of queuezero is the mod queue, completely reimagined.

Every reported item is scored from 0 to 100 using a weighted algorithm. The score is based on seven factors: how many reports the item has, how old the author's account is, their karma, how many times they have appeared in the queue before, whether they have been actioned by moderators previously, their account status (shadowbanned, suspended), and whether spam keywords appear in the report reasons. Critical items score 80 or above and sit at the top of the queue, glowing red. A single report against a longtime community member with thousands of karma scores a 6 and sinks to the bottom. The queue finally tells you where to start.

But scoring was only half the problem. The other half was coordinated spam. Moderators were losing entire sessions to spam rings where dozens of new accounts post links to the same domain within the same hour. queuezero detects three types of these patterns automatically: link clusters where multiple accounts share the same domain, time bursts where a flood of items arrives from new accounts in a short window, and username patterns that match bot naming conventions like name1234 or auto_ prefixes. When it finds them, it groups them together so a moderator can see the full picture and act on the entire ring at once.

On top of that, there is continuous anomaly monitoring. Report spikes tracked by velocity so you can tell a real escalation from a normal busy day. New account floods when five accounts younger than seven days pile into the queue together. Repeat offenders who keep coming back after being actioned. And ban evasion detection that cross-references the domains from a banned user's content against new queue items and compares usernames using string similarity. It cannot prove a connection, but it surfaces the accounts worth looking at.

Every queue item shows the author's full context without any clicks: account age, karma, action history with dates, whether they have posted in the subreddit before, and how many times they have appeared in the queue. No more opening ten browser tabs just to figure out if someone is a real user or a throwaway.

The feature that moderators reacted to most was bulk actions. Selecting twenty spam posts and removing them with one click. Combined with Remove and Ban as a single action, cleaning a coordinated spam ring goes from a ten-minute chore to a ten-second task.

The Community Side

There was one more thing I wanted to build, and it was not for moderators.

Every mod app I have seen is built exclusively for the mod team. The community never sees what moderators do, who the most active contributors are, or how the subreddit is evolving over time. That always felt like a missed opportunity. A community that can see itself is a community that participates more.

So queuezero includes a Community Leaderboard that is accessible to every member of the subreddit, not just moderators. It tracks posts and comments in real time using Devvit's trigger system — when someone creates a post, the leaderboard updates instantly. When they delete it, the counts adjust. Any member can open the view and see three ranked tabs: top contributors by post count, most active commenters, and karma leaders by total activity. Each user sees their own rank highlighted. The top three get visual badges. There is a recent activity feed and trending posts section, and everything supports time range filtering so you can compare this week to this month to all time.

The leaderboard works on both public and private subreddits, which was a deliberate design decision. Reddit's listing APIs return 403 on private communities, but triggers fire regardless of visibility. That was one of the harder problems to solve, and it ended up being one of the cleanest parts of the architecture.

How It Was Built

queuezero runs entirely on Devvit, Reddit's developer platform. No external servers, no API keys to manage, no database migrations. Redis is provisioned by Devvit automatically. Authentication comes from the Reddit API.

The backend is a Hono HTTP server running in Devvit's serverless environment. It handles queue fetching, user enrichment, pattern detection, anomaly analysis, moderation actions, workload analytics, banned user management, and community data. The frontend is a React 19 app rendered inside an iframe on reddit.com with a complete design system built from scratch using 90 CSS custom properties.

The most important technical decision was doing all user enrichment on the server. Profiles are fetched and cached in batches of three, not individually from the browser. This keeps all Reddit API interactions inside the authenticated serverless environment and gives the client fully enriched data in a single API call.

The scoring algorithm is a pure function. Same input, same output, every time. No API calls, no side effects. That made it possible to write 56 unit tests covering every factor, edge case, and severity threshold, and they all pass.

What I Learned

Building for Devvit meant working with constraints that do not exist in normal web development. There is no persistent filesystem. The client runs inside an iframe without access to window.alert or file downloads. The serverless environment can cold-start at any time, so every external call needs defensive error handling.

The hardest lesson was in data handling. The Reddit API returns author names inconsistently — sometimes as a plain string, sometimes as an object with a name field. A value that looks like "username" on one call might come back as {name: "username", id: "t2_xxx"} on the next. I ended up building a helper that checks both formats and is used in every code path that touches author names. It was not elegant, but it solved the problem permanently.

The second lesson was to prioritize reliability over performance. Every Redis read, every API call, every enrichment step is wrapped in error handling with fallback behavior. If the queue fetch fails, the cached snapshot is returned. If a user profile is unavailable, default values are used. If anomaly detection throws, an empty array comes back. The dashboard stays functional even when individual pieces fail. A moderator should never see a blank screen because one API call timed out.

Challenges

The private subreddit leaderboard was the hardest problem. My first approach used Reddit's listing APIs to fetch recent posts and build rankings from scratch. It failed immediately on private subreddits because those endpoints return 403. The solution was to stop querying altogether and rely entirely on Devvit's trigger system. Every post and comment is recorded the moment it is created, and deletions are handled the same way. The leaderboard builds itself over time without ever needing to read a listing.

The seed-on-first-visit problem was the second challenge. When a moderator opens the Community View for the first time, the leaderboard is empty because no triggers have fired yet. The solution was to fetch the mod queue on first visit, use it as the initial data source, and set a Redis flag so it only happens once. After that, all data comes exclusively from triggers.

The third challenge was the design system. Three distinct visual identities — the mod dashboard in zinc-tinted dark tones for dense information display, the community view in a purple palette designed for engagement, and the splash screen in blue for feed visibility — all sharing the same custom property foundation without fighting Reddit's own iframe styles.

The fourth was ban evasion detection. The first version just flagged accounts that had been actioned before, which was nearly useless. The real version stores the domains from banned users content and cross-references them against new queue items. It also runs string similarity checks on usernames. Neither signal alone is proof, but combined they surface the accounts a moderator should actually investigate.

Live Demo

Subreddit: r/queuezero_dev

Demo Video: https://youtu.be/7FU9GlGYx6Q

Github: https://github.com/arubara2021/Reddit_MQCC

The Community Leaderboard is open to all members immediately — just install the app and open it from the sidebar or any post.

For the full mod dashboard, moderator access is needed. Send a modmail to r/queuezero_dev or comment on the pinned post. The demo video shows a complete walkthrough if you do not want to wait.

What Comes Next

Historical trend tracking so moderators can see whether their community is improving over time. Saved filter presets for switching between views instantly. Additional anomaly types based on real moderator feedback. Deeper ban evasion detection using behavioral analysis beyond domains and usernames.

Successful Devvit apps are eligible for the Reddit Developer Funds program. queuezero is built to grow with every community that adopts it.

The goal was never just to build a mod tool. It was to build the one that makes the others unnecessary.

Built With

Share this project:

Updates