The dink.one League Manual
Everything involved in running a league here, in the order you will meet it.
This is the long version. If you want the five-minute one, read the getting-started walkthrough instead — it covers the first hour. This covers the whole season, including the parts nobody thinks about until they are standing in the rain on week four deciding whether to cancel. It is written for someone who already runs a league somewhere else and is deciding whether to move it.
Print or save as PDF from your browser — the layout is set up for it. Or just send the link; it stays current, which a PDF in someone's downloads folder does not.
Part 1
Before you start
Two decisions and a short list of things to have to hand. Both decisions are hard to reverse later, so they are worth ten minutes now.
What a league is here
A league is one event with a season attached. That sounds like a technicality and it is not: it means everything you already know about running an event here — registration, payment, check-in, scoring — works the same way inside a league, and the league layer only adds the parts that are genuinely league-shaped, like fixtures and standings.
Four things stack up, and it is worth being able to name them because the console uses these words:
- The owner — your club, facility or organization. It holds the members, the money and the staff. One owner can run many leagues.
- The league — the event itself. Its name, its courts, its rules, its entry fee.
- The season — the run of weeks. Spring, Summer, Division 2. A new season is a new run under the same league.
- The team — a small group with its own roster, chat and join code, captained by one of its players.
Decide the shape: teams, pairs, or individuals
This is the one decision that changes everything downstream, because it decides what an "entry" actually is.
Most leagues want teams. Pairs and individuals exist for formats where a roster would be overhead rather than help — a singles ladder, a fixed-partner doubles season.
- Teams — a captain claims a team, builds a roster and fields a squad each session. Mints a community, a join code and a group chat. The heavy option, and the right one if people play under a team name.
- Pairs — two players enter as a fixed partnership. No roster, no chat, no captain console.
- Individuals — people enter alone. Standings stay private by default until you publish them, which suits a ladder where a public bottom-of-the-table is discouraging.
What to have ready
None of this needs to be final. Rough numbers are enough to get set up, and everything here can be changed before you publish.
- How many teams you expect, and how many weeks the season runs.
- Where you play, and how many courts you have on a league night. This determines how many fixtures can run at once.
- What you charge, and whether you charge the team or each player.
- Who else helps. You can give someone the scoring job without giving them your finances.
Part 2
Setting the season up
Twenty minutes of configuration that decides how much work the next three months are. The defaults are sensible; these are the ones worth thinking about.
Create the league
Start where you would start anything else — the events list in your manage console. Create the event, then turn on team play. That reveals the league console: seven tabs covering teams, schedule, courts, standings, playoffs, compliance and settings.
Everything you run lives on that one list with its status on the row, so a season in progress, a one-off tournament and a draft you have not published yet are all visible together rather than in separate places.
Sessions — the number that drives everything
A session is one scheduled time teams play. Say how many the season runs and that single number drives the schedule, the standings, the public page and what players are told they are paying for.
If your league does not run on a clean weekly cadence — a skip week for a holiday, a double-header — set the count to the number of times people actually play, then adjust individual dates on the schedule. The count is the truth; the calendar is the arrangement.
Entry fees
You can charge the team, charge each player, or both. What a team owes is whichever figure is larger, so "both" behaves as a floor plus a per-head rate rather than double-charging.
Whichever you pick, members can pay their own share and the captain can settle for anyone who will not. That combination is what stops the captain fronting the whole entry and chasing it back all season.
- Team minimum — what the team owes regardless of how many people they field. Good when your costs are per-court, not per-player.
- Per-member rate — charged for each confirmed player on the active roster. Good when your costs scale with headcount.
- Both — the team owes the larger of the two. A floor that protects you against a four-person team on a six-court night.
Setting the level
You can cap a team's average rating, band individual players, or both. As captains build rosters they see where they stand against your cap, and entries arrive flagged rather than needing you to work it out.
Both warn rather than block, and that is deliberate. A hard block refuses the newcomer with three matches and a wide confidence band — who is exactly the player you want in a social division — while doing nothing about the experienced player who has simply not logged results here yet. Judgement beats arithmetic on this one, so we give you the arithmetic and leave the judgement to you.
Scoring rules
Three settings decide how a result becomes official, and they are worth setting deliberately because changing them mid-season is visible to everyone.
For a social league, let captains report and count results provisionally — people want the table on the drive home. For anything where the table decides promotion or prize money, wait for confirmation.
- Who may report — captains, staff, or organizers only. Captains is right for most leagues; it is the difference between you entering forty scores a week and none.
- Sets per match — best of one, three or five. This drives how the scoring screen looks on the night.
- Provisional or confirmed-only — whether a reported result counts immediately with a "provisional" chip, or waits for the opposing captain.
Part 3
Filling the league
Entries arrive as claims, not as bookings. You decide who is actually in.
Opening entry
Share one link. A captain follows it, claims a team, names it, and starts inviting players. They can build the roster while waiting for your approval, so nobody is blocked on you.
A player can hold one claimed team per league, enforced with a lock — two people racing to claim the same side cannot both end up captain, and the loser finds out at the moment they try rather than after building a roster.
What captains do
Captains are doing you a favour and the software should act like it. They get their own console covering the four jobs, and a needs-attention list so they are not holding a season in their head.
Worth telling captains up front: they can add a co-captain. Captaining alone for a whole season is how people quietly stop volunteering.
- Claim the team and name it.
- Invite players in bulk or one at a time; each person confirms for themselves.
- Build a squad each session from who is available, and commit it — which is what notifies the players they are on.
- See who still owes, send a reminder, or pay for someone who will not.
Approving entries
Open the Teams tab, look at the roster and the eligibility read-out, then approve or decline with a reason. The captain sees the decision either way.
A team over your cap is a conversation, not an automatic no. Approve them into a higher division, ask the captain to change the roster, or decline — but say which, because "declined" with no reason is how you lose a team for next season too.
Late entries and short rosters
You can let a team in after entry closes, as long as it is before fixtures are generated. After that it is a rebuild, so it is usually kinder to hold them for next season than to move everyone's dates.
Short rosters sort themselves out more often than you expect. Captains can add players mid-season, and there is a confirm cutoff a few days before the season starts precisely so a captain discovers they are two short in time to do something rather than on the night.
Part 4
The money
Entry fees land in your own account. We are not a middleman holding your takings — we take a percentage at the moment of the charge and the rest is yours.
Connecting Stripe
Connect once, from Billing. You do it in Stripe rather than here, and we never see your bank details. One connected account covers every league, club and facility you manage — it is priced per operator, not per entity.
You can set prices before verification finishes. A paid tier saved early is held as a draft and switches itself on when Stripe confirms, so you are not blocked waiting.
What it costs
You can run a whole season on a free account. The plan changes our percentage and unlocks two specific features — bookable court reservations, and private groups that stay out of public listings. Everything else works on Free.
The switch pays for itself on volume rather than features. Going from 10% to 3% saves $70 on every $1,000 collected, so Basic breaks even somewhere around $290 a month collected through us. Work it out on your own numbers.
- Free — no monthly fee, we take 10% of what you collect through us.
- Basic — $20 a month, our cut drops to 3%.
- Pro — $100 a month, our cut drops to 1%.
- Stripe's processing fees are separate and go to Stripe. We quote our share on its own rather than folding them together, because an all-in number would be wrong the moment Stripe change theirs.
How a team balance works
Each team gets one balance. What they owe is the larger of your team minimum and your per-member rate times their confirmed active roster. Everything that reduces it reconciles against that single number: member payments, captain payments, offline payments you record, credits, and waivers.
That means a captain can look at one figure and know where they stand, and so can you. There is no separate ledger per player to reconcile at the end.
An overdue balance blocks the captain confirming their final roster. It never forfeits the team. That is a deliberate choice: forfeiting a team over money punishes eleven players for one person's card being declined.
Refunds
The person who paid files the request; you approve or decline it against a preview of what your published policy says should happen. You can approve a different amount if the circumstances warrant it.
Publish your refund policy before the season, not when the first request arrives. Every refund argument we have seen came from a policy that existed only in the organizer's head at the moment it was needed.
Part 5
The schedule
Generate once, then edit. You should never have to rebuild a season because one week moved.
Generating fixtures
Close entry once you know who is in, then generate. Read the grid before publishing — this is the cheapest moment to change your mind, and the only one before people start planning around it.
Publishing announces the schedule to every registered team. Re-publishing sends the announcement again, so make your edits and then publish rather than publishing and iterating.
Schedule health
Above the fixture list is a panel that flags the things that quietly ruin a season. They are all cheap to fix before publishing and expensive afterwards, which is the whole reason it sits there rather than in a report you would never open.
Treat a clean health panel as the bar for publishing. It is a short list and it is right more often than it is annoying.
- Weeks missing a date, time or facility — the most common one, and the one that generates the most messages if it ships.
- Squads configured in settings that no fixture actually plays — those roster spots would never be scored.
- More concurrent fixtures than you have courts for.
Changing a fixture
Individual fixtures edit without touching anything else. Captains are notified when something they are in moves.
If the season start date itself moves after fixtures exist, you get a one-click prompt to shift week one and everything after it. Take it — editing thirty fixtures by hand is how a schedule ends up internally inconsistent.
- Move it to a different date or time.
- Send it to a different court or facility, including a mid-season facility change for a whole session.
- Postpone without committing to a new date yet.
- Swap home and away, or reassign which squad plays which line.
Cancelling a session
Cancel the session and a make-up is appended automatically. You choose whether the rest of the season stays put and the make-up goes on the end, or everything shifts forward a week. Extend is the default and surprises fewest people.
Weeks already played, in progress or completed are never moved, and neither are playoff weeks. If only one fixture is affected rather than the whole night, reschedule that fixture instead — cancelling the session is for when nobody plays.
Part 6
Running the weeks
The season is running. This is the part that should be quiet, and mostly is — the design goal for these three months is that you do nothing on a normal week.
The weekly rhythm
Captains set availability and commit a squad. Players get notified they are on. People turn up and play. Someone reports the scores. The table updates. If nothing is broken, none of that touches you.
Your job on a normal week is the standings tab and the needs-attention list. Everything that actually requires an organizer — a dispute, a team that has gone quiet, a fixture with no result three days on — surfaces there rather than needing you to go looking.
Scores and confirmation
Results move through four states. The reason for the chain rather than a single "enter score" box is that a league table people do not trust is worse than no table, and trust comes from the losing captain having agreed.
Unconfirmed results auto-confirm after 48 hours. That is the pragmatic bit: without it, one unresponsive captain freezes a fixture forever and you end up entering results by hand to unstick the table.
You can override any result at any point, and an override is recorded as one. Nobody has to take your word for it that the table is right, which is exactly the position you want to be in during a promotion argument.
- Reported — one captain has entered it. Shows as provisional if your league counts provisional results.
- Confirmed — the other captain agreed. Counts.
- Official — you or your staff signed it off. Ends the argument.
- Disputed — the other captain disagreed. Waits for you.
When a result is disputed
A dispute surfaces in your needs-attention list with both versions side by side and who submitted what. Talk to both captains, then set the result and mark it official. Most disputes are a transposed set score, not a disagreement about who won.
Fix it in the week it happens. A disputed result sitting for a fortnight becomes a standings argument, and by then two more weeks have been played on top of a table that was wrong.
Getting help — staff and scorers
You can give someone a specific job without giving them everything. Each hat is separate, so the person entering scores on a Tuesday never sees your Stripe balance.
The most valuable one to hand out is scoring. It is the job that has to happen on the night, in a hall, on a phone — and the person best placed to do it is almost never you.
- Scoring — enter and confirm results. Gets the event-day control room, sized for a phone at the side of a court.
- Check-in — scan people in and see who is expected.
- Roster — view and adjust who is on which team.
When a team stops showing up
It happens in most seasons. You have a range of responses short of the nuclear one, and which you pick should depend on whether they are coming back.
Suspend a team for a week and their fixtures are handled without wrecking the table. Withdraw them and their remaining fixtures resolve consistently for everyone else — nobody ends up with a different number of played weeks by accident. Reinstate is there when the captain reappears, which is more often than you would think.
Part 7
Finishing the season
The last two weeks decide whether people enter again. Worth more attention than they usually get.
Playoffs
Seed a bracket from the final table, or seed it by hand if the table does not tell the whole story. The bracket publishes to the same public page the season used, so nobody has to be told where to look.
Playoff weeks are protected from schedule shifts, so a make-up week added late in the season cannot quietly push your final into a week when half the teams are away.
Prizes
Record what each place gets and who won it. The ledger is a record, and a public one — it settles the "what did second place actually get" question that comes up every single season.
State the prize structure when you open entry, not at the end. People decide whether to enter partly on what is at stake, and a prize announced in week ten reads as an afterthought no matter how generous it is.
Closing out, and the next season
Complete the season and the table freezes, the public page keeps working as an archive, and every result stays on the players' records. Nothing is deleted, and the URL you shared all season keeps resolving.
For the next run, create a new season under the same league. Your settings carry, your courts carry, and returning captains keep their teams — which means your second season costs you an evening rather than a weekend. That is the compounding bit, and it is the main reason to put the setup effort in once.
Part 8
Getting more out of it
A league is a reason for people to come back weekly. What surrounds it decides whether they stay when it ends.
Your club is the asset, not the league
Everyone who plays in your league joins your club as a member. When the season ends they are still there — reachable, still holding their history with you. A league that ends and disperses its players has to be rebuilt from scratch every time.
That is the whole argument for running it here rather than in a spreadsheet and a group chat. The spreadsheet does the standings; it does not leave you with a membership afterwards.
Talking to everyone at once
Send a message to your members, or to just one league, and it reaches them in the app and as a notification. No mailing list to maintain, no group chat that half of them muted in March.
Use it for the things that genuinely matter — a facility change, entry opening for the next season, a weather call. Broadcast fatigue is real and it is one-way: once people mute you, the weather call does not land either.
Keeping results honest
A daily scan looks for the patterns that suggest results are not what they appear to be — implausible score patterns, matches between accounts that only ever play each other, ratings moving in ways that do not fit the play behind them.
Anything it finds comes to you as a flag to review, never as an automatic penalty. A machine noticing a pattern is a reason to look; it is not a finding, and treating it as one would eventually punish somebody who did nothing wrong.
How ratings work, and why players care
Every confirmed result moves the players' ratings, weighted by how much the result can be trusted — a league match with both captains agreeing carries far more weight than a self-reported casual game. The rating shows a confidence band rather than a single number, because a rating from four matches genuinely is less certain than one from forty, and hiding that produces false confidence.
This matters to you for one practical reason: your league is where the trustworthy results come from. Players get a rating that means something because of leagues like yours, which is a decent thing to tell people who are deciding whether to enter.
What else is on the same account
None of this is required and none of it costs extra beyond the plan you are already on. It is here because most people running a league end up wanting at least one of them by the second season.
Every one of them shares the same members, the same payment setup and the same console. Nothing needs setting up twice.
- Group several leagues, tournaments or clinics into one program with a public page — useful when you run a spring and a summer season and want one link.
- Bring coaches under your club so they take bookings and payments through the same account.
- Run your facility: bookable reservations with split payment and waitlists, on a paid plan.
- Sell gift certificates and hold credit balances, which is the least painful way to handle a refund you would rather not put back on a card.
Part 9
What we do not do
The short list of things you might reasonably expect and will not find. Better here than in week three.
Known gaps, stated plainly
We would rather lose a signup to an honest list than win one and disappoint someone in week three. Everything else in this manual works today; these do not.
If one of these is a hard requirement for your league, tell us. What organizers actually block on is the best evidence we have about what to build next.
- Prize payouts. We record who won what; paying it out is yours.
- Rotating-partner formats, where partnerships change every round. Fixed teams, fixed pairs and individuals all work.
- Content moderation tools. There is no report-abuse queue; problems come to you as a human.
- Syncing ratings with other rating systems. Our rating is built from results logged here, and does not read from or write to anyone else's.
Ready to try it with a real season?
Set a season up and look at it before you commit to anything. Nothing goes public until you publish it, entry stays closed until you open it, and you can run the whole thing on a free account. If you would rather talk it through with a person first, say so — we would like to hear what you are running.





