I live in my Inbox. Basically, if anyone wished to get my attention, they’d send me an email, it’s that simple. Want to remind myself to pick up some eggs on the way home? I send myself an email.

Now, what if I could schedule an email to be sent to myself at a particular time? (Yes, chances are something like this already exists).

The BASH solution

So, this idea came before I even considered a Django + Celery stack. Being someone who lives in Linux and a zsh shell, my initial intention was to run a crontab that runs a BASH script that checks for reminders I would have piped into a text file from my shell, ala:

echo "pick up pudding @ 2020-12-24 14:00" > ~/reminders.txt

and have said BASH iterate over the file, and using some AWK magic to grab the ISO8601 formatted datetime, send off an email using the built in Linux mail command, something like:

cat ~/reminders.txt | awk something or another | mail -s reminder me@email

Job done! Boring, but hey, it worked!

My Wife chimes in

“If you made this easier to use, I would use it too!”

Enter Celery Beat, my new best friend

I’ve heard of Celery, I know what it does, I think I’ve even had to use it (in a hacky way) some time ago, but Celery Beat…hello! How cool is this?! I can easily write non-blocking scheduled tasks that scale wonderfully. This is going to be fun.

After a few hours of messing about with Django and fighting with pytz (I hate all timezones that aren’t UTC), the end result lives here:

deadsimple/reminders

requirements.txt

  • django
  • django-celery-beat
  • sqlite3 (really!)
  • some form of MTA
  • some form of mail account, preferably one that doesn’t go to spam (unless you’re madman who self hosts their mail)

End result:

Deadsimple Reminders

What now?

Not much! Hence the name, deadsimple/ being appended to the name of the app, it is intended to be just that…deadsimple. In my day to day as a dev, I have a bunch of simple apps I have written over the years to fill a gap of some other app that either a) does not exist, or b) is too complicated for my simpleton mind.

As for this thing, I have a bit more mobile optimisation to do (I’m a backend dev by day, frontend was never my strong suite) - but a

For now, if you stumble across this, enjoy! :)