Tanglin Rugby Club

Scheduler Handbook

How to build a multi-day, multi-venue 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 venues, 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 venues you have. Until there is at least one of each, the Schedule tab has nothing to draw.

The tabs come in four groups, each with its own colour. The board is the point of the tool, so it leads: Schedule and Fixtures are the day itself, then Age groups and Teams are the competition behind it, then Referees and Volunteers are the people, then Fees. The colour only ever edges a tab — a bar underneath while it waits, a cap on top once it is open — so the strip reads as bands rather than as nine equal things. Global settings and Save & share stay plain, and drop to their own line on a narrower screen.

A setup with nothing in it opens on Age groups, since that is where the work starts; once anything is on the board it opens on Schedule, or on whichever tab you were last using.

While the event is not yet set up, a Set the event up card sits above the tabs. It lists what still has to happen, ticks off what is done, and its button takes you to the next step. It disappears once there is something on the board, and comes back if you clear everything.

TabWhat lives there
ScheduleThe board, the unscheduled tray, block details, warnings, venue usage, and auto-arrange at the foot of the tab
FixturesThe full match list, grouped by age group
Age groupsEvery age group and all its settings. The main setup screen
TeamsClubs, and the team in each pool slot
RefereesNames, clubs, availability, who has which match, and which age groups the coaches referee
VolunteersThe named posts, and marshal and station shifts worked out from the board
FeesEntry fee per group, and what it works out to per match and per player
Global settingsDays, venues, medical cover, operating hours, turnarounds, changeovers
Save & shareFiles, saved versions, exports
Step 2

Set up your age groups

Do days and venues 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

Clubs and teams

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

A club enters teams. Those are two different things, and keeping them apart is what makes the rest work: one club can field several teams, in one age group or across several, a referee belongs to the club rather than to any one of its teams, and marking a club as yours exempts every team it enters rather than a number you typed.

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. The box offers clubs already in the event; a name it has not seen creates the club. Leave a slot blank and it keeps its code.

Every slot has two boxes: the club, and the team. Only the club box has to be filled. Nothing is written into the team box for you: leave it blank and the slot shows the club name, which the box states as its placeholder.

The team box is for teams that are called something other than their club. A club's teams are not always named after the club — Singapore CC might enter SCC Lions and SCC Tigers — and the two stay linked to the club whatever you call them. That link is what matters: it is the club a referee is kept away from, and the club a fee exemption follows, not the name on the fixture.

One club with two teams in the same age group is the case to watch. Left blank, both slots read as the club name and nothing on the board, in the fixture list or in the Tournify paste tells them apart. Give at least one of them a team name.

The Clubs list above shows every club, how many teams it has and in which age groups. You can add clubs there directly — name, optionally ours, Add — or skip it entirely and let them appear as you name teams. Both routes end up in the same place.

Two preset buttons sit under the name box. Add TRC adds TRC already ticked as ours. Add SG clubs puts in the seven that enter most Singapore youth tournaments — SCC, Titans, Dragons, Centaurs, Irish, Oldham and Saints. Both add only what is missing, so pressing one twice does nothing the second time, and every name is editable in the table afterwards. They match on the exact name: if you have already typed Singapore CC the preset's SCC arrives as a separate club, and you would delete one of them.

Tick no entry fee against a club and every team it enters is exempt, so the fee table stops asking how many of the teams are yours — it counts them. Until an age group has any team named the typed count still stands in; once it does, the derived figure takes over and the box greys out to show which is in force.

Each team card carries the same tick, and it can disagree with its club — a development side let in free, or one of your own teams that is paying like everyone else. When it differs, the card says so. The override is only kept while it actually disagrees, so changing the club's setting to match simply hands that team back to following the club rather than leaving a stale flag behind.

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 slots, never names, because who plays in them is not known until the pools have been played. There are two kinds. W QF1 is the winner of a match on this same list. Pool A 1st is a finishing position — the pill keeps the pool’s colour and shape but carries 1st rather than a club, so a semi-final can never be mistaken for a draw that has already been made.

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 venue on one day, so the board is venues × days — two venues across Saturday and Sunday is four lanes; a third venue 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.
  • Drag a half- or quarter-pitch block up or down inside its lane to put it on a different half or quarter — from H1 to H2, or Q1 to Q3. Only that block moves; the rest of the age group stays where it was. It only applies to a block that plays on part of the pitch. The block’s details show it straight away under This block plays on, where you can also tick it by hand — including onto more or less of the pitch than the rest of its age group, which makes that block shorter or longer.
  • Click a block to open its details. Click it again to close them.
  • Keyboard — see the shortcuts.

The key at the left of every lane names the rows: H1 and H2 are the top and bottom halves, Q1 to Q4 the quarters from the top, and a full-pitch block is the whole height.

Make the board bigger

Two sliders at the right of the buttons above the board. Height makes every venue taller, which is what gives a half or a quarter of a pitch room for its times and counts instead of just the age group. Width stretches the clock, up to four times the page; the board then scrolls sideways inside itself and the venue names stay put at the left. Both are how you are looking at the board: they are remembered in this browser and are not part of the schedule, so they do not travel in a file or change anyone else’s view.

Put one block down

Select an unscheduled block and the Placement boxes show you where Place on the board is about to put it: 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.

Leave them alone and that is where it goes. Change any of them and it goes where you said — pick a day, a venue, type or nudge a kick-off, then press Place. Your choice is remembered while you look at other blocks, so you can set several up before committing any of them.

A typed kick-off is taken exactly as typed. Type 08:37 and the block starts at 08:37; the snap increment applies to dragging and to the − / + nudge buttons, which are what it is for. The board redraws when you leave the box, not while you are still typing in it.

If nothing on the board can take the block the boxes still work; you are simply told that no free slot exists, and where you put it is then your call. Placing something on top of something else is allowed — the clash panel will tell you about it rather than the button refusing.

Or let it have a go

At the foot of the Schedule tab, under Rearrange the board, are three auto-arrange buttons: pools on the early days with knockouts on the last, complete age-group blocks, and tidy lanes. All three keep an age group's own blocks in order — pool parts in sequence, knockout after all of them — so no age group ends up at two venues at once or playing its second round before its first. Pools early, knockouts last leaves your Blocks setting alone; only complete age-group blocks joins pools to knockout, and it keeps your cuts so turning blocks back apart restores them. Unschedule all sits with them and asks before it empties the board — age groups, clubs, teams and settings are untouched, and it can be undone. They are below the board rather than above it because they are what you reach for after looking at it, not before.

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.

Staffing, on the board

Staffing is a mode, like cutting. Press Staffing above the board and it picks up a violet dashed border; press Done staffing to put it away. Off, the board is only a board — no strips, no counts, no carets.

On, every lane grows a thin strip per playing area. Solid means the games there are covered; hatched red means nobody is on them, and the lane name carries the count — 3 shifts open. Moving a block then tells you immediately whether you have just made a hole, without leaving the tab.

Press staffing on a lane and it unfolds: a row per playing area, each shift a dropdown of the volunteer list. It is the same control as the one on the Volunteers tab, writing to the same shifts — use either. Which lanes you had open is remembered, including across a switch out of the mode and back.

Only one mode at a time. Turning on staffing turns off cutting and the other way about: both change what the board is for, and their marks together made a busy picture out of one that is normally quiet.

Referees are not staffed here

Who takes which match is settled on the day, usually by a head referee, so the board says nothing about it. The Referees tab is for working out how many you need.

The Volunteers tab still holds the whole event in one picture, including the stations — F&B, merch — which belong to no venue. The board answers “did that move break my staffing”; the roster answers “who is on at eleven”.

Warm-ups

There are two kinds, and they are kept apart on purpose.

An age group’s warm-up is part of its block. Any block — the pools, each part of cut pool play, the knockout — can open with one, and each block’s is its own. Select the block and, under Warm-up, say three things; the same line sits on the age group card, once per block.

SettingWhat it does
MinutesHow long the warm-up lasts, 5 to 60. Zero is no warm-up
OnWhich part of the pitch it takes. Where it plays is the ground that block’s own matches are on, and follows the block if you move it to another half or quarter — the usual choice, and what a new warm-up starts as. Or name it: the whole pitch, H1 or H2, or on a pitch in quarters, Q1 to Q4
Matches on the rest of the pitch meanwhileOff: the matches wait. The block is that many minutes longer and the first kick-off that much later. On: matches start straight away on the ground the warm-up is not using — fewer at a time until it is over, then everywhere. The scheduler works out how many slots that affects. Only offered when the warm-up leaves somewhere to play

A sentence under the controls says what it amounts to — the first kick-off, or how many slots run short. Because the warm-up is part of the block it moves with it, is counted in its length, cannot clash on its own, and is placed by auto-arrange like the rest of the block.

A warm-up block is ground held for a while, for nobody in particular. Press + Warm-up block above the board: it lands in front of whatever is selected, or at the doors on the first lane. It is grey and striped, takes the whole pitch, a half or a quarter, and drags like anything else — sideways for the time or lane, up and down for which half or quarter. Select it for the exact time, length and area. On ground that a match or an age group’s own warm-up is using, it is a clash. Adding one slides the blocks in its way later on that lane; dragging one moves nothing else, and auto-arrange leaves them where they are.

The parts of a pitch have one name each, everywhere. The halves are H1 and H2; the quarters are Q1 to Q4; H1 is Q1 and Q2. A full pitch has no name of its own — it is just the pitch. The same names are used on the board, in the fixture list, on the volunteer roster, in the exports and for the fields on the Tournify handover page.

Reading a block. Solid is pool play, checkered is knockout, stripes are warm-up, on the part of the pitch it takes — and if the matches are waiting for it, the rest of the pitch is dimmed for those minutes. A line across a block means a pitch in halves; three lines mean quarters. A block sits on the rows of the lane it plays on, so a group on H1 only is the top half of the lane.

Two age groups on one pitch

A pitch in halves or quarters can be shared. On each age group’s card, under Matches played on, tick only the ground that group gets — the U10s on H1, the U12s on H2 — then put both blocks at the same venue at the same time — or tick one half for both and drag one group’s blocks down onto the other half, since a block can be moved between halves or quarters on its own. Each block draws on its own rows of the lane, one above the other, and two blocks only clash if they want the same ground at the same minute. Quarters work the same way: one group on Q1 and Q2, another on Q3, a third on Q4.

Marshals, the fixture list and the exports follow: each match says which half or quarter it is on. A block’s warm-up can be on ground the group does not play on — the U12s warming up on H1 before playing on H2 — and it then needs that ground to be free for those minutes like anything else. A full-pitch block shares with nothing.

Auto-arrange still places one block at a time at a venue, so it will not pair two groups for you: arrange, then drag the second group onto the first one’s venue. The utilisation table adds up block lengths, so a shared venue can read over 100%.

Hours by day

Under the board, a table of what each day adds up to — for anything you hire by the hour.

ColumnWhat it is
First kick-off, last whistle, playWhen matches start and finish that day, and the time between. Shown for the day and for each venue. Warm-ups are not matches and are not counted
Medics, medic hoursThe team at each venue, and beside it when they are on site — from the first warm-up or kick-off at that venue to its last final whistle. Medic hours are that in people: one doctor and two first aiders on site for two and a half hours is seven and a half. Who is at each venue is set under Global settings
Most referees at onceThe most matches running at the same moment that need a referee: how many you have to bring
Referee hoursPeople, not clock time: four matches at once for an hour is four referee hours. A referee has a match for its whole slot, so turnarounds are included. Matches refereed by coaches are left out

The referee columns are repeated on the Referees tab, and the whole table is in the markdown export. It counts what is on the board, so blocks still in the tray are not in it.

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 at the same venue at the same time that want the same ground. Blocks on different halves or quarters can overlap.
  • 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.
  • A warm-up block on ground a match or an age group’s warm-up is using, two warm-up blocks on the same ground, or one outside opening hours.

Things it only warns about

  • Not enough changeover between two blocks at the same venue. 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. Where an age group takes a half-time, the duration shown includes it: Tournify has no separate half-time setting, and if the break is left out every kick-off after the first drifts earlier than the one on the page. The handover says so, and names which divisions it applies to.
  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 venue, 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, part of the pitch, fixture ID, round, then the two sides either side of a centred v. Games that kick off together share the time cell, and each says which part of the pitch it is on — H1 / H2, or Q1 to Q4. A full-pitch match says nothing there.

  • 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 instead — Round 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.

That colour also fills every heading that names an age group — the card on the Age groups tab, each group on Teams, each block on Fixtures, and the details panel of a selected block — so a long page can be found by colour rather than by reading names. It is the group's own hue at a fixed lightness rather than a wash of its exact colour: a wash drags the heading lighter or darker depending on which group it is, which would put the line beside the name under the contrast standard behind some groups and not others.

Every age group field

Each age group is a card on the Age groups tab, split into three labelled rows: who is playing, how it is played, and referees and money, with the two block toggles underneath. The line beside the name summarises what it all adds 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. Raising it leaves the new slots empty; lowering it is the only edit that can lose a team name, and it asks first, naming exactly which teams go. They are always the ones at the end of the list, and undo brings them back
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. Changing this never loses a team name: the names are an ordered list and they refill across whatever layout you pick, so eight names in one pool become four and four in two pools, and two apiece in four
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
Half-timeOff, or 1 to 10 minutes. A half-time break sits inside a match: the pitch stays occupied and the referee stays on it, so it lengthens the block without adding playing time. Both figures above stay the minutes the ball is in play. Set per age group — the U8s and the U17s do not need the same break. In a selected block's details this is a switch with its own slider; on the card it is one dropdown
Refereed byReferees, or Coaches. A group refereed by its coaches needs nobody from the referee list and adds nothing to the referee cost. See Referees
Finals formatWhat happens after the pools. Nine options, grouped by what they cost a team in extra games — see Finals formats below
BlocksWhere they sit on the board. Pools and knockout apart gives two blocks you can place on different days or venues. One block, pools into knockout keeps them together and places them as a unit. Nothing about the fixtures changes either way
Pool orderWhat order the pool games are played in. Alternate the pools cycles them — Pool A round 1, Pool B round 1, Pool A round 2, and so on. One pool at a time plays Pool A's whole round robin, then Pool B's. Nothing about the blocks changes, but it does decide what pool play can be cut on: alternating cuts on rounds, one-at-a-time cuts on pools
Pool blocksWhere pool play divides. The parts it is made of are shown in a row with a scissor between each pair; click one to start a new block there. Needs Split blocks on, since one block cannot also be several. See Splitting pool play
Warm-upOne line per block: minutes, which part of the pitch, and whether matches carry on on the rest of it meanwhile. See Warm-ups
Matches played onOnly once the pitch is split. Which halves or quarters this group uses at all. Untick one and it takes no games for the whole of every block, which makes every block longer — and leaves that ground for another age group to use at the same time. This is the age group’s setting. A single block can be put on different ground by dragging it or from its own details; the card then names the exceptions, and changing these ticks puts every block back on them
Gang poolsOn, each pool runs straight through. Off, the pools alternate round by round
Fee per teamThe entry fee each paying team is charged, in Singapore dollars. Nothing to do with referees
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.

Splitting pool play

Pool play is normally one block. Set Pool blocks to two or more and it becomes that many, each placed on the board separately — which is how you run the pools across two days, or fit them around a venue you only have for the morning.

The two settings beside it

They sound related and are not. Blocks is about the board: whether pool play and the knockout are one block or two. Pool order is about the fixture order: whether the pools alternate round by round or each plays its whole round robin before the next starts. You can have either with either. They sit together with the cut control because between them they decide how an age group divides up.

Choosing where it cuts

The control shows the parts pool play is made of, in order, with a scissor between each pair. Click a scissor and a new block starts there; click it again to join them back up. A line underneath says what you have — 2 blocks — round 1, then rounds 2–3.

Or cut on the board itself. Press Cut pool blocks above the schedule. The board picks up a dashed border to show you are in a different mode, blocks with nothing left to cut fade back, and a dashed line appears inside every other pool block at each round it could be divided on. Click a line and the block splits there. Press Done cutting to go back to normal.

A block holding pools and knockout shows a line at every round in it, because all of pool play is inside that one block. One click does one thing: it separates the knockout and cuts pool play at the line you clicked — not at every line you have ever used. Cuts you made earlier are still remembered, and come back if you set Blocks to pools and knockout apart from the card instead.

Dropping one part on the part beside it puts them back together. While cutting is on, drag a pool block onto its neighbour and the cut between them goes — the reverse of clicking the seam. It only joins neighbouring parts of the same age group, and only what you actually drop it on; anything else is an ordinary move, and landing on top of something stays an overlap for the clash panel to report.

A block cut on the board splits where it stands. The parts of a cut add up to exactly the block they came from, so the second half starts the moment the first ends and the footprint on the board does not move — the block simply gains a seam. Nothing goes back to the tray. If the age group still had pools and knockout as a single block, the cut separates those too, and the knockout stays put at the back where it already was.

