Inspiration
What it does
How we built it
The Problem
Ban appeals on Reddit have no standard process. Banned users DM random mods, mods reply inconsistently, nothing gets logged, and the rest of the mod team has no visibility. Large subreddits handle hundreds of bans — and appeals slip through the cracks constantly.
What I Built
Ban Appeal Manager is a Devvit app that creates a structured, logged, in-Reddit appeal workflow. A mod installs the app, uses one menu item to create a pinned "Ban Appeals" post, and that post becomes the single entry point for everything.
Banned users open the post, fill out a short appeal form explaining their case, and see a live status screen that updates as mods act. The moment a decision is made, they receive a private message with the outcome and the mod's note.
Mods get a full dashboard — appeal queue with filters and search, full detail views with the original ban reason pulled automatically, a voting system so the whole team can weigh in, one-click approve (which auto-unbans via the Reddit API) or deny, internal notes only the team can see, and a complete audit log on every appeal.
What Inspired Me
I moderate a few communities and the appeal problem is real. Every time someone gets banned and wants to appeal, it becomes a chaotic DM thread with one mod who may or may not loop in the rest of the team. There's no record, no consistency, and no fair process for the user. I wanted to build the tool I actually wished existed.
How I Built It
Built entirely on the Devvit platform using TypeScript and Devvit Blocks — no external servers, no database outside of Redis, no HTML or CSS. Everything runs inside Reddit's infrastructure.
Key technical decisions:
- Redis sorted sets for the appeal index (scored by timestamp, paginated 10 per page)
- Optimistic UI updates for mod votes with revert-on-failure so the interface feels instant
- JSON serialization at the Devvit useState/useAsync boundary to work within the platform's JSONValue type constraints
- Scheduler job that auto-closes stale appeals after 30 days with an automated PM
- AppInstall trigger that registers the scheduler automatically — zero config for mods
Challenges
The biggest challenge was Devvit's rendering model. It's not React — hooks are position-based, state must be JSON-serializable, and there's no concept of component unmounting. Getting optimistic vote updates to revert cleanly on failure, and making the appeal detail view always fetch fresh data when navigating between appeals, required careful use of depends keys and local state reset patterns.
Mobile layout was also tricky — Devvit Blocks has no CSS media queries, so
responsive design means using grow on every container and splitting filter
tabs into two rows of buttons rather than one overflowing row.
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for Ban Appeal Manager
Built With
- api
- blocks
- devvit
- redis
- typescript
Log in or sign up for Devpost to join the conversation.