Village Pool League
ADMIN GUIDE
For Admins & Superadmins
ADMIN GUIDE
ADMIN GUIDE

Admin tasks are performed in the League Portal under the Admin section of the sidebar. This guide is split out from the main Instructions Manual — see that for league rules, scoring, and how the portal works for players and scorekeepers.

Setting Up a New Season

  1. Create the new season
    Admin → League Config → New Season. Fill in the season name, number of weeks, start date, and match day.
  2. Update team rosters
    Admin → Manage Teams → EDIT opens the Team Editor: rename the team, change its color, set the captain, and add or remove roster players in one screen.
  3. Generate the schedule
    Admin → Schedule Manager. Set weeks and start date, click Generate. The app creates a full round-robin schedule automatically.
  4. Post a welcome announcement
    Admin → Announcements. A welcome post appears in the dashboard strip and the header ticker immediately.

Team Builder

Team Builder is a separate admin tool (linked from League Config, or directly at vpl-team-builder.html) for suggesting balanced rosters before a season starts — useful when re-drafting teams. It opens on a Current Rosters view showing every real team's actual roster and season average side by side, so you can see today's balance before generating anything. Below that, it ranks active players by season average, splits them into skill tiers, then randomly shuffles within each tier and deals them across your teams so overall strength stays close while the exact groupings vary every time you regenerate.

SUGGESTION, NOT AUTOMATIC

Generating and regenerating never changes real data — it's a preview. Nothing moves until you map each suggested group to a real team and click Apply, which is a real, immediate roster change. It doesn't touch captain assignments, so check Manage Teams afterward if a captain landed in a different group.

MID-SEASON PROTECTION

If any matches have already been played this season, a warning banner appears and applying a suggestion requires an extra checkbox acknowledging the risk — the schedule was built around current rosters, so mid-season changes won't update it. This same protection covers manually adding or removing a player from a roster in Manage Teams. Preseason (no matches played yet), there's no extra friction.

User Management

Navigate to Admin → User Mgmt. From here:

  • Edit Role — promote to Admin, or demote to Player. Only a Superadmin can grant or remove the Superadmin role.
  • Reset Password — resets the account back to its role default password and forces the "set your own password" prompt again on next login. Use this if someone gets locked out.
  • Edit Contact Info — update a player's email or phone directly, useful if they can't get into their own profile to fix it.
  • Add Player — enter name, email, team, role, and player type (regular or spare)
  • Set Status: Active / Inactive — archive a player who has left the league. Inactive accounts can't log in, and they drop out of active rosters and spare pools, but their historical stats stay intact. Reactivate any time from the same panel.

Schedule Manager

The auto-generated schedule creates a round-robin ensuring every team plays every other team before any pairing repeats. Set the number of weeks, a start date, and a match time — weeks are spaced 7 days apart from the start date. Generating a new schedule replaces the existing one for the season, so double-check before running it on a season that's already underway.

TABLES ASSIGNED AUTOMATICALLY

Pegasus has 3 tables. Each week's 3 matches are automatically split one-per-table when the schedule generates. Click EDIT on any week to change its date, time, or table assignments individually — useful for holidays or when a table's out of service.

24-HOUR REMINDERS ARE AUTOMATIC

A "Reminder" announcement posts itself automatically 24 hours before each week's match time — no admin action needed. It lists the matchups and their assigned tables. Editing a week's date/time re-arms its reminder for the new time.

Score Overrides

Admin → Override Score corrects a locked match result — pick the match from the dropdown, correct whichever of its 5 matchups need fixing, add a Correction Note explaining why, and apply. Standings and stats update immediately. Admins can override a match at any time, bypassing the scorekeeper's normal 15-minute self-correction window.

Each matchup uses the same game by game editor as Manual Match Entry, pre-filled with whatever's already on file — including the exact per-game detail, if that match has any. Edit a matchup's games to correct it; leave a matchup's games untouched and it carries over to the correction exactly as it already was, so fixing one wrong matchup (or just the MVP pick) doesn't mean re-entering the other four. Match Wins, Points, and Game Wins for the whole result are computed from the 5 matchups, not typed in separately.

WHAT'S EDITABLE

