Back to home

Help & features guide

Everything Asabya League can do, and how to do it.

Getting started

Create an organization
Go to sign in → choose Google or email → you'll land on the welcome screen → choose Create an organization → name it → you're in.
Invite people
Settings → People & invites → Create invite link → share the link or code.
Your first competition
Dashboard → New competition → choose a format or use Help me choose → add teams → generate schedule → enter scores → publish.
Boys / Girls competition tracks
When creating a division you can set its Track: Open (default), Boys, or Girls. Boys/Girls divisions carry a clear badge in the season list, the division workspace, and reports. So gender-parallel school competitions can run side by side in one season.

Competition formats

League (round-robin)
Everyone plays everyone: the fairest way to rank a field over a season.
Home & away
A league where every pair plays twice. Once at home, once away.
Knockout
Win or go home: fastest way to a champion; great for one-day events.
Swiss
Many players, few rounds: opponents matched by record. Built for chess and large fields.
Double elimination
One loss isn't the end: a losers' bracket gives everyone a second chance.
Groups + knockout
Group stage to sort the field, then a knockout to crown a winner. The World Cup format.
Chess scoring
Half-points, Swiss pairing and Sonneborn-Berger tiebreaks built in.

Activities & scoring

Football
Goals for, against, difference: GF / GA / GD columns.
Robotics
Points for, against, difference: PF / PA / PD columns, typically larger totals.
Chess
Wins, draws, losses, points: goal columns disappear automatically.
Other activities
Any activity that fits a league, knockout, group or Swiss structure works. The scoring adapts.
Importing fixtures & brackets
In the division workspace, use the Fixture import card to paste a CSV of matches (home club, away club, round). Click Validate. The system checks club names against the roster and reports mismatches. Once clean, click Import to generate all fixtures at once. For knockout and double-elimination formats, use Import bracket to set the bracket structure. After import the standings engine picks up automatically.

Sharing & embedding

Publish a public page
From the competition workspace, toggle visibility to Public and click Publish.
Share on WhatsApp
On any public competition page, scroll to Share → Share on WhatsApp. Opens WhatsApp with the link pre-filled.
Download a share image
Share → Download share image: branded 1200×630 PNG for Instagram posts.
Download an Instagram Story image
Share → Download Instagram Story: 1080×1920 PNG.
Embed on your website
Share → Embed on your website → copy the iframe code → paste into any website's HTML editor.
Public API
Developers can pull live standings and event data from /api/v0/events. See API docs →

Inviting people & joining

Create an invite
Settings → People & invites → Create invite link → a 20-character code is generated, valid for 14 days.
Share by link
The full link auto-opens the join flow after sign-in.
Share by code
Recipients go to the welcome screen → Join an existing organization → enter the code.
Joining
The recipient signs in → accepts → lands on the dashboard with your organization.

Language & accessibility

Arabic & English
Toggle EN|ع in any page header to switch. All pages، including public competition pages، work fully in Arabic with right-to-left layout.
No login for fans
Public competition pages are viewable by anyone with the link. No account needed.

Account & organization

Sub-organizations (ministry → school tree)
Settings → Sub-organizations lets an admin create child organizations under the current one. For example a ministry creates governorates, which create districts, which create schools. Each level has its own workspace, competitions, members, and public site; you switch between them from the organization menu at the top of the sidebar.
Sign in options
Google or email magic link.
Organization settings
Settings → Organization (name, visibility).
Programs
Settings → Programs: add activity programs your competitions can use.

Club profiles

Club profiles
Every club has a public profile page at /clubs/[id]. It shows the club name and colors, a short bio (editable by organizers), the club's current standings in each division they compete in, upcoming fixtures, recent results with scores, and the squad list. Club names throughout the platform, in standings tables and fixture lists, link to their profile. To add a bio: go to the division workspace, find the club in the roster list, and click the bio edit disclosure.

Scorekeeper access

Scorekeeper access
Create a scoped access link that lets a designated person submit match results for a division without a full organizer account. Go to the division workspace, open the Scorekeepers panel, and click Create scorekeeper link. Set a label, choose whether submissions require your approval, and set an expiry. Copy the generated link and share it. The scorekeeper sees only the matches in their division. Results submitted directly go live immediately and trigger a standings recompute. Results submitted in approval mode appear in the Pending approvals queue for you to review first.

Announcements

Creating & publishing announcements
Go to Announcements in the sidebar. Click New announcement, enter a title and body (up to 1,000 characters), optionally pin it to the top of the public page, and link it to a specific competition. Save to publish immediately. The announcement appears on your public site and in the notification bell for org members.
Sending by email
Toggle Send email when composing: this triggers an email blast to all confirmed followers of your organisation.
Who receives announcement emails?
Anyone who clicked Follow on your public site and confirmed their email address. Followers can unsubscribe at any time using the link at the bottom of any announcement email.

Notifications

Notifications
The bell icon in the admin header shows unread notifications. You receive a notification when: an organizer publishes an announcement, a match result is confirmed, a scorekeeper submits a result that needs your approval, or a match reminder fires 24 hours before a scheduled fixture. Click the bell to see recent notifications. Click Mark all read or click an individual notification to clear it.

Activity feed

Activity feed
The public competition page shows a chronological feed of competition activity. Result cards show both clubs, their colors, the score, the matchday, and the division. Club names link to their profile pages. Use the share button on any result card to copy a direct link. When standings change after a result, a movement indicator appears in the feed. Announcements also appear in the feed as broadcast cards. The feed updates within 60 seconds of new activity.

Reactions and comments

Match reactions
Any visitor can react to a result card on your public site with 🔥 👏 😮 💪 🎉. No account required. Reactions are local-first (instant, offline-capable) and synced to the platform in the background. Toggle Reactions on or off per competition from Community settings in the competition admin page.
Public comments
Comments on result cards are not shown to visitors. The Comments toggle and moderation queue are available in Community settings, but the public site does not currently render comments.

Registration

Player registration
Organizers review incoming player registrations from the Registrations page (sidebar). Players submit a public form with name, contact, and optional club preference. No account required. Review, approve, or reject individual applications from the admin panel. A payment link can be sent from the same page after approval.
Team (season) registration
Enable team registration on any season from the season workspace (Competitions → [season] → Registration card). Set an optional deadline, capacity, and welcome message. Share the registration link. Review applications in the Pending tab. Approve a team into a division (a club is created automatically) or reject with one click. Confirmation and rejection emails are sent automatically.

Payments

How do I collect payment from registered teams?
After approving a registration, open the Registrations page and find the confirmed entry. Enter the amount in OMR and click Send payment link. This generates a Stripe Checkout URL and emails it to the contact. The team pays online by card. Payment status updates automatically once the transaction completes.

Player rosters

How do I manage player rosters?
Inside a division workspace, each club card has an expand arrow that reveals the squad. Click Add player to enter a name, number, and optional position. Players appear on the public club profile page. You can export the full roster as a CSV from the club card overflow menu.
Age eligibility bands
In a division's workspace, open 'Age eligibility (birth-year band)' under the clubs step to set the allowed birth-year range (e.g. an under-15 tier). Any rostered player whose date of birth falls outside the band gets a clear 'Outside age band' flag in the roster. Dates of birth are only visible to organizers, never on public pages.
Roster locks
In the season workspace, the Roster lock card sets a freeze date for every club roster in the season. From that date, Add player and Remove are disabled across the season's divisions and a lock notice appears on each roster. Standard practice before finals. Clear the date to unlock.

RSVP & match availability

How do RSVP invites work?
For each scheduled match in the division workspace, open the RSVP & availability panel under the match to send RSVP invites by email with Yes / No / Maybe response options. Responses appear in the same panel. Players do not need an account to respond.

Custom domain

How do I use a custom domain for my public site?
Go to Settings → Website settings. Enter your custom domain (e.g. league.myclub.com) and click Connect. The screen then shows the exact DNS records to add at your domain provider: a CNAME to cname.vercel-dns.com for a subdomain (or an A record to 76.76.21.21 for a root domain), plus a TXT verification record if requested. DNS changes usually propagate in 2-60 minutes. Click “Check status”. Once verified, your public site is served at your custom domain with its own TLS certificate. Note: your own name.asabya.com subdomain is provisioned automatically and needs no setup.

Awards

Season awards & honours
Create awards for a season, Champion, Best Design, Fair Play, and similar, from the Awards & honours panel in the season workspace (Competition → Season). Each award is assigned to a winning team and stays private as a draft until you publish it; published awards appear in the honours section of your public site.

Certificates

Participation & placement certificates
Generate a print-ready certificate for any club in a division. From the division workspace, find the club and open Certificates. Choose Participation, 1st Place, 2nd Place, or 3rd Place. A branded A4 certificate opens in a new tab with a Print / Save PDF button. Only organizers can generate certificates; they include the org name, club name, competition, division, and date.

Player stats & top scorers

Top scorers leaderboard
A top scorers table appears on public club profile and competition pages for football and other goal-based activities. It ranks players by goals, assists, and matches played. Player data is drawn from the roster you enter in the division workspace. Add players there to populate the leaderboard.

Nominations (ministries & federations)

Open a call for nominations
On a season workspace, open the Nominations card and turn on “Open this season for nominations”. Schools and other organizations below yours in the hierarchy can then nominate teams from their dashboards. Add a message to explain deadlines or quotas.
Nominate a team (schools)
When an organization above you opens a call, a “Nominate a team” card appears on your dashboard. Choose the competition, name your club (in English and Arabic), add a contact, and send it. You’ll be notified, by email and in the app, when it’s reviewed.
Approve or reject a nomination
In the Nominations inbox, approve a pending nomination into any division of your season, or reject it. Approving creates the club, owned by the nominating school, so its results roll up to that school, and enrols it into the chosen division. The school’s contact is emailed the decision.

Ministry analytics

See participation across your whole hierarchy
Admins get an Analytics tab in the sidebar. It rolls up competitions, divisions (by open/boys/girls track), clubs, rostered players, matches played and scheduled, and registrations across your organization and every organization beneath it.
How the rollup is scoped
The dashboard walks the organization hierarchy downward from your active organization. You see a school or district because your admins created it. A per-organization table breaks the totals down, with a link to open each one’s workspace.

Series standings (federation editions)

Score a competition across multiple editions
On a competition page, turn on “Run this competition as a points series.” Each season becomes an edition, and its championship division (the top-tier division) final table feeds a combined series standings. How a federation runs one championship across many years.
Choosing the points per position
Set the points awarded for each finishing position, best first (default 25, 18, 15, 12, 10, 8, 6, 4, 2, 1). A club’s series total is the sum across every edition it took part in; equal totals are split by countback. More wins first, then more seconds, and so on.

Delegation entry quotas & deadlines (federations)

Let delegations enter on behalf of their members
A delegation (a governorate, district, school, or member body beneath your federation in the org tree) enters teams into your edition through the nomination flow. This is different from self-serve registration, where a team enters itself. You approve each entry into a division exactly as with nominations.
Capping entries with a quota
On the season page, under “Delegation entry quotas & deadline”, set how many live entries each delegation may hold. The database enforces it. Even if two of a delegation’s admins submit at the same moment, the quota is never exceeded. Rejecting or withdrawing an entry frees a place. No quota set means unlimited.
The hard entry deadline
Set one deadline for the whole edition. After it passes the database refuses new entries, judged by the server clock. A delegation whose own clock is behind cannot sneak in late. The delegation sees a live countdown and is blocked cleanly once it passes.

Auditable draws (contestable-proof group draws)

Publish the seed, then draw
On the season page, publish a seed first (a future block hash, a lottery number, any committed random string) and run the draw. Groups are computed deterministically from the seed and the entrant list. The same seed always gives the same draw. Each draw is recorded as an immutable attempt; a re-draw is a new row, never an overwrite.
Anyone can verify a draw
Each draw has a public audit page (no login): the entrants, the seed, the algorithm version, the resulting groups, and a “Verify this draw” button that recomputes it in your own browser and confirms nothing was changed after the fact. If the stored result were tampered with, verification fails for everyone.

Bulletins & circulars (versioned, acknowledged)

Send circulars your delegations must acknowledge
On a competition page, post a bulletin and require acknowledgement. Each delegation sees it on their dashboard and confirms receipt. Reading is tracked separately from acknowledging. “opened it” is not “confirmed it.” You see who has acknowledged and can remind the rest with one click.
New versions reset acknowledgement
Post an update as a new version and every delegation must acknowledge again. A delegation that acknowledged v1 is not counted as having acknowledged v2. That is the point of a versioned circular: “confirm you have read the CURRENT rules.”
Acknowledgement deadlines
Set an optional deadline. The database refuses acknowledgements after it, judged by the server clock. A delegation cannot backdate a late confirmation. Delegations that miss it show as overdue for follow-up.

The Asabya Assistant (AI help)

Ask anything, on any page
The teal sparkle button in the bottom corner opens the Asabya Assistant on every page, the admin app and the public site. Signed in, it answers using your organization's live data (competitions, matches, registrations); signed out, it gives general guidance. Responses are AI-generated and for guidance only, it never makes changes on your behalf.
Suggested prompts + Explain this page
Tap a suggestion to start: How do I get started?, Explain this page, What can you do?, or Report a problem. “Explain this page” tells you what the screen you're currently on is for and the main actions available there.

Carry a series forward between editions (federations)

Reuse last edition's quotas and seeding
When you create a new edition (season) of a recurring competition, open the season workspace and use “Carry over from the previous edition”. It copies each delegation's entry quota from the last edition and carries the previous champions' seeding (from that edition's championship division final standings). A preview shows exactly what will be added before you confirm.
Safe to run more than once
Carry-over is idempotent: running it twice never doubles a quota, and any quota you already set by hand on the new edition is skipped and never overwritten. The preview marks those as skipped.

Cross-event series: one table across many competitions

Aggregate different sports into one standings
A cross-event series (Series in the sidebar) scores several distinct competitions, say a football competition, a robotics cup and a chess open, into a single aggregated table, awarding points per finishing place with the same system as a single-competition series. A club that competes in more than one contributes to its combined total.
Add source competitions
Create the series with a name and a points-per-place list, then add source competitions from your own organisation. Each source contributes its championship-division final standings; the aggregated table updates automatically. Only this organisation's competitions can be sourced.

Protests & appeals (federations)

File a protest against a result or decision
In the season workspace, open “Protests & appeals” to file a protest. Pick what it concerns (match result, player eligibility, conduct, scoring, other), give it a title and the details. The filing is timestamped by the server and recorded permanently; it cannot be edited or deleted afterwards.
Rulings are immutable; a reversal is a new ruling
A federation admin records a ruling (upheld, dismissed, partially upheld, withdrawn) with a rationale. Rulings are never edited or deleted. If a decision is overturned, a NEW ruling is recorded that supersedes the earlier one, and both remain on the record. The ruling in force is always the latest; the full history is the audit trail.

Records (federations)

Keep official records
Records (Records in the sidebar) hold official federation records. Most goals in a season, fastest time, highest score. Create a record category with its unit and whether a higher or a lower value counts as a new record, then log each performance with the holder, value, where it was set, and the date.
Breaking a record is a new entry
A record stands until it is broken. Breaking it logs a NEW entry that supersedes the previous one. Records are never edited or deleted, so a category's entries are the record's full progression. A break must actually improve on the standing record (higher, or lower, per the category); the standing record shown is always the current best.

Accreditation & visa letters (federations)

Issue badges with zones and validity
In Accreditation (sidebar), first define your access zones (field of play, media tribune, VIP lounge…), then issue a badge for each person. Category (athlete, coach, official, media, VIP, staff), the zones it grants, and a validity window. Each badge gets a unique serial. Badges are tamper-proof: they are issued and revoked only through these actions, never hand-edited, and revoking one is a permanent transition.
Print a visa support letter
For international participants, open a badge's “Visa letter” to get a printable support letter on the federation's name, confirming the holder, nationality, accreditation category, event, and dates, for use in a visa application. A revoked badge's letter is clearly marked as no longer valid.

Officials, panels & conflict of interest (federations)

Register officials and panels
Officials (sidebar) holds your referees, judges, jury members and commissioners with their licenses and their affiliation (club/delegation). Create a panel, a protest jury, judging or appeal board, and list the parties it judges, then appoint officials to it as chair or member.
Neutral panels: conflict of interest
A panel must be neutral. If an official is affiliated with one of the parties the panel judges, they have a conflict of interest and the system refuses to appoint them. Unless you explicitly waive the conflict and record a reason. The waiver is kept on the panel, so who sat despite a conflict, and why, is always on the record.

Structured results feed (media & partners)

One machine-readable feed per public competition
Every public competition publishes a structured, versioned results feed at /api/v0/events/{eventId}/feed. One JSON document with the competition details, the full standings, and every match with per-side scores. It is world-readable (no key), CORS-enabled, and cached, so a federation, a ministry, or a broadcaster can ingest live results directly instead of scraping the site.
How partners use it
Point any system at the feed URL for a published competition and it receives a stable schema (feed_version 1.0, documented in RESULTS_FEED.md): standings sorted by rank, results with home/away scores, and the generation timestamp. Only public competitions are exposed. A private or draft event returns 404. Additive fields never break the version; consumers should ignore unknown fields.

Integrity & discipline (federations)

Raise and review integrity cases
Integrity (sidebar) is the federation's case management for age fraud, doping, match-fixing, eligibility and misconduct. Raise a case against an athlete, club or official with a category and severity, then move it through a review lifecycle. Open → under review → substantiated or dismissed. A case cannot skip straight to substantiated, and once resolved it is terminal; who resolved it and when are recorded. Cases cannot be edited or deleted directly.
The disciplinary register
The register holds every sanction, ban, suspension, fine, warning, points deduction, with its window and an optional link to the case that caused it. Whether a sanction is currently in force is computed from its dates and whether it was lifted early (lifting is a recorded action, never an edit). Records are immutable, so the register stands as the federation's audit trail.

Judge analytics (judged sports)

Record each judge's score
Judge analytics (sidebar) is for judged competitions, robotics, artistic events, where a panel scores each entry. Pick the competition, then record each judge's score for each entry (optionally per criterion). Re-recording the same judge/entry/criterion corrects the score rather than duplicating it.
Bias & spread vs the panel consensus
For every entry the panel consensus is the mean of the judges' scores. The analytics table shows each judge's bias (their average signed deviation. Positive means they lean high, negative means low) and spread (how far their scores sit from consensus on average), with the most biased judge ranked first. It surfaces an outlier or a consistently generous or harsh judge across the competition.

Bulk certificates & QR verification

Issue certificates for a whole division
In the division workspace, open “Certificates (issue & verify)” to issue official certificates for every club in one action. Pick participation or a placement (1st/2nd/3rd), then open the print sheet: every certificate renders on its own page, ready to print or save as PDF. Issuing is idempotent: re-issuing never duplicates and never changes an existing serial, so already-printed certificates stay valid. Individual certificates can be revoked.
Every certificate is verifiable by QR
Each issued certificate carries a unique serial (CERT-XXXXXXXX) and a QR code. Scanning it opens a public verification page, no login, that confirms ✓ Authentic with the issuer, club, competition, type and issue date, or shows ✗ Revoked / Not found. Schools and parents can trust a certificate because anyone can check it against the issued-certificate registry in real time.

Blackout calendar & matchday planning

Record the dates fixtures must avoid
In the season workspace, “Blackout calendar & matchday planning” holds the periods matches must not land on. Ramadan, exam windows, holidays, or a weekly rest/prayer day (e.g. every Friday). One-click presets cover the common Gulf cases; every blackout has a kind and an optional label, and season blackouts sit alongside org-wide ones.
Plan matchday dates around the blackouts
Pick the first matchday's date and a cadence (e.g. weekly) and every matchday in the season gets a date that skips all blackouts. A matchday whose nominal date falls inside Ramadan moves to the first clear day and the calendar shows “moved to avoid Ramadan”. The rest of the schedule shifts with it rather than piling onto the blackout's edge. Kickoff times are still set per match in the division workspace.

Qualifier → final advancement

Advance a qualifier's top finishers into the final
In the qualifier division's workspace, open “Advance to final”. Pick the final division (any other division in the same season) and how many qualify, then Preview: it shows exactly who would advance by final standings, seeded by finishing position, and warns if the qualifier still has unscored matches. Apply registers them into the final; generate the final's schedule or bracket as usual from there.
Explicit, idempotent, never destructive
Advancement is always an explicit admin action, never automatic. Applying twice never double-seeds; a club already entered in the final is shown as “already entered” and kept exactly as-is (its entry and seed are never overwritten). A tie at the qualification cutoff advances all tied clubs rather than arbitrarily excluding one, and both divisions must belong to the same organization.

Branding your public site

KPIs at a glance
The top row of the dashboard shows live counts for your organization. Matches played vs scheduled (with a completion bar), results still awaiting entry, upcoming matches in the next 7 days, registered players, active clubs, pending approvals, items to moderate, and published competitions. Tiles link straight to where you act.
Needs your attention
A prioritized action list surfaces only what is outstanding, results to enter, registrations and nominations to review, protests awaiting a ruling, and comments to moderate, each with a one-click link. When nothing is pending it shows an all-clear.
Participation & results trends
Two charts show participation by age band across the organization and the number of results entered per week over the last 8 weeks, so you can see momentum at a glance.

Search & quick jump

Open it anywhere
Press ⌘K (Ctrl-K on Windows) or click Search in the top bar to open the command palette from any page.
Find & jump
Type to filter across navigation, quick actions (new competition, announcement, organization), and your organization's competitions, seasons, divisions and clubs. Use the up/down arrows and Enter to jump; Escape closes.

Key concepts, in pictures

The ideas behind the formats, shown at a glance.

1Head-to-head2Score difference3Score for

Tiebreaks

When teams are level, these criteria decide the order, top one first.

Swiss pairing

Each round pairs players on the same score, so everyone keeps playing.

Advancement

Group qualifiers feed the knockout, and the bracket crowns the winner.

RegistrationMatchdaysPlayoffsFinal

Season timeline

From registration through the matchdays to the playoffs and the final.

Help & features guide: Asabya League