VPL
—
—
PLAYER

DASHBOARD

—

UPCOMING MATCHES

TOP PLAYERS

TEAM STANDINGS

YOUR SEASON

Streaks · Personal bests · Badges

🔥 Streaks & Records

🎯 Personal Bests

🏅 Achievements

0 / 0

MY PROFILE

Personal information & preferences

Edit Profile

▾

Season Snapshot

Lifetime Stats

All Seasons

Awards & Achievements

💰 Payment History

MY STATS

ACHIEVEMENTS

🏅 Achievements

0 / 0

MATCH HISTORY

TEAM HUB

STANDINGS

Teams & players, ranked

TEAM STANDINGS

PLAYER STANDINGS

LEADERBOARDS

Multiple categories

LEAGUE SCHEDULE

—

TEAM PROFILES

Rosters & Stats

PLAYER PROFILE

—

Season Snapshot

Lifetime Stats

All Seasons

Awards & Achievements

SCOREKEEPER

Opens in a dedicated app — results sync back here automatically

Launch Scorecard App

The Scorekeeper is a dedicated match-night tool. Open it on the scorekeeper's device to run the full flow: attendance check, random draw, per-match lag, ball-by-ball scoring, dual sign-off, and MVP nominations.

Results are saved automatically and will appear here in Match History once submitted.
OPEN SCOREKEEPER ↗
Best used on mobile. Share the link with scorekeepers before match night.

Latest Submission

—
No results submitted yet this session.

MATCH HISTORY

Submitted results from Scorekeeper

LEAGUE CONFIG

Admin only · System settings

👤
Add Player
Register new member
🏆
New Season
Create & configure
👥
Manage Teams
Rosters & captains
🎲
Team Builder ↗
Suggest balanced rosters
🎱
Tournaments ↗
Run singles & doubles brackets
🗳️
Captain Elections
Open nominations & tally votes
🔁
Trades
Approve or reject captain trades
✏️
Override Score
Edit past match results
🆘
Manual Match Entry
Enter scores if the Scorecard app failed
🔑
User Management
Roles & passwords
♻️
Refresh Data
Re-fetch from Supabase

League Settings

Email Preview

TEST SEND

Upload a designed HTML email and send it to yourself, to see how it really renders in an inbox before it goes anywhere near the league. It can only be delivered to your own address (—) — the recipient is decided on the server, so there's no way to aim a half-finished template at everyone by mistake.

Email the League

GOES TO EVERYONE

Sends a designed HTML email to every active player who has an address on file. This can't be recalled once sent, so check the recipient list first — and it's worth sending yourself a preview above before using this.

Active Season

SCHEDULE MANAGER

Admin · Generate & edit match schedule

Auto-Generate Schedule

🎱 Pegasus · 3 Tables

Each week's 3 matches are automatically split across Pegasus's 3 tables, one match per table. Weeks are spaced 7 days apart starting from Start Date.

Social & Special Nights

not league nights

Nights with no league matches (a social, banquet, etc.). They appear on the schedule and dashboard but never count as a league night — no reminders, spare availability or scorecard matchups.

USER MANAGEMENT

Admin · Manage access & roles

▾
▾

ANNOUNCEMENTS

League news, polls, and updates — react and comment below

LEAGUE CHAT

One room for the whole league — say hey, talk trash, coordinate practice

DATA MIGRATION

Admin · Import & export CSV data

EXPORT

Players & Season Stats

CSV

Exports every player's current-season stats, previous-season stats, lifetime totals, team, role, and spare status. Stat columns are tagged with the actual season id (e.g. season-24_gp), so this always reflects whichever season is active. Compatible with the Import Players format below.

id, name, team, role, spare, active,
<current_season>_gp, _gw, _gl, _pf, _pa, _mp, _mvp,
<previous_season>_gp, _gw, _gl, _pf, _pa, _mvp,
lt_gp, lt_gw, lt_pf

Match Results

CSV

Exports all locked match results stored in this session (submitted via the Scorekeeper). Includes team scores, individual matchup results, MVPs, and scorekeepers.

id, matchDate, week, homeTeam, awayTeam,
homeMatchWins, awayMatchWins,
homeTotalPts, awayTotalPts, homeGameWins, awayGameWins,
mvpHomeTeam, mvpAwayTeam, homeSK, awaySK,
feesCollected, feesTotal, submittedAt

Individual Matchups

CSV

One row per individual player contest within each match, including the score of every individual game played (where recorded). Useful for building per-player game logs in a database.

