❓ Admin Knowledge Base
🚀
Getting Started
First-time setup from scratch

Initial setup order

1
Set the season name — go to Season tab, enter a name like "Winter 2026" and click Save name. This appears as a subtitle under each division on the public site.
2
Add teams — go to Teams tab. Each division has its own card with an Add field at the bottom. Type the team name and press Enter or click Add.
4
Generate fixtures — go to Fixtures tab, open the Bulk Fixture Generator card. Pick a division, starting week number, and first match date (a Monday). Click Preview, review, then Save.
5
Print the referee QR code — go to Pending tab. The QR code links to the referee score submission page. Print it and place it at the desk on match night.
Tip: Repeat steps 2–4 for each division. Teams can only be assigned to one division at a time.
👥
Managing Teams
Add and remove teams

Adding a team

Go to Teams tab. Find the division card, type the team name in the Add field and press Enter or click Add. Team names must be unique across all divisions.

Removing a team

Click the button next to any team name. This permanently removes the team and deletes all their results and fixtures — you will be asked to confirm first.

📅
Fixtures
Bulk generator, dates, editing

Bulk fixture generator

The generator uses the circle method — every team plays every other team once per half-season, and every team plays every single week. The full season is two halves with home/away reversed.

  • Pick a Division and Starting Week number
  • Pick the First match date — defaults to the next Monday
  • Click Preview fixtures to review the full schedule including referee assignments
  • A ↩ Second half badge marks where the second half begins
  • Click Save to write all fixtures to Firebase at once
Referee assignment: The generator automatically assigns a referee team to each fixture — a team that isn't playing that match. Assignment is rotated across the full season so the load is shared evenly.

Match week dates

The Match Week Dates card (below the generator) shows a date picker for each scheduled week. Change a date and click Set — all fixtures in that week update simultaneously. Use this for public holidays or any one-off date changes.

Editing a fixture

Click the ✏️ button on any fixture row to edit it inline. Change division, teams, week, date, time, pitch or referee. Click Save to commit or to cancel.

Adding a single fixture

Click + Add fixture at the bottom of the fixtures table. Fill in the inline row — division, home team, away team, week number, date (picker), time (dropdown: 7:00pm / 7:45pm / 8:30pm), pitch (2A / 2B / 4A / 6A / 6B) and referee. Click Save.

Results
Entering scores, drafts, approvals

Draft results

Any fixture that doesn't yet have a result appears automatically as a draft row at the bottom of the Results table (highlighted in yellow). Enter both scores and click Publish — the result goes live on the public site immediately.

From fixture shortcut

Click the ⚡ From fixture button to pick a scheduled fixture and pre-fill the result row with the correct division, teams, week and date. You only need to enter the scores.

Adding a result manually

Click + Add result at the bottom of the table. Fill in division, week, home team, score, away team score and date. Click Save.

Editing a result

Click the ✏️ button on any result row to edit it inline. Click Save to commit.

Deleting a result

Click the 🗑 button and confirm. Deleting a result updates the ladder immediately.

Filtering by division

Use the pill filters at the top of the Results panel to show only one division at a time.

🏴
Referee Flow
QR code, score submission, pending approvals

How it works

Each match has a nominated referee team assigned automatically when fixtures are generated. A player from that team scans the QR code, selects their match, enters the score and their name, then submits. The score sits as pending until you approve it.

Printing the QR code

1
Go to Pending tab
2
Click 🖨 Print QR — a print-ready page opens with the QR code and URL
3
Place it at the scorer's desk on match night
Note: The QR code links to your live Vercel URL — it will not work when opening the HTML file locally.

Approving a pending result

Go to Pending tab. Each submitted score shows the division, teams, score, date, the referee's name and the submission time. Click ✓ Approve to publish it as an official result, or to reject and discard it.

Disputed score? The submitter's name is recorded alongside every pending result so you know who to follow up with.

