Navigation Menu
Sport Configurations
Dutchie's Brackets supports multiple sports out of the box, each with customized settings and terminology.
Supported Sports
| Sport | ID | Venue Term | Status |
|---|---|---|---|
| Pool/Billiards | POOL | Table | Active |
| Pickleball | PICKLEBALL | Court | Active |
| Basketball | BASKETBALL | Court | Active |
| Cornhole | CORNHOLE | Board | Active |
| Custom | CUSTOM | Venue | Active |
Pool / Billiards
Overview
Pool (8-ball, 9-ball, etc.) tournaments with table-based play.
Configuration
{
id: 'POOL',
name: 'Pool / Billiards',
description: 'Classic pool tournaments - 8-ball, 9-ball, straight pool',
venueLabel: 'Table',
defaultFormat: 'Double Elimination',
isActive: true
}
Scoring Options
Race Format:
- Race to 3
- Race to 5
- Race to 7
- Race to 9
Game Types:
- 8-Ball
- 9-Ball
- 10-Ball
- Straight Pool
- One Pocket
Typical Settings
{
"scoringType": "RACE_TO_X",
"raceCount": 5,
"gameType": "8_BALL",
"breakType": "ALTERNATING",
"timeLimit": null,
"tableCount": 3
}
Match Format Examples
Race to 5 (8-Ball):
First to win 5 games wins the match
Games are individual 8-ball racks
Loser breaks (standard) or alternating breaks
Best of 9:
Play 9 games maximum
First to 5 wins (must win by 1)
Common Tournament Structures
Bar Tournament:
- 16-32 players
- Double Elimination
- Race to 3 or 4
- 2-4 tables
- 3-4 hours
Championship:
- 8-16 players
- Double Elimination
- Race to 7-9
- 3-5 tables
- 6-8 hours
Pickleball
Overview
Fast-growing paddle sport with court-based play.
Configuration
{
id: 'PICKLEBALL',
name: 'Pickleball',
description: 'Fast-paced pickleball tournaments',
venueLabel: 'Court',
defaultFormat: 'Double Elimination',
isActive: true
}
Scoring Options
Game Formats:
- Games to 11 (win by 2)
- Games to 15 (win by 2)
- Games to 21 (win by 2)
Match Formats:
- Best of 1 game
- Best of 3 games
- Best of 5 games
Typical Settings
{
"scoringType": "POINTS",
"gamePoints": 11,
"winByTwo": true,
"matchFormat": "BEST_OF_3",
"timeLimit": 60,
"courtCount": 2
}
Match Format Examples
Best of 3 to 11:
Game 1: First to 11 (win by 2)
Game 2: First to 11 (win by 2)
Game 3: First to 11 (if needed)
Win 2 games = win match
Rally Scoring:
Both teams can score
Play to 11, win by 2
Switch sides at 6
Common Tournament Structures
Recreation League:
- 8-12 teams
- Round Robin
- Games to 11
- Best of 1
- 2-3 courts
- 2-3 hours
Competitive Tournament:
- 16-32 players
- Double Elimination
- Games to 11
- Best of 3
- 4-6 courts
- 4-6 hours
Basketball
Overview
Court-based basketball tournaments, including 3-on-3, 5-on-5.
Configuration
{
id: 'BASKETBALL',
name: 'Basketball',
description: '3-on-3, 5-on-5, and tournament basketball',
venueLabel: 'Court',
defaultFormat: 'Single Elimination',
isActive: true
}
Scoring Options
Game Types:
- 3-on-3 (to 21)
- 5-on-5 (timed quarters)
- H-O-R-S-E
- Around the World
Time Formats:
- Timed (4 quarters)
- Untimed (to X points)
- Running clock
- Stop clock
Typical Settings
{
"scoringType": "POINTS",
"winCondition": 21,
"winByTwo": false,
"gameType": "3_ON_3",
"timeLimit": 20,
"courtCount": 2
}
Match Format Examples
3-on-3 to 21:
First to 21 points wins
2-pointers = 2 points
3-pointers = 3 points
Make it take it or change possession
5-on-5 Timed:
4 quarters of 10 minutes
Highest score wins
Overtime if tied (5 min)
Common Tournament Structures
3-on-3 Street Ball:
- 8-16 teams
- Single Elimination
- Games to 21
- 2-3 courts
- 3-4 hours
5-on-5 League:
- 6-8 teams
- Round Robin
- 4x10 minute quarters
- 1-2 courts
- Full day
Cornhole
Overview
Bag toss game with board-based play.
Configuration
{
id: 'CORNHOLE',
name: 'Cornhole',
description: 'Cornhole tournaments and leagues',
venueLabel: 'Board',
defaultFormat: 'Double Elimination',
isActive: true
}
Scoring Options
Game Points:
- Games to 21
- Games to 15
- Games to 11
Scoring Rules:
- Bag on board = 1 point
- Bag in hole = 3 points
- Cancel scoring (subtract opponent's score)
Typical Settings
{
"scoringType": "POINTS",
"gamePoints": 21,
"cancelScoring": true,
"matchFormat": "BEST_OF_1",
"boardCount": 4
}
Match Format Examples
Standard Game to 21:
First to 21 points wins
Cancel scoring (subtract opponent)
Must win by 1
Alternate throwing rounds
Tournament Match:
Best of 3 games
Each game to 21
Switch sides between games
Common Tournament Structures
Casual Tournament:
- 16-32 players/teams
- Double Elimination
- Games to 21
- 4-6 boards
- 3-4 hours
Competitive League:
- 8-12 teams
- Round Robin + Playoffs
- Games to 21
- Best of 3
- 4-6 boards
- 4-6 hours
Custom Sport
Overview
Create your own sport configuration for any activity.
Configuration
{
id: 'CUSTOM',
name: 'Custom',
description: 'Create your own sport configuration',
venueLabel: 'Venue',
defaultFormat: 'Double Elimination',
isActive: true
}
Customization Options
Define:
- Sport name
- Venue terminology
- Scoring system
- Match format
- Time limits
- Rules
Example Custom Sports
Darts:
{
"name": "Darts",
"venueLabel": "Board",
"scoringType": "COUNTDOWN",
"startingScore": 501,
"matchFormat": "BEST_OF_5"
}
Foosball:
{
"name": "Foosball",
"venueLabel": "Table",
"scoringType": "POINTS",
"gamePoints": 5,
"matchFormat": "BEST_OF_3"
}
Video Game Tournament:
{
"name": "Super Smash Bros",
"venueLabel": "Station",
"scoringType": "STOCK",
"stocks": 3,
"matchFormat": "BEST_OF_3"
}
Chess:
{
"name": "Chess",
"venueLabel": "Board",
"scoringType": "WIN_LOSS",
"timeControl": "10+0",
"matchFormat": "SINGLE_GAME"
}
Configuration Details
Venue Labels
The venueLabel determines terminology throughout the app:
| Label | Plural | Used In |
|---|---|---|
| Table | Tables | "Match 1 - Table 3" |
| Court | Courts | "Match 2 - Court 1" |
| Board | Boards | "Match 3 - Board 2" |
| Station | Stations | "Match 4 - Station 5" |
| Venue | Venues | "Match 5 - Venue 1" |
Scoring Types
Available Scoring Systems:
type ScoringType =
| 'SIMPLE_WIN_LOSS' // Just track winner
| 'POINTS' // Point-based (basketball, pickleball)
| 'GAMES_WON' // Game count (pool, tennis)
| 'RACE_TO_X' // First to X wins
| 'TIME_BASED' // Timed matches
| 'STOCK' // Lives/stocks (video games)
| 'COUNTDOWN' // Start at X, count to 0 (darts)
| 'CUSTOM' // Define your own
Default Formats
Recommended by Sport:
| Sport | Recommended Format | Why |
|---|---|---|
| Pool | Double Elimination | Fair for skill-based game |
| Pickleball | Double Elimination | Everyone gets multiple matches |
| Basketball | Single Elimination | Matches are longer |
| Cornhole | Double Elimination | Social + competitive |
| Custom | Depends | Based on sport characteristics |
Sport-Specific Settings
Settings Schema
Each sport can define custom settings:
interface SportSettings {
// Scoring
scoringType: ScoringType;
pointsToWin?: number;
winByTwo?: boolean;
gameCount?: number;
// Time
timeLimit?: number; // Minutes
hasOvertimehaOVERTIME?: boolean;
// Format
matchFormat: 'BEST_OF_1' | 'BEST_OF_3' | 'BEST_OF_5';
rackFormat?: string; // Pool-specific
// Venues
venueCount: number;
venueLabel: string;
// Rules
customRules?: string;
tiebreaker?: string;
}
Accessing Settings
In Tournament Creation:
const sport = getSportConfig('POOL');
console.log(sport.venueLabel); // "Table"
console.log(sport.defaultFormat); // "Double Elimination"
In Match Management:
const settings = JSON.parse(tournament.settings);
console.log(settings.scoringType); // "RACE_TO_X"
console.log(settings.raceCount); // 5
Adding New Sports
For Developers
To add a new sport to Dutchie's Brackets:
- Create Sport Config
// src/lib/sport-configs/[sport-name].ts
export const TENNIS_CONFIG: SportConfig = {
id: 'TENNIS',
name: 'Tennis',
description: 'Tennis tournaments with sets and games',
venueLabel: 'Court',
defaultFormat: 'Single Elimination',
isActive: true,
scoringOptions: {
scoringType: 'GAMES_WON',
setsToWin: 2,
gamesPerSet: 6,
tiebreakAt: 6
}
};
- Add to Sport Index
// src/lib/sport-configs/index.ts
import { TENNIS_CONFIG } from './tennis';
export const MVP_SPORTS = [
POOL_CONFIG,
PICKLEBALL_CONFIG,
BASKETBALL_CONFIG,
CORNHOLE_CONFIG,
TENNIS_CONFIG, // Add here
CUSTOM_CONFIG
];
- Test Configuration
- Create test tournament
- Verify all features work
- Check terminology appears correctly
Sport Categories
Grouping Sports
Sports can be categorized:
export const SPORTS_BY_CATEGORY = {
RACKET_SPORTS: [
PICKLEBALL_CONFIG,
TENNIS_CONFIG,
BADMINTON_CONFIG
],
TABLE_GAMES: [
POOL_CONFIG,
FOOSBALL_CONFIG,
PING_PONG_CONFIG
],
COURT_SPORTS: [
BASKETBALL_CONFIG,
VOLLEYBALL_CONFIG
],
OUTDOOR_GAMES: [
CORNHOLE_CONFIG,
HORSESHOES_CONFIG
]
};
Category Labels
export const CATEGORY_LABELS = {
RACKET_SPORTS: 'Racket & Paddle Sports',
TABLE_GAMES: 'Table Games',
COURT_SPORTS: 'Court Sports',
OUTDOOR_GAMES: 'Outdoor Games'
};
Best Practices
Choosing Sport Configuration
Best Practices:
- Select appropriate venue term - Use familiar terminology that matches physical setup and is clear to participants
- Set realistic defaults - Time limits based on actual play, reasonable point/game counts, tested format recommendations
- Consider tournament length - Match duration × total matches, venue availability, participant endurance
Customizing Sports
Best Practices:
- Document custom rules - Clear scoring explanation, tiebreaker procedures, special circumstances
- Test before tournament - Create practice tournament, enter test results, verify calculations
- Communicate to participants - Share rules in description, explain scoring system, answer questions upfront
Future Sports
Planned Additions:
- Tennis (sets and games)
- Volleyball (rally scoring)
- Table Tennis / Ping Pong
- Darts (501, Cricket)
- Foosball
- Shuffleboard
- Horseshoes
- Bocce Ball
- Disc Golf
- Video Games (Smash, FIFA, etc.)
Request a Sport:
- Submit Feature Request
- Include: Sport name, typical format, scoring system
- Community votes on priorities
Next Steps
Don't see your sport? Create a custom configuration or request it on GitHub!
Was this page helpful?
Help us improve our documentation. Found a typo or have a suggestion?
Report an Issue