Matchup players and their games are editable per matchup. MVP nominations and match fee payments always carry over unchanged. A DELETE MATCH option is also available once a match is selected, for removing a duplicate or mistaken entry entirely — this reverses every stat it contributed.

UPGRADING AN OLD MATCH

A match submitted before per-game detail existed (or entered as a flat total) shows "no per-game detail on file" under that matchup. Entering its games here adds that detail going forward — the same accuracy improvement Manual Match Entry gets, applied retroactively.

EVERY OVERRIDE IS AUDITED

Applying an override or deleting a match writes a permanent entry to the Audit Log — visible only to superadmins and impossible to delete from the app. Use overrides only when genuinely necessary.

Manual Match Entry

Admin → Manual Match Entry is the fallback for when the Scorekeeper itself couldn't be used to submit a match — a frozen or dead device mid-match, with nothing ever saved to the shared database. Score Overrides can't help here, since there's no existing match result to select and correct yet.

Pick Team A and Team B, a date, and an optional week number, then fill in each of the five individual matchups from whatever the scorekeepers recorded on paper or remember — leave a matchup blank if it never happened (a 4-matchup night, for example). MVP nominations are optional. A note explaining why this was entered manually is required.

Each matchup is entered game by game, the same way it was actually played: for Games 1, 2, and 3, pick who won and how many balls the loser sank. Games Won and Points for that matchup are computed from those entries, not typed in separately — and every level above that (Match Wins, Points, Game Wins for the whole result) rolls up from there in turn, so nothing can ever disagree with the matchups underneath it.

WHY PER GAME

The achievement badges (Hot Hand's 2-0, Comeback Kid's 2-1, etc.) read the games-won record directly. A flat "games won: 2" box let an admin type a number that didn't match what actually happened on the table, silently mis-crediting a badge. Entering it game by game instead makes that impossible: counting stops the moment a side has won 2 games, so anything entered in a 3rd game after an already-decided 2-0 sweep is simply ignored.

BEHAVES LIKE A REAL SUBMISSION

This uses the exact same server-side path the Scorekeeper itself calls at lock-and-submit — the resulting match result, stats, and standings are indistinguishable from one the app submitted normally. If it needs a correction afterward, use Override Score on it like any other match.

NO PAYMENT TRACKING

Match fee payments aren't captured here — they don't affect stats or standings either way, so reconcile them separately if needed.

Audit Log

Superadmin → Audit Log is a permanent, unfilterable-by-anyone-but-superadmin record of privileged actions across the league: role changes, archiving/reactivating players, password resets, score overrides, manual match entries, contact info edits, and Data Migration actions. Filter by user or action type. Unlike the Migration Log (which admins can clear), the Audit Log has no delete option anywhere in the app.

Announcements

Every player has an Announcements page in the League section of the sidebar — not just admins. Everyone can react (👍❤️😂🎉🎱) and comment on any post, and vote on Poll/Survey posts; only admins see the posting form and a delete button.

TypeBadgeUse For
InfoBrassGeneral updates
ImportantGoldUrgent news, rule changes, deadlines
EventGreenBanquet, playoffs kickoff, social events
AchievementPurpleWeekly achievements digest, badge callouts
ReminderOrange24-hour match night reminders (posts itself automatically)
Poll / Survey QuestionBlueAsk players to vote on 2+ options — add the options when posting; results update live, and a player can change their vote anytime
WEEKLY ACHIEVEMENTS DIGEST

The New Announcement form has a "🏅 Generate Weekly Achievements Digest" button. It scans the last 7 days of match results, finds any dashboard badges (Sniper, On Fire, MVP, etc.) that players newly unlocked, and fills in a draft title/message/type — review and edit before posting like any other announcement.

BADGE AWARDS

Some badges (💀 Killer Instinct for winning a Killer Pool game, 🥇 Tournament Champion and 🥈 Runner-Up for tournament results) can't be worked out from match results, so you hand them out yourself. Open Badge Awards in the admin menu, pick the player, badge and the date they earned it, and tap Award Badge — it shows on their Dashboard and My Stats with that date. Use Remove on the list below the form to take one back. These badges are not included in the weekly digest, so mention them in an announcement yourself if you'd like the league to see.

VPL
VILLAGE POOL LEAGUE
OPEN PORTAL ↗ PLAYER MANUAL ↗