Skip to content

shad-k/modtower

Repository files navigation

ModTower

A mod tool for Reddit built on Devvit that helps moderators track user reputation and coordinate modqueue reviews — without ever leaving Reddit.


Overview

ModTower tracks a reputation score for every user in your subreddit based on their mod history — removals, bans, reports, posts, and comments. Scores update automatically as mod actions are taken, so there is no manual input or external dashboard to maintain. Moderators can pull up a full history for any user and act on it (ban, remove, add a note) directly from the Reddit mod menu. For larger mod teams, ModTower also provides claim locks on modqueue items and a shared notepad to coordinate handoffs without leaving the site.


Features

User Reputation Scoring

  • Each user has a reputation score from 0 (worst) to 1500 (best), starting at 1000
  • Score decreases for removals (−30), bans (−100), and reports (−10)
  • Score increases for posts (+5), comments (+2), account age (+1/month, capped at +120), and karma (+1 per 100 karma, capped at +100)
  • Four tiers: GOOD (≥800, green) · MODERATE (500–799, yellow) · AT RISK (200–499, orange) · CRITICAL (<200, red)
  • Scores update automatically via background triggers — no manual refresh needed

Mod Menu Actions

  • Check any user's reputation from a post, comment, or by username lookup via the subreddit menu
  • Take action directly from the reputation view: temp-ban, permanent ban, remove content, or add a note
  • All actions include confirmation steps before executing

Mod Notes

  • Add private notes to any user — visible to all mods in the subreddit
  • Notes are attributed to the mod who wrote them with a timestamp
  • Delete your own notes (subreddit admins can delete any note)

Modqueue Coordination

  • Claim a post or comment to signal you are handling it
  • Claims expire automatically after 10 minutes
  • View all active claims across the subreddit at a glance
  • Shared mod notepad for shift handoffs, reminders, and coordination

Configurable Weights

  • Subreddit admins can adjust how much each signal affects the score
  • Configured via the Reddit native app settings UI — no custom form needed

Installation

  1. Go to the ModTower app page on the Reddit App Directory
  2. Click "Add to community" and select your subreddit
  3. Confirm the permissions requested (see Permissions section below)
  4. The app is now active — no further setup required
  5. Optional: go to Mod Tools → Installed Apps → ModTower → Settings to adjust score weights

How to use

Checking a user's reputation

Open the three-dot menu on any post or comment and select "ModTower: Check user reputation". This opens a form showing the user's score, tier, full stats, ban history, and mod notes. You can also look up any user by username via the subreddit menu → "ModTower: Look up user".

Taking action

From the reputation form, select an action from the dropdown (temp-ban, permanent ban, remove content, or add a note) and click Confirm. A second confirmation step is required for all ban and remove actions before anything is executed.

Claiming a modqueue item

Open the menu on any post or comment and select "ModTower: Claim this item". The claim is immediately visible to other mods logged into the subreddit and expires automatically after 10 minutes. Use the subreddit menu → "ModTower: View active claims" to see all current claims at once.

Shared notepad

Open the subreddit menu → "ModTower: Mod notepad" to read and add notes for the whole mod team. Each entry is attributed to its author with a timestamp. Entries are never overwritten — older entries are preserved, and you can delete your own entries via the subreddit menu.


Permissions

Permission Why it's needed
redis Stores reputation scores, ban history, mod notes, and claim locks per subreddit — all data stays within your subreddit installation
reddit Reads post/comment/user data to build reputation profiles; executes mod actions (ban, remove) on behalf of the moderator

Privacy

  • All data is stored per-subreddit — one subreddit's data is never accessible to another
  • No data is sent to any external server — everything stays within Reddit's infrastructure
  • Mod notes and reputation scores are only visible to moderators of the subreddit
  • Removing the app from your subreddit will stop all data collection; historical KV data will be cleared per Reddit's data retention policies

Score weights (default values)

All users start at 1000. Scores are capped between 0 and 1500.

Signal Effect Default weight
Content removal −30 pts 30
Ban −100 pts 100
Report received −10 pts 10
Post created +5 pts 5
Comment created +2 pts 2
Account age +1 pt/month (max +120) 1
Karma +1 pt per 100 karma (max +100) 1

Weights are adjustable per subreddit via Mod Tools → Installed Apps → ModTower → Settings.


Known limitations

  • Ban history and mod notes display the most recent 5 entries in the form view (full history is stored in KV)
  • Presence indicators (who's online) are not implemented — Devvit's form-based mod tool model does not support client-side polling
  • Modqueue sorting by reputation score is not yet implemented
  • Score history timeline is stored in KV but not yet surfaced in the UI
  • Claims are optimistic — a race condition guard exists, but if two mods claim the same item simultaneously the second mod will see the first mod's claim on their next open

Built with

  • Devvit — Reddit's developer platform
  • TypeScript (strict mode)
  • Devvit KV store (Redis)
  • Devvit native forms
  • Vitest for unit testing

Hackathon submission

ModTower was built for the Reddit Mod Tools Hackathon (May 2026). The core thesis: moderators shouldn't need external dashboards to understand the users they're moderating — all the signal they need can be computed from actions already happening on Reddit. Everything ModTower shows is derived from the subreddit's own mod history, stored locally, and surfaced directly in the mod menu where decisions are already being made.


Development

npm install          # install dependencies
npm run build        # compile and bundle
npm run lint         # ESLint
npm run typecheck    # tsc --noEmit
npx vitest run       # run unit tests
npm run dev          # upload to test subreddit

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors