Match Preferences and Player Constraints
Sometimes players have good reasons to avoid being paired with specific opponents — personality conflicts, large skill gaps that aren't fun for either side, or other personal circumstances. ServeLeague's match preference system (also called player constraints) lets players and admins manage these situations formally.
This tutorial covers both sides: players requesting matchup preferences, and admins reviewing and managing them.
How Match Preferences Work
A match preference is a request to avoid pairing two specific players together during session scheduling. Each preference has:
- Players: the two players who should not be paired
- Priority: Strong (never pair) or Preferred (avoid if possible)
- Scope: applies to the entire club or a specific league
- Reason: optional explanation for the request
The Approval Workflow
When a player submits a match preference, it doesn't take effect immediately. Instead, it enters a review queue:
- Player submits → status becomes Pending Approval
- Admin reviews → approves or rejects the request
- If approved → status becomes Active and the scheduling algorithm enforces it
- If rejected → status becomes Rejected with an optional reason
When an admin creates a constraint directly, it becomes Active immediately — no approval needed.
[!TIP] The distinction between admin-created and player-submitted constraints ensures that admins maintain control over scheduling while giving players a voice.
For Players: Requesting a Match Preference
Step 1: Navigate to My Preferences
From any club page, open the navigation menu and select My Preferences (or My Availability). This page shows your current match preferences and their statuses.
Step 2: Add a New Preference
Click the Add Preference button. You'll see a form with:
- Player: select the player you'd like to avoid being paired with
- Priority: choose Strong (the pairing should never happen) or Preferred (avoid if possible, but okay as a last resort)
- Scope: whether this applies to all leagues at the club or just a specific one
- Reason: an optional explanation for the admin
Fill in the details and submit.
Step 3: Track Your Request
After submitting, your preference appears in the list with a Pending Approval badge. You'll see:
- Pending Approval (yellow): waiting for admin review
- Active (green): approved and enforced during scheduling
- Rejected (red): declined by the admin, with the reason shown
[!NOTE] Even while a preference is pending, you cannot create a duplicate request for the same player pair. The system prevents duplicates across all statuses.
For Admins: Managing Constraints
Step 1: Access the Constraints Page
From the admin sidebar, navigate to Leagues → Constraints. This page shows all player constraints across the club.
Step 2: Review Pending Requests
Use the filter tabs to view constraints by status:
- All: every constraint regardless of status
- Active: currently enforced constraints
- Pending: player-submitted requests awaiting your review
- Rejected: previously declined requests
- Overridden: constraints that were manually overridden
When you select the Pending tab, you'll see all requests waiting for your decision.
Step 3: Approve or Reject
For each pending constraint:
- Click Approve to activate it immediately. The scheduling algorithm will start respecting this constraint in future sessions.
- Click Reject to decline the request. You can provide a reason that the player will see.
Step 4: Create Admin Constraints
Admins can also create constraints directly. Click Add Constraint, select the two players, set the priority and scope, and save. Admin-created constraints become Active immediately.
Dashboard Widget
The admin dashboard includes a Pending Actions widget that shows the number of pending constraints (and pending membership requests). Click the count to jump directly to the Pending tab on the constraints page.
How Constraints Affect Scheduling
Active constraints are enforced during drop-in session scheduling:
Strong Constraints
- Never violated — the algorithm will leave players unmatched rather than pair them against a strong constraint
- Use for situations where pairing two players would be genuinely problematic
Preferred Constraints
- Best-effort avoidance — the algorithm tries to avoid the pairing but may allow it if no other valid pairing exists
- Use for mild preferences where flexibility is acceptable
What Happens During a Session
When a session starts, the scheduling algorithm loads all active constraints and uses them alongside the normal pairing rules:
- Round 1: position-based seeding is validated against constraints. If an excluded pair is generated, the algorithm swaps players with adjacent pairs to find a valid arrangement.
- Subsequent rounds: excluded pairs are treated like already-played pairs, so the algorithm naturally avoids them during Swiss-style pairing.
- Fallback: when constraints are very tight (many exclusions, few players), the algorithm prioritizes strong constraints over preferred ones, and may allow repeat opponents before violating a strong constraint.
[!IMPORTANT] Only Active constraints affect scheduling. Pending, Rejected, and Overridden constraints have no effect on matchup generation.
Limits and Settings
- By default, each player can have up to 3 active matchup exclusions. Admins can adjust this limit in club settings.
- Constraints apply per club or per league — league-scoped constraints only affect sessions in that specific league.
- There's no limit on the number of constraints an admin can create.
Summary
| Who | Action | Result |
|---|---|---|
| Player | Submits preference | Status: Pending Approval |
| Admin | Approves | Status: Active (enforced in scheduling) |
| Admin | Rejects (with reason) | Status: Rejected (player sees reason) |
| Admin | Creates directly | Status: Active immediately |
| Algorithm | Loads active constraints | Avoids excluded pairs during matchmaking |