This commit introduces a new `hoist` attribute for Discord roles, allowing team roles and the registered role to be displayed in separate groups within the Discord member list. The `RoleWorker` has been updated to ensure team roles are positioned above the registered role, improving visibility and organization. Database schema changes have been made to support the new `hoist` field, and corresponding updates have been implemented in the service layer and tests to validate the new behavior.
Mixmaker
Mixmaker is a full-stack application for organizing Overwatch community scrims: Discord authentication, role ratings and preferences, RU/EN UI, event RSVP, preference-aware balanced 1/2/2 teams, captain assignment, Bo3 drafts and results, and a single-elimination bracket.
Stack
- Go backend with Clean Architecture
- PostgreSQL
- React, TypeScript, Vite, TanStack Query and Router
- REST + Server-Sent Events
- Docker Compose for local PostgreSQL and Coolify production deployment
Local development
Requirements: Go, Node.js/npm, Docker with Compose.
cp .env.example .env
make dev-db
make migrate
# Terminal 1
make backend
# Terminal 2
make frontend
The frontend runs at http://localhost:5173; API requests are proxied to the backend. To use the real API locally, copy frontend/.env.example to frontend/.env and set VITE_DEMO_MODE=false.
Create a Discord application, add the callback URL from DISCORD_REDIRECT_URL, and fill in DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET, and ADMIN_DISCORD_IDS.
Checks
make test
make lint
make compose-check
Production
The root compose.yaml is designed for a single Coolify Docker Compose resource. Coolify owns routing and networking; the file intentionally does not declare custom networks or publish PostgreSQL.
See deployments/coolify.md for setup, secrets, storage, and backup requirements.
Product documentation
Current decisions and domain rules live in memory_bank/.