Blog

How to send a daily email reminder from an app you built with AI

Your agent built a tracker, a checklist or an approvals tool, and now you want it to email people every morning about what is still open. Why a timer in the app doesn't work, the usual ways to do it, and the version your agent can set up in the same conversation.

You built a small tool with Claude Code, Codex or Cursor. It tracks something your team used to keep in a spreadsheet: open tasks, requests waiting for approval, bids nobody has followed up. It works. The one thing missing is the nudge: an email every morning that says "3 things are still open" and takes people straight to them.

So you ask the agent: "send everyone a reminder at 8 every morning". It is a reasonable request, and it is where many first versions go wrong.

This article explains why, what a reminder really needs, and the ways to get one. We make Spryloom, which is one of the options below, so read that section knowing who wrote it.

Why a timer in the app doesn't work

The first thing an agent often writes is a timer inside the app: "every 24 hours, send the emails". It runs fine while you test it on your laptop. Then it fails quietly, for one of three reasons:

  • The app isn't running at 8 in the morning. On your laptop it stops when the lid closes. On most hosting it stops when nobody has used it for a while, to save cost, and the timer stops with it.
  • The app is running twice. Hosting that keeps an app up often runs more than one copy. Each copy has its own timer, and everyone gets the email twice.
  • It needs a way to send email. Sending from a server takes an email provider, an account, a key kept out of the code, and a sending domain set up so the mail isn't marked as spam.

None of this shows up until the first morning it matters.

What a reminder really takes

  1. A clock outside the app. Something that starts a short script at 8:00 in your team's time zone, whether or not anybody has the app open.
  2. The app's data. The script reads the same database the app uses, so the email says what is actually still open.
  3. A way to send. Mail that arrives, from a sender people recognise, and doesn't land in spam.
  4. The right people. The email goes to the people who use the tool, and no one else.
  5. Knowing when it breaks. If the reminder stops working, someone should find out before the team notices the silence.

The usual ways

A scheduled automation tool such as Zapier or Make. A "schedule" trigger every morning, a step that reads your data, a step that sends an email. This works well when the data already lives somewhere those tools can read, such as a spreadsheet or a CRM. It doesn't work well when the data lives inside an app your agent wrote, because the tool has no way in unless the app has an API.

A spreadsheet script. If the list is really a Google Sheet, Apps Script can email on a timer for free. It's a good answer while the spreadsheet is the tool.

A scheduled job on your hosting, plus an email provider. Most hosts offer scheduled jobs (often called cron jobs), and services such as Resend, Postmark or SendGrid send the mail. This is how software teams do it, and your agent can set much of it up. You take on the email account, its key, the sending domain, and checking that the job still runs.

The version your agent can set up

Spryloom runs apps for teams behind company sign-in, and a reminder is two lines in the file that describes the app, spryloom.yaml:

jobs:
  - name: morning-reminder
    command: node jobs/remind.js
    schedule: "0 8 * * 1-5"
    timezone: America/New_York
email: true

That says: run jobs/remind.js at 8:00 on weekdays, New York time, and let the app send email. The script reads the app's own database and sends each person one short email through Spryloom, which lays the email out and sends it. There is no email account to create and no key to keep.

You don't write any of this yourself. With the Spryloom plugin in Claude Code, you say "send everyone a reminder at 8 every weekday morning with what's still open", and the agent writes the job and the email, asks which time zone your team is in, and publishes. Spryloom's instructions for the agent tell it to use a declared job rather than a timer, so the first version is the one that works.

Each morning, at 8:00:

  • The job starts on its own, whether or not anyone has the app open.
  • It reads what is still open, and emails the people it is for, with a button that opens the app on the right page.
  • If it fails, it runs again at its next time. After five failures in a row it is paused, and you get an email saying so.

To try it without waiting for tomorrow:

spry jobs run my-app morning-reminder

spry jobs my-app lists the app's jobs and when each runs next.

What it doesn't do

The limits are deliberate, because an app that can email people can also annoy them:

  • Once or twice a day, not every minute. A job runs at most once every ten hours. A reminder is a morning thing, not a chat.
  • Five emails a day per app. That suits a tool a handful of people use: one digest each ("3 things are still open"), never one email per item. For a reminder to a whole department, an email provider on your own hosting is the better fit.
  • Only to the app's own people. An email can go to someone invited to the app, or who has signed in to it. It can't reach customers or anyone outside the tool.
  • Short, and no links in the text. The email has a subject, a few lines and a button into the app. The details stay in the app, behind sign-in, where they belong.

If you need to email customers, send newsletters or attach files, an email provider on your own hosting is the right tool.

Start here

In Claude Code, add the plugin once:

/plugin marketplace add spryloom/claude-plugin
/plugin install spryloom@spryloom

Then ask for the reminder in plain words, and say "publish this with Spryloom". Without the plugin, from the app's folder:

npx -y spryloom publish

The app gets its address, its database, its sign-in and its morning email in one step, and you invite the people the reminder is for.

Spryloom publishes apps and pages built with a coding agent behind sign-in, for the people you invite. This article was written by the people building it.

Get started free