What the parts are depends on how the pools run. Alternating pools cycle round by round, so the parts are rounds. Gang pools runs each pool straight through, so the parts are pools — Pool A, then Pool B — because cutting a ganged pool in half would undo the point of ganging it.

Why you cannot cut anywhere

A round split down the middle means one pool plays its second round on Saturday while another plays its second round on Sunday: same tournament, different rest. So the cuts on offer are only ever the boundaries between parts. Blocks therefore come out uneven where the parts are uneven, which is the right answer rather than a limitation.

A cut never falls inside a slot either. Where two or four games run side by side they stay together, because the slot is what occupies the pitch. Fixture numbers are handed out before the cut, so P07 is P07 whichever block it ends up in. Each block says what it holds — the rounds, or the pool — on the board and in its details.

What it checks

Pool blocks have no result to wait for, so nothing physically stops you putting the third block before the first — but it is still wrong, so you get a note saying so. The knockout is an error rather than a note: it has to start after every pool block has finished, not just one of them.

Changing the cuts after you have arranged things

Cutting pool play differently renames the blocks, but what is on the board is kept where it makes sense. Positions are handed back within their own kind: the first pool block stays exactly where the first pool block was, the knockout keeps its own slot, and only blocks that did not exist before come back unplaced. Going from one pool block to two therefore leaves the first half untouched and puts the second half in the tray.

A block that is kept can be a different length from the one it replaces, so it may now run into whatever follows it. That shows up in the clash panel like any other overlap.

Volunteers

Two different jobs sit on this tab, and only one of them is a scheduling problem.

The volunteer list

Everyone who might take a shift, added once. Shifts pick from this list rather than taking a typed name, so one person is one person however you spell it — which is also what makes the clash check trustworthy.

Tick what someone is down for and they are only offered for that. The age groups they marshal, a station such as F&B or merch, or any mix — every station you add becomes a tick like any other, so somebody down for the stall does not turn up in a pitch dropdown, and somebody down for the U12s does not turn up in a U13 one. Tick nothing and they are offered everywhere: a blank row means available for anything, not forgotten.

Two things stop the filter becoming a trap. If it would leave nobody to pick, the rest are offered under Tagged for something else — an empty dropdown on the morning is worse than an obvious compromise. And somebody already on a shift stays in its dropdown even after their ticks change, under Already on this shift, so the box never hides who is actually down.

Rename someone and the name changes wherever they appear, including in the export.

Named posts

A checklist. Somebody has to be Tournament Director and no schedule can work out who, so this is a list of roles with a box for a name against each. It starts with the eleven a rugby tournament normally runs — Tournament Director, two Tournament Organisers, Heads of Volunteers, Pitch Marshalls, F&B, Medics and Scoring, Trophy and Medals, and two MCs. Add your own, rename any of them, remove what you do not need. Restore the standard eleven puts the list back and asks first, because it clears the names you have filled in.

Shift roles

These are worked out from the board rather than typed. Change the schedule and they change with it.

RoleHow it is counted
Pitch marshalOne per playing area, so a pitch split into halves needs two and quarters need four. A shift belongs to one block — it never runs from one block into the next, and never across the gap between them, so nobody is on paper for a stretch with nothing to marshal. Blocks cut on round boundaries, so shifts do too: splitting the pools in two splits the marshalling in two. Shift length is per age group, because four games is not the same afternoon at U8 as at U17. Where a lane is ever split the areas are named — KJ 1 · H1, KJ 1 · H2 — and a lane that only ever runs full pitch just says KJ 1. The first area carries the full-pitch games too, so it is usually the longest day
StationsThe jobs that are not on a pitch — F&B to begin with, and whatever you add: merch, the gate. Each has its own headcount and shift length, and its shifts run on the clock instead: the day is divided from the first kick-off to the last final whistle. Set a station's headcount to nobody and it has no shifts — the roster says so where the rows would have been, rather than leaving you to wonder where they went. Removing a station takes its filled shifts and its ticks with it, and asks first

Who is on shows up beside the fixtures. Every match in the fixture list and in a selected block’s rundown carries its marshal and its referee — a square marker for the marshal, a filled circle for the referee. Hover a marshal to see which area and which hours the shift covers. A shift with nobody in it says no marshal rather than going blank, so an unfilled shift is visible where you are actually reading the day.

The roster

