1. Before you start
To follow this manual you need:
- A signed-in account on PickLM — web at
app.picklm.com, or the iOS / Android app. - The CLUB_ADMIN role on the club that will host the league, or the ADMIN role.
- Your club created in PickLM with at least one venue saved.
Open the app, sign in, then tap the Events tab in the bottom nav.
DRAFT → OPEN_FOR_ENROLLMENT → ENROLLMENT_CLOSED → SCHEDULED → IN_PROGRESS → COMPLETED) and a nested session lifecycle inside it (INSUFFICIENT_PLAYERS → SCHEDULED → ACTIVE → COMPLETED). Sessions are how the league plays out across days/weeks.
2. Choosing a league format
PickLM supports two league formats. Pick before creating:
| Format | Best for | How it plays |
|---|---|---|
| Round Robin | Stable rosters, friendly play, recurring league nights | Every team plays every other team. Standings = match wins → game diff → point diff. |
| Flight System Ladder | Larger leagues, mixed skill levels, promotion/relegation flavor | Players are grouped into flights (skill tiers). Top performers in each flight promote up; bottom relegate down between sessions. |
3. Free League — end to end
Use this flow for casual seasonal leagues with no entry fee.
3.1 Open the create wizard
- On the Events tab, tap the floating + button.
- Tap Create League.
- If you've run a similar league before, the Start Fresh / Copy from Previous sheet appears. Pick one to seed the form.
3.2 Step 1 — Basics
- League Name — e.g. "Wednesday Night Doubles — Spring 2026".
- Schedule Type — Round Robin or Flight System Ladder. (See section 2.)
- Format Type — SINGLES or DOUBLES.
- Partner Mode (Doubles only) — Fixed Partner (you play with the same partner all season).
3.3 Step 2 — Capacity
- Max Players (or Max Teams for Fixed-Partner Doubles) — total seats in the league.
3.4 Step 3 — Schedule
- Start Date & Time — first session start. Must be at least 15 minutes in the future.
- End Date & Time — when the last session wraps.
- Registration deadline — last moment players can self-register (default: start time).
3.5 Step 4 — Format-specific config
Round Robin only
- RR Schedule Type → Full Round Robin (everyone plays everyone).
Flight System Ladder only
- Max Matches/Flight — how many matches a player plays per flight per session.
- Min Players/Flight and Max Players/Flight — flight size bounds (the orchestrator may split or merge flights to honor these).
- Min Matches for Promotion — how many matches a player must complete in a session to be eligible for promotion.
- Min Win Rate for Promotion — win-rate threshold (e.g. 0.60 = 60%) to move up a flight at session-end.
3.6 Step 5 — Money
For a free league, leave both off:
- Payment Required → OFF
- Entry Fee → blank
3.7 Step 6 — DUPR rating gate (optional)
Same as tournaments — pick a DUPR Event Tier (Basic / DUPR+ / DUPR Verified) and optionally set a min/max DUPR rating range.
3.8 Step 7 — Venue
Same as tournaments — venue type (Indoor / Outdoor / Mixed), surface type, name and address.
3.9 Step 8 — Visibility & save
- Public toggle — surface in nearby-events feed.
- Tap Create League. Status: DRAFT.
3.10 Publish for enrollment
- Open the league detail screen.
- Admin overflow → Publish (or change status to OPEN_FOR_ENROLLMENT).
- Players can now tap Enroll Me.
4. Paid League (Razorpay) — end to end
Use this when you charge a season entry fee. Like tournaments, leagues collect via your club's Razorpay integration.
4.1 Wizard steps 1–4
Same as sections 3.2–3.5.
4.2 Step 5 — Money (paid configuration)
- 1Payment Required → ON.
- 2Entry Fee — per-player or per-team season fee.
- 3Currency — INR / USD / etc.
4.3 Steps 6–8 — DUPR, venue, visibility
Same as 3.7–3.9.
4.4 Player payment flow
When a player taps Enroll Me on a paid league:
- Their enrollment is created with status PENDING_PAYMENT.
- The app generates a Razorpay payment link.
- Player completes payment → webhook fires → status moves to PENDING.
- You (admin) approve → status flips to ACTIVE. Active players are auto-enrolled into every session created in the league.
4.5 Admin-add a player (paid)
- League detail → Manage Enrollments → Add Player (or Bulk Add for multiple).
- Player receives a PAYMENT_REQUIRED notification with a Razorpay link.
- On payment capture, the enrollment auto-approves (skips the manual approval step) and flips to ACTIVE.
5. Managing enrollments
5.1 Open Manage Enrollments
League detail → admin overflow → Manage Enrollments. Tabs:
- Pending — newly enrolled or paid-and-pending-approval.
- Active — confirmed players (auto-enrolled into every session).
- Rejected / Withdrawn — historical record.
5.2 Approve / reject
Tap a Pending row → Accept or Reject with reason.
5.3 Bulk add
Leagues support bulk admin-add (tournaments don't). From Manage Enrollments:
- Tap Bulk Add.
- Paste a list of emails or pick from your club's members list.
- For paid leagues, every selected player receives a Razorpay payment link.
- For free leagues, every selected player is enrolled with ACCEPTED status.
5.4 Auto-enrollment to sessions
When you create a session inside the league, every ACCEPTED / ACTIVE player is auto-enrolled into it. Players can self-unenroll/re-enroll per session while the session is still SCHEDULED.
5.5 Self-unenroll vs withdraw
- Self-unenroll from a single session — pulls the player out of just that session, keeps their league enrollment ACTIVE.
- Withdraw from league — removes them from the entire league. For paid leagues, refunds are handled off-app via Razorpay (see §8).
6. Sessions — running the season
A league is played across one or more sessions. Each session is a self-contained round of matches (e.g. weekly league night).
6.1 Session lifecycle
Each session walks through these states:
- INSUFFICIENT_PLAYERS — too few enrolled to run yet. The session sits idle until enough players are added (or it's deleted).
- SCHEDULED — minimum reached, players auto-enrolled, ready to run.
- ACTIVE — admin started the session; matches generated; scoring open.
- COMPLETED — all matches verified.
6.2 Creating a session
- League detail → Sessions tab → Add Session.
- Pick the date/time and (for Flight System Ladder) any session-specific overrides.
- Save. All ACTIVE league players are auto-enrolled.
6.3 Starting a session
- Open the session.
- Tap Start Session (admin action). Status flips to ACTIVE.
- The orchestrator generates the round-robin pairings or flight matches automatically.
6.4 Scoring matches
- Tap a match in the session.
- Tap Submit Score and enter game-by-game scores.
- Match goes through
SCHEDULED → ACTIVE → SCORE_SUBMITTED → COMPLETED. - Two-step verification: when a player submits, the opposing team must verify before COMPLETED. Admin submissions auto-verify.
- Forfeit: an admin can mark a match FORFEIT with a winning team, useful if a team no-shows.
6.5 Completing a session
When every match in the session is COMPLETED:
- The session auto-flips to COMPLETED.
- Round Robin: standings update for the league — wins/losses fold into the season totals.
- Flight System Ladder: at session end, players who hit the Min Win Rate for Promotion threshold move up a flight; bottom of each flight relegates down. The next session uses the new flight assignments.
7. Viewing standings
7.1 League standings
League detail → Standings tab. Sorted by match wins → game differential → point differential. Updates after every COMPLETED match.
7.2 Flight standings (Flight System Ladder)
Each flight has its own standings panel showing the players in that flight with their session-by-session win rate and current promotion/relegation indicator.
7.3 Player view
Players see the same standings tabs plus a My Matches filter. Score submission is enabled for participants on their own matches.
8. Completing & cancelling a league
8.1 Completing
- Once your last session is COMPLETED, admin overflow → Mark Completed on the league.
- Status flips to COMPLETED.
- The standings page becomes the official season-end results. The top of the standings is the season winner.
8.2 Cancelling
- Admin overflow → Cancel League.
- Status → CANCELLED. The league disappears from public Events feeds.
- For paid leagues: file refunds through Razorpay for every captured entry fee. The platform does NOT auto-refund.
8.3 Editing a published paid league
Most fields lock once enrollment opens. To change capacity, dates, fees, or format config:
- Cancel and re-create, OR
- Contact a system admin via the Payment Issues page in the admin dashboard for an override.
8.4 Score corrections
- Open the match → admin overflow → Reset Match.
- Match returns to SCHEDULED; standings recompute.
- Re-enter the correct score.
9. Frequently asked questions
- Q. What's the difference between a league and a tournament?
- A tournament is a single-event bracket that crowns a champion (Round Robin or Knockout) usually finished in one day or weekend. A league plays out across multiple sessions over a season — players accumulate wins across sessions, and (in Flight System Ladder) move up/down skill flights between sessions. Leagues also support bulk admin-add, which tournaments don't.
- Q. What happens when a session has too few players?
- It sits at status INSUFFICIENT_PLAYERS until you add enough enrollees to hit the minimum, or you delete the session and create a smaller one. Players can drop in/out while the session is still SCHEDULED — flights regenerate automatically.
- Q. Can I do split payments for league entry fees?
- No — split payments are tournament-only in v1. Each player pays their own league fee in full.
- Q. Can a player switch fixed-partner mid-season?
- No, partner changes during a Fixed-Partner league are not currently supported. The team is locked at enrollment. If you need to handle a partner injury / unavailability, your options are: (a) admin-add a substitute partner via Manage Enrollments → row overflow → Override Partner, or (b) withdraw the team from the league.
- Q. How does flight promotion/relegation work?
- At the end of each session in a Flight System Ladder league, players who played at least Min Matches for Promotion matches AND hit at least the Min Win Rate for Promotion threshold move up a flight. The bottom of each flight relegates down. The next session uses the new flight assignments.
- Q. Are league standings updated live?
- Yes — every time a match flips to COMPLETED, the league standings recompute. The Standings tab shows current totals at any moment.
- Q. Can I change the entry fee mid-season?
- No. Once a paid league has any captured entry fee, the fee is locked. To change it, cancel the league and re-create.
- Q. Does PickLM hold entry-fee money?
- No. Razorpay deposits entry fees directly into your club's Razorpay account. PickLM never takes custody of the money.