Organizer guide

Run your first competition
step by step

Everything you need to go from sign-up to a live public standings page — with annotated screenshots at every stage.

All 6 formats explained Groups + Knockout deep dive Arabic & English

On this page

1

Getting started — sign in & set up

From zero to a working dashboard in under two minutes.

👀

Want to see it working first? Browse live competitions at league.asabya.com/en/explore — no account needed. The Muscat Premier League shows exactly what a published page looks like.

1

Go to league.asabya.com and sign in

Click Start free on the landing page, or go directly to league.asabya.com/en/sign-in. Sign in with Google, or enter your email to receive a one-click magic link — no password needed.

2

Create your organization

First-time sign-in takes you to a welcome screen. Choose Create an organization, give it a name, set visibility to Public or Private, and click Create & continue.

💡

Public vs Private: Public means your org appears in Explore and competition pages are shareable with one link. Private means only your team can see it. You can change this any time in Settings.

3

Invite co-organizers (optional)

Go to Settings → People & invites → Create invite link. A 20-character code is generated, valid for 14 days. Share the link — recipients are added as staff automatically after signing in.

SettingsPeople & invitesCreate invite link
2

Create a competition

Name it, pick a format, and the platform sets everything up automatically.

1

Open the competition creator

From your Dashboard, click Create your first competition. You'll land on the format picker. Give your competition a name — you can rename it later.

2

Pick a format — or use "Help me choose"

Click a format card to select it. If you're unsure, expand ▶ Not sure? Help me choose and answer two questions:

QuestionAnswerRecommendation
One-time event or ongoing season?One day / one eventKnockout or Groups + knockout
One-time event or ongoing season?A season over weeksLeague or Swiss
Should every team get the same number of games?Yes — fair & equalLeague, Swiss, or Groups + knockout
Should every team get the same number of games?No — win or go homeKnockout or Double elimination

The platform picks a format and selects it for you. You can override it by clicking a different card.

💡

For Groups + knockout, two extra fields appear: Number of groups and Qualifiers per group. Set these before clicking Create — e.g. 4 groups, top 2 qualify → 8-team bracket.

3

Tick "Add sample data" to see it working instantly

Before clicking Create, tick Add sample data so I can see it working. The platform fills your new division with example clubs, a generated schedule, and results so you can explore the full experience before entering real data. A banner lets you keep it or clear it at any time.

3

Add clubs & generate the schedule

The division workspace guides you through four numbered steps automatically.

Clubs — register your teams

Type a club name in New club name and click Add & register. Repeat for each team. You need at least 2 clubs before generating a schedule.

Club numbers are seeds — they control bracket seeding and how fixture imports match team names. Auto-assigned 1, 2, 3… but you can override. Example: a fixture list with 1: 1v2, 3v4 means club #1 plays #2, club #3 plays #4.

⚠️

Privacy: Club and team names become public when you publish. Never use a student's full name as a club or team name.

Schedule — generate the fixtures

Click the 2 · Schedule tab. What you see depends on your format:

  • League / Home & away: Click Generate schedule — a complete round-robin in one click.
  • Knockout / Double elimination: Click Generate bracket — teams seeded automatically.
  • Swiss: Set the Rounds field first, then click Generate next round after all results for the current round are entered.
  • Groups + knockout: Generate a schedule in each group division first, then seed the knockout. See Section 7.
📋

Import a pre-made schedule: Expand Add fixtures manually (advanced) and paste one matchday per line: 1: 1v2, 3v4. Numbers are club numbers, or use club names directly. Platform previews and validates before importing.

4

Enter results

Type scores and standings update the moment you save.

1

Go to the Results tab and enter scores

Click 3 · Results. Each match shows Home and Away score fields. Enter the final score and click Save. Standings and the public page update immediately.

For Chess competitions, instead of scores you'll see three buttons per match: Home win, Draw, Away win. Half-point scoring is applied automatically.

2

Delegate to a scorekeeper

Scroll to Scorekeepers in the division workspace and click Create scorekeeper link. Set a label, choose whether scores need approval before going live, and set an expiry. Share the link with a referee or volunteer — they enter results from any device with no account. In approval mode, submissions appear in Pending approvals for you to review first.

5

Publish & share

One link. Anyone can follow live — no account, no app to install.

1

Publish from the season page

From the division workspace, click ← Back to season at the top. Scroll to the Publish card. Review the club names that will become public — confirm no student full names — tick the checkbox, and click Publish — make public.

Division workspace← Back to seasonPublish cardTick & Publish

The season gets a permanent public URL instantly. You can unpublish at any time — the page disappears immediately.

2

What the public page looks like

Branded hero header with your competition name and colors, then: live standings table, fixtures grouped by matchday with scores as entered, bracket for knockout formats, activity feed, and announcements. Works on any device — no login required.

3

Share options

Scroll to Share at the bottom of any public page:

  • Copy link — paste anywhere
  • Share on WhatsApp — opens WhatsApp with the link pre-filled
  • Download share image — branded 1200×630 PNG for Instagram posts
  • Download Instagram Story — 1080×1920 PNG ready to upload
  • Embed on your website — one line of HTML iframe code
6

All 6 formats explained

What each format is, when to use it, and what organizers do.

League (round-robin)

Best for: a season over weeks

Every team plays every other team once. Standings rank by points (3 win, 1 draw, 0 loss). The fairest format — one bad match can't eliminate a team. One click generates the full schedule.

Home & away

Best for: a full home-and-away season

Like League but every pair plays twice — once at home, once away. Doubles match count. Rewards consistency across both legs.

Knockout

Best for: fast one-day events

Win or go home. Bracket seeded automatically from club numbers. Top seeds get byes when count isn't a power of two. Fast to run; one bad match ends a team's run.

Double elimination

Best for: robotics & esports events

Teams must lose twice to be out. Winners' and losers' brackets feed a grand final. If the winners' champion wins the final, it's over; if the losers' champion wins, a reset match is played.

Swiss

Best for: chess & large fields, few rounds

Teams paired each round by current score — strong vs strong. No one is eliminated. Set number of rounds up front. Generate each round only after all results from the previous round are entered.

Groups + knockout

Best for: World Cup–style events

Teams play in small groups (mini round-robins), then top finishers advance to a single-elimination bracket. Cross-group seeding means group rivals can't meet until the final.

7

Groups + Knockout — full walkthrough

The most complex format, broken down step by step.

1

Create with Groups + knockout selected

On the format picker, select Groups + knockout. Two extra fields appear: Number of groups and Qualifiers per group. The platform creates one division per group (Group A, Group B…) plus one Knockout division — you don't create them manually.

2

Register teams into each group

Open each group division and add the teams for that group. Each group is a separate mini round-robin. Distribute teams evenly across groups where possible.

3

Generate a schedule for each group

Open each group division → click 2 · Schedule → click Generate schedule. A full round-robin is created for that group. Repeat for every group.

4

Run the group stage — enter all results

Enter scores in 3 · Results for each group as matches finish. Group standings update in real time on the public page. Continue until every match in every group is scored.

⚠️

All group matches must be completed before seeding the knockout. The platform shows progress (e.g. "3 of 4 groups complete") and blocks Seed knockout until every group finishes.

5

Seed the knockout bracket

Open the Knockout division and click Seed knockout. The platform takes the top N finishers from each group and seeds them cross-group — e.g. 1st Group A vs 2nd Group B. Teams from the same group cannot meet until the final. The bracket is generated immediately.

💡

Need to correct a group result after seeding? Click Re-seed knockout in the Knockout division. This discards the bracket and unlocks the groups for editing. After correcting, seed the knockout again. A confirmation dialog shows how many results would be lost.

6

Run the knockout to a champion

Enter results for each knockout match. Winners advance automatically. When the final is scored, the Champion banner appears on the public page.

8

Football, Robotics & Chess scoring

Standings columns and result entry adapt automatically to your activity.

Football

Standings columns: P W D L GF GA GD Pts. Enter numeric home and away scores. 3 pts for a win, 1 for a draw, 0 for a loss. Goal difference breaks ties.

🤖

Robotics

Standings columns: P W D L PF PA PD Pts. Identical to football but labeled PF/PA/PD — useful when match scores run into the hundreds. Same win/draw/loss point system.

♟️

Chess

For/against columns disappear entirely. Standings show: P W D L Pts. Each match has three buttons: Home win, Draw, Away win. Wins = 1 pt, draws = ½ pt. Buchholz and Sonneborn–Berger tiebreaks computed automatically.

Set the type on the league settings page: open the league → scroll to Competition type → select Chess → Change type.

9

Advanced features

Announcements, team registration, reactions, promotion rules, and more.

📢

Announcements

From the league admin page, use the Announcement composer. Target the whole league, a specific division, or a club. Up to 120-character title, 1,000-character body. Appears on the public page and in the notification bell. Toggle Also send by email to notify members by email too.

📝

Team registration

Enable from the season admin page. Set a deadline, max capacity, and welcome message. Share the registration link — teams submit a short form with no account needed. In the Pending tab, approve a team into a division (a club is created automatically) or reject. Confirmation emails go out automatically.

LeaguesYour leagueSeasonRegistration card
💬

Reactions & comments

From the league admin page, find Community settings and toggle Reactions or Comments on. Reactions (🔥 👏 😮 💪 🎉) are open to anyone with a display name — no account. Comments default to pre-moderation: submissions appear in your Pending queue and go public only after you approve.

↕️

Promotion & relegation labels

In the division workspace, expand Promotion / relegation rules (advanced). Set how many positions from the top are promoted and from the bottom relegated. This labels positions in the standings — it doesn't move clubs automatically.

±

Points adjustment (Adj column)

The Adj column is a manual points adjustment — positive or negative — on top of computed points. Use it for walkovers, rules violations, or administrative decisions. Contact support@asabya.com to apply one.

🔗

Public API

Pull live standings, bracket data, and event info without authentication. Endpoints: /api/v0/events, /api/v0/events/[id]/standings, /api/v0/events/[id]/bracket. Responses cached 60s. CORS open. Full API docs →

Robotics competition — quick-start

Running a Groups + knockout robotics event from scratch in 8 steps.

Scenario

16 teams · 4 groups · top 2 qualify · 8-team knockout

Adjust group count and qualifiers on the creation screen to match your actual numbers.

1

Create the competition

Dashboard → Create your first competition → name it → select Groups + knockout → 4 groups, 2 qualifiers → Create competition.

2

Set competition type to Robotics

Open the league → Competition type → Robotics → Change type. Standings will show PF / PA / PD instead of GF / GA / GD.

3

Register teams into groups

Open Group A → add 4 teams. Repeat for Groups B, C, D. 16 teams total.

4

Generate group schedules

In each group: 2 · Schedule → Generate schedule. 6 matches per group = 24 group-stage matches total.

5

Run the group stage

Enter scores in 3 · Results as matches finish. Scores in robot points (e.g. 120–85). Standings and public page update in real time.

6

Seed the knockout

After all 24 group matches: open the Knockout division → Seed knockout. Top 2 from each group seeded cross-group into the bracket automatically.

7

Run the bracket to a champion

Enter knockout results as matches finish. Quarter-finals → semi-finals → final. Champion banner appears when the final is scored.

8

Publish & share

Back to season → Publish card → confirm no student full names → Publish. Copy the link and share on WhatsApp, or download a share image for Instagram.