Tanglin Rugby Club

Scheduler Handbook

How to build a multi-day, multi-pitch tournament schedule with the TRC Tournament Scheduler — from entering age groups to handing a running order to visiting clubs.

The tool trc-scheduler.pages.dev
Step 1

Open it

There is nothing to install and no login. Open trc-scheduler.pages.dev in any browser and start working.

Read this first

Your schedule is stored in your own browser, not on a server. Nobody else can see it, and it will not appear on your other laptop. It survives closing the tab and restarting the machine, but it will not survive clearing your browsing data.

To get a schedule to anyone else — or to your own second machine — you must download a file and send it. That is the only way it travels.

A new board starts completely empty — no days, no pitches, no age groups — because every event is a different shape. Your first stop is Global settings, to say how many days the event runs and which pitches you have. Until there is at least one of each, the Schedule tab has nothing to draw.

After that the tool opens on the Schedule tab, which is the board itself. The other tabs hold everything that feeds it, and the tab you were last on is remembered.

TabWhat lives there
ScheduleThe board, the unscheduled tray, block details, warnings, pitch usage
Age groupsEvery age group and all its settings. The main setup screen
TeamsNames for each team, pool slot by pool slot
FixturesThe full match list, grouped by age group
FeesEntry fee per group, and what it works out to per match and per player
Global settingsOperating hours, turnarounds, changeovers, auto-arrange
Save & shareFiles, saved versions, exports
Step 2

Set up your age groups

Do days and pitches first if you have not already — age groups produce blocks, and blocks need lanes to sit on.

Go to Age groups. Everything the schedule derives from starts here — how many blocks exist, how long each one runs, how many games it contains.

Start from a preset

Four buttons add a whole competition at once. Each adds only what is missing, so pressing one twice does nothing and pressing several combines them.

PresetAdds
Add seniorsU10, U11, U12, U13, U14, U15, U17
Add juniorsU5, U6, U7, U8, U9
Add GCU10G, U12G, U14G, U16G, U18G
Add touchU10T, U12T, U14T, U16T, U19T

You can also type any name into Add an age group — the tool reads the number in it to decide sensible defaults, so U16 starts on a full pitch and U8 on a half. Remove a single group with the × at the end of its row, or start over with Clear all age groups. Both ask first.

Then set each group up

The row for each age group carries every setting for it. The ones that change the shape of the competition most are Teams, Pools and Pitch.

Odd team counts are fine. Pools are filled as evenly as possible, so seven teams in two pools gives you 4 + 3 — and the short pool carries a rotating bye each round.

A bye is a win

Where pools are uneven, the tool lists which team sits out which round, and states that a bye counts as a win. It does not enforce that, because it does not hold results — the note is there so whoever sets the competition up in Tournify carries the rule across.

Step 3

Name the teams

Optional, but it turns the fixture list from something only you can read into something you can send a visiting club.

On the Teams tab, each age group shows its pools with a box per slot. Type a club name into A1 and every fixture involving A1 shows that name — on the board, in the match rundown, in the fixture list, and in every export. Leave a slot blank and it keeps its code.

The pool code stays visible next to the name, faded. That is deliberate: it lets you check the draw is right and lets anyone reading a schedule work out which pool a team is in.

Knockout fixtures

Knockout matches stay as W QF1 v W QF2 and similar. Who plays in them is not known until the pool results are in, so there is no name to show yet.

Step 4

Build the schedule

Every age group produces either two blocks — pool phase and knockout phase — or one combined block, depending on its Split blocks setting. Blocks start in the tray under the board and you place them on a lane. A lane is one pitch on one day, so the board is pitches × days — two pitches across Saturday and Sunday is four lanes; a third pitch makes six, and a third day makes nine. Both are editable in Global settings.

Move things

  • Drag a block sideways to change its kick-off, or onto another lane to change its venue or day.
  • Click a block to open its details. Click it again to close them.
  • Keyboard — see the shortcuts.

Put one block down

Selecting an unscheduled block gives you Place on the board. It finds the earliest spot the block actually fits — stepping over what is already on each lane, leaving the changeover you asked for on both sides, and refusing to start a knockout before its own pools have finished. It tells you where it landed. If nothing on the board can take it, it says so rather than dropping it somewhere that immediately clashes.

