A simple yet powerful cron job scheduler to automate recurring API requests (GET/POST) using Agenda.js. Schedule jobs, view logs, and control execution β all from a modern web dashboard.
- π Schedule recurring jobs using cron expressions
- π‘ Supports GET, POST and many other requests options with custom headers/body
- π§ Built on Agenda.js for robust background processing
- π View job execution logs and status (success/failure)
- β¨ Toggle jobs on/off without deleting them
- π» Clean React + Tailwind
- π JWT-based authentication
- β‘ Dedicated Job Runner for background execution
- π Real-time monitoring with Prometheus + Grafana
β οΈ Before you start, make sure you have the following installed:
- pnpm (package manager used in this project)
- TypeScript (
tsccompiler)
git clone https://github.com/sunjay-dev/CronJob-Scheduler.git
cd CronJob-Schedulercd Backend
pnpm install
cp .env.example .env
# Update .env with your MongoDB URI (Other fields are optional until you're testing them)
pnpm run devcd Frontend
pnpm install
# Update VITE_BACKEND_URL in .env (defaults to http://localhost:3000)
pnpm run devβ‘ Required for actual scheduling
cd job-runner
pnpm install
cp .env.example .env
# Make sure the MongoDB URI matches the backend
pnpm run devβ‘ Only needed if you want to test/run email service.
cd email-service
pnpm install
cp .env.example .env
# Update .env with your RESEND_EMAIL_API_KEY, SENDEREMAIL, and EMAIL_SERVICE_SECRET
pnpm run devCronJob-Scheduler/
βββ Backend/ # Server (Express + Agenda.js)
βββ Frontend/ # Client (React + Tailwind)
βββ job-runner/ # Background worker (Agenda.js)
βββ email-service/ # Email microservice (Express + Resend)
βββ README.md
Create/Update/Delete jobsJob toggle (enable/disable)Execution logs viewerSupport for All http requests methodsUser account settingsGoogle login configForget passwordEmail notifications on failureRetry on failure + backoff strategyMonitoring with Prometheus + Grafana- Convert to Micro-service architecture
Contributions, suggestions, and improvements are always welcome!

