Inspiration
Reddit mod teams deal with repeat offenders constantly, but the tools haven't kept up. Most communities track strikes in spreadsheets, DMs, or just mod memory. This is inconsistent, undocumented, and invisible to the rest of the team. When one mod issues a warning and another doesn't know about it, enforcement falls apart. I wanted to fix that from inside Reddit itself, with no bots to host and no external dashboards.
What it does
Strike System is a progressive enforcement toolkit built natively into Reddit. Moderators can issue strikes, auto-ban repeat offenders, log removals, and add internal mod notes, all from Reddit's context menus on any post or comment. A live mod dashboard embedded as a custom post gives the whole team visibility into who has active strikes and full audit history.
How we built it
Built on Devvit's web server template with a Hono server handling API routes and form submissions, React for the dashboard UI, and Redis for all persistent state. Every mod action flows through Reddit's native context menus and form system so it feels like a first-party feature. The data model is append-only; strikes, resets, and removals are all logged as history entries for a full audit trail.
Challenges we ran into
The hardest problem was concurrent moderation. If two mods issue a final strike simultaneously, both could trigger the auto-ban. The fix was merging the isBanned = true write into an atomic Redis WATCH/MULTI/EXEC callback, only one invocation wins the optimistic lock, the other retries, sees the flag already set, and skips the side effects. TypeScript's Bundler module resolution also caused issues: @devvit/client's navigateTo was invisible to the compiler and required a custom .d.ts shim to resolve.
Accomplishments that we're proud of
The app works entirely within Reddit's UI with zero external dependencies. The atomic ban guard means no duplicate bans under concurrent load. The dashboard gives mod teams real-time visibility into strike history, resets, removals, and mod notes in one place; something that previously required leaving Reddit entirely.
What we learned
Devvit's Redis supports WATCH/MULTI/EXEC optimistic locking, which made proper concurrency control possible. Form state in Devvit is server-side by design, which shaped the entire pending-action architecture. TypeScript's module resolution behaves differently from bundlers like Vite when it comes to conditional exports; something worth knowing before building any Devvit client code.
What's next for StrikeSystem
Pagination for large communities, per-form session tokens to prevent pending state collisions under multi-mod use, atomic locking for mod note and removal writes, and community-level analytics so mod teams can see strike trends and most-violated rules over time.
Built With
- devvit
- hono
- node.js
- react
- redis
- typescript
Log in or sign up for Devpost to join the conversation.