A live football tournament platform for a university club
Pitch is a football tournament management platform we built for XMUM Football Club at Xiamen University Malaysia. Fans get live scores, fixtures, standings, knockout brackets, top scorers and team rosters for every tournament in the club's season; organizers and scorekeepers get the tools to run match day. Its flagship event, the X-CEED 2026 Football Cup, runs at xceed.my.
The XCeed Football Cup
The X-CEED 2026 Football Cup brought eight teams to the XMUM stadium from June 26 to 30, 2026, in a round-robin-plus-knockout format: two groups, then semifinals and a final. Pitch carried the whole event, from the first group fixture to the final, which XMUM FC Team A won 4–3 against El Cuervo FC. The tournament page shows the champion, a ticker of full-time results and tabs for live matches, fixtures, standings, bracket, scorers and teams.
Key features
- Live scores in real time — the home page, tournament pages and scorekeeper panel subscribe to Postgres changes through Supabase Realtime, so a recorded goal appears on public pages without a refresh.
- Three tournament formats — round robin, round robin with a knockout stage, or straight knockout, with brackets that can start anywhere from the round of 32.
- Full match lifecycle — matches move from scheduled to live, halftime and finished, with goals (optional scorer and minute), cards and player stats.
- Group stage to knockout — group standings with tie-break toggles, editable qualifiers, a bracket seeded from the qualifiers and round-by-round scheduling of later rounds as earlier ones finish.
- Scorekeeper links — organizers assign scorekeepers per tournament or match, and each match can have a tokenized, refreshable scoring link that opens a focused panel for that game.
- Organizer back office — a tournament setup wizard, teams and rosters with CSV player import, fixture generation, group assignment and user invitations with a forced password change on first login.
- Shareable pages — generated Open Graph images, per-tournament and per-team metadata and an installable PWA.
Architecture and tech stack
Frontend
Next.js 16.2 with the App Router and React 19.2, TypeScript, Tailwind CSS 4 and Radix UI primitives, organized as a small design system with Storybook stories for match cards, standings tables and the bracket view. A proxy.ts file, Next.js 16's replacement for middleware, rewrites admin. and score. subdomains onto their route groups and guards both surfaces with Supabase Auth.
Data and rules in Postgres
Supabase provides Postgres, Auth and Realtime. The schema has evolved through 38 migrations, and most tournament rules live in the database rather than only in the interface. Row Level Security scopes organizers and scorekeepers to their own tournaments and matches, while triggers enforce minimum squad sizes, complete group assignments, match phases, kickoff times and a finished group stage before knockouts begin. Resetting a bracket goes through a guarded database function that public clients cannot execute, and admin actions are written to an audit log.
Business logic and testing
Lock conditions, match lifecycle transitions, qualifier selection, fixture scheduling and tournament readiness are pure TypeScript modules covered by about 300 Vitest test cases across 20 suites. Playwright covers sign-in, the admin console, tournament pages, responsive layouts and runtime error detection. Critical rules such as minimum squad size and group completeness are enforced at three levels, a pure helper, a server-side gate and a database trigger, so a bug in one layer cannot let bad data through.
Infrastructure
The app deploys to Vercel from main, with a preview deployment for every pull request pointed at a separate staging Supabase project. Migrations are applied before the code that depends on them is merged. Sentry reports errors from client, server and edge runtimes, and a health endpoint pings the database so the project stays active between events.
Our role
We designed and built Pitch: product specs, the design system, the Next.js application, the Supabase schema and RLS policies, the test suites and the deployment pipeline. The repository has more than 380 commits from May to June 2026, including tournament auto-activation, the admin match lifecycle, a unified scorekeeper panel with refreshable links and a round of database hardening.
Related work
For another platform with real-time availability and role-based back offices, see Bronjoy. Pitch reflects our web app development and product design work.



