Cron jobs and their schedules

Reminders, club digest, club meetings, reading recap, and trial reminders.

Background jobs that run on a schedule to send emails and process tasks.

Active cron jobs

  • /api/cron/reminders — daily at 14:00 UTC. Sends loan due-soon and overdue reminders.
  • /api/cron/club-digest — hourly. Sends book club discussion digests.
  • /api/cron/club-meeting-reminders — daily at 15:00 UTC. Sends book club meeting reminders.
  • /api/cron/reading-recap — Sundays at 13:00 UTC. Sends end-of-season reading recaps.
  • /api/cron/trial-reminders — daily at 16:00 UTC. Sends trial-ending and trial-ended notifications.

How they run

Vercel runs the crons on the schedule defined in vercel.json. Each cron route is protected by a Bearer token (CRON_SECRET).

Manual triggering

For testing, curl with an Authorization header containing the CRON_SECRET works.

Adjusting schedules

Edit vercel.json and redeploy. Cron expressions use standard crontab format.

Why some emails depend on cron

Loan reminders need to know "what's due tomorrow" — requires scanning loans daily. Doing this real-time on every patron portal load would be wasteful.

Failure

If a cron run fails, Vercel logs the error. You'll see an alert in the project dashboard. Next run picks up where it left off (idempotent — won't double-send).

Still stuck? Email hello@tryshelfwise.comand we'll get back within one business day.