Inspiration
I came across a CHI 2026 research paper that surveyed 110 Reddit moderators across 400+ subreddits. The finding that stuck with me: 74.5% of moderators report experiencing "collisions", multiple mods unknowingly working on the same report at the same time.
The paper described it as one of the most frustrating parts of volunteer moderation. Mods waste time reviewing posts someone else already handled, or worse, two mods take conflicting actions on the same item and have to sort it out afterward.
Reddit has activity indicators that are supposed to prevent this, but moderators in the study called them subtle and unreliable. I thought this is a coordination problem with a simple solution: before you start reviewing something, claim it. If someone else tries to claim it, tell them it is taken. That is it.
What it does
ModClaim adds moderator actions in two places.
On posts:
- 🔒 Claim for Review: marks the post as yours for 5 minutes
- 🔓 Release Claim: manually release if you are done early
On the subreddit:
- 📋 View Active Claims: see what is currently being reviewed
- 📜 Request Claim History: send a claim log to the moderator inbox by private message
If a mod tries to claim a post someone else is already reviewing, they get a toast notification showing who claimed it and how much time is left.
The whole point is to prevent duplicate work before it happens. No AI, no automation, no magic. Just basic coordination that should have existed already.
How I built it
Built on Devvit, Reddit's Developer Platform, using TypeScript. Claim state and history are stored in Redis. All actions are moderator-only.
The architecture is straightforward:
- menu actions trigger claim and release operations
- Redis stores claim data, including username, timestamp, and post title
- claim keys use a 5-minute TTL so ownership stays short-lived
- toast notifications provide immediate feedback
- a visible post flair marks claimed items
- claim history is delivered through Reddit private messages
- no external dependencies or API calls
I used the set + expire Redis pattern for TTL because Devvit's Redis implementation is a subset of the full Redis API. The app is lightweight and does not need a separate backend.
Challenges I ran into
The biggest challenge was figuring out Devvit's Redis API and platform edge cases. The documentation shows examples, but not all patterns worked cleanly in the installed type surface. I tried several expiration approaches before landing on the set + expire two-call pattern that reliably worked.
The other challenge was accessing post context correctly. Devvit's menu action event object gives you a targetId, but you still need to call reddit.getPostById() to get the full post object.
The error messages were also pretty cryptic, so a lot of the work was careful iteration, checking examples, and simplifying the implementation until it was reliable.
Accomplishments that I'm proud of
It works, and it solves a real moderation problem.
I am also proud that it stayed simple. I could have added AI-powered queue analysis or more complicated workflow logic, but that would have missed the point. The problem is coordination, not intelligence.
I also like that it lives directly inside Reddit's workflow. There is no extra dashboard, no separate service, and no extra mod training needed.
What I learned
Devvit is powerful, but you have to respect the platform constraints. Redis patterns, menu action context, and type support all matter more than they look at first.
I also learned that simple tools can be more valuable than ambitious ones. I spent more time making the claim behavior reliable than I did inventing features, and that was the right tradeoff.
What's next for ModClaim
The next steps I would explore are:
- configurable claim durations
- support for comment-level claims
- richer active-claim views
- stronger stale-claim cleanup depending on platform support
- lightweight analytics around moderator overlap
For now, the simple version already solves the core problem.
Built With
- devvit
- redis
- typescript
Log in or sign up for Devpost to join the conversation.