-
-
The StrikeManager dashboard tracks recent warnings, pending approvals, and open escalations for faster moderation decisions.
-
StrikeManager sends automated modmail warnings with rule, severity, related post, ban risk, and appeal link for transparency.
-
Mods customize thresholds, ban duration, expiry, notifications, and subreddit-specific rules without leaving Reddit.
-
Mods issue structured warnings from any post, choosing subreddit-specific rules, severity, and optional internal notes.
-
StrikeManager adds moderator actions directly to Reddit’s menu, including Issue Warning and View Strike History.
-
Native Reddit menu actions let mods issue warnings or view strike history directly from posts and comments.
-
StrikeManager escalates users at the strike threshold and lets mods reply APPROVE, TEMP, or DISMISS from modmail.
-
Advanced settings enable AutoMod auto-strikes and strike decay, balancing automation with fair second chances.
-
StrikeManager shows a user’s complete warning history, active strike count, rule violated, severity, and status.
Inspiration
I moderate a subreddit, and for a long time the hardest part of the job was not identifying rule-breakers. It was remembering them. A user would get warned in a Toolbox note, and three weeks later the same user would be back causing the same problem. By that point the original mod who issued the warning might be offline, the note buried, and the new mod on duty would have no idea this was strike two. Enforcement became inconsistent. Users who should have been escalated slipped through. Users who had genuinely improved got treated like first-time offenders.
The deeper problem was that moderation workflows lived everywhere except Reddit itself. In Discord DMs. In Toolbox wiki pages. In one mod's memory. The moment that mod went offline, the system broke.
I wanted to build something that fixed this at the root. A tool that remembered everything, required no external coordination, lived entirely inside Reddit, and treated users fairly by design. That is StrikeManager.
What It Does
StrikeManager gives mod teams a complete, structured enforcement pipeline without ever leaving Reddit.
For moderators:
- Issue warnings from any post or comment using a context menu action, selecting the rule broken, severity level, and an optional internal note
- View a user's full strike history in one click from any post they have commented on
- Receive an escalation prompt via modmail when a user hits the configured threshold, with the
option to reply
APPROVEfor a permanent ban,TEMP 7for a 7-day ban, orDISMISSto clear the escalation without action - Browse a real-time dashboard showing recent warnings, pending escalations, and at-risk users, with search by username
AutoMod Bridge connects StrikeManager directly to AutoModerator. When AutoMod removes a post or comment, the app automatically issues a strike with no mod clicks required. Subreddits running AutoMod rules for spam, self-promotion, or repeat offenders now have those removals feed directly into the strike system. The first one or two escalations happen entirely passively, saving hours of manual tracking every week.
Strike Decay removes strikes automatically after a configurable period of good behavior and notifies the user when it happens. Users who know their record can clear over time have a real reason to change their behavior. That changes the dynamic of the entire community.
For users: Every warning generates a modmail explaining exactly which rule was broken, the current strike count, what the threshold is, and a direct link to appeal to the mod team. No more surprise bans. Every enforcement action is documented, explained, and contestable.
How We Built It
The entire app is written in TypeScript using Devvit v0.12.2 with the public-api framework.
The architecture is fully serverless and event-driven, running entirely on Reddit infrastructure
with no external dependencies.
Storage: Redis handles all persistence across 14 operations, with keys scoped per subreddit to guarantee zero cross-community data leaks. Key schema:
strikes:{subredditId}:{username} # JSON array of warning objects
strikescount:{subredditId}:{username} # cached active strike count
recentwarnings:{subredditId} # sorted set, last 100 warnings by timestamp
config:{subredditId} # subreddit configuration
pendingescalations:{subredditId} # hash of open escalations
Triggers: A ModMail trigger handles the APPROVE / DISMISS / TEMP approval workflow. A
ModAction trigger powers the AutoMod Bridge by listening for automated removal events.
UI: Four context menu actions, two form modals, a custom post type, and a WebView dashboard
rendered in webroot/index.html with real-time search and severity-coded warning badges.
Settings: Seven configurable options per subreddit including strike threshold, ban duration, strike expiry period, decay period, AutoMod Bridge toggle, user notification toggle, and custom subreddit rules.
TypeScript strict mode, zero compilation errors, and try-catch blocks around every API call.
Challenges We Ran Into
ModMail parsing turned out to be deceptively hard. Mods type commands under pressure and
inconsistently. The parser had to correctly identify APPROVE, Approve., approve!,
TEMP 7, Temp 7 days, and temp 7 DAYS as valid inputs without producing false positives
on unrelated modmail messages. Getting that right without a regex mess took several iterations.
AutoMod rate limiting was a real production concern. A subreddit running aggressive AutoMod rules during a raid event can trigger dozens of removals per minute. Without throttling, the app would hit Reddit API limits immediately. A 60-second per-user cooldown on the AutoMod Bridge preserves the feature's usefulness while preventing throttling at scale.
Strike decay without a scheduler was the most interesting architectural challenge. Devvit does not natively support cron jobs or background tasks. The solution runs decay opportunistically on each new warning event, scanning for users whose oldest strike has aged past the decay threshold and removing it in the same transaction. It is not perfectly real-time, but it guarantees decay happens without requiring any external scheduler.
Graceful degradation on mod note permissions. Some subreddits do not grant the app permission to write native Reddit mod notes. Early versions crashed silently when this happened. The fix was to wrap the mod note call in its own try-catch, log the failure, and let the rest of the warning flow complete normally. A missing permission should never interrupt enforcement.
Accomplishments That We're Proud Of
The AutoMod Bridge required understanding how Devvit's ModAction trigger behaves at high
volume and designing around its constraints without compromising the feature. Getting that
working reliably, with rate limiting, at scale, felt like a genuine engineering win.
The three-tier modmail response system, where a mod can reply with a temporary ban of any duration, a permanent ban, or a full dismissal, all from a single modmail thread, is the kind of workflow improvement that sounds small until you have been doing manual ban coordination across a mod team at midnight and realize how much friction it removes.
Most of all, we are proud that StrikeManager is genuinely fair. The appeal links, the strike decay, the transparent strike counts in every notification. These features took extra time and were not required to make the tool function. They were built because a moderation tool that users trust is more effective than one they resent. That was the design principle this entire project was built around.
What We Learned
Devvit's constraints are actually clarifying. Without a traditional server, you are forced to think carefully about what state you actually need, where to store it, and how to recover gracefully when something fails. The ModMail trigger pattern, where the conversation subject line carries the username as persistent state between events, felt strange at first and then felt obviously right once the platform's model clicked.
Redis key design at subreddit scope also required more thought than expected. Getting the namespace structure right early meant that every subsequent feature composed cleanly without risk of data collisions between communities.
And more broadly: fairness features are not nice-to-haves. They are the difference between a tool that gets installed and a tool that gets trusted.
What's Next for StrikeManager
The immediate next step is broader community testing across subreddits of different sizes and moderation styles. A tool built around a single community's workflow needs stress-testing against the full range of how Reddit moderation actually happens in practice.
Beyond that, the roadmap includes:
- Strike analytics — trend graphs showing warning volume over time, most-violated rules, and repeat offender patterns, so mod teams can identify community problems early
- Multi-mod attribution — tracking which mod issued which warning with team-level reporting, so large mod teams can audit enforcement consistency across members
- Scheduled decay checks — as Devvit's platform capabilities expand, replacing opportunistic decay with a proper scheduled job so strike removal happens on time regardless of activity
- Appeal workflow — a structured in-app appeal process where users can submit a response that routes directly to mod review, closing the loop on the fairness pipeline
The foundation is solid. The goal now is to make StrikeManager the default starting point for any subreddit that wants structured, fair, and auditable enforcement.
Built With
- devvit
- node.js
- redditapi
- redis
- typescript
Log in or sign up for Devpost to join the conversation.