Inspiration

Coordinated programmatic spam waves, link-farming operations, and viral text raids are a constant threat to Reddit communities. While AutoModerator is effective at intercepting these violations, it dumps identical target patterns into a flat, chronologically sorted Mod Queue. Human moderators are forced to review and delete duplicate entries one by one, inducing high cognitive fatigue and long response latencies. We wanted to shift the paradigm from reactive, single-item moderation to proactive, visual threat triage.

What it does

Overwatch Triage is an enterprise-grade administrative utility that transforms how moderator teams handle high-volume text raids. It intercepts incoming posts in real-time, normalizes and groups duplicate text signatures into analytical "Threat Clusters," and surfaces them inside a unified dark-themed dashboard. Instead of wading through a raw queue of 100 spam items, a moderator sees a single alert card showing the signature and a count badge. With a single click on "NUKE CLUSTER", the entire raid is securely wiped from the subreddit in the background.

How we built it

We engineered a context-preserving, full-stack Devvit application using a strict decoupled model to optimize execution speed: The Pipeline: Incoming submissions are captured via the platform’s lifecycle hooks and passed through an isolation layer that normalizes the text streams to build a clean string signature. The Cache Layer: Signatures are indexed directly into Redis Sorted Sets with custom Time-To-Live (TTL) matrices set to expire automatically after 4 hours. By utilizing Sorted Sets, adding elements and tracking cardinality runs at a highly efficient time complexity of O(\log N). The Bridge: We linked our React frontend sandboxed webview to the backend database using an authenticated tRPC Router layer, passing explicit client-side session metadata to prevent token dropouts. The Execution Worker: To eliminate processing bottlenecks, the interface hands off bulk deletion arrays directly to an asynchronous serverless Background Scheduler Task, keeping client interaction time at a constant O(1).

Challenges we ran into

The primary hurdle was navigating the strict constraints of the platform's 30-second serverless execution window. Attempting to sequentially purge a massive automated cluster of 50+ posts inside an interactive HTTP request loop triggers an immediate timeout crash, leaving the community vulnerable and state tracking broken. We also encountered an architectural sandbox barrier: raw browser fetch requests initiated from inside the sandboxed webview dropped the system’s cryptographic authentication headers, resulting in empty database yields. We resolved this by explicitly mapping client-side browser context properties directly into a secure tRPC resolver configuration.

Accomplishments that we're proud of

We successfully bypassed the native platform execution boundaries by engineering a robust asynchronous task delegation architecture. Building a tool that safely moves the compute heavy deletion loop to an independent background worker—while providing a beautiful, real-time visual "War Room" control panel that updates seamlessly without crashing—is a major win.

What we learned

This project provided deep insights into managing state persistence within sandboxed serverless runtime environments. We mastered the mechanics of client-server token preservation across webview boundaries, learned how to optimize high-throughput database interactions using structured Redis primitives, and experienced firsthand the importance of fallback-oriented UI design to protect against network drops during live testing scenarios.

What's next for Overwatch Triage

Our immediate roadmap involves replacing the simple string normalization algorithm with a lightweight, local NLP embedding model. This will upgrade the system from exact title-matching to semantic similarity clustering, enabling Overwatch Triage to catch sophisticated threat actors who use automated paraphrasing or character-swapping to evade traditional keyword filters.

Built With

Share this project:

Updates