✏️ Hackathon registration server
Branch: master
Clone or download
Pull request Compare This branch is 139 commits ahead, 55 commits behind HackAssistant:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Add hackathon compatibility message Feb 15, 2018
app Fix emails delivered to spam Feb 3, 2019
files ignore files directory Nov 4, 2017
fixtures Add line breaks and indentation to fixture json Jul 4, 2017
organizers Waitlist email Jan 31, 2019
reimbursement Fix email templates Jan 31, 2019
.editorconfig replace pep8 to flake8 to allow for longer lines Aug 7, 2017
.travis.yml remove failing travis test until we understand the error Jan 28, 2018
LICENSE update to hackAssistant Nov 20, 2017
README.md HK: Local setup on windows Oct 23, 2018
app.json make dropbox non mandatory for heroku Feb 14, 2018
manage.py fix styling Oct 25, 2017
management.sh.template add reimbursement stats Jan 28, 2018
requirements-windows.txt HK: Local setup on windows Oct 23, 2018
requirements.txt Update requirements.txt Oct 22, 2018
server.sh.template update documentation Nov 20, 2017
to_change.md Update to_change.md Oct 29, 2018



Maintainability Build Status

📝 Hackathon registration server. Originally HackUPC/backend. With collaboration from HackCU


  • Email sign up ✉️
  • Travel reimbursement management 💰
  • Hackathon registration form 📝
  • Check-in interface with QR scanner 📱
  • Review applications interface for organizers (includes vote) ⚖️
  • Email verification 📨
  • Forgot password 🤔
  • Internal user role management: Hacker, Organizer, Volunteer, Director and Admin ☕️
  • Automatic control of confirmation, expiration and cancellation flows 🔄
  • Django Admin dashboard to manually edit applications, reimbursement and users 👓
  • Flexible email backend (SendGrid is the default and recommended supported backend) 📮
  • (Optional) Automated slack invites on confirm

Demo: http://registration.gerard.space (updated from master automatically. Running on Heroku free dyno)


Needs: Python 3.X, virtualenv

  • git clone https://github.com/hackassistant/registration && cd registration
  • virtualenv env --python=python3
  • source ./env/bin/activate
  • pip install -r requirements.txt
  • On Windows substitute last two steps by:
  • env\Scripts\activate
  • pip install -r requirements-windows.txt
  • (Optional) If using Postgres, set up the necessary environment variables for its usage before this step
  • python manage.py migrate
  • python manage.py createsuperuser (creates super user to manage all the app)

Dummy data

Coming soon

Available enviroment variables

  • SG_KEY: SendGrid API Key. Mandatory if you want to use SendGrid as your email backend. You can manage them here. Note that if you don't add it the system will write all emails in the filesystem for preview. You can replace the email backend easily. See more here.
  • PROD_MODE(optional): Disables Django debug mode.
  • SECRET(optional): Sets web application secret. You can generate a random secret with python running: os.urandom(24)
  • DATABASE_URL(optional): URL to connect to the database. If not sets, defaults to django default SQLite database. See schema for different databases here.
  • DOMAIN(optional): Domain where app will be running. Default: localhost:8000
  • SL_TOKEN(optional): Slack token to invite hackers automatically on confirmation. You can obtain it here
  • SL_TEAM(optional): Slack team name (xxx on xxx.slack.com)
  • DROPBOX_OAUTH2_TOKEN(optional): Enables Dropbox as file upload server instead of local computer. (See "Set up Dropbox storage for uploaded files" below)


Local environment

  • Set up (see above)
  • python manage.py runserver
  • Sit back, relax and enjoy. That's it!

Heroku deploy

You can deploy this project into heroku for free. You will need to verify your account to use the scheduler for automatic application expirations emails. See "Use in your hackathon" for more details on using in your hackathon.


Production environment

