Inspiration
As a Reddit moderator, I've seen the same gap again and again: the mod log tells you what happened (removed, banned, warned), but when someone appeals—or when a different mod picks up the thread—there's often no shared record of why.
Spreadsheets and mod notes break down at scale. I built VerdictLog for the Reddit Mod Tools hackathon to give mod teams appeal-ready decision memory without leaving Reddit.
Tagline: Every mod action gets a reason. Every appeal gets an answer.
What it does
VerdictLog is a Devvit Web app for subreddit moderators:
- Log Verdict — From any post or comment (⋯ menu), I record rule, severity, decision template, and a short reason. The form pre-fills author, link, and timestamp, and shows how many prior verdicts exist for that user.
- Search User Case File — In the expanded app, I search by username and see non-expired verdicts, newest first.
- Copy Appeal Summary — One-click formatted text for modmail or appeal replies.
- Configure Rules — Subreddit rules (enable/disable) feed the Log Verdict dropdown.
- Retention & safety — Configurable TTL (default 90 days), manual delete per verdict, moderator-only access.
Privacy by design: VerdictLog does not store post or comment body text—only structured metadata mods choose to log.
How I built it
I built VerdictLog on Reddit's Developer Platform (Devvit Web):
- Frontend: React 19 + Tailwind CSS 4 in a custom post (
splashinline →gameexpanded view) - Backend: Hono serverless routes for menu actions, forms, and install triggers
- API: tRPC v11 between the React UI and server for type-safe case file search, rules, and settings
- Storage: Redis with per-subreddit keys (
vl:{subredditId}:*); JSON user index where list commands aren't available - Integration: Devvit menu items (post, comment, subreddit),
showFormfor Log Verdict, Reddit API for mod checks and content metadata
I scoped the MVP deliberately: no AI, no analytics dashboards, no auto-enforcement—just fast logging and fast recall for real mod workflows.
Challenges I ran into
- Devvit form payloads — Select fields arrived as arrays, not strings, which broke validation until I added coercion on submit.
- Navigation from subreddit menu —
navigateTorequires a full Reddit URL, notgame.html?page=search. I resolved this by opening the VerdictLog custom post and passing the target tab via a short-lived Redis flag. - Playtest vs publish — Separate Devvit CLI auth and Reddit web login; private demo subs blocked logged-out judges until I documented public access.
- First-run UX — Disabled rules don't appear in Log Verdict; I added install-time default rules (Spam, Civility) and in-app guidance on the Rules tab.
Accomplishments that I'm proud of
- A complete mod workflow I dogfooded end-to-end: log verdict → search case file → copy appeal summary.
- Moderator-only security on every menu, form, and tRPC path.
- A clear privacy story mods can explain to their communities (no body storage, TTL, delete).
- Shipping v0.0.10 to Reddit review while keeping playtest viable on my demo subreddit.
What I learned
- Devvit Web fits workflow tools well—menus and forms keep mods in-context; the expanded custom post handles richer UI (search, config).
- Moderation tools should optimize for seconds, not features: one short reason field beats a long form.
- Reading platform quirks early (form types, navigation rules) saves painful playtest debugging later.
What's next for VerdictLog
- App Directory approval — v0.0.10 is in review; after approval, any mod can install from developers.reddit.com/apps/verdictlog.
- Performance — Cache moderator checks instead of listing all mods per request.
- Optional enhancements — Modmail thread linking, export case file, reminder nudges after removals (out of current MVP scope).
- Community feedback — Incorporating mod input from #mod-chat and r/Devvit before the next release.
Built With
- devvit-web
- hono
- react
- redis
- tailwind-css
- trpc
- typescript
- vite
- vitetest
- zod

Log in or sign up for Devpost to join the conversation.