Overview
Sports Portal is a community sports platform for organizing matches, events, tournaments, and multi-team festivals, and for tracking every player's Skill Rating, stats, and achievements over time. It works the same way for casual pickup games as it does for a multi-day, multi-sport tournament.
Creating an account
Sign up from the Register page with an email and password, or continue with Google. On your first sign-in you'll land on a short onboarding flow that collects your name, date of birth, gender, and the sports you play — this powers matchmaking, division tiers, and age/gender-restricted events, and can be edited later from your profile.
The dashboard
Everything after sign-in lives under /dashboard. The sidebar groups features into Play (matches, challenges, matchmaking), Compete (tournaments, festivals, rankings), Social (friends, feed, chats), and Account (profile, settings, notifications). The home screen surfaces your live matches, recent results, upcoming events, and weekly standouts in one place.
- Press
Ctrl+K(or⌘+K) anywhere in the dashboard to open global search for players, teams, and matches. - A live badge count on each sidebar item updates in real time as new notifications arrive — no page refresh needed.
- Dark theme is the default; switch to light from the theme toggle, and your choice is remembered on this device.
Roles & permissions
Every account is one of three roles. Roles are additive — an admin can do everything an organizer can, plus more.
| Role | Can do |
|---|---|
| Player | Log/challenge matches, join events & tournaments, manage their own team roster if made captain, use all social features. |
| Organizer | Everything a player can, plus create and manage Events, Tournaments, and Festivals. |
| Admin | Everything an organizer can, plus the Admin panel: venues, seasons, platform analytics, dispute resolution, and privacy request handling. |
Two extra exceptions exist: a festival "Team" (city) captain can manage that team's roster without being a full organizer, and an event's creator can edit that specific event even without the organizer role.
Logging a match
Go to Matches → New Match, pick the sport and an opponent, and set the date. You can create a match that already happened (to record history) or one that's scheduled for later.
- Choose the sport — this determines which per-match stats and scoring rules apply.
- Select your opponent (or, for team sports, both rosters).
- Set the date/time and, optionally, a venue.
- Once the match starts, enter and update the score; mark it Completed when it's over.
Completing a match automatically updates both players' Skill Ratings, checks for newly-earned badges, resolves any predictions made on it, and advances daily/weekly quests.
Challenging a player
Instead of creating a match directly, you can send a challenge from a player's profile or the Matchmaking page. The opponent gets a notification and can accept, decline, or let it expire — accepting turns it into a scheduled match automatically.
- Matchmaking suggests opponents within roughly ±300 Skill Rating of you, in sports you both play, prioritizing players marked available today.
- You can withdraw a challenge you sent before it's accepted.
- A completed match can be rematched with one click from the match detail page.
Match lifecycle & scoring
Matches move through a simple lifecycle:
- Scheduled — created, not yet started.
- Ongoing — score entry is open; both participants and referees see live updates every couple of seconds.
- Completed — final score locked in; ratings, badges, and predictions are resolved.
Doubles and team matches
Sports that support it can be played as doubles (a partner pair per side) or full team matches. Rating changes for a team are shared across the team's roster, weighted by the match outcome.
Best-of series
Tournament matches can be scored as a best-of series (e.g. best of 3 games) rather than a single score. Enter each game's score as it finishes; the winner and result type (straight win vs. tiebreak) are derived automatically once the series is decided.
Predictions
Before or during a player-vs-player match, anyone can predict who wins from the Predict the outcome panel on the match page — pick a side or Draw. A community bar shows how everyone else predicted. Guessing correctly earns you 10 points once the match completes, which feed the prediction leaderboard. Predictions are one-per-person-per-match and locked once the match is completed.
MVP voting & sportsmanship
MVP voting
After a match completes, participants (and organizers, for larger events) can vote for the standout player. Whoever reaches at least 2 votes is awarded the match's MVP badge. Tournaments and events also run their own MVP vote across the whole competition, separate from individual match votes.
Sportsmanship ratings
Participants on a completed match can rate each other 1–5 stars for sportsmanship. Ratings are private to the person who receives them and appear on their profile as an aggregate — you can't rate yourself, and you can only rate each opponent once per match.
Disputes & referees
Flagging a dispute
Any participant on a completed match can flag it as disputed if the recorded result is wrong, with a short reason. The other participants are notified, and an admin reviews it from the Admin panel — they can clear the dispute as-is, or roll the Skill Rating change back to what it was before the match and re-open it for correction.
Referee panel
If a match has a referee assigned, that person gets access to a dedicated Referee panel showing their assigned scheduled/ongoing matches, where they can update the live score directly.
Skill Rating (SR)
Every player starts at a Skill Rating of 1000. After each completed match, both sides' ratings adjust based on the result and the rating gap between them — beating a stronger opponent gains you more than beating a weaker one, and a dominant scoreline moves the rating a little further than a narrow one. Skill Rating can never drop below a floor of 100.
- View your full rating history as an interactive chart on your Profile page.
- A rating sparkline appears next to your name in leaderboards and tables for an at-a-glance trend.
- Skill Rating is tracked both globally and per sport.
Stats & activity
The Stats page breaks down your record by sport — wins, losses, draws, and a match timeline. The Activity heatmap shows a GitHub-style calendar of your match activity over the last year, colour-coded by win rate, plus your longest win streak. Momentum is a 0–100 score computed from your last 10 matches, weighted toward your most recent results, with a bonus for active win streaks — shown as a trend label (hot, rising, neutral, falling, cold) wherever your recent form matters.
Compare & head-to-head
Compare puts two players side by side — overall stats, per-sport rating, badges, and rating history. Head-to-head (H2H) looks specifically at the matches between two players: overall record, a per-sport breakdown, and the recent match list between just the two of you. Both are reachable from any player's profile.
Events, RSVP & check-in
Events are scheduled sessions — practices, games, tournaments, leagues, or championships — tied to a venue and date. Public events are visible without signing in at /events.
- Open an event and RSVP Going, Maybe, or Can't go — your response is visible to the organizer and updates the headcount.
- If the event has a capacity limit and fills up, you can join the waitlist; you'll be promoted automatically (with a notification) if a spot opens.
- At the venue, an organizer reads out a 6-digit check-in PIN specific to that event, which RSVP'd players enter to confirm they showed up.
- Comment on the event page to coordinate with other attendees.
Any event or match can be exported as a calendar file (.ics) to add to Google Calendar, Outlook, or Apple Calendar. Events happening soon also trigger a reminder notification (push + in-app) automatically.
Tournament basics
A tournament moves through Draft → Registration → In Progress → Completed (or Cancelled). During Registration, players or teams sign themselves up — organizers can also add participants directly. Some tournaments restrict entry by gender or age, which is checked both when restrictions are set and again at registration time. If buy-ins are enabled for a tournament, you pay through a secure Stripe checkout from the Participants panel.
Groups & knockouts
Group stage
Participants are split into named groups that play a full round-robin. Standings rank by points (win = 3, tiebreak win = 2, tiebreak loss = 1, forfeit win = 3), then head-to-head tiebreaks, then points scored.
Knockout stage
A single-elimination bracket seeded from group results (or set directly for a knockout-only tournament) — seed 1 meets the weakest opponent in the earliest round under standard bracket seeding. Winners advance automatically; the final's winner is awarded a tournament-winner badge for every player on the winning side.
Bracket predictions
Before a knockout match is played, anyone can predict its outcome from the bracket view. A per-tournament leaderboard tracks prediction accuracy.
What is a festival?
A Sports Festival is a larger, multi-city competition — think an inter-club or inter-community tournament running several sports at once. In the app, a competing side is called a Team (a city or club entry), and a single Team-vs-Team matchup is called a Game. Each sport in a festival (e.g. "Badminton, male" and "Badminton, female" count as two separate divisions) runs its own group stage and knockout bracket, exactly like a standalone tournament.
Teams & rosters
Organizers add each competing Team, optionally with a captain. Every Team keeps a general roster of players, populated either by an organizer/captain adding people directly, or by a player requesting to join a Team themselves — a request sits pending until that Team's captain (or an organizer/admin) accepts or rejects it. Accepting automatically withdraws any other pending requests that player made elsewhere in the same festival, since you can only represent one Team per festival.
From the general roster, each sport division gets its own per-sport roster — this is always assembled manually by a captain or organizer, not through self sign-up. For sports where a Team can field more than one lineup (e.g. multiple doubles pairs), the division can be split into lettered subteams (A, B, C…) — each plays in its own group, and the knockout bracket is arranged so same-lettered subteams from the same Team can't meet again before the final.
Games, standings & feed
Every Game's result feeds two things: the standings for its sport division, and the Team's overall festival standing, which sums placement points earned across every sport it competed in (first/second/third/other, configured per division). The festival page shows standings, a browsable list of every sport division, and an announcements feed where organizers or captains can post updates.
Club teams
Separate from festival Teams, a "Team" here is an ongoing club roster for one sport — create one from the Teams page and you're automatically its captain and first member.
- Invitations — captains invite players; invited players accept or decline from their Team Invitations inbox.
- Team polls — captains create quick polls (e.g. jersey colour, practice time) with an optional close date; members vote once each.
- Team chemistry — win rate for every pair of teammates who've played together, colour-coded to surface your best (and weakest) duos.
- Recruitment board — post "looking for a player" or "looking for a team" ads; others apply directly.
- Team challenges — challenge another team in the same sport to a match.
- Player transfers — captains/admins record when a player joins or leaves the roster, with an optional reason, building a transfer history.
Friends & activity feed
Find people under Discover and send a friend request; once accepted, their completed matches, badges, and other activity appear in your Feed. React with an emoji, leave a comment, or hide items you don't want to see — you can delete your own posts from the feed, but not anyone else's.
Direct messages
Friends can message each other directly from Chats. Conversations update live, and unread counts show in the sidebar and on the friend's entry.
Endorsements & availability
Endorsements
On any player's profile you can endorse them for specific skills — Serving, Defense, Teamwork, Leadership, Consistency, Sportsmanship, Fitness, Tactics, Communication, and Mentorship. Each endorsement is a simple toggle; you can't endorse yourself.
Availability status
Set your status to Available, Doubtful, or Injured (with an optional note and expected return date) from your profile — this shows up wherever your name appears to teammates and opponents considering a match. Separately, blocking off specific date ranges in your Availability calendar is what powers the shared-availability view used when scheduling a match.
Badges
Badges are achievements awarded automatically — for milestones like your first match, a 10-match win streak, or winning a tournament. They're checked after every completed match, so you never have to claim one manually. Your earned badges appear on your profile in the Trophy Cabinet, sorted by rarity, and the Badges page shows progress toward ones you haven't earned yet.
Quests
Quests are daily and weekly challenges — for example, playing a certain number of matches, winning one, or making a prediction. Progress updates automatically as you play; completed quests award bonus points. Check the Quests page for what's currently active.
Rankings & leaderboards
Rankings shows cross-sport player standings with a division tier — Platinum, Gold, Silver, or Bronze — assigned by percentile within each sport. Leaderboards ranks teams and players by match points across all sports. A separate prediction leaderboard ranks players by points earned from correct match and bracket predictions, filterable by time window and sport.
Seasons
Organizers/admins can define Seasons with a start and end date. While a season is active, standings for that window are tracked separately from all-time stats, and season-end awards are recorded once it closes.
Availability & scheduling
The Availability heatmap shows, at a glance, which players are free on which days across the next few weeks. When you're setting up a match, the Scheduler checks everyone's blocked-off dates and suggests conflict-free time slots automatically.
Venues & pickup games
Venues
The Venue directory lists every venue with its event history, capacity, and courts. Anyone can book an open court slot; adding or editing venues and their courts is an admin-only capability.
Pickup games
Organizers post informal pickup games on the Pickup board; players sign up until capacity is reached (or without a cap, if none is set). Filter by sport to find one near you.
Notifications
In-app notifications appear in your inbox and as a live sidebar badge count. If you enable browser push notifications (prompted the first time you use the dashboard) or use the mobile app, you'll also get push alerts for badges, friend requests, match challenges and results, disputes, new messages, event reminders, and festival updates you've subscribed to.
Profile, privacy & your data
Edit your name, avatar, bio, and preferred sports from Profile. In Settings you control notification preferences and whether your stats are public — with stats set to private, only you can see your detailed match history and badges on your public profile.
Sports Portal's handling of your personal data — what's collected, why, how long it's kept, and how to request an export or deletion — is documented in full in the Privacy Policy. You can request a full data export or delete your account at any time from Dashboard → Privacy, or without signing in via the public data-deletion form. See also the Terms of Service.
Mobile app
The Sports Portal mobile app (iOS/Android, built with Expo) mirrors the web dashboard's core features — live match detail with win probability and predictions, player profiles, badges, leaderboards and rankings, challenges, friends, feed, notifications, goals, recruitment, and sportsmanship ratings — with the same sign-in as the web app. Push notifications on mobile use the device's native notification system and deep-link straight to the relevant screen when tapped.