A web app for collaborative slot scheduling: Given a set of volunteers to accomplish a predetermined set of task
ollaborative slot scheduling – APECS official website
This project is a web app for collaborative slot scheduling. See below for more details.
Table of Contents
About The Project
This project is a web app for collaborative slot scheduling:
Given a set of volunteers to accomplish a predetermined set of task, the web app enables smooth handling of all voluntary participants.
Especially making sure that all slots are staffed and each volunteer does an equal amount of work. This project is currently deployed for french students in 2nd and 3rd years of medical school with the initative called “APECS”.
It is currently on its second year of daily usage with more than 300 registered users.
Built With
Getting Started
This project is built with Vue 3 for front end and python for back-end (flask is only used to handle remote procedure calls to fetch trainings data).
To work on the project you can either :
- Run both locally
- Run only the backend and query it with curl requests
- Run only the frontend and feed the data using the production instance (beware of CORS issues)
For production, this projection also uses nginx as a front before accessing either front or back.
The training data is serialized in Json, images are included in byte arrays. The utilities to extract data into the proper format are not included in this repository.
Prerequisites & installation
The front-end is built with Vue and requires node to fetch the requirements:
npm install npm@latest -g
The back-end is built with Python and requires the usual pip query:
pip install -r requirements.txt
Third services required:
- Sendgrid
This project uses the Sendgrid service to send mails to verify email adressed provided at signup and for forgotten password process.
You have to get an API key and link it with the application via the SENDGRID_API_KEY
env variable.
You must also create corresponding mail template (currently hardcoded in the application).
- Data base
This project is set up to use a Postgre SQL database.
You have to setup a database and then provide the DB connection URL to link it with the application via the DATABASE_URL
env variable. The URL looks like:
postgres://__login__:___password___@___server___:__port__/__path__
Database initialisation
A PostgreSQL must have been provided (see above), it can be initialised provided the following env variables:
DATABASE_URL=postgres://__login__:___password___@___server___:__port__/__path__ # URL to the PgSQL database
UNIQUE_CLASS_BATCH_ID= # a unique ID identifying the class batch corresponding to the imported data
# multiple class batches can be handled
DATA_TO_IMPORT_PATH=___path____.json # a json file following the format presented below
The data must follow the structure below:
{
"planning": [{
"h_date": "mercredi 7 septembre 2022", // date in french
"amphi": "400", // optional
"intitule": "RENTREE - PRESENTATION", // course title
"ens": "Dr GUATTY", // attending teacher(s)
"h_debut": "8h30", // starting time, in HHhmm format, in GMT+1 timezone
"h_fin": "10h00", // ending time
"h_type": "Presentation", // for sorting purpose, you just have to be consistent with your choice
"categorie": "Pres" // for sorting purpose, same
}, {
"h_date": "Vendredi 21 Juillet 2023", // another example
"amphi": "",
"intitule": "SSES - 2ème session",
"ens": "",
"h_debut": "9h00",
"h_fin": "17h00",
"h_type": "CM",
"categorie": "SSES"
}]
}
Side note: Utilities to generate the data file exist but are not included in this repository.
Launch
Back-end:
You must have the following env variables set :
DATABASE_URL=postgres://__login__:___password___@___server___:__port__/__path__ # see above
SENDGRID_API_KEY # see above
FLASK_ENV=production # if production, else set to debug, and add a DEUBG=True variable
SECRET_API_KEY # must be a secret generated string, is used for token & password hashes generation
Then:
python ./run.py
Front-end
- for debug:
npm run serve
- for release:
npm run build
Usage
TBD
Roadmap
- Initial release
- In the future:
- TBD
See the open issues for a full list of proposed features (and known issues).
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag “enhancement”. Don’t forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
License
Distributed under the AGPLv3 License. See LICENSE.txt
for more information.
Contact
Project Link: https://github.com/guatty/collaborative-slot-scheduler