It is a timeline, not a list. Rows are the playing areas, then each station; across is the clock, the same scale as the schedule board. Every shift is a bar carrying a dropdown of the volunteer list, and the bar says which block it belongs to and how many games that is. The questions rostering actually asks are all about time — who is on at eleven, is anyone down twice, has that area got a gap — and on a timeline they are answered by looking rather than by reading rows and holding the day in your head.

The schedule is drawn underneath. Each marshal row carries a tint and a coloured rule showing what is being played on that area, in the same colours as the board, and the rows come in the same order the board lists its lanes. Without it a gap in a row is ambiguous — nobody rostered, or nothing at that venue? With it: track with no colour is nothing scheduled, and colour with no shift above it is games nobody is covering.

Two things at once

Volunteer names are typed, so nothing stops the same person going at two venues at eleven. Both shifts turn red and a line above the roster counts them. Matching is on the name exactly as written, which is all a typed field can do — Anna and Anna P are two people as far as it knows.

On a narrow screen the roster keeps a working width and scrolls sideways rather than squeezing the bars down to something you cannot type into.

The old shift table is gone; everything it showed is on the timeline, with times and how many games it covers, The figure on the tab is how many of the people you need have been found — posts and shifts together. Both the posts and the shifts go into the markdown export, alongside the referee roster, so the file you hand over says who is on as well as what is played.

The export also carries a card for each person under Who is on — every post they hold and every shift they are down for, in order, across the whole event. That is the part you cut up and hand out. Referees get one too; they are as much someone turning up on the day as a marshal is.

Volunteers are free

Nobody on this tab appears in the fees or the running costs. If you pay someone, they belong in running costs as a cost line, not here.

Global settings

These apply to every age group at once.

Naming the event

Three fields at the top of the tab give the tournament an identity: a name, a revision and notes. All three are optional and all three travel with the file, so they survive a save, an export and a reload.

The name heads the markdown export and the Tournify handover page, appears in the masthead, and becomes the download filename — tanglin-sevens-2026-20260821-1409.md rather than trc-schedule-…. Left blank, everything falls back to TRC Tournament, which is what it said before this existed.

The revision is a short label of your own — draft 3, issued 14 Aug — not a number the app counts. It prints beside the export timestamp and on the handover page, so whoever receives a file can tell which draft they are holding. It is also the default name when you save a version on Save & share: the version list and the exports therefore read the same label, and cannot drift apart. Restoring a version brings its revision back with it.

Notes is free text for whatever whoever runs the day needs to know — a venue unavailable before ten, an age group moved because of an exam timetable. It prints at the top of the markdown export and in a highlighted box on the handover page. Left empty, neither shows a notes section at all.

Medical cover

List the types of medic you hire — Doctor, Paramedic, First aider — each with its hourly rate. Then, venue by venue, set how many of each are there with the − and + beside each type; the row shows the team and what it costs an hour.

The team is counted on site from the first thing that happens at the venue that day — a warm-up counts — to the last final whistle there. Those hours, and who is in the team, are in Hours by day under the board; the cost is the medical cover line on the Fees tab. Renaming a venue keeps its medics. A file from before this, which had one rate and one medic per venue, opens as a single type called Medic at that rate with one at each venue.

Everything else

SettingWhat it does
Clear everythingRemoves every age group, club, team, referee, venue and day, empties the board, and clears the name, revision and notes. Timing settings are kept. Asks first, counts exactly what will go, and can be undone. Sits at the bottom of the tab, away from everything you use routinely
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
VenuesAdd, rename and remove venues — the places matches are played. Each one becomes a lane on every day. A ground with two pitches is two venues. Each venue can then be played as a full pitch or in halves or quarters, set per age group. Removing a venue 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 and the nudge buttons snap to. A kick-off you type into a box is used exactly, not rounded to it
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

Referees

Add referees by name and the roster builds itself and keeps rebuilding — there is no button to press and no stale roster. Move a block and the assignment follows it.

What each referee needs

FieldWhat it does
NameAppears on the roster and beside every match they have in the fixture list
ClubThey are never given a match involving that club. Leave it blank for a neutral referee. Knockout matches past the first round have no named teams yet, so a conflict there cannot be seen — check those by eye
HoursOne window per day. Left alone it is the whole operating window and reads all day; narrow it and the × puts it back

How the roster is built

Shifts, not individual matches. Whoever is already at a venue takes the next game on it, and a fresh name is only called in when nobody on site can. That is what keeps each referee's day in one continuous stretch instead of scattering them across the weekend, and it is the difference between a roster someone can work to and a list of names against fixtures.

