The Question Nobody Was Asking

Every mod tool ever built answers the same question: how do we remove bad content faster?

I wanted to build the tool that answers the opposite question.

A brand new user finds your community. They spend twenty minutes carefully writing a genuine question. They hit post. And then — silence. No reply. No welcome. No sign that anyone noticed they existed. Six hours later, they close the tab. They don't come back. They don't tell you why. They just disappear.

This happens thousands of times a day across Reddit. It is invisible. It is endemic. And until now, it has never been measured.

That is what inspired Spark.


What Spark Does

Spark is a newcomer retention layer for Reddit communities. It installs into any subreddit and runs silently in the background — watching every post from new accounts, scoring unengaged posts, and surfacing them to moderators before those newcomers leave forever.

The Lost Signal Score

Every unanswered post gets scored on a transparent 0–16 scale built around four human signals:

Signal What it measures Max points
Account Freshness How new is this person? 5
Post Substance Did they make a real effort? 3
Question Intent Did they ask for help? 3
Abandonment Time How long have they been ignored? 3

No black box. No mystery. Every surfaced post comes with human-readable reason tags explaining exactly why it was flagged.

The Newcomer Queue

High-scoring posts surface automatically in a dedicated mod dashboard — a Devvit custom post ranking at-risk newcomers by urgency. From the queue, mods can:

  • View the post in one tap
  • Dismiss false positives instantly
  • Draft a welcome message — powered by Groq's free LLaMA 3 API, generating a warm reply that actually references what the newcomer wrote — not a generic template

A daily surface cap prevents queue fatigue. Monthly stats track the percentage of surfaced newcomers who engaged after mod intervention — the first real retention metric moderators have ever had.


How I Built It

Tech stack: TypeScript · Devvit · Redis · Groq API (LLaMA 3)

The app runs on three Devvit primitives working together:

1. TriggersPostSubmit catches every new post and stores it in Redis if the author meets newcomer thresholds (configurable account age and karma). CommentSubmit watches for first replies and marks posts as retained automatically.

2. Scheduler — A background job runs on a configurable interval, scores all pending posts using the Lost Signal Score, and moves high-signal posts into the surfaced queue. A daily cap key in Redis prevents the queue from ever becoming noise.

3. Custom Post — The Newcomer Queue is a Devvit custom post rendered in block UI, reading live from Redis and calling the Groq API for AI welcome drafts on demand.

Everything is tunable from a single CFG object at the top of the codebase:

const CFG = {
  MAX_ACCOUNT_DAYS: 30,    // only track accounts younger than this
  MAX_KARMA: 100,          // only track accounts with less karma than this
  SURFACE_AFTER_HOURS: 6,  // surface post if no reply after this many hours
  MIN_SIGNAL_SCORE: 4,     // minimum score to surface (0–16 scale)
  DAILY_SURFACE_CAP: 10,   // max newcomers surfaced per day
  SCHEDULER_HOURS: 4,      // how often the background check runs
};

Every subreddit can tune Spark to their own moderation culture without touching any other code.


The Challenges

Scheduler reliability. Getting background jobs to fire reliably during development required real iteration. I added a manual "Run Check Now" mod menu item so mods can trigger an immediate check — making the queue responsive without depending entirely on scheduler timing. This became a useful mod power feature in its own right.

Signal score calibration. Too sensitive and mods get flooded with noise. Too strict and the queue stays empty. Finding the right defaults meant thinking carefully about what a genuine at-risk newcomer actually looks like — which is why every threshold is configurable.

AI welcome messages that don't feel like AI. Generic welcome messages feel worse than no message at all. The Groq system prompt explicitly instructs the model to never use "Welcome to our community!", never use hashtags, and to reference what the user actually wrote. The fallback template handles communities without a Groq key gracefully so the tool works for everyone.


What I Learned

The hardest problems in community management aren't the visible ones. Reports are visible. Spam is visible. Toxicity is visible.

Silent churn is invisible. And invisible problems don't get tools built for them.

Reddit loses an estimated 40–60% of new users before they make a second post. Moderators have had zero tools to fight that number — until now.


Project Impact

Reddit has over 100,000 active subreddits. Every one of them loses newcomers every day to the silence of an unanswered first post. Here is what Spark changes for three communities that need it most:

r/learnprogramming — 4.2 million members

This is one of the highest-volume newcomer destinations on Reddit. Every single day, genuine beginners post real questions and get buried in the firehose of content. A first-time programmer who writes "I don't understand why my code isn't working" and gets zero replies doesn't try again, they assume they're too dumb for programming. They close Reddit and don't come back.

Spark gives mods a ranked view of exactly which first-time posters are asking quality questions with no replies, allowing targeted engagement before the 24-hour abandonment threshold. One mod. One welcome comment. One person who stays and eventually becomes a contributor, an answerer, a community pillar.

If Spark saves even 10 newcomers per week from leaving r/learnprogramming, that's over 500 potential contributors retained per year from a single subreddit.

r/AskHistorians — 1.8 million members

This community is famous for rigorous standards and extraordinary depth. But those same standards make it deeply intimidating for newcomers. New members who don't know the community norms often post good-faith questions that get removed or simply sit unanswered.

Without Spark, those people leave convinced the community is elitist and unwelcoming , and they tell others. With Spark, mods can intercept them before that conclusion forms. Redirect instead of just remove. Welcome instead of just enforce. A community famous for its quality becomes a community famous for its warmth too.

Every subreddit running a growth initiative

Communities that actively invest in growing their member base currently have no way to measure whether their retention efforts actually work. Members arrive. Some stay. Some don't. Nobody knows why.

Spark's monthly engagement rate gives these communities the first quantifiable signal they have ever had at the newcomer level. This is not a gut feeling. This is a metric. And metrics change behavior mod teams that can see their retention rate will work to improve it.


The Line That Drives Everything

Moderators can see every post they remove.

Spark shows them what they're losing.

Built With

Share this project:

Updates