Inspired on this tutorial to understand and set it up as in our server.

  • Set up (see above)
  • Create server.sh from template: cp server.sh.template server.sh
  • chmod +x server.sh
  • Edit variables to match your environment and add extra if required (see environment variables available above)
  • Create restart.sh from template: cp restart.sh.template restart.sh
  • chmod +x restart.sh
  • Edit variables to match your environment and add extra if required (see environment variables available above)
  • Run restart.sh. This will update the database, dependecies and static files.
  • Set up Systemd (read next section)

Set up gunicorn service in Systemd

Needs: Systemd.

  • Edit this file /etc/systemd/system/backend.service
  • Add this content
Description=backend daemon

ExecStart=/home/user/project_folder/server.sh >>/home/user/project_folder/out.log 2>>/home/user/project_folder/error.log


  • Replace user for your linux user.
  • Replace project_folder by the name of the folder where the project is located
  • Create and enable service: sudo systemctl start backend && sudo systemctl enable backend

Set up Postgres

Needs: PostgreSQL installed

  • Enter PSQL console: sudo -u postgres psql
  • Create database: CREATE DATABASE backend;
  • Create user for database: CREATE USER backenduser WITH PASSWORD 'password'; (make sure to include a strong password)
  • Prepare user for Django
ALTER ROLE backenduser SET client_encoding TO 'utf8';
ALTER ROLE backenduser SET default_transaction_isolation TO 'read committed';
ALTER ROLE backenduser SET timezone TO 'UTC';
  • Grant all priviledges to your user for the created database: GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
  • Exit PSQL console: \q

Other SQL engines may be used, we recommend PostgreSQL for it's robustness. To use other please check this documentation for more information on SQL engines in Django.

Automatic Dropbox backup

Hackers data is really important. To ensure that you don't lose any data we encourage you to set up automatic backups. One option that is free and reliable is using the PostgresSQLDropboxBackup script.

Find the script and usage instructions here

Set up Dropbox storage for uploaded files

This will need to be used for Heroku or some Docker deployments. File uploads sometimes don't work properly on containerized systems.

  1. Create a new Dropbox app
  2. Generate Access token here
  3. Set token as environment variable DROPBOX_OAUTH2_TOKEN

Set up nginx

Needs: Nginx

  • sudo vim /etc/nginx/sites-available/default
  • Add site:
server {
    listen 80;
    listen [::]:80;

    server_name my.hackupc.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        alias /home/user/project_folder/staticfiles/;
    location /files/ {
        alias /home/user/project_folder/files/;
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/user/project_folder/backend.sock;


Deploy new version

  • git pull
  • ./restart.sh
  • sudo service backend restart


Automated expiration

  • Create management.sh from template: cp management.sh.template management.sh
  • chmod +x management.sh
  • Edit variables to match your environment and add extra if required (see environment variables available above)
  • Add to crontab: crontab -e
*/5 * * * * cd /home/user/project_folder/ && ./management.sh > /home/user/project_folder/management.log 2> /home/user/project_folder/management_err.log

User roles

  • is_volunteer: Allows user to check-in hackers with QR and list view
  • is_organizer: Allows user to vote, see voting ranking and check-in hackers.
  • is_director: Allows user to send invites to hackers as well as send reimbursement.
  • is_admin: Allows user to enter Django Admin interface

Use in your hackathon

You can use this for your own hackathon. How?




Update emails:

You can update emails related to

Update hackathon variables

Check all available variables at app/hackathon_variables.py.template. You can set the ones that you prefer at app/hackathon_variables.py

Update registration form

You can change the form, titles, texts in applications/forms.py

Update application model

If you need extra labels for your hackathon, you can change the model and add your own fields.

  • Update model with specific fields: applications/models.py
  • python manage.py makemigrations
  • python manage.py migrate

Want to Contribute?

Read these guidelines carefully.

By making a contribution, in any form (including, but not limited to, Issues and Pull Requests), you agree to abide by the Code of Conduct. Report any incidents to report@gerard.space and appropriate action will be taken against the offender after investigation.


MIT © Hackers@UPC