Project: muhasabah-ai (Hobby plan), production domain muhasabah-ai.vercel.app
I have 3 Cron Jobs configured via vercel.json, all showing correctly in Settings → Cron Jobs with the right schedules:
- /api/cron/hadith-reminder — 0 3 * * *
- /api/cron/healthcheck — 0 13 * * *
- /api/cron/reminder — 0 14 * * *
The Cron Jobs feature toggle has been Enabled the whole time.
Problem: none of these three jobs have ever appeared in their execution logs (View Logs shows zero entries), despite /api/cron/healthcheck and /api/cron/reminder being registered for several days and their scheduled times having passed dozens of times.
What does work: clicking "Run" manually on any of these jobs from the dashboard succeeds (HTTP 200) and the underlying application logic runs correctly end-to-end (confirmed via real downstream Telegram message delivery).
I've ruled out the common causes support suggested:
- Not a scheduling-precision issue (Hobby's ±59min window) — logs are completely empty, not just delayed.
- No HTTP redirects — verified with Invoke-WebRequest -MaximumRedirection 0 against the exact cron path and against another route on the same domain/routing pipeline; both return direct 401/200 with no Location header.
- Not a Next.js dynamic-route-caching issue — this project uses Express with vercel.json's legacy "routes" config, not Next.js App Router.
Vercel Support (chat) confirmed this looks like a scheduler issue but directed me here since Hobby doesn't include dedicated Compute → Cron Jobs support tickets.
Has anyone run into scheduled Cron Jobs silently never firing while manual "Run" always works? Any way to get visibility into why the scheduler isn't triggering for this project?