ADH JRT

Taking you to the sign-in page…

Sign in

{{ sessionName }}
{{ sessionRole }}
Registrations
Tournament configuration
Site admin
{{ dataError }}
Loading registrations and accounts…
Registration window

When clubs and parents can use the entry forms on the public site. All times are Abu Dhabi time. Registration opens at the start of the opening day and closes at the end of the closing day. Changing these does not need a deploy — save here and the public page follows. Nothing changes until you press Save.

{{ rError }}
{{ rSuccess }}
Fix these before saving
• {{ rp }}
Worth a look — you can still save
• {{ rw }}
The dates

Leave a date empty to leave it undecided. With no opening date, registration stays closed — which is what you want until the date is agreed. The date under each box is what the public page will print, spelled out, so a mis-typed month is visible straight away.

{{ rOpensEcho }}
{{ rClosesEcho }}
Which one is in charge

One switch, not a date and an on/off toggle — two of those end up disagreeing and nobody can tell which one won. Force open is how you test the real forms before the opening date; the public page shows a TEST MODE strip the whole time it is on, so a test can never be mistaken for the real thing.

What the public page says
Preview of your unsaved changes

Right now, on this clock. The public page works this out every second, so it changes over at the moment the date does — nobody has to reload it.

{{ rPreviewPill }}
{{ rPreviewBlurb }}
{{ rPreviewButtons }}
Test mode strip is showing on the public page
Share a document

Managers see these on their own dashboard. Choose who each one is for — a manager only sees documents tagged for everyone or for their own age group. PDF, PNG, JPG, XLSX or DOCX, up to 4 MB. Nothing here is ever public.

{{ docDropLabel }}
PDF, PNG, JPG, XLSX or DOCX · up to 4 MB
{{ docFileLabel }}
{{ docsMsg }}
Shared documents
Documents could not load. This is not the same as there being none — try again in a moment.
No documents yet. Upload one above and every manager it is tagged for will see it.
{{ row.title }}Not shared
{{ row.description }}
{{ row.meta }} · {{ row.when }}
For: {{ row.who }}
{{ docViewTitle }}
Opening…
{{ docViewError }}
{{ docViewTitle }}
Delete “{{ purgeTitle }}” for good?

This removes the file itself. There is no undo — unlike Stop sharing, which only takes it off the managers’ list. Type the document’s title to confirm.

Scoring for {{ tournAgeName }}
Tick what can be scored at this age group. Managers only see the boxes you leave ticked, and totals are worked out from them — the server uses the same setting, so the two cannot drift apart.
{{ scoringMsg }}
All age groups
Publish or withdraw every age group in one go. “Publish all” publishes each group that has a saved draw; any group with nothing saved yet is skipped and reported.
{{ bulkMsg }}
Simulate a tournament
For testing only. Publishes every age group, records a walkover (the first team listed wins) for every pool match, generates the knockout stage from the resulting standings and walks that over too — finals included — then publishes again so the finished bracket is visible everywhere.
This overwrites any score already recorded for a match, real or otherwise. Reset the simulation undoes it — unpublishes every group, removes every result and clears the generated bracket — but leaves saved pools and team assignments untouched.
It is a tournament day, so this is switched off. Nothing here can be pressed on 14 or 15 November.
{{ simProgress }}
{{ simMsg }}
Fixtures & tables

A read-only look at any age group's draw, results and standings — including before it is published. To change a draw or enter a score, use /manager and its age-group switcher.

Loading…
Could not load
The draw for {{ fxvAgeName }} could not be fetched. Pick the age group again to retry.
{{ fxvNoteTitle }}
{{ fxvNoteBody }}
Nothing drawn yet
There is no saved draw for {{ fxvAgeName }} and nothing published.
No matches
Nothing is scheduled for {{ fxvAgeName }} yet.
{{ g.name }}
{{ r.time }}
{{ r.pitch }}
{{ r.teams }}
{{ r.score }}
Knockout
{{ r.time }}
{{ r.pitch }}
{{ r.meta }}{{ r.teams }}
{{ r.score }}
Festival age group
{{ fxvFestivalBlurb }}
{{ tc.name }} — table
# Team P W D L PF PA +/− Pts
{{ t.pos }} {{ t.team }} {{ t.P }} {{ t.W }} {{ t.D }} {{ t.L }} {{ t.PF }} {{ t.PA }} {{ t.diff }} {{ t.pts }}
Green edge = qualifies for the knockout stage.
Venue & days

The pitches running on each day, and which day each age group plays. An age group's day comes from where it has pitches — move it to the other day and it moves on the fixtures, the app and the public site. Nothing here changes until you press Save.

{{ vError }}
{{ vSuccess }}
Fix these before saving
• {{ pr }}
Worth a look — you can still save
• {{ wn }}
Where each group plays — {{ vDayViewLabel }}

Every pitch as its own cell — the view with room for the names, and the one that reads on a phone. It redraws as you edit below, before you save. A pitch used by two groups is a time-share, not a clash.

The real Zayed Sports City map. Unlock, then drag each block to where it actually is — the starting positions are the code's guess and you know better than it does. Positions are shared across both days, because a block is the same field on Saturday as on Sunday — that is why they still show regardless of which day tab is selected above. Save with the button at the top of the tab.