matchId, matchDate, week, homeTeam, awayTeam,
homePlayer, awayPlayer,
homeGW, awayGW, homePts, awayPts,
game1Winner, game1HomePts, game1AwayPts,
game2Winner, game2HomePts, game2AwayPts, …

Match Fee Payments

CSV

One row per player slot per match, with who paid, whether they were present or a sub, and paid status. Useful for reconciling the treasury after match nights.

matchId, matchDate, week, homeTeam, awayTeam,
team, slot, payer, isPresent, isSub, subType, paid

Full League Backup

ALL

Downloads Players, Match Results, Matchups, and Payments as separate CSV files. Use before any major data change or season rollover.

IMPORT

⚠ Imports overwrite existing data. Always export a backup before importing. The preview step shows exactly what will change before you commit.

Import Players

Upload a players CSV (matching the export format above) to add new players or update existing ones. Rows are matched by id. Missing ids create new players; existing ids update in place.

Import Match Results

Upload a match results CSV to restore historical results into Match History. Rows are matched by id — duplicates are skipped automatically.

Import Season History

CSV

Upload one completed season's file (e.g. vpl-s21-import.csv) to load its final standings, team totals and roster. This only adds history — current team assignments, lifetime totals and every other season are left untouched, and re-running the same file just refreshes that season's numbers. Players who have since left the league are created as archived records, so they still appear in the seasons they played without showing up in today's rosters or standings.

MIGRATION LOG

Recent Actions

📋
No Migrations Yet
Import or export CSV data using the buttons above. Every action gets logged here with a timestamp for audit.

MANUAL MATCH ENTRY

Admin · Enter scores if the Scorecard app failed

⚠ Use this only when the Scorekeeper couldn't be used to submit a match — app crash, frozen or dead device, etc. It creates a brand-new match result exactly as if the Scorecard had submitted it, and is logged permanently. If the match already exists and just needs a correction, use Override Score instead.

OVERRIDE SCORE

Admin · Edit past match results

⚠ Score overrides are logged permanently and take effect immediately. Edit a matchup's games below to correct it — leave a matchup's games untouched and its record (including any per-game detail already on file) carries over exactly as-is. Match fees below are editable too; MVP nominations always carry over unchanged.
▾

AUDIT LOG

Superadmin · Every privileged action taken across the league, permanently recorded

▾
▾

FEEDBACK

Share thoughts about the league · suggestions, ideas, anything

📝 Submit Feedback

Tell the league exec what's on your mind. Specific, actionable, ranty — all welcome.

0 / 1000

💡 Quick Pulse

How's the season treating you? One tap, no message required.

YOUR SUBMISSIONS

FEEDBACK INBOX

Admin · Review and respond to player feedback

—

SEASON REGISTRATIONS

Admin · Sign-ups from the public registration page

Public sign-up page

—
While this is off, the public page says sign-ups aren't open and the server refuses submissions.
The phrase "rules of conduct" automatically links to the rules of conduct page wherever it appears.
⚠ Changing this only affects new sign-ups. Each registration keeps a permanent copy of the exact wording it was accepted under.
⚠ Changing wording here does not change what an already-submitted registration says it chose.
The accepted, receipt and match-fee emails are edited on the Email Templates page.
While this is on, every league email — registration acceptance and receipt emails, plus match-fee and prepaid-balance receipts — goes only to ken.forde@gmail.com, never the actual recipient — so you can check the wording first. Turn off to email everyone for real.
Public link: vpl-register.html
—

PAYMENTS

Admin · Every fee across the league — season sign-ups and match nights

Revenue Report

Cash actually collected, split into registration fees, advance (prepaid) match fees and regular match fees paid at the table. Match fees covered by an advance balance are not counted again — the cash was counted when the advance was paid.

▾

Prepaid Match Fees

Record an advance payment for a player's match fees. The Scorekeeper automatically marks them Paid at check-in for as long as their balance covers that season's match fee — no cash or e-transfer needed week to week.

▾
▾

LIVE MATCH OVERRIDE

Superadmin · Correct attendance, matchups or scores on a match in progress. Both scorekeepers are told, resync, and carry on from the corrected position.

EMAIL TEMPLATES

Admin · Edit the wording of the emails the portal sends. The preview is exactly what recipients get.

SPARE ALLOCATION

Admin · Every spare's availability, captain requests, and manual placement for each league night

MATCHUPS

SPARES

CAPTAIN REQUESTS

BADGE AWARDS

Admin · Hand out badges that can't be worked out from match results, like winning a Killer Pool game or placing in a tournament

Award a Badge

▾
▾

AWARDED BADGES

TEXT