← All projects

Rivals League

Esports tournament platform

Rivals League project screenshot

My role: Design, full-stack development and operations

Rivals League is a tournament platform for competitive gaming — leagues, brackets, match operations and payments in one product. I built it end to end: frontend, API, data model, payment flow and the Discord bot that runs match operations.

The problem

Running an esports league involves a surprising amount of manual work: registrations, seeding, match check-ins, score reporting, disputes and payouts. Most organizers juggle this across spreadsheets, Discord DMs and generic bracket tools that don't talk to each other. Having administered tournaments professionally at G-Loot, I knew exactly where that workflow breaks down — so Rivals League was designed around removing those manual steps.

What I built

The platform is a React frontend (Vite) backed by an Express API on Supabase, with Stripe handling entry fees and payments. Editorial content — news, league pages, rules — lives in a Strapi CMS so it can be updated without deploys, and a separate stats backend aggregates match results into player and team statistics. The piece that ties it together is a Discord bot built with discord.js: teams check in, report scores and get bracket updates directly in Discord, where players already are, and the bot syncs everything back to the platform.

Why it's built this way

Match operations live in Discord because that's where esports teams actually communicate on match day — asking them to switch tabs to a website mid-series loses them. Keeping the API as a thin Express layer over Supabase keeps the data model in one place, and Stripe means the money flow is auditable rather than handled over Swish screenshots. The stats backend is separate so heavy aggregation never slows down match-day traffic.

Highlights

  • Full tournament lifecycle: registration, seeding, brackets, results, payouts
  • Discord bot for match check-ins and score reporting, synced to the platform
  • Stripe-powered entry fees and payments
  • Strapi CMS for self-serve editorial content
  • Separate stats backend for player and team statistics

Tech stack

  • React
  • TypeScript
  • Vite
  • Express
  • Supabase
  • Stripe
  • Discord.js
  • Strapi
Visit Rivals League