Or let it have a go

Global settings holds three auto-arrange buttons: pools on Saturday with knockouts on Sunday, complete age-group blocks, and tidy lanes.

Starting point, not an answer

Auto-arrange packs the longest block first. That balances the lanes, but it knows nothing about heat, age, or which games you want as showpieces. Treat what it produces as a first draft.

Change the competition from the block

Selecting a block opens its details, which show the block length in hours and minutes, how it is made up, and when it runs. Below that, every setting for that age group is editable in place — so you can shorten U13's pool games and watch the block resize without leaving the board. Those changes apply to the whole age group, not just the block you clicked.

Step 5

Check the warnings

The status panel above the tabs is always live. It reports one of four states.

CLEAN TIGHT PARTIAL CLASH

CLASH means something is genuinely wrong and must be fixed. TIGHT means it will work but something is close to the bone. PARTIAL means blocks are still sitting in the tray.

Things it treats as errors

  • Two blocks overlapping in the same lane.
  • A block starting before doors open or running past close.
  • A knockout scheduled before its own pool games have finished.
  • One age group at both venues at the same time.

Things it only warns about

  • Not enough changeover between two blocks on the same pitch. If the two need different pitch markings, it says so and expects the longer changeover.
  • Not enough recovery between an age group's pools and its knockout.

The Peak live games figure in the status panel is worth watching. It counts how many matches are on at once across both venues, which is what your referee supply has to cover — two half-pitch age groups running in parallel puts four games live at the same moment.

Step 6

Save it and send it

Three different things, on the Save & share tab, doing three different jobs.

WhatDoes whatUse it when
AutosaveKeeps the current board in this browser. Automatic, invisible, holds one state onlyAlways on. Nothing to do
Saved versionsNamed snapshots you can restore, still only in this browserBefore you experiment with something you might want to undo
Download a fileWrites the whole setup to diskSending it to anyone, or moving to another machine

There are two file formats and both import back:

  • .json — the plain configuration.
  • .md — a readable document with the age group table, the byes, the team lists and the full running order, with the configuration carried in a code block at the end. This is the one to send: a club can read it without the tool, and you can still open it here later.

Open a file… loads either format back. There are also plain-text and CSV exports for pasting into an email or a spreadsheet.

Handing off to Tournify

Tournify is where the tournament actually runs. It imports teams by pasting, has no schedule import and no API, so this produces paste blocks and working sheets rather than one file it can swallow. Four buttons, each filling the box below them:

Open handover page is the one to work from. It opens in its own tab as a numbered document you follow top to bottom while typing into Tournify:

  1. Create the divisions — each with its teams, pools and a-side count.
  2. Locations and match days.
  3. Playing fields with the start time for each, since every field carries its own.
  4. Plan in this order — divisions grouped by match length, because Match Duration is one setting on Tournify's schedule page rather than a property of a division. Set the duration once, plan everything in that group, move on.
  5. Paste the teams — one block per division with its own Copy button.
  6. Build the format — pools with their seed-to-team mapping, and the bracket.
  7. Drag the fixtures — every match grouped by day, location and field, in the order you will place them.

It prints cleanly, so you can have it on paper beside the laptop rather than switching tabs. Two plain exports sit alongside it — Teams as text and Fixtures as CSV — if you want the raw data in a spreadsheet.

Read the warning in the setup sheet

Tournify has no concept of a half or quarter pitch, so each split becomes its own playing field — and Tournify does not know those fields are the same grass. It will happily put a full-pitch match alongside two half-pitch ones. What this tool exports is safe, because it never overlaps blocks on a lane. That safety is lost the moment anything is dragged inside Tournify.

Unnamed teams fall back to their seed label, so row counts always match your entry and nothing exports blank. Knockout fixtures stay as W QF1, which is what Tournify’s own bracket expects. Tournify’s planner cannot take scheduling constraints such as minimum rest — that is what this tool is for, which is why the two are used together rather than one replacing the other.

Undo covers the small stuff

⌘Z steps back through your last 60 changes, and restoring a saved version can itself be undone. Named versions are still the right tool for a board you want to come back to in an hour — undo history is not kept once you close the tab.

Reading a block

