Feature Overview¶
A comprehensive look at everything MatchZy Auto Tournament can do.
Tournament Management¶
Bracket Generation¶
Supported Formats:
| Format | Teams | Matches | Description |
|---|---|---|---|
| Single Elimination | 2-128 | ~N | One loss = eliminated |
| Double Elimination | 2-128 | ~2N | Two losses = eliminated |
| Round Robin | 2-32 | N(N-1)/2 | Everyone plays everyone |
| Swiss | 4-64 | ~log₂(N) rounds | Similar records face off |
Features:
- ✅ Automatic bye handling for non-power-of-two team counts
- ✅ Smart seeding (random or manual)
- ✅ Walkover support (missing team advances opponent)
- ✅ Third-place match (optional)
- ✅ Bracket regeneration without losing tournament
Tournament Lifecycle¶
States:
-
Setup → Configuring tournament and teams
-
Add teams
- Select format and map pool
-
Can modify teams
-
Ready → Bracket generated, waiting to start
- Bracket preview available
- Can regenerate bracket
- In Progress → Tournament active, matches running
- Matches automatically progress
- Real-time updates
- Completed → All matches finished
- Final results available
- Demos ready for download
Match System¶
Match Statuses¶
Pending → Match created but tournament not started
Ready → Tournament started, waiting for veto or server
Loaded → On server, warmup mode, players connecting
Live → Match in progress, rounds being played
Completed → Winner determined, bracket updated
Intelligent Match Status Messages¶
The system shows context-aware status messages:
| Status | Condition | Message |
|---|---|---|
| Pending | Tournament not started | "Waiting for tournament to start..." |
| Ready | Veto not complete | "Teams voting for maps..." |
| Ready | Veto complete | "Veto complete - Waiting for server..." |
| Loaded | 0 players | "Server ready - Waiting for players (0/10)" |
| Loaded | Some players | "Waiting for players (3/10)" |
| Loaded | All players | "All players connected - Waiting for ready up" |
| Live | - | "Match in progress" |
Real-Time Features¶
WebSocket Events¶
Frontend automatically updates when:
- 🔄 Match status changes (pending → ready → loaded → live → completed)
- 🔄 Players connect/disconnect
- 🔄 Players ready/unready
- 🔄 Veto actions happen (ban, pick, side selection)
- 🔄 Tournament state changes (starts, completes)
- 🔄 Bracket updates (winners determined)
No page refresh required!
Player Connection Tracking¶
Shows live roster of all 10 players with status:
- ✅ Offline — Player not connected (gray)
- ⚠️ Connected — Player joined, not ready (yellow)
- ✅ Ready — Player typed
.ready(green)
Tracked via events:
player_connect→ Add to rosterplayer_disconnect→ Remove from rosterplayer_ready→ Mark as readyplayer_unready→ Mark as not ready
Server Management¶
Auto Server Allocation¶
When tournament starts or veto completes:
- System finds available servers (online + not in use)
- Allocates server to match
- Generates match config with teams and maps
- Sends RCON:
matchzy_loadmatch_url "http://api/matches/{slug}.json" - Configures webhook:
matchzy_remote_log_url "http://api/events/{slug}" - Configures demo upload
- Match goes to warmup
All automatic!
Server Status Monitoring¶
- RCON Heartbeat: Periodic status checks
- Match Tracking: Which match is on which server
- Auto-Config: Webhook configured on status check
- Health Indicators: Online/offline status with colors
Event Processing¶
25+ MatchZy Events Processed¶
Player Events:
player_connect,player_disconnectplayer_ready,player_unreadyplayer_death,round_mvp
Match Phase Events:
series_start,series_endgoing_live,warmup_endedknife_round_started,knife_round_endedhalftime_started,overtime_started
Round Events:
round_started,round_endbomb_planted,bomb_defused,bomb_exploded
Pause Events:
match_paused,unpause_requested,match_unpaused
Admin Events:
side_swap,backup_loaded
All events:
- ✅ Logged to console
- ✅ Stored in database (
match_eventstable) - ✅ Logged to files (
data/logs/events/) - ✅ Broadcast via WebSocket
- ✅ Trigger appropriate service updates
Admin Controls¶
Live Match Controls¶
Available during warmup/live:
- ▶️ Start match (force start)
- 🔄 Restart match
- ⏸️ Pause match (admin pause - players can't unpause)
- ▶️ Unpause match
- 💬 Broadcast message
- 🔄 Restore backup (specific round)
- 🗺️ Change map
- 🔀 Swap teams
- ⏭️ Skip veto
- 🔪 Toggle knife round
- ⏱️ Add time
- 🏁 End match
- 👥 Add backup player (new!)
Backup Player System¶
How it works:
- Admin opens match modal
- Scrolls to "Add Backup Player"
- Types player name in autocomplete search
- Selects player from dropdown (shows all tournament players)
- Chooses target team (Team 1 or Team 2)
- Clicks "Add Player to Match"
Backend sends RCON:
Features:
- ✅ Searches across all teams in tournament
- ✅ Filters out players already in match
- ✅ Shows player's original team
- ✅ Real-time autocomplete
- ✅ Requires player to reconnect after adding
Demo Recording¶
Automatic Demo Upload¶
MatchZy automatically uploads demos when matches complete:
Backend endpoint: POST /api/demos/{matchSlug}/upload
Features:
- ✅ Streaming upload (doesn't load entire file into memory)
- ✅ Match-specific folders (
demos/{matchSlug}/) - ✅ Original filename preserved
- ✅ Metadata from headers (map number, match ID)
Demo Download¶
Admins can download demos from:
- Match Details modal
- Match History page
- API:
GET /api/demos/{matchSlug}/download
Team Experience¶
Public Team Pages¶
URL Format: /team/{team-id}/match
No login required — teams access via shared link
Features:
- 🎮 Current match info (opponent, round, status)
- 🗺️ Map veto interface (BO1/BO3/BO5)
- 🖥️ Server connection details (IP, port, connect command)
- 📊 Live player status (who's connected, who's ready)
- 📈 Team statistics (wins, losses, win rate)
- 📜 Match history (past opponents and scores)
- 🔊 Sound notifications (customizable)
Sound Notifications¶
8 Available Sounds:
- Notification (default)
- Alert
- Bell
- Chime
- Ding
- Ping
- Pop
- Success
Controls:
- 🔊 Volume slider
- 🔇 Mute toggle
- 🎵 Sound preview
- 💾 Persists per browser
Plays when: Match status changes to "loaded" or "live"
Monitoring & Debugging¶
Server Events Monitor¶
Admin Tools → Server Events Monitor
Shows unfiltered stream of all MatchZy events from all servers:
- ✅ Last 100 events buffered
- ✅ Real-time WebSocket updates
- ✅ Color-coded by event type
- ✅ Full JSON payload display
- ✅ Pause/resume streaming
- ✅ Server filter (optional)
Perfect for debugging:
- Verify events are being sent
- Check player Steam IDs
- Monitor match progression
- Identify configuration issues
Event File Logging¶
All events logged to: data/logs/events/{serverId}/{date}.log
Retention: 30 days
Format: JSON lines
Use case: Historical analysis, debugging, recovery
Next Steps¶
- 🎮 Map Veto System — Interactive pick/ban flow
- 📖 Running Matches — Match management guide
- 🎯 First Tournament — Step-by-step tutorial