Back to case studies
MatchdayOSRBACSupabaseProduct EngineeringPublic StatsEvidenceVerified

MatchdayOS - End-to-End Soccer Operations

Role-based soccer operations platform for clubs, leagues, referees, parents, and players with live matchday workflows, official reporting, and public competition analytics.

January 1, 2026 · 8 min

At a glance

Outcome
End-to-end matchday operations and official closure workflows with public competition visibility
Ownership
Owned architecture and implementation for a role-based soccer operations product.
Timeline
Jan 2026 - Present
Stack
Next.js 15 · React 19 · TypeScript · Tailwind CSS · Supabase · PostgreSQL · Storage · Vitest · Playwright

Impact metrics

  • 5 operational roles
  • 70 route-level pages
  • 37 business tables
  • 13 automated test files

Why this matters

This case shows modern product engineering across RBAC, typed data, public experiences, and automated tests.

Next.js 15React 19TypeScriptTailwind CSSSupabasePostgreSQLStorageVitestPlaywright

Context

MatchdayOS is a web platform built to run soccer operations end-to-end: club and team administration, participant management, competitions, live matchday execution, public scoring, and official post-match reporting.

It serves five operational audiences in one product model: clubs and academies, leagues, referees, parents or guardians, and players.

Problem

Most soccer operations are fragmented across chat, spreadsheets, and disconnected tools. That breaks accountability, delays decision-making, and creates inconsistency between internal match records and public competition outcomes.

Constraints

  • Different user groups needed strict role boundaries with safe access rules.
  • Matchday actions had to stay reliable under real-time operational pressure.
  • Official reporting required a clear closure flow and traceable event timeline.
  • Public competition pages had to expose standings, schedules, and player stats without leaking private controls.
  • Existing authentication had to work with a custom table-based model, not Supabase Auth.

Approach

I implemented MatchdayOS as a role-based product with centralized route guards across five modes: org-admin, team-admin, referee, representative, and player.

The platform uses Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS, and Supabase (PostgreSQL + Storage) with a typed client layer.

For matchday execution, I built state-driven workflows (scheduled, in_progress, paused, finished, and related transitions), roster verification, live event timeline handling, scoreboard updates, and official report closure.

I also delivered a public competition layer with filters, standings, top scorers, top assists, schedules, and highlights.

To improve product feedback loops, I added UX telemetry for screen_view, click, and validation events through /api/ux-events into ux_events.

Results

  • Role-based operations shipped across 5 workspace modes.
  • 70 route-level pages (page.tsx) implemented.
  • 37 business tables in the primary domain schema.
  • 13 automated test files (Vitest + Playwright) with realistic multi-role seed data.
  • End-to-end matchday flow delivered from setup to official closure and public reporting.

Learnings

  • In operational products, role boundaries are architecture, not UI polish.
  • Matchday reliability depends on explicit state transitions and clear ownership of each action.
  • Public trust improves when internal reporting and public competition views are driven by the same event model.
  • Typed data boundaries and multi-role E2E tests reduce regressions when workflow complexity grows.