Welcome to the Smart Event Manager!
A powerful, Python-based command-line interface (CLI) tool that helps you schedule, manage, and track your events with ease.
With a clean modular structure and persistent storage, this project is both efficient and maintainable.
- 🗓️ Add, Edit, & Delete Events – Full CRUD functionality.
- 👁️ Multiple Views
- Day View: See all events scheduled for a specific date.
- Today View: Instantly see events scheduled for today.
- All Events View: List all scheduled events.
- 🔍 Search Events – Instantly find events by keyword (in event name or type).
- ♻️ Recurring Events – Add recurring events (daily, weekly, monthly).
⚠️ Conflict Detection – Prevents double-booking by detecting overlapping schedules.- 💾 Persistent Storage – Events are stored in
events.json. - 📧 Email Reminders – Automatically send reminders to attendees for today’s events.
- 🧩 Modular Structure – Code is separated into modules for maintainability and scalability.
/smart-event-manager
│
├── main.py # Entry point of the application
├── cli.py # Defines the command-line interface (argparse)
├── event_manager.py # Core logic for event operations
├── storage.py # Handles reading/writing JSON data
├── utils.py # Utility functions (date/time validation, etc.)
├── conflict_checker.py # Scheduling conflict detection logic
├── recurrence.py # Logic for recurring events
├── reminder.py # Sends email reminders for today’s events
├── attendees.xlsx # List of attendee emails
└── events.json # Database file storing events
- Python 3.x
- No external dependencies required for event manager core
- For email reminders:
pandas,openpyxl, andpython-dotenvmust be installed
pip install pandas openpyxl python-dotenv
- Clone or download the project.
- Create a
.envfile in the root directory with your SMTP credentials:SENDER_EMAIL=youremail@example.com APP_PASSWORD=your_app_password SMTP_SERVER=smtp.gmail.com SMTP_PORT=465
- Create
attendees.xlsxwith at least one column:Email attendee1@example.com attendee2@example.com
Navigate to the project directory in your terminal and run:
python main.py <command> [options]python main.py add --name "Project Demo" --date "18-08-2025" --time "15:00" --type "Work" --location "Online Meeting Room" --recurrence "monthly"
python main.py add --name "Doctor's Appointment" --date "19-08-2025" --time "11:30" --type "Personal"
python main.py add --name "Client Call" --date "20-08-2025" --time "13:00" --type "Work"
python main.py add --name "Team Meeting" --date "18-08-2025" --time "13:00" --type "Work" --recurrence "daily"Output:
Event added successfully.
Event added successfully.
Event added successfully.
Event added successfully.
python main.py viewOutput:
ID: 1 | Project Demo on 18-08-2025 at 15:00 (Work) @ Online Meeting Room | [Recurrence: monthly]
ID: 2 | Doctor's Appointment on 19-08-2025 at 11:30 (Personal) @ Not specified | [Recurrence: Not recurring]
ID: 3 | Client Call on 20-08-2025 at 13:00 (Work) @ Not specified | [Recurrence: Not recurring]
ID: 4 | Team Meeting on 18-08-2025 at 13:00 (Work) @ Not specified | [Recurrence: Daily]
python main.py view --date "19-08-2025"Output:
ID: 2 | Doctor's Appointment on 19-08-2025 at 11:30 (Personal) @ Not specified | [Recurrence: Not recurring]
python main.py view --date "today"Output:
Recurring events: Next occurrence(s) auto-added.
ID: 1 | Project Demo on 18-09-2025 at 15:00 (Work) @ Online Meeting Room | [Recurrence: monthly]
ID: 4 | Team Meeting on 18-08-2025 at 13:00 (Work) @ Not specified | [Recurrence: Daily]
python main.py edit --id 1 --field "name" --value "Project Kick-off Demo"
python main.py edit --name "Client Call" --field "time" --value "14:00"Output:
Event updated.
python main.py search --keyword "Work"Output:
ID: 1 | Project Demo on 18-08-2025 at 15:00
ID: 3 | Client Call on 20-08-2025 at 13:00
ID: 4 | Team Meeting on 18-08-2025 at 13:00
python main.py delete --id 2Output:
Event deleted.
python main.py remindOutput:
Found 2 event(s) for today and 2 attendee(s).
--- Sending reminders for: 'Project Demo' at 15:00 ---
-> Successfully sent reminder to: attendee1@example.com
-> Successfully sent reminder to: attendee2@example.com
--- Sending reminders for: 'Team Meeting' at 13:00 ---
-> Successfully sent reminder to: attendee1@example.com
-> Successfully sent reminder to: attendee2@example.com
All reminders have been processed.
Thank you for using Smart Event Manager CLI! 🎉