Blocks move when you drag them — lock again when you're done.
{{ vm.summary }}
No pitches on this day yet, so there is nothing to draw.
Zayed Sports City pitch map
{{ blk.name }}
{{ blk.mapSplit }}
{{ mg.code }}
{{ blk.mapWho }}
Not on the map yet
{{ blk.name }}
{{ pp.name }}
{{ pp.who }}
{{ nt.text }}
Pitches — {{ d.label }}
{{ d.summary }}

{{ d.hint }}

{{ mp.name }}
{{ mp.surfaceLabel }}
{{ mp.usageLabel }}
Nothing is in use on this day yet.
Age groups — {{ vDayViewLabel }}

Click a group to open it and tick its pitches. Changing a group's day clears its pitches, because the other day has different ones. Two groups can share a pitch — D4 and D5 run U6 in the morning and U7 in the afternoon, which is a time-share, not a clash.

{{ g.expandArrow }}
{{ g.name }}
{{ g.pickedLabel }}
No pitches chosen yet
Create a login

Makes an account that can sign in straight away — no invite code, no approval step. You type the password and tell them yourself; nothing is emailed.

{{ cmRoleNote }}

Passwords are at least {{ cmMinPassword }} characters.
{{ cmError }}
{{ cmSuccess }}
Pending approval
{{ a.name }} — {{ a.username }}
{{ a.roleLabel }} · requested {{ a.createdAtDisplay }}
Revoked
{{ a.name }} — {{ a.username }}
{{ a.roleLabel }} · revoked {{ a.revokedAtDisplay }}
All accounts
Name Username Role Status
{{ a.name }} {{ a.username }} {{ a.roleLabel }} Active
No approved accounts yet.
Club invite link

The link you email to club contacts. It is deliberately not published anywhere on the site, and the key on the end of it is the only thing keeping the form private — send it to clubs directly, never post it publicly.

{{ clubLinkShown }}
{{ clubLinkStatusText }}
{{ clubLinkError }}
Clubs — declared vs registered

Clubs declare how many teams they expect to bring, months before teams register one by one. This compares the two. Anything marked Short or Over is a club worth a phone call — a plan that has changed still changes pools, pitches and the draw. Declarations are estimates, not commitments.

The club declarations sheet could not be read, so this tab is showing nothing rather than guessing. Teams and Players are unaffected. Check GOOGLE_SHEET_ID_CLUBS in Netlify and that the sheet is still shared with the service account.
No club has sent a declaration yet. They arrive through the link you email clubs — nothing on the site links to that form.
{{ clubsDeclaredCount }} clubs declared
{{ clubsDeclaredTeams }} teams declared
{{ clubsRegisteredTeams }} teams registered
Club Declared Registered Status Contact
{{ c.club }} {{ c.declaredTotal }} {{ c.registeredTotal }} {{ c.statusLabel }} {{ c.contactName }}
{{ c.contactEmail }}
{{ c.contactPhone }}

They said: {{ c.notes }}

Age group Declared Registered
{{ g.name }} {{ g.declared }} {{ g.registered }}
Every club that declared has registered exactly what it said. Nothing to chase.
Registered, but never declared

These clubs have teams in the tournament and no declaration on file. Either they skipped the declaration, or they typed their club name differently on the two forms — worth a look before you chase them.

{{ u.club }} — {{ u.registeredTotal }} registered
{{ h }}
{{ g.club }} ({{ g.count }})
{{ r.submittedAtDisplay }} {{ r.club }} {{ r.teamName }} {{ r.ageGroup }} {{ r.preferredPool }} {{ r.headCoachName }} {{ r.headCoachEmail }} {{ r.headCoachMobile }} {{ r.managerName }} {{ r.managerMobile }} {{ r.numPlayers }} {{ r.notes }}
Squad ({{ r.rosterCount }})
{{ p.name }} ({{ p.dob }})
No team registrations match your filters.
{{ h }}
{{ g.club }} ({{ g.count }})
{{ r.submittedAtDisplay }} {{ r.playerName }} {{ r.dob }} {{ r.club }} {{ r.ageGroup }} {{ r.parentName }} {{ r.parentEmail }} {{ r.parentMobile }} {{ r.emergencyContact }} {{ r.emergencyMobile }} {{ r.medicalDisplay }} {{ r.consent }}
No player registrations match your filters.
{{ acctHeading }}
Loading your account…
{{ acctLoadError }}
Name
{{ acctName }}
{{ acctUsernameLabel }}
{{ acctUsername }}
Role
{{ acctRoleLabel }}
Sign-in method
{{ acctSignInMethod }}
Member since
{{ acctMemberSince }}
Last sign in
{{ acctLastSignIn }}
Awaiting approval - cannot sign in yet.
Change password
Passwords are at least {{ acctMinPassword }} characters.
{{ acctError }}
{{ acctSuccess }}
Link a Google account

Adds the Google button as a second way into this same login. Your username and password keep working exactly as they do now.

{{ acctGoogleError }}
{{ acctGoogleSuccess }}
Organiser actions

Resetting a password does not ask for their old one - the point is that it is lost. Tell them the new one yourself; nothing is emailed.

{{ modalTitle }}