Automatically track player performance and get suggested skill level changes over time — how points are calculated, thresholds, adjusters, and applying updates.
Skill Level Management (/operator/skill-levels) is an Operator tool that watches how
players perform match to match and suggests when a player's skill level should go up or
down — the way APA-style leagues rate players. It's separate from entering a player's
skill level number by hand; instead, it does the math for you based on wins, losses, and
(optionally) balls made and achievements, then lets you review and apply the suggested
changes whenever you're ready.
Not the same as the Skill Level handicap type. The Handicap System doc covers the Skill Level option in the Scoresheet Builder's Handicaps section — the per-player number entered during score entry that produces a round bonus. This tool is what keeps that number accurate over time. They share the same underlying value: a player's skill level here is the exact number the Skill Level handicap type uses during scoring. This page only makes sense once your scoresheet's Handicaps section is set to Skill Level — that scoresheet's min/max range sets the outer bounds every suggestion and manual entry here is clamped to.
Every player accumulates points from the matches they've played since their last reset date (shown as "Last Changed" in the Players tab), starting from a configured baseline:
Nothing changes automatically — suggestions are a starting point. You review them on the Players tab and choose what to actually save.
League-wide configuration, saved once for the whole league.
| Setting | What it does |
|---|---|
| Starting Points | Points every player starts from right after their tracking resets. Default 500. |
| Games To Play Before Update (optional) | If set, a player's suggestion stays paused — shown with a pause icon — until they've played at least this many games since their reset date. Leave blank to suggest changes from the first game played. |
An info banner reminds you that the scoresheet's Handicaps section sets the overall skill level range for the league (with a link straight to the Scoresheet Builder), and that an individual player's own Min/Max Skill Level fields can narrow that range further for just them.
| Setting | What it does |
|---|---|
| Points for Match Win | Points added for winning a match. Default 100. |
| Points for Match Loss | Points added for losing a match — usually a negative number. Default -100. |
| Points per Ball on Table | Points per ball made, added; the same amount per ball left on the table, subtracted. Only relevant if your scoresheet tracks balls made/left. Supports decimals. Default 0 (off). |
| Setting | What it does |
|---|---|
| Points to Move Down | If a player's running total drops below this, a one-level decrease is suggested. Default 200. |
| Points to Move Up | If a player's running total rises above this, a one-level increase is suggested. Default 800. |
A threshold bar visualizes the safe zone between the two values relative to Starting Points.
Optional bonus/penalty applied on top of the flat win/loss points, based on the skill-level gap between the two opponents in a match. The formula for both is the same:
(Player's Skill Level − Opponent's Skill Level) × Multiplier × -1
Each direction has its own multiplier and a condition that controls when it applies:
| Win Adjuster Condition | Applies when |
|---|---|
| Lower Beats Higher (default) | The winner's skill level is lower than the loser's |
| Higher Beats Lower | The winner's skill level is higher than the loser's |
| Always | Every win |
| Never | Adjuster is off |
| Loss Adjuster Condition | Applies when |
|---|---|
| Higher Loses to Lower (default) | The loser's skill level is higher than the winner's |
| Lower Loses to Higher | The loser's skill level is lower than the winner's |
| Always | Every loss |
| Never | Adjuster is off |
With the defaults, a lower-skilled player gets a bonus for beating a higher-skilled opponent, and a smaller penalty for losing to one — while a higher-skilled player is penalized more for losing to someone rated lower. A live example panel below the settings plugs your current multipliers and conditions into sample matchups so you can see the exact point swing before saving. If both conditions are set to Never, the panel notes that no adjusters are currently active.
If your scoresheet has achievements configured with skill level points, they're listed here for reference (code, name, and point value) — this section is read-only. Edit the point values from the Scoresheet Builder.
Save Settings and Cancel Changes only appear once you've changed something. Reset to Defaults is always available and reloads the tool's built-in defaults into the form — it still requires Save Settings to actually persist them.
One row per player in the league, recalculated live as you adjust Settings so you can see the effect before committing to anything.
| Column | Shows |
|---|---|
| Actions | Calendar icon opens Match History for that player; history icon opens Skill Level History. |
| Player | Player name. |
| Last Changed | The player's reset date, or "Never" if their tracking has never been reset. |
| Points | Current running point total since their last reset. Click it for a breakdown popover showing starting points, per-match win/loss points (with any adjuster math), balls made/left points, achievement points, and the total. |
| Current | The player's current skill level. |
| Suggested | The tool's suggested next level, with an up or down arrow — or a pause icon if frozen by Games To Play Before Update. Blank if no change is suggested. |
| New | An editable field, pre-filled with the suggestion (clamped to the player's bounds). Edit it to override the suggestion before saving. |
| Note | Optional freeform text, saved with that player's history entry. |
The New field's border flags a mismatch: orange means your entered value matches the suggestion but not the current level; red means it matches neither the current level nor the suggestion.
Save Skill Levels (top of the tab) applies every row where New differs from Current, after a confirmation prompt. Saving:
Select players with the row checkboxes (Select All/Deselect All available), then
Mass Update Reset Dates to set a past-or-today date and an optional note for all of
them at once. This doesn't directly change a player's current skill level, but it does
change which matches are included in their running point total and suggestion math going
forward. Use it to correct or backdate when tracking should have restarted (for example,
fixing a mid-session baseline) without changing anyone's skill level value. A Skill Level
History row is written for each selected player with level columns left blank, using your
note or the default note (Mass reset date update) if left empty.
For one player: every match since their last reset, with the opponent, the opponent's skill level, the skill-level difference (with an up/down arrow), the date, a win indicator, balls made/left (if tracked), achievements earned, a per-match points popover, and a running total. A synthetic "Starting baseline" row is appended after the match rows and shows the reset date and Starting Points. Bye matches are filtered out and do not appear in this table.
For one player: a simple table of past changes — original level, new level, date, and note — drawn from every history entry created by Save Skill Levels or Mass Update Reset Dates above.
| Action | Operator | Team Captain | Player |
|---|---|---|---|
| View the Skill Levels page | ✅ | — | — |
| Change Settings (points, thresholds, adjusters) | ✅ | — | — |
| Save a player's skill level change | ✅ | — | — |
| Mass-update reset dates | ✅ | — | — |
This is an Operator/SuperAdmin-only tool. Team Captains and Players don't have access to this page, and every underlying change is enforced server-side regardless of what the UI shows.
/operator/skill-levels (Players section of the navigation) — the only place this
tool lives, with its two tabs, Players and Settings.Is this the same as the "Skill Level" option in the Scoresheet Builder? No, but they're connected. The Scoresheet Builder's Handicaps section lets you turn on a Skill Level handicap type, which uses each player's skill level number during scoring to calculate a round handicap bonus. This tool is what calculates and updates that number over time based on match results — see Handicap System for how the number itself is used in scoring.
Why is a player's Suggested column blank even though I know they've been winning? Either their running point total hasn't crossed a threshold yet, or Games To Play Before Update is set and they haven't played enough games since their last reset — check for a pause icon in the Suggested column.
If I edit the New value instead of accepting the suggestion, does anything break? No. The New column is fully editable — enter any value within the player's allowed range and it saves as entered, whether or not it matches the suggestion. The border color is just a visual flag, not a restriction.
Does saving a skill level change always create a history entry? Yes. Every saved skill level change writes a Skill Level History row. The note is optional and can be blank.
I need to fix a player's reset date without touching their skill level — can I? Yes — use Mass Update Reset Dates on the Players tab. It only changes the reset date, never the skill level itself, and writes a reset-only history row with your note (or a default note if left blank).
Can I widen a player's range past the scoresheet's overall min/max by setting a wide Min/Max Skill Level on Player Details? No. A player's own bound can only narrow the league-wide scoresheet range, never widen it — the two are always intersected.
What happens to point totals if I change Settings after players have already accumulated points? The Players tab recalculates live using the new settings for the player's entire history since their reset — there's no separate "old settings" vs. "new settings" split. Save Settings only persists the values; it doesn't change how existing match history is interpreted going forward.