Two controls shape it. Most games in a row forces a break after a run of back-to-back games, and it is set per age group: three U17 games back to back is not three U8 games. The limit that applies is the one belonging to the match being handed out, so a referee moving between age groups is held to whichever they are about to take.

Most games in a day caps how much one person takes before the next referee is brought in — without it the first eligible referee absorbs the entire event while everyone else stands around, which is the opposite of the point. That one stays a single setting, because a day’s total is a property of the person rather than of what they are refereeing. Both are saved with the event, so a file reopens to the same roster.

A referee stays at one venue unless you tick share referees against it in Global settings. Tick it on two venues that are close enough to walk between and they draw from one pool; on the test event that lifted coverage from 103 matches to 120 with the same six people.

Reading the roster

Each row is one referee on one day: when they need to be there, how many games, and working — time on the whistle as a share of time on site. A low figure means someone is waiting around. Shorten their hours, or let them cover a second venue.

If matches cannot be covered the panel says which problem it is, because they have different answers: nobody on duty at that hour, every available referee from one of the clubs playing, or simply everyone busy. Only the last is solved by raising the games-per-day cap.

There are no grades. Any referee can take any match that does not involve their own club. The senior referee casts on the day; this roster is for knowing how many to bring.

Refereed by coaches

Set Refereed by to Coaches on an age group — usual for the youngest — and its matches leave the referee roster altogether. Each pool match is refereed by another club instead: never one of the two playing, so it is impartial. Nobody is named — the club sends a coach. The team that has refereed least takes the next match, which keeps the load level and asks a club in proportion to the teams it entered; the Referees tab shows the count per club, and the fixture list says Refereed by and the club after the teams, ahead of the marshal. That column only appears once a group is set to Coaches, or there are referees on the list, and its blocks are on the board.

A team has more than one coach, so a team that is playing at the same moment can still be asked — it is only preferred against when the counts are tied. A team with no club against it yet counts as its own club. If every other team shares a club with one of the two playing, the match says no impartial club and the warnings list it. Knockout matches have no teams until the pools are played, so those read Referee Determined After Pool Matches.

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 into three. Entry is what a club is charged. Per team is what that costs regardless of results. How far they go is what it works out at once you know how many games they actually played — so a format that lets a team go out early gets a row for each route, and you can read the best and worst case side by side. A format where every team plays the same number of games shows one row.

  • TRC's own teams are excluded from revenue. They count toward fixtures, venue 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.
  • Per player, per match is the one to compare across age groups. It nets out both squad size and how many games a group plays, so it is the closest thing to a like-for-like price. A wide gap between two groups usually means the fee ladder needs a look.
  • 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. Referees and venue hire let you pick how they are charged, because grounds and unions do it differently. Matches refereed by coaches are never counted in the referee line.

ItemChargedQuantity taken from
Referees Per ref, per hourWhistle time — every match counted, so two at once count twice. With named referees, the hours the roster has them on site
Per ref, per matchEvery match, one referee each
Per ref, per dayPeak live games × days. With named referees, the referee-days on the roster
Flat fee per dayThe number of days, however many referees
Flat fee, whole tournamentCharged once
Venue hire Per hourBooked time: first kick-off to last final at each venue, each day. A tighter schedule costs less
Per dayNumber of venues × days
Medical cover
per medic, per hour, by type
Each type of medic at its own hourly rate The team at each venue, for as long as that venue has anything on that day, warm-ups included. Types, rates and who is where are set under Global settings, not here; nothing on the board means nothing to charge
Everything elseFlatNothing — kit, prizes, catering, admin

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

The three referee bases are not interchangeable and the gap between them is the point. Per day pays for a referee from the first whistle to the last whether they have three games or thirty; per game pays only for what they actually do. Switching between the two shows you what the idle time is worth.

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. A block on part of a pitch steps through its halves or quarters first
DelSend the block back to the tray
EscCancel a confirmation dialog

With a warm-up block selected, the same keys: ← → nudge the start, ↑ ↓ step through the halves or quarters and then on to the next lane, and Del removes it — a warm-up has no tray to go back to.

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 venue 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 slots and never turn into team names — whether the slot is a winner (W QF1) or a pool position (Pool A 1st). 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 are not supported. The board needs the width of a laptop screen. Tablets are untested.
  • 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