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.