Standings Preview, built like real tournament software

A complete rewrite of how live and pre-tournament standings render on mobile. Clear column labels, stage-aware banners, per-pool grouping, and a live indicator while play is running. Doubles round-robin and individual-rotating mixers both consume the same surface.

The problem we set out to fix

The old standings view used cryptic abbreviations ("PS / SD / PE / PD") that competing pickleball apps map to different things — first-time organizers spent the first 30 seconds guessing. Pre-tournament views were either empty or showed a wall of zeros that everyone misread as "0–0". And in multi-pool divisions, everyone was mashed into one flat list without any sense of who was in which pool.

This release makes the standings view legible at every stage of the tournament lifecycle and on every supported format.

What you get

Clear column labels

Rank, Seed, Player, W, L, PF, PA, +/-, Win % — the same labels every other tournament app uses.

Tap-for-legend (ⓘ)

An info chip in the division header opens a bottom-sheet defining every column and the tie-breaker rule.

Stage-aware banner

Four contextual banners walk the user through the tournament lifecycle. See below.

Per-pool grouping

Multi-pool divisions render one section per pool with a "Top N advance" chip; the All filter keeps the flat view.

Live indicator

Green pulsing dot and "updates every 30 s" message during in-progress play.

Tap-to-sort

Tap any column header to sort by it; second tap reverses, third tap clears back to the natural Rank → Seed order.

Doubles + mixer parity

Round-robin doubles divisions and individual-rotating mixers both consume the same standings_state contract.

Stage-aware columns

Pre-tournament views hide the W/L/PF/PA result columns entirely so the preview reads as a clean roster, not a wall of zeros.

The four stages

The mobile card reads standings_state from the backend and tailors both the banner and which columns render:

pre_schedule Registration open · seeding not yet assigned

scheduled Schedule published · matches start soon

in_progress Live · updates every 30 seconds

complete Final standings · pool play closed

Bench-leak fix + REGISTERED · UNASSIGNED chip

Two production bugs shipped fixed alongside the redesign:

  • Bench leak: in doubles divisions, removing a player to the bench used to leave them showing in the live standings preview. The backend now correctly filters orphan registrations by mode (IR-only fallback) and excludes tournament_removed shell teams.
  • Stale REGISTERED badge: the same removal flow used to leave a green REGISTERED badge on a division the player had been removed from. The mobile app now consumes a new /my_status endpoint that returns authoritative per-division placement ('assigned' vs 'unassigned'). The division selector renders an amber REGISTERED · UNASSIGNED chip on divisions where you're registered but currently benched — so paid players never look like they were never signed up.

Performance

Before the rewrite, mobile fetched /teams + /participants for every division to compute "which divisions am I registered for" — N×2 requests, growing linearly with field size. Now it's a single GET /api/tournaments/:id/my_status call that returns the full per-division placement summary. For a 24-division tournament that's a 48× reduction in network round-trips on the tournament screen.

Available on

Every doubles round-robin division and every individual-rotating mixer division. No tier gate, no toggle — turned on for everyone the moment you update the mobile app.