A full-stack web application for managing college club events with real-time calendar views, role-based access control, and intelligent email notifications.
- User Authentication: JWT-based login/signup with email verification
- Interactive Calendar: Monthly, weekly, and daily views using FullCalendar
- Event Management: Create, edit, and delete events with datetime and location support
- Role-Based Permissions: Club members can edit any event in their club
- Club Filtering: Filter events by multiple clubs with color-coded display
- Smart Notifications: Timezone-aware email notifications for new events
- Email Digest: Beautiful HTML emails with event tables
- Overlapping Events: Support for multiple events at the same time in different locations
- Django 5.0
- Django REST Framework
- SimpleJWT for authentication
- PostgreSQL database
- Celery + Redis for task scheduling
- SMTP email with MailHog (development)
- React 18
- Vite
- TailwindCSS
- FullCalendar
- React Router
- Axios
- React DatePicker
- Docker & Docker Compose
- 6 services: Frontend, Backend, PostgreSQL, Redis, Celery, MailHog
-
Clone the repository
git clone https://github.com/yourusername/CEAL-Calender.git cd CEAL-Calender -
Create environment file
cp .env.example .env cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env
-
Start all services
docker-compose up --build
-
Seed the database with clubs
docker-compose exec backend python seed_data.py -
Access the application
- Frontend: http://localhost:3100
- Backend API: http://localhost:8100
- Django Admin: http://localhost:8100/admin (admin/admin123)
- MailHog UI: http://localhost:8026
-
Install Python dependencies
cd backend pip install -r requirements.txt -
Set up PostgreSQL database
createdb ceal_calendar
-
Run migrations
python manage.py migrate python manage.py createsuperuser
-
Seed clubs
python seed_data.py
-
Start Redis (for Celery)
redis-server
-
Start Django server
python manage.py runserver
-
Start Celery worker (in new terminal)
celery -A ceal_calendar worker --loglevel=info
-
Start Celery beat (in new terminal)
celery -A ceal_calendar beat --loglevel=info
-
Install dependencies
cd frontend npm install -
Start development server
npm run dev
POST /api/auth/signup/- User registrationPOST /api/auth/login/- Login (returns JWT tokens)POST /api/auth/token/refresh/- Refresh access tokenGET /api/auth/me/- Get current user profilePUT /api/auth/me/- Update user profile/settingsPOST /api/auth/change-password/- Change passwordPOST /api/auth/logout/- Logout (blacklist token)
GET /api/clubs/- List all clubs (public)
GET /api/events/?start=YYYY-MM-DD&end=YYYY-MM-DD&clubs=1,2,3- List eventsPOST /api/events/- Create event (club auto-filled)PUT /api/events/{id}/- Update event (requires club membership)DELETE /api/events/{id}/- Delete event (requires club membership)
- Guests: View-only access to events
- Club Members:
- Create events for their club
- Edit/delete ANY event in their club
- Cannot modify events from other clubs
- Users can enable/disable email notifications in settings
- Set notification time (e.g., 9:00 AM) in their timezone
- Celery Beat runs every minute to check notification times
- Emails are sent ONLY if:
- User has notifications enabled
- Current time matches notification time
- NEW events were created since last notification
- Events belong to the user's club
- Professional HTML design with gradients
- Event table with Title, Date/Time, Location, Description
- Created by information
- Opt-out instructions
- Links to calendar and settings
- email (unique)
- club (ForeignKey to Club)
- notification_enabled (Boolean)
- notification_time (Time)
- timezone (CharField)
- last_notification_sent_at (DateTime)- slug (unique)
- name
- color (hex color for calendar)- title
- description
- start (DateTime)
- end (DateTime)
- location
- club (ForeignKey)
- created_by (ForeignKey to User)- Colors: Primary gradient (purple-blue), vibrant club colors
- UI: Modern, clean design with TailwindCSS
- Calendar: FullCalendar with custom event rendering
- Responsive: Mobile-friendly layouts
The application comes pre-seeded with:
IEEE Clubs: Computer Society, EMBS, IAS, PES, PELS, RAS, SPS, WIE
FOSS Clubs: CREATE101, EMBED202, TRAIN303, HACK404, DEPLOY505
IEDC: EDC, Impact Cafe
Others: ISTE, TinkerHub, Yavanika, NSS, Sports Club
- Set your notification time to 1 minute from now
- Create a new event
- Wait for the notification time
- Check MailHog (http://localhost:8025) for the email
- Verify subsequent runs don't send email (no new events)
SECRET_KEY=your-secret-key
DEBUG=True
POSTGRES_DB=ceal_calendar
POSTGRES_USER=postgres
POSTGRES_PASSWORD=your-password
POSTGRES_HOST=localhost
POSTGRES_PORT=5433
REDIS_URL=redis://localhost:6380/0
EMAIL_HOST=localhost
EMAIL_PORT=1026
FRONTEND_URL=http://localhost:3100
VITE_API_URL=http://localhost:8100
- postgres - PostgreSQL 15 database
- redis - Redis for Celery broker
- backend - Django application (Gunicorn)
- celery - Celery worker for async tasks
- celery-beat - Celery scheduler
- mailhog - Email testing tool (SMTP + Web UI)
- frontend - React + Vite development server
MIT License - feel free to use this project for your college!
Contributions are welcome! Please feel free to submit a Pull Request.
If you encounter issues, please open an issue on GitHub.
Built with β€οΈ for college clubs