Draftforge
A tournament management platform for Dota 2 gaming communities.
Website: dota.kettle.sh
Documentation: kettleofketchup.github.io/DraftForge
Table of Contents
Features
| Status | Feature | Description |
|---|
| :white_check_mark: | Tournament Brackets | Single/double elimination and round-robin with automatic bracket generation |
| :white_check_mark: | Team Draft System | Snake, Normal, and Shuffle draft modes balanced by MMR for 40+ player drafts |
| :white_check_mark: | Hero Draft | Real-time Captains Mode hero picking with spectator view, timers, and pick/ban tracking |
| :white_check_mark: | Match Tracking | Steam API integration for match statistics |
| :white_check_mark: | Telemetry | Structured logging with structlog and optional OpenTelemetry tracing |
| :white_check_mark: | CSV Import | Bulk-add users via CSV upload with conflict detection and team assignment |
| :soon: | Team Management | Create and manage rosters, track player stats, and coordinate with Discord |
| :soon: | League System | Season-based competitive leagues with ELO ratings and standings |
| :soon: | Discord Integration | Server syncing for rosters and tournament announcements |
| :soon: | Auction Draft | Captain nomination bidding with salary caps and real-time WebSocket auctions |
Tech Stack
| Layer | Technologies |
|---|
| Frontend | React 19, TypeScript, Vite, TailwindCSS, Radix UI |
| Backend | Django 5, Django REST Framework, Daphne (WebSockets), Celery (distributed task workers) |
| Infrastructure | Docker, Nginx, Redis (caching) |
| Observability | Sentry (error tracking & session replay), structlog, OpenTelemetry (opt-in) |
| Auth | Discord OAuth, authenticated WebSockets |
graph LR
Client([Browser]) -->|HTTPS| Nginx
subgraph Backend
Django[Django]
end
subgraph Frontend
React[React]
end
Nginx -->|/api/| Backend
Nginx -->|/*| Frontend
subgraph Data
Redis[(Redis)]
DB[(SQLite / Postgres)]
end
subgraph Workers
Celery[Celery]
DiscordBot[Discord Bot]
end
Backend --> Data
Backend -.->|tasks| Workers
subgraph Observability
Sentry[Sentry]
OTel[OpenTelemetry]
end
Backend --> Observability
Frontend --> Observability
Quick Start
Run everything locally with populated test data:
git clone https://github.com/kettleofketchup/draftforge.git
cd draftforge
./dev # Install just, create venv, install deps
poetry install # Install Python dependencies
just test::setup # Build images, migrate, populate test data, start stack
Open https://localhost when ready.
Screenshots
| Home | Tournaments | Tournament Detail | Bracket |
|---|
 |  |  |  |
Demo Videos
Automated demo recordings are available for key features: