A full-stack email scheduling application built with a legacy-style architecture as per requirements.
- Frontend: React (Vite), Mantine UI, Tailwind CSS.
- Backend: Express.js, MySQL (Sequelize), Redis, BullMQ.
- Testing: Ethereal Email (SMTP).
- Google OAuth Login: Secure login (requires Client ID).
- Email Scheduling: Schedule emails to be sent in the future.
- Persistent Queue: Jobs survive server restarts using Redis & MySQL.
- Rate Limiting: Configurable limits (e.g., 100 emails/hour) with concurrency control.
- Dashboard: View status of scheduled and sent emails.
- Bulk Upload: UI supports mocking CSV upload for bulk scheduling.
- Docker & Docker Compose
- Node.js (v18+)
-
Start Infrastructure (MySQL & Redis)
docker-compose up -d
-
Backend Setup
cd backend npm install # Configure .env (see backend/README.md) npm run dev
-
Frontend Setup
cd frontend npm install --legacy-peer-deps # Configure .env or hardcode ClientID npm run dev
-
Access
- Frontend:
http://localhost:3001 - Backend API:
http://localhost:5000
- Frontend:
-
Live Links
- Frontend:
https://email-scheduler-1-kiny.onrender.com - Backend:
https://email-scheduler-co1x.onrender.com
- Frontend:
The system uses a producer-consumer pattern. The API (Producer) accepts requests and pushes them to a Redis Queue (BullMQ). A Worker (Consumer) processes these jobs, enforcing rate limits and delays, and sends emails via SMTP (Ethereal). State is persisted in both MySQL (long-term records) and Redis (active queue state).