RemindMeBot → Devvit
maintained by u/Watchful1 · 226★ · 1.5M active reminders
P03 · The Speed-Obsessed
TTL: 4 days · Hackathon deadline 2026-05-27 18:00 PDT

Smallest possible diff.
Ship in 4 days.

Port u/RemindMeBot to Devvit with one trigger, one scheduler, zero servers. We are NOT rewriting Watchful1's 7-year PRAW + sqlalchemy stack. We are shipping the thinnest credible port that survives Data API deprecation — and nothing else.

Try !RemindMe 1 minute »
Ship window
Day 1 of 4 — Devvit project + onCommentSubmit
03
days
14
hours
22
min
07
sec
~120
LOC target
1
trigger
1
scheduler job
0
servers

The 4-day plan

Each day = one shippable artifact. No carry-over. No rewrites.

Day 1 · Mon
Trigger + parser

devvit init, onCommentSubmit hook, regex match !RemindMe <duration>.

~30 LOC · ship by EOD
Day 2 · Tue
Schedule delivery

chrono-node parses duration → Scheduler.runJob() at absolute timestamp.

~40 LOC · cumulative ~70
Day 3 · Wed
Reply + dedupe

Job fires → reply-comment with mention. Redis dedupe by comment-id + latency counter.

~30 LOC · cumulative ~100
Day 4 · Thu
Install + measure

Install on a ≥500 WAU sub, capture before/after latency vs legacy PRAW, record 90s demo.

~20 LOC · ship under 120
main.tsx · the entire app
// The whole port. One trigger. One scheduler. That's it.
import { Devvit } from '@devvit/public-api';
import * as chrono from 'chrono-node';

Devvit.addTrigger({
  event: 'CommentSubmit',
  onEvent: async (e, ctx) => {
    const m = e.comment.body.match(/!RemindMe\s+(.+)/i);
    if (!m) return;
    const when = chrono.parseDate(m[1]);
    if (!when) return;
    await ctx.scheduler.runJob({
      name: 'remind',
      runAt: when,
      data: { commentId: e.comment.id, author: e.author.name }
    });
  }
});

Devvit.addSchedulerJob({
  name: 'remind',
  onRun: async (job, ctx) => {
    await ctx.reddit.submitComment({
      id: job.data.commentId,
      text: `u/${job.data.author} ⏰ here's your reminder.`
    });
  }
});

export default Devvit;

What we cut (on purpose)

Every "nice-to-have" Watchful1's PRAW bot supports — deferred to v1.1. Speed wins.

×
Recurring reminders!RemindMeRepeat — 0 LOC, 0 days. Cut.
×
PM deliveryReply-comment is enough for parity demo. Cut.
×
Timezone DST gymnasticschrono-node defaults. No edge cases.
×
Cancel / list commandsv1.1. Not a hackathon-judging axis.
Latency telemetryDevvit logs → before/after histogram. Required for win.
One ≥500 WAU installEligibility gate. Day 4. Non-negotiable.

One trigger. One job. Four days. Done.

Watchful1's 1.5M reminders survive Data API deprecation with the smallest diff possible.

P03 · The Speed-Obsessed · Reddit Mod Tools Migration Hackathon · $10K Best Ported Data API App