Inspiration

Reddit mod teams operate in shifts across time zones, but Reddit has no native way to hand off information between mods. When a shift ends, critical context - problem users, unresolved situations, ongoing drama, lives only in the outgoing mod's head. The next mod starts completely blind. Every large subreddit compensates with Discord DMs, Google Docs, and modmail hacks. We wanted to bring that coordination directly into Reddit where it belongs.

What it does

OfficialModRelay is a mod team CRM (Customer Relationship Manager) built on Devvit with four core features:

  1. Watch Flags : Flag problem users with four severity levels (🟡 Low, 🟠 Medium, 🔴 High, 🚨 Critical) with optional auto-expiry (24h, 7 days, 30 days). Every mod on every shift can instantly see who to watch out for.

  2. Mod Notes : Leave persistent, categorised notes on users and posts. Categories include General, Rule Violation, Escalation, Ban Warning, Positive, and Shift Note. Notes build a permanent record of a user's history with the subreddit and can be resolved inline directly from the dashboard.

  3. Shift Handoff Generator : One click generates a structured, distinguished handoff post that auto-compiles all unresolved notes and active watch flags. The incoming mod team gets a full picture in seconds instead of minutes.

  4. Live Dashboard : A pinned custom post with three tabs (Watch List, Mod Notes, Handoffs) featuring pagination, inline resolve buttons with confirmation dialogs, and a refresh button. Visible to the community but all actions are mod-only.

How I built it

Built entirely with Devvit using:

  • TypeScript :- for all app logic
  • Redis :- for persistent storage, sorted sets for notes and handoffs, hashes for watch flags
  • Devvit Menu Items :- for mod-only context actions on posts and subreddits
  • Devvit Custom Post :- for the live interactive dashboard
  • useForm, useAsync, useState :- hooks for reactive UI state management

All data is scoped per subreddit so the app works independently across any community that installs it.

Challenges I ran into

  • Devvit's zRange returns {score, member} objects rather than plain strings, requiring custom parsing logic that took significant debugging to identify.
  • Forms inside custom post components require the useForm hook rather than Devvit.createForm , using the wrong one causes silent failures with no useful error until runtime.
  • Dashboard data doesn't auto-refresh after new items are added - solved with a refreshTick state pattern that forces useAsync to re-run on demand.
  • Reddit's spam filters on new subreddits made live testing challenging during development.
  • Several Devvit color tokens like brand-on-background are undocumented and fail silently, requiring trial and error to replace with valid hex values.

Notes* Post-level context menu items render more consistently on Reddit's mobile app than the desktop browser which is a known platform behaviour in Devvit's current version. All features are fully functional on mobile and subreddit-level features work across all platforms.

Devvit's getCurrentUser() API call works reliably in menu item onPress handlers but returns null in form submission handlers; a platform-level limitation I couldn't work around. As a result, mod attribution currently shows as 'unknown-mod'. This is the only outstanding issue. A mod would therefore have to edit the auto-filled input (u/unknown-mod) and type in their Reddit username (e.g u/sleepygladiator) manually before submitting in order for it to be displayed accurately on the dashboard.

Accomplishments that I'm proud of

  • Built a fully working, production-ready mod tool from concept to deployed app.
  • The shift handoff generator auto-compiles live Redis data into a formatted, distinguished Reddit post in one click — no copy-pasting required.
  • The dashboard's inline resolve button with confirmation dialog provides a genuinely smooth mobile experience for mods.
  • All data persists reliably across shifts and sessions using Redis, with proper error handling throughout.
  • The app is generalisable — any subreddit can install it and it works independently with its own isolated data.

What I learned

  • Devvit's blocks UI has meaningful constraints around scrolling, form handling, and colour tokens that aren't fully documented and working within them requires creative solutions.
  • The separation between Devvit.createForm (for menu items) and useForm (for custom posts) is a fundamental architecture distinction that affects how the entire app is structured.
  • Redis sorted sets are extremely well suited for time-ordered mod notes and handoffs as the score-based ordering made pagination and recency sorting straightforward once the parsing issue was resolved.
  • Building for mod teams means thinking about mobile first because mods frequently moderate from their phones, so every interaction needs to work with one thumb.

What's next for OfficialModRelay

  • Modmail integration :- link notes directly to modmail threads for full context in one place
  • Discord webhook notifications :- ping a mod Discord channel when a Critical watch flag is set
  • Note search :- search notes by username across the dashboard
  • Weekly digest :- scheduled auto-post summarising the week's flags and resolutions
  • Reddit Developer Funds :- with enough installs, OfficialModRelay will become eligible for Reddit's Developer Funds program

Built With

Share this project:

Updates