Three things are encoded into every block on the board.

U1307:30–10:30 · 12 gamesFull · 12 min
U13KO · 12:10–14:10 · 8 gamesFull · 12 min
U1014:10 · 12g×2

Same age group, pool then knockout · a narrower block abbreviates rather than truncating

  • The fill colour is the age group. It stays the same wherever that group appears, so you can follow one group across every lane. The legend at the top of the page lists them, grouped by pitch layout.
  • Diagonal stripes mean knockout. Solid means pool play.
  • The pill shows the pitch layout and game length. A full pitch runs one game at a time, half runs two, quarter runs four.

Narrow blocks shorten their own detail rather than cutting it off, so a short knockout block might show only 8g. Hover any block for the full description, or click it for everything.

Fixture IDs

Every match has a permanent handle: the age group, then its number within that age group — U13-P07 for a pool match, U13-K03 for a knockout one. It appears in the Fixtures tab, the match rundown, both CSVs, the running order and the Tournify sheets, so a match can be referred to the same way everywhere.

The number never changes. Drag a block to another pitch, another day, another time, gang the pools, reschedule the whole weekend — U13-P07 is the same fixture. That is the point: a printed running order stays correct after you move something.

The trade is that IDs do not run in order down the page, because the page is in kick-off order while the ID follows the fixture's place in its own pool. Pool A's matches are numbered first, then pool B's, but they are played alternately. Switch on Run each pool straight through and the two orders coincide.

Reading a fixture

In the Fixtures tab and in a selected block's rundown, every match is one line: kick-off, pitch, fixture ID, round, then the two sides either side of a centred v. Games that kick off together share the time cell and are marked P1 / P2.

  • The team pill carries the pool code and the club name as one object. The code shows its pool as both a colour and a shape — pool A a circle, B a square, C a diamond, D a triangle — so the seed stays traceable once names are in. With no name entered it is just the code.
  • A round pill appears on knockout matches. Quarter-finals, semi-finals, placing matches and the final each have their own colour, and a final is a filled star.
  • Pool matches get a quiet round marker insteadRound 2 — and only where the round changes. Naming the pool would be the same fact already on both team pills. The effect is deliberate: pool matches read calm, knockout matches read loud.
  • A knockout side carries the fixture it comes from. W BQF1 names a slot, not a match, so the ID of the match that fills it sits alongside — you never have to scan back up the list to find which fixture that was.

The two views

Above the list, Kick-off order and Grouped.

  • Kick-off order is the run sheet, and the default. Every match in the order the day plays out.
  • Grouped splits the list up — pool matches by round, knockout matches by competition, so Cup, Plate, Bowl and Shield read as the four separate tournaments they are. An age group with only one competition looks exactly the same in both views.

They are not interchangeable, and the reason is worth knowing: grouping breaks kick-off order. A Bowl quarter-final can sit under the Bowl heading or at 09:00 between two Cup matches, not both. Each group is in kick-off order internally, but the groups interleave. Use kick-off order to run the day and grouped to understand or explain the format. The choice is remembered per browser.

How the rounds feed each other

Above a knockout list there is a How the rounds feed each other disclosure. Open it for a diagram of the whole knockout: one box per match, a solid line where the winner advances and a dashed one where the loser drops a tier, with the trophy tracks as horizontal bands.

It is drawn from the fixtures themselves rather than from a template per format, so it is correct for anything the scheduler can produce. It appears only where there is a flow to draw — the two placement formats and both second-phase pool formats generate no progression at all, so nothing is shown rather than an empty diagram. The same diagram appears on the Tournify handover page, open, in the step where you rebuild the format.

U10 U11 U12 U13 U14 U15 U17

Age groups you add yourself are given their own colour automatically.

Every age group field

Each age group is a card on the Age groups tab, with every setting labelled. The line beside the name summarises what those settings add up to — teams, how they divide into pools, the pitch layout, and how many matches it produces — and updates as you change things. All of it is also editable from a selected block's details.

