Project Vote is a web application written with Django that was used as the realtime Q&A tool for a company wide event named "Town Hall". This event took place on 16th December 2018 with an audience of 3,000 people. See the Key Features section below for an overview.
- Python 3+ (see requirements.txt file)
- Django 2.1.4+
- Gunicorn 19.9.0+ (only for deployment)
- Nginx 1.14.2+ (only for deployment)
- Install all the dependencies (e.g.
pip install -r requirements.txt). - Run the django development server via
cd vote && python manage.py runserver. - Launch a browser and connect to the server (e.g. 127.0.0.1:8000).
- To get past the login page, create a new session ID by creating a new user account in the backend.
Note: The username will be the session ID, while the password is currently is hardcoded to 'defaultuser'
(the password is not used, only the session ID!)
python manage.py migratepython manage.py createsuperuser# IMPORTANT: Username=<SESSION_ID>, password=defaultuser
- A user logs into the frontend webpage via a given session ID.
- The user can view existing questions.
- The user can post a new question if not already asked.
- The submitted question is first sent to the backend.
- Moderators access the backend via /admin.
- The moderator can control the following flags per question:
isAppropriateflag: Appear on frontend?isAnsweredflag: Change question color to green on frontend?votes: An internal ranking of questions to help moderation.
- Authentication: Requires logging via session ID.
- Realtime Q&A: Allows posting and viewing of moderated questions.
- Moderation: Questions posted are sent to backend for moderation first.
- Capacity: ~2,000 clients.
Note: The bottleneck of the web application is the authentication page which can only support 2,000 HTTP requests within 1 minute (tested with Gunicorn and Nginx). Other pages support more than 10,000 HTTP requests per minute.
As a reference, the django development server can support around 1500 clients (though it is ill advised to use the development server for production! Use Nginx with Gunicorn instead).
- Othman Alikhan
- See About page for more details.



