Inspiration
Every active Reddit moderator knows the pain: a banned user sends an angry, unstructured modmail. It lands in the same inbox as reports, questions, and community posts. There is no form, no acknowledgment, no status update for the user, and no audit trail for the team. On large subreddits this process consumes hours of moderator time every week — and it never gets better because there is no infrastructure to make it better.
We wanted to build the thing that should have existed already: a dedicated, structured ban appeal system that lives natively inside Reddit.
What it does
AppealBox installs on any subreddit in one click and replaces the chaotic modmail appeal process with a purpose-built workflow.
For banned users:
- A structured appeal form with five required fields: the rule they broke, whether they understood the violation, an explanation of their side, a commitment to do better, and an optional additional note
- A real-time status tracker showing whether their appeal is Pending, Approved, Denied, or Escalated — visible at any time without needing to contact the mod team
- A Reddit DM sent automatically when a moderator makes a decision
For moderators:
- A dedicated appeal queue inside the AppealBox post, completely separate from modmail
- Full appeal context on every card: the rule selected, the user's explanation, their commitment, and the submission timestamp
- One-click Approve, Deny, or Escalate actions with an optional custom message — or the configured default template
- A Resolved tab showing the last 50 decisions with full history
- A Settings panel (in the mod menu) to configure cooldown period, lifetime appeal limit, approval and denial message templates, and modmail notifications
Server-side enforcement means all constraints — ban check, cooldown, appeal limits, field validation — are enforced on the Hono server regardless of what the client sends. The moderator-only dashboard is hidden from regular users and verified server-side on every request.
How we built it
AppealBox is built entirely on Devvit using the React template (devvit 0.12.24).
The architecture is a clean client-server split. The React frontend (game.tsx) makes standard HTTP fetch calls to a Hono server. The server has access to Devvit Redis for persistent storage and the Reddit API for ban checks, moderator verification, rule fetching, and sending DMs.
Stack:
- Frontend: React 19, Tailwind CSS 4, TypeScript 6
- Backend: Hono 4 on Node.js 22
- Storage: Devvit Redis (built-in key-value store)
- Build: Vite 8 with Rolldown
The data model uses five Redis key patterns, all scoped by subredditId so no data from one community is ever accessible in another. Appeals move through a one-way state machine: PENDING → APPROVED | DENIED | ESCALATED. Every transition is recorded with the deciding moderator's username and a timestamp.
The app auto-creates its custom post on install via the onAppInstall trigger, so mods have nothing to configure before it works.
Challenges we ran into
The biggest challenge was working within Devvit's constraints while building something that feels polished. Devvit does not expose an unban API, so approving an appeal flags the user's status but the mod still needs to remove the ban manually on Reddit. We documented this limitation clearly in the app and in the README.
Verifying moderator identity server-side required calling reddit.getModerators() and checking the result on every mod-only request — there is no built-in session role available in the Hono server context. We wrapped this in a reusable requireModerator helper to keep the route handlers clean.
Getting the three-tab layout right for both the user-facing appeal flow and the mod dashboard within the same custom post required careful state management. The useAppeal hook centralises all server state and API calls, keeping the React c
Built With
- devvit
- hono
- react
- typescript
Log in or sign up for Devpost to join the conversation.