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 install
poetry run python -m shared_planner
cd web
npm run dev
The 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:app
The 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.