The referee page

The public referee page at /referee shows only today's fixtures. Referees pick their match, enter home and away scores, enter their name, and tap Submit. Results go to pending — nothing is published without admin approval.

Match Weeks
Completing rounds, weather postponements

Marking a week complete

In the Results tab, each match week heading has a Mark complete button. Once clicked, the week shows a ✓ Complete badge and its fixtures are hidden from the public Fixtures tab (since they've been played). Use Undo to reopen a week if needed.

Postponing for weather

Go to the Weather tab.

1
Select the match week to postpone from the dropdown
2
Set push back — number of weeks to shift (usually 1)
3
Click Preview changes — a modal shows every affected fixture with its old and new week number
4
Click Confirm reschedule — all weeks from that point shift forward, dates update automatically
Important: All subsequent rounds also shift — not just the postponed week.

Public site banner

In the Weather tab, type a message in the Banner message field and click Set banner. A yellow warning bar appears at the top of the public site immediately. Click Clear banner once the situation is resolved.

🏆
Season Management
End of season, promotion, archiving

Setting the season name

Go to Season tab. Enter a name (e.g. "Winter 2026") and click Save name. This appears under each division banner on the public site in place of "Six-A-Side".

Starting a new season

1
Enter the new season name (e.g. "Summer 2026") in the Start New Season card
2
Click Preview moves — the system calculates promotions and demotions based on the final ladder
3
Review the modal — each team shows which division they'll move to. Use / buttons to override any move
4
Click Confirm & Start Season — the current season archives, teams reorganise, and results/fixtures clear
Promotion/demotion logic: Premier League bottom → Championship. Championship top → Premier League, bottom → League One. League One top → Championship, bottom → League Two. League Two top → League One.

Archived seasons

All past seasons are listed at the bottom of the Season tab with their archive date. Data is stored permanently in Firebase — nothing is deleted when a new season starts.

Before starting a new season: Make sure all results are entered and all match weeks are marked complete.
🌐
Public Site
What players see, sharing, banners

What's visible

  • Table — live ladder with points, goal difference, form (last 5), and week-on-week movement arrows
  • Fixtures — upcoming matches with date, time, pitch and referee team. Completed and postponed weeks are hidden automatically
  • Results — all published results grouped by match week, with winner highlighted

Share links

The 🔗 Share button (bottom-right of the public site) copies a URL that links directly to the current division and tab — e.g. ?div=prem&tab=table. Share it with players so they land in the right place.

Register to play

The Register to Play button in the header opens a form collecting name, email, phone and play preference (Individual / Team / Both). On submit, the data is sent directly to the league contact email via Formspree — no email client or backend needed. The user sees a confirmation screen once submitted successfully.

Formspree is already configured with endpoint xojrqlvd pointing to the league contact email. No further setup is needed. Free tier covers 50 submissions per month — upgrade at formspree.io if volume increases.

Weather banner

Set from the Weather tab in admin. Appears as a yellow bar at the very top of the public site. Visible to all visitors until cleared.

URLs

  • / — public site (table, fixtures, results)
  • /admin — this admin panel
  • /referee — referee score submission (today's fixtures only)
🚢
Deployment
Updating the live site

How updates are deployed

The app is hosted on Vercel, connected to a GitHub repository. Any file pushed to GitHub automatically redeploys within about 30 seconds.

Uploading new files

1
Go to your GitHub repository
2
Click Add file → Upload files
3
Drag in the updated index.html, admin.html, referee.html or vercel.json
4
Click Commit changes — Vercel picks up the update automatically

Files and their roles

  • index.html — the public-facing site
  • admin.html — this admin panel
  • referee.html — the referee score submission page
  • vercel.json — URL routing (/admin → admin.html, /referee → referee.html)
Data is in Firebase — not in the HTML files. Redeploying never affects your results, fixtures or teams. Firebase is the single source of truth.
Connecting...