Inspiration
Appeals are one of those moderation workflows that every active subreddit eventually has to deal with, but the process is usually messy. A post gets removed, the user doesn't fully understand why, and the conversation moves into modmail. From there, context gets scattered across messages, moderators have to ask for missing links or details, and users often have no clear idea where their appeal stands.
I built Appeal-Lite because appeals should not need a full ticketing system, but they also should not be handled through completely unstructured back-and-forth. The goal was to make a lightweight appeal center that feels native to Reddit, gives users a clear path to submit an appeal, and gives moderators a simple queue to review and resolve cases.
What it does
Appeal-Lite is a Devvit app that adds a structured appeal center inside a subreddit. Users submit appeals from a Reddit custom post, and moderators review those appeals from a dedicated mod queue.
For users, Appeal-Lite lets them:
- Submit an appeal for a removed post or comment by pasting the content permalink
- Select a rule category and appeal reason
- Explain why they think the removal should be reviewed
- Track each appeal by status:
pending,needs_more_info,accepted,denied, orclosed - Add follow-up information when a moderator requests more context
- See the moderator’s public response after a decision is made
For moderators, Appeal-Lite provides:
- A dedicated appeal queue with status filters, search, and pagination
- Appeal detail pages with the submitted explanation, linked content, verification status, and activity history
- One-click resolution actions with editable response templates
- Private internal notes for moderators
- Per-subreddit settings for rule categories, appeal reasons, daily limits, character limits, appeal windows, and templates
- Duplicate prevention and rate limiting to reduce appeal spam
- A mobile-first interface that works cleanly inside Reddit
Appeal-Lite runs entirely on Devvit. It uses Devvit Redis for storage and does not rely on an external backend, external database, or third-party API.
How I built it
Stack
- Devvit Web for the Reddit-hosted app runtime, custom post UI, Redis storage, and Reddit API access
- React + TypeScript for the client
- Tailwind CSS for styling
- Hono for server routes inside the Devvit server environment
- Redis as the only persistent data store
Architecture
src/ ├── shared/ # Shared types and constants ├── server/ │ ├── routes/ # Appeals, mod queue, settings, session, menu, triggers │ ├── services/ # Appeal logic, rate limits, rules, permissions │ ├── storage/ # Redis repository and key layout │ └── utils/ # IDs, permalink normalization, validation, errors └── client/ ├── pages/ # Desktop views ├── pages/mobile/ # Mobile-focused views └── components/ # Shared UI components
Challenges I ran into
Modeling a queue in Redis
A normal database would make appeal filtering and history easy, but Devvit Redis required a more deliberate key layout. I ended up storing each appeal as its own record and using separate indexes for status, user, and timestamps. That made the mod queue fast enough while keeping the storage model simple.
Keeping user and moderator data separate
Appeals contain both public information and private moderator notes. I had to be careful about how data moves from the server to the client so normal users can track their appeals without ever seeing internal notes or moderator-only fields.
Handling removed or deleted content
Appeals naturally involve content that may no longer be easy to fetch. Instead of blocking those cases, Appeal-Lite treats content and author verification as best-effort. If the app cannot fully verify a permalink, it still accepts the appeal and clearly shows the verification status to moderators.
Making the mobile flow usable
The first version worked, but it still felt like a desktop tool. I adjusted the UI around mobile behavior: shorter cards, clearer empty states, larger buttons, and focused review screens. That made the app feel much more realistic for both users and moderators.
Preventing low-effort appeal spam
Because appeals can become another moderation burden if abused, I added duplicate detection, daily appeal limits, character limits, and normalized permalinks. The goal was to let good-faith users appeal while keeping the queue manageable for mods.
Accomplishments that I'm proud of
- Built a complete appeal workflow from submission to moderator resolution
- Kept the app fully Devvit-native with no external backend or database
- Added a moderator queue with filtering, search, public responses, internal notes, and activity history
- Built separate user and moderator views so private mod information stays protected
- Added configurable rules, appeal reasons, templates, limits, and appeal windows
- Added rate limiting and duplicate detection to reduce abuse
- Made the interface usable on mobile instead of treating mobile as an afterthought
- Created a clear appeal status system so users are not left guessing what happened
What I learned
Building Appeal-Lite forced me to think about moderation as a workflow problem, not just a UI problem. A good mod tool should reduce the amount of repeated context gathering, repeated explanation, and repeated decision tracking that moderators have to do.
I also learned a lot about building within Devvit’s constraints. Since the app uses Redis instead of a relational database, the data model had to be designed around keys, indexes, and predictable access patterns. That made me think more carefully about what the app actually needs to query and what can stay simple.
The biggest product lesson was that moderation tools have to be careful about adding overhead. A feature is only useful if it saves moderators more time than it costs them. For Appeal-Lite, that meant keeping the scope narrow: structured appeal intake, a clean queue, templates, status tracking, and private notes. Nothing more than needed.
What's next for Appeal-Lite
There are several directions I would like to explore next:
- Appeal analytics: show acceptance rates, median time to decision, common rule categories, and queue volume over time
- Bulk actions: let moderators close stale appeals or apply a template response to multiple cases
- Improved modmail handoff: provide optional ways to reference Appeal-Lite cases from modmail without trying to replace modmail entirely
- More flexible templates: support different response templates by rule category or appeal reason
Log in or sign up for Devpost to join the conversation.