FieldWhat it does
TeamsHow many teams entered, 4 to 16. Odd numbers are fine
TRCHow many of those are TRC's own. They play, but pay no entry fee
Pool sizesRead-only. How the teams divide, e.g. 4+3. Flags a bye where uneven
On pitchPlayers a side: 10, 12 or 15
SquadMaximum players a team may register. Never below the on-pitch count
PitchFull, Half ×2 or Quarter ×4 — how many games run at once
Pools1, 2 or 4. Three is deliberately not offered — filling an eight-team knockout from three pools has to take third-placed teams, which can pair two teams from the same pool in a quarter-final
Pool minLength of a pool game in minutes, 4 to 60. There is an Apply to all below the table for setting every age group at once
KO minLength of a knockout game in minutes, same range and same Apply to all
Finals formatWhat happens after the pools. Nine options, grouped by what they cost a team in extra games — see Finals formats below
Split blocksOn, pools and knockout are separate blocks you can place apart. Off, one block
Gang poolsOn, each pool runs straight through. Off, the pools alternate round by round
Entry feePer team, in Singapore dollars
GamesRead-only. Total matches this group generates

Finals formats

Every age group picks its own. The choice sets how many games each team plays, so it drives both the block length on the board and the cost per match in the fee table. The dropdown groups the nine options by what they cost a team.

Placement — one extra game each

Nobody is eliminated and nobody is idle. The cheapest way to give every team a meaningful last match.

FormatWhat it doesNeeds
Position playoffEvery team plays the same-placed team from the other pool — A1 v B1 for the final, A2 v B2 for 3rd/4th, and so on down. No mismatches, because both teams finished level in their own poolTwo equal pools
Merged-table seedingAll teams ranked on one table across both pools, then adjacent seeds paired: 1 v 2 is the final, 3 v 4 plays for third. The final is genuinely the best two rather than two pool winners of possibly unequal standardAn even number of teams, and a published cross-pool ranking rule

Knockout

FormatWhat it doesNeeds
Semi-finalsTop two from each pool. Four teams play on; everyone else is finished after the pools. Four matchesFour teams available to qualify
Cup and PlateTop two of each pool into a Cup bracket, bottom two into a Plate. Every team plays two more against opposition of similar standard, and there are no first-round mismatches. Eight matchesTwo equal pools of four
Single bracketAll eight into one bracket from the quarter-finals. Half the field is out after one game. Eight matchesFour teams in every pool
Single bracket + full plateAs above, with a full plate for the quarter-final losers, so everyone plays three more. Twelve matchesFour teams in every pool
Cup / Plate / Bowl / ShieldThe sevens format. All sixteen enter, one round splits the draw, and every team plays exactly four. Round-one winners chase the Cup with their quarter-final losers dropping to the Plate; round-one losers chase the Bowl with their quarter-final losers dropping to the Shield. Twenty-eight matches, four trophies, nobody goes home earlyExactly sixteen teams

Second-phase pools — nobody eliminated

Re-pool by position after the group stage: A1, A2, B1, B2 into a championship pool and A3, A4, B3, B4 into a plate pool. There is no final — final standings come from the second-phase table.

FormatWhat it doesNeeds
Carry forward head-to-headPlays only the fixtures the teams have not already had, carrying each existing result forward. Two more games each, eight matchesTwo equal pools of four
Full round robinEach new pool plays a complete round robin, replaying pool-mates. Three more games each, twelve matches — the most rugby per travelling team of any option hereTwo equal pools of four

When a format does not fit

An option the current team count cannot support is greyed out in the dropdown. If a saved setup or a later change to the team count leaves a group on a format that no longer fits, the scheduler falls back to semi-finals and says so — in amber under the dropdown, on the age group card, and in the issues panel. It never silently changes the number of games a team plays.

Three pools are not offered, and tiering at pools of three or five is deliberately unsupported: both need best-third comparisons, which is a competition decision rather than a scheduling one.

Global settings

These apply to every age group at once.

