Open it
There is nothing to install and no login. Open trc-scheduler.pages.dev in any browser and start working.
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.
| Tab | What lives there |
|---|---|
| Schedule | The board, the unscheduled tray, block details, warnings, venue usage, and auto-arrange at the foot of the tab |
| Fixtures | The full match list, grouped by age group |
| Age groups | Every age group and all its settings. The main setup screen |
| Teams | Clubs, and the team in each pool slot |
| Referees | Names, clubs, availability, who has which match, and which age groups the coaches referee |
| Volunteers | The named posts, and marshal and station shifts worked out from the board |
| Fees | Entry fee per group, and what it works out to per match and per player |
| Global settings | Days, venues, medical cover, operating hours, turnarounds, changeovers |
| Save & share | Files, saved versions, exports |
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.
| Preset | Adds |
|---|---|
| Add seniors | U10, U11, U12, U13, U14, U15, U17 |
| Add juniors | U5, U6, U7, U8, U9 |
| Add GC | U10G, U12G, U14G, U16G, U18G |
| Add touch | U10T, 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.
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.
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 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.
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
H1toH2, orQ1toQ3. 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.
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.
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.
| Setting | What it does |
|---|---|
| Minutes | How long the warm-up lasts, 5 to 60. Zero is no warm-up |
| On | Which 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 meanwhile | Off: 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.
| Column | What it is |
|---|---|
| First kick-off, last whistle, play | When 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 hours | The 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 once | The most matches running at the same moment that need a referee: how many you have to bring |
| Referee hours | People, 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.
Check the warnings
The status panel above the tabs is always live. It reports one of four states.
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.
Reading a block
Three things are encoded into every block on the board.
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 BQF1names 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.
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.
| Field | What it does |
|---|---|
| Teams | How 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 |
| TRC | How many of those are TRC's own. They play, but pay no entry fee |
| Pool sizes | Read-only. How the teams divide, e.g. 4+3. Flags a bye where uneven |
| On pitch | Players a side: 10, 12 or 15 |
| Squad | Maximum players a team may register. Never below the on-pitch count |
| Pitch | Full, Half ×2 or Quarter ×4 — how many games run at once |
| Pools | 1, 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 min | Length 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 min | Length of a knockout game in minutes, same range and same Apply to all |
| Half-time | Off, 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 by | Referees, or Coaches. A group refereed by its coaches needs nobody from the referee list and adds nothing to the referee cost. See Referees |
| Finals format | What happens after the pools. Nine options, grouped by what they cost a team in extra games — see Finals formats below |
| Blocks | Where 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 order | What 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 blocks | Where 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-up | One 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 on | Only 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 pools | On, each pool runs straight through. Off, the pools alternate round by round |
| Fee per team | The entry fee each paying team is charged, in Singapore dollars. Nothing to do with referees |
| Games | Read-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.
| Format | What it does | Needs |
|---|---|---|
| Position playoff | Every 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 pool | Two equal pools |
| Merged-table seeding | All 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 standard | An even number of teams, and a published cross-pool ranking rule |
Knockout
| Format | What it does | Needs |
|---|---|---|
| Semi-finals | Top two from each pool. Four teams play on; everyone else is finished after the pools. Four matches | Four teams available to qualify |
| Cup and Plate | Top 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 matches | Two equal pools of four |
| Single bracket | All eight into one bracket from the quarter-finals. Half the field is out after one game. Eight matches | Four teams in every pool |
| Single bracket + full plate | As above, with a full plate for the quarter-final losers, so everyone plays three more. Twelve matches | Four teams in every pool |
| Cup / Plate / Bowl / Shield | The 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 early | Exactly 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.
| Format | What it does | Needs |
|---|---|---|
| Carry forward head-to-head | Plays only the fixtures the teams have not already had, carrying each existing result forward. Two more games each, eight matches | Two equal pools of four |
| Full round robin | Each 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 here | Two 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.
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.
| Role | How it is counted |
|---|---|
| Pitch marshal | One 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 |
| Stations | The 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.
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.
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
| Setting | What it does |
|---|---|
| Clear everything | Removes 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 |
| Days | Add, 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 |
| Venues | Add, 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 / close | The operating window. Anything outside it is an error |
| Turnaround between games | Dead time between matches inside a block. Included in block length |
| Snap increment | What 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 knockout | Recovery time. Below it, a warning |
| Changeover — same pitch layout | Wanted between consecutive blocks that use the same markings |
| Changeover — different pitch layout | Wanted when the pitch has to be re-marked between blocks |
| Separator after competition points | How 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
| Field | What it does |
|---|---|
| Name | Appears on the roster and beside every match they have in the fixture list |
| Club | They 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 |
| Hours | One 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.
| Item | Charged | Quantity taken from |
|---|---|---|
| Referees | Per ref, per hour | Whistle time — every match counted, so two at once count twice. With named referees, the hours the roster has them on site |
| Per ref, per match | Every match, one referee each | |
| Per ref, per day | Peak live games × days. With named referees, the referee-days on the roster | |
| Flat fee per day | The number of days, however many referees | |
| Flat fee, whole tournament | Charged once | |
| Venue hire | Per hour | Booked time: first kick-off to last final at each venue, each day. A tighter schedule costs less |
| Per day | Number 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 else | Flat | Nothing — 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:
| Key | Does |
|---|---|
| ← → | 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 |
| Del | Send the block back to the tray |
| Esc | Cancel 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:
| Key | Does |
|---|---|
| ⌘Z | Undo — steps back through the last 60 changes |
| ⇧⌘Z | Redo |
Where it stops
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.