A collaborative planning application with calendar integration and email notifications.
- User management with admin capabilities
- Shop and reservation management
- Email notifications and reminders
- Calendar integration (ICS format)
- Multi-language support (English and French)
- Responsive web interface
-
shared_planner/- Python backendapi/- REST API endpointsdb/- Database models and operationsics.py- Calendar integrationmailer_daemon.py- Email notification systemweek.py- Week management logictemplates/- Email templates
-
web/- Vue.js frontend application- Built with Vue 3 + TypeScript + Vite
- PrimeVue component library
- Python 3.12+
- Node.js 16+
- SQLite3 database
- SMTP server for emails (e.g. OVH)
- Install dependencies using Poetry:
poetry install- Set up environment variables:
nano .env
SMTP_SERVER=
SMTP_PORT=
SMTP_USER=
SMTP_PASSWORD=- Navigate to the web directory:
cd web- Install dependencies and build the frontend:
npm installpoetry run python -m shared_plannercd web
npm run devThe application will be available at http://localhost:5173
- Build the frontend:
cd web
npm run build-
Configure your web server to serve the static files from
web/dist -
Run the backend with a production WSGI server:
poetry run gunicorn shared_planner.main:appThe following settings must be configured in the admin interface:
base_domain: The domain name of your server (e.g., https://example.com)admin_mail: Email address for admin notificationsmail_from: Email address used as the sender for notifications
block_all_emails: Disable all email notifications (useful for testing)email_notification_before: Hours before a reservation to send a remindercleanup_reminders_days: Days to keep reminders before cleanupcleanup_notifications_days: Days to keep notifications before cleanuptoken_validity: Hours before login tokens expire
For a complete list of settings and their descriptions, head to the Admin > Server Settings page where you will be able to modify them and find a detailed description of each setting.
This project is licensed under the MIT License. See the LICENSE file for details.