SettingWhat it does
Clear everythingRemoves every age group, team name, pitch and day, and empties the board. Timing settings are kept. Asks first, names what will go, and can be undone
DaysAdd, rename, date and remove days. A date is optional; set one and it shows on the board and carries into the Tournify handover. Add, rename and remove days. A day’s number is its position in the list, so removing one renumbers the days after it and whatever is scheduled on them moves with the renumbering. Blocks on the removed day go back to the tray
PitchesAdd, rename and remove pitches. Each one becomes a lane on both days. Give pitches at the same ground the same venue — exports group by venue, the board keeps them apart. Removing a pitch sends anything scheduled on it back to the tray
Doors open / closeThe operating window. Anything outside it is an error
Turnaround between gamesDead time between matches inside a block. Included in block length
Snap incrementWhat dragging snaps to
Gap wanted between pools and knockoutRecovery time. Below it, a warning
Changeover — same pitch layoutWanted between consecutive blocks that use the same markings
Changeover — different pitch layoutWanted when the pitch has to be re-marked between blocks
Separator after competition pointsHow teams from different pools are ranked on one table — points difference, points scored or tries scored. The full order is competition points, then this, then tries scored, then a drawn lot. Merged-table seeding cannot be drawn without it, so publish it with the draw. It does not affect any other format

Fees

Set an entry fee per age group, or use Apply to all. The tab then answers two questions: what a visiting club pays for what it gets, and whether the event covers itself.

What each club pays

The table is split by a rule. Left of it is what a club is charged; right of it is what that buys.

  • TRC's own teams are excluded from revenue. They count toward fixtures, pitch time and peak games, but not income. The Free entries card puts a figure on what those places forgo.
  • Per match is a range only where the format makes it one. With semi-finals or a single bracket the high end is a team knocked out first and the low end a team that reaches the final, and that spread is what a visiting club feels. The placement, tiered and second-phase formats give every team the same number of games, so they show a single figure.
  • Per player uses that group's own squad size, so groups with bigger squads show a lower per-player cost.
  • The bar under each revenue figure is that group's share of entry revenue, so you can see which age groups are carrying the event.
  • The All groups per-match figure is not an average of the column above it. It is total revenue over every match in the event, counting both teams — a different question, and usually a much lower number.

Running costs

Four rates. You enter the rate; the quantity comes from the schedule, which is the point of having this here rather than in a spreadsheet — the shape of the day is priced in.

ItemRate you enterQuantity taken from
RefereesPer referee, per dayPeak live games × days. Running four games at once needs four referees on the whistle, so a denser schedule costs more here
Pitch hirePer pitch, per dayNumber of pitches × days
Medical coverPer dayNumber of days
Everything elseFlatNothing — kit, prizes, catering, admin

Leave all four at zero and nothing appears; the tab stays a revenue sheet exactly as before.

The bottom line

Once any cost is entered you get entry revenue, running costs, and the net — which turns red and reads Shortfall if the costs win. Beside it, break even at is how many teams would have to enter at today's average fee to cover the costs. It moves as you change fees, so it is a quick way to test whether a fee ladder works before you publish it.

All of it travels: the money summary is written into the exported markdown, and the rates are saved inside the file, so reopening a saved event restores them.

These are planning figures, not accounts. There is no tax, no deposit handling, and no per-club invoicing — the tool is deciding whether a shape works, not running the books.

Keyboard

With a block selected:

KeyDoes
Nudge the kick-off by one snap increment
Move to another lane — venue or day
DelSend the block back to the tray
EscCancel a confirmation dialog

Anywhere in the tool:

KeyDoes
⌘ZUndo — steps back through the last 60 changes
⇧⌘ZRedo

Where it stops

This is a planning tool

It lays out a tournament: how many games, how long they take, which pitch and when. Running the competition — results, standings, tie-breaks, what happens when a day is washed out — happens in Tournify, which is the standard tournament management app for rugby in Singapore. Plan here, hand the schedule over, run it there.

That is why knockout fixtures stay as W QF1 v W QF2 and never turn into team names: the thing that knows who won is Tournify, not this.

Beyond that boundary, worth knowing:

  • Undo does not survive a reload. It covers the last 60 changes in this session. Close the tab and that history is gone — a saved version is what persists.
  • Nothing is shared. Two people cannot edit the same schedule. One person owns the file and circulates it.
  • Phones and tablets are untested. Dragging may or may not behave. Use a laptop.
  • A phase-split format has no slack. Pools on one day and knockouts on the next means a washed-out first day has nowhere to go — the second day is already full. Worth seeing on the board before you commit to the format. What you then do about it is a competition rule, decided by the organisers and applied in Tournify.

← Back to the scheduler