Skip to main content

How It Works

Jobs are registered in a central registry and executed via three triggers:

Cron (HTTP) Vercel cron hits /api/cron/[job]
Scheduler setInterval in persistent containers
Manual Admin dashboard at /admin/jobs

Registered Jobs

session-cleanup registered
log-cleanup registered
notification-cleanup registered
notification-delivery registered
telegram-token-cleanup registered
discord-token-refresh registered
analytics-cleanup registered
analytics-rollup registered
bot-ranges-refresh registered
grant-request-expiry registered
dbops-refresh registered
dbops-reaper registered
desk-rawrag-sync registered
desk-retention registered
ai-telemetry-retention registered
mcp-telemetry-retention registered
audit-log-retention registered
blog-orphan-reaper registered

Recent Executions

JobStatusTriggerDurationResultTime
notification-deliverysuccesscron705ms010h ago
dbops-reapersuccesscron320ms012h ago
blog-orphan-reapersuccesscron351ms012h ago
desk-rawrag-syncsuccesscron680ms013h ago
discord-token-refreshsuccesscron316ms013h ago
bot-ranges-refreshsuccesscron3413ms71013h ago
dbops-refreshsuccesscron0ms014h ago
grant-request-expirysuccesscron324ms014h ago
telegram-token-cleanupsuccesscron324ms014h ago
notification-cleanupsuccesscron1682ms015h ago

Key Files

Registry src/lib/server/jobs/index.ts
Runner src/lib/server/jobs/runner.ts
Scheduler src/lib/server/jobs/scheduler.ts
Cron route src/routes/api/cron/[job]/+server.ts
Schema src/lib/server/db/schema/jobs/job-execution.ts
Admin src/routes/admin/jobs/+page.svelte

Think this pattern could be better? Tell us how.

Leave feedback