Index / Work
Scoreboard
Live sports software

Scoreboard

Software for clubs and leagues that run their own football competitions and want to show them live. A pitch-side LED scoreboard lights up the moment a goal is recorded, driven by an operator on a phone at the sideline — the goal-with-the-scorer's-name moment, on a real screen at the ground.

One person runs the match from a phone at the sideline — goals, cards, substitutions, the clock — and the board reacts to every tap. The score and clock live on the server, not on either screen, so the board and the console can each drop and reconnect mid-match without losing anything. Around it sits a full competition — clubs, teams, players, seasons, results — with each operator running only their own.

Core stack.NET · Nuxt · SignalR
SurfacePitch-side LED board + operator console
Pitch-side LED scoreboard showing a live football score, team crests and a count-up match clock
Screenshot soon
The board

A pitch-side scoreboard that updates the instant a goal is recorded.

The board fills a screen at the ground with one match — score, clock, team crests — and reacts the moment the operator records an event. A goal takes over the whole board with the scorer's name; cards and substitutions run along a ticker.

  • Distinct screens for kickoff, live play, half-time, full-time and reconnecting
  • Goal takeover with the scorer's name; a ticker for cards and substitutions
  • Type scales to the board, so proportions hold on any size of LED wall
Screenshot soon
The console

A phone in the operator's hand drives the whole board.

From a dark, sideline-friendly screen, the operator records goals, cards, substitutions and clock changes — one column per club. Every tap updates the board; the console itself holds no state, so it can drop and reconnect without losing the match.

  • One column per club: goal, yellow, red and substitution, with a player picker from the roster
  • Tap to pause; hold to advance the clock through each phase
  • Hold to end the match and confirm the result in one gesture
Screenshot soon
The match model

The clock and the score, kept right by the server.

The score and clock are worked out on the server, not guessed in the browser — so a board that loses power shows the right time the instant it restarts. The score lives on the match itself, and a player who moves clubs or fills two roles in a season is recorded accurately.

  • A pause or half-time holds its place even if the board reloads
  • Impossible moves are refused — no starting twice, no stoppage before kickoff
  • Transfers and dual roles handled by design; goals, cards, subs and shootouts recorded
Screenshot soon
Clubs and leagues

One club, many leagues, kept cleanly apart.

A club and a league are different things, and one club can play in several leagues at once. Each keeps its own data, separated automatically so one operator never sees another's matches — and the separation can't be forgotten on a query, because it isn't written by hand.

  • Every request sees only its own club's and league's data
  • A club competing in many leagues stays correct in each
  • The board device reads a single match without needing an account
How it's built
Backend & API
ASP.NET Core, EF Core, PostgreSQL, C#
Realtime
SignalR, WebSockets
Frontend
Nuxt, Vue, Pinia, Tailwind / Nuxt UI, TanStack Query
Infra & quality
xUnit, Vitest, SQLite in-memory tests