A comprehensive, customizable website template for hackathons run by IEEE University of Toronto Student Branch. This template provides a complete solution for hackathon management, including registration, hardware sign-out systems, and administrative dashboards.
- Aaron Gu
- Ashwin Santhosh
- Mustafa Abdulrahman
- Carmen Chau
- Wahib Barqawi
- Aidan Tran
- Warrick Tsui
For a streamlined setup experience, see our Onboard.md for a quick start guide.
- Features
- Architecture
- Prerequisites
- Installation & Setup
- Development
- Project Structure
- Using This Template
- Customization
- Deployment
- Contributing
- Public Landing Page: Customizable event landing page with registration
- User Registration System: Complete user management with email verification
- Hardware Sign-Out System (HSS): React-based inventory management dashboard
- Admin Dashboard: Django admin interface for event management
- Email Integration: Automated email notifications and confirmations
- File Upload System: Secure handling of resumes and other documents
- Team Management: Support for team-based hackathons
- Responsive Design: Mobile-friendly interface using Material-UI
- API Integration: RESTful API for frontend-backend communication
This project uses a modern full-stack architecture:
- Backend: Django 3.2 with Django REST Framework
- Frontend: React 16 with TypeScript and Material-UI
- Database: PostgreSQL 12.2
- Cache: Redis 6
- Templating: Jinja2 (instead of Django templates)
- Styling: SCSS with Materialize CSS framework
- Containerization: Docker & Docker Compose for development
Before setting up the project, ensure you have the following installed:
- Python 3.9 (required - specified in environment.yml)
- Docker & Docker Compose - Installation Guide
- Node.js v16 - Required for the React frontend
- Conda (recommended) or Miniconda - Installation Guide
-
Clone the repository:
git clone <repository-url> cd makeuoft
-
Create and activate the conda environment:
conda env create -f environment.yml conda activate ieee-makeuoft
-
Set required environment variables:
conda env config vars set SECRET_KEY=your-secret-key-here conda env config vars set DEBUG=1 conda env config vars set REACT_APP_DEV_SERVER_URL=http://localhost:8000
-
Reactivate the environment:
conda deactivate conda activate ieee-makeuoft
The project uses PostgreSQL and Redis, which are managed via Docker:
-
Start the services:
docker compose -f development/docker-compose.yml up -d
-
Apply database migrations:
cd hackathon_site python manage.py migrate -
Stop services (when needed):
docker compose -f development/docker-compose.yml down
Note: The PostgreSQL container uses trust authentication for development convenience. Never store sensitive data in the local development database.
-
Compile SCSS assets:
yarn run scss
-
Start the Django development server (main site):
python manage.py runserver
-
Start the Hardware Sign-Out System (in a separate terminal):
conda activate ieee-makeuoft cd hackathon_site/dashboard/frontend nvm use 16 # If using nvm yarn run start
-
Access the applications:
- Main site: http://localhost:8000
- HSS Dashboard: http://localhost:3000
- Admin interface: http://localhost:8000/admin
-
Create a superuser:
python manage.py createsuperuser
-
Add additional users via the admin interface at http://localhost:8000/admin
-
User profiles: Create profiles for accepted/waitlisted participants through the admin interface
cd hackathon_site
python manage.py test --settings=hackathon_site.settings.cicd hackathon_site/dashboard/frontend
yarn test- Compile once:
yarn run scss - Watch for changes:
yarn run scss-watch
- Development: Django serves static files automatically
- Production: Run
python manage.py collectstaticto collect files
makeuoft/
βββ hackathon_site/ # Main Django project
β βββ dashboard/ # React frontend app
β β βββ frontend/ # React application
β βββ event/ # Public landing page templates
β βββ registration/ # User registration system
β βββ hardware/ # Hardware management models
β βββ review/ # Application review system
β βββ hackathon_site/ # Project settings & config
βββ development/ # Development Docker setup
βββ deployment/ # Production deployment configs
βββ environment.yml # Conda environment specification
dashboard/: React-based hardware sign-out system with Material-UIevent/: Public-facing templates using Jinja2 and Materialize CSSregistration/: User registration, application forms, and email templateshardware/: Database models for inventory managementreview/: Application review and decision management
This repository is configured as a GitHub template. Choose the method that best suits your needs:
If you want to receive updates from the original template:
- Fork this repository to your account/organization
- Clone your fork locally
- Add the original as upstream:
git remote add upstream git@github.com:ieeeuoft/hackathon-template.git
Note: GitHub doesn't allow forking your own repository, so this option isn't available to the original owners.
- Click "Use this template" on GitHub
- Check "Include all branches" for complete history
- Clone your new repository
- Add upstream remote for future updates
- Use GitHub's import feature at https://github.com/new/import
- Set source URL to:
https://github.com/ieeeuoft/hackathon-template.git - Clone and add upstream remote
Key settings are located in hackathon_site/hackathon_site/settings/__init__.py:
# Essential settings to customize
HACKATHON_NAME = "Your Hackathon Name"
DEFAULT_FROM_EMAIL = "your-email@domain.com"
CONTACT_EMAIL = "contact@domain.com"
REGISTRATION_OPEN_DATE = datetime(2024, 1, 1)
REGISTRATION_CLOSE_DATE = datetime(2024, 2, 1)
EVENT_START_DATE = datetime(2024, 3, 1)
EVENT_END_DATE = datetime(2024, 3, 3)- Framework: Materialize CSS
- SCSS Files: Located in
hackathon_site/event/static/event/styles/scss/ - Key Files:
styles.scss: Main stylesheet_variables.scss: Colors, fonts, and sizes_mixins.scss: Reusable SCSS mixins
- Framework: Material-UI (MUI)
- Location:
hackathon_site/dashboard/frontend/src/
- Colors & Fonts: Edit maps in
_variables.scss - Responsive Design: Use the
@mixin responsivemixin - Flexbox Layouts: Use the
@mixin flexPositionmixin
- WSGI Server: Gunicorn (included in requirements.txt)
- Reverse Proxy: Nginx
- Database: PostgreSQL
- Cache: Redis
- Set
DEBUG = Falsein settings - Configure
ALLOWED_HOSTSandCORS_ORIGIN_REGEX_WHITELIST - Set up email server configuration
- Configure
MEDIA_ROOTfor file uploads - Run
python manage.py collectstatic - Set up proper SSL certificates
- Public files: Serve from
media/uploads/via web server - Private files: Serve through Django views with permission checks
- Static files: Serve from
static/directory via web server
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests:
python manage.py testandyarn test - Submit a pull request
- Python: Black formatter (included in environment)
- JavaScript/TypeScript: Prettier (configured in package.json)
- SCSS: Follow existing patterns in
_variables.scssand_mixins.scss
- Django Documentation
- React Documentation
- Material-UI Documentation
- Materialize CSS Documentation
- Docker Documentation
This project is licensed under the terms specified in LICENSE.md.
For quick setup instructions, see Onboard.md.