10 — Patterns

Patterns

Composite UI patterns specific to CPSL products — the live scoreboard widget, match card states, alert system, and the full authentication flow. All built from the shadcn component layer.

Live Scoreboard Widget — Live Component

Live Match

CPSL Premiership
LIVE 72'
CF
CFA
31
RR
RLH
PossessionPossession
54%46%

Half Time

CPSL Cup
HT
DU
DUR
02
TF
TFC

Upcoming

CPSL League
UPCOMING
GF
GFC
VS3:00 PM
WS
WSS
tsx
import { ScoreboardWidget } from "@/components/cpsl/ScoreboardWidget"

<ScoreboardWidget
  home={{ name: "Charlotte FC Academy", shortName: "CFA", score: 3 }}
  away={{ name: "Raleigh Railhawks U19", shortName: "RLH", score: 1 }}
  status="live"
  minute={72}
  competition="CPSL Premiership"
/>

Match Card States — Live Components

Upcoming

Sat 1 Mar·CPSL Premiership
UPCOMING
CF
CFA
3:00 PM
DUR
DU
Matthews Sportsplex

Full Time — WIN

Sat 22 Feb·CPSL Premiership
WIN
CF
CFA
20
RLH
RR

Full Time — LOSS

Sun 16 Feb·CPSL Cup
LOSS
TF
TFC
31
CFA
CF

Draw

Sat 8 Feb·CPSL League
DRAW
GF
GFC
11
WSS
WS

Live Match

·CPSL Cup
LIVE 38'
DU
DUR
01
TFC
TF

Postponed

Sat 1 Feb·CPSL League
PPD
OB
OBK
00
AVL
AC
tsx
import { MatchCard } from "@/components/cpsl/MatchCard"

// Upcoming
<MatchCard
  home={{ name: "Charlotte FC", shortName: "CFA" }}
  away={{ name: "Durham United", shortName: "DUR" }}
  status="upcoming"
  date="Sat 1 Mar"
  kickoff="3:00 PM"
  venue="Matthews Sportsplex"
/>

// Full-time with result
<MatchCard
  home={{ name: "Charlotte FC", shortName: "CFA", score: 2 }}
  away={{ name: "Raleigh Railhawks", shortName: "RLH", score: 0 }}
  status="fulltime"
  perspectiveTeam="home"
  date="Sat 22 Feb"
/>

Alert System — CPSL Semantic Alerts

Auth — Sign In Form

Welcome back
Sign in to CPSL Portal

Forgot password?

or

Error State

Please enter a valid email address

Two-Factor Authentication

We sent a 6-digit code to coach@charlottefc.com

4
8
2

Resend code in 0:42