Inspiration

Watching a game live is visceral; understanding it afterward is surprisingly flat. A broadcast picks one camera angle and a box score gives you the outcome, but neither lets a hardcore fan revisit how a possession developed: where the shot came from, who had the ball, what lineup was on the floor, and how the game state changed.

Court Lens is our answer: an explorable second screen that rebuilds a basketball replay spatially, with honesty about what the data knows and what it does not.

What it does

Court Lens turns a Duke–UNC game sequence into a three-minute interactive replay on a 3D court. Fans can:

  • replay possessions from a scrubber instead of waiting for a broadcast highlight;
  • see reviewed shot locations, ball states, target baskets, scoring runs, lead changes, assists, rebounds, and substitutions;
  • follow an animated scoreboard, game clock, possession cards, and the five active players for both teams;
  • inspect live PTS/REB/AST/FG rows as events occur; and
  • distinguish reviewed, inferred, and unobserved motion rather than being shown fabricated certainty.

The key interaction is simple: move through a game moment and see the action, the shot context, and the lineups together.

How we built it

We built Court Lens with Next.js, React, TypeScript, Three.js/WebGL, Supabase-backed college-basketball data, and Cloudflare. A deterministic reconstruction builder combines play-by-play, shot-chart anchors, a seed fixture, and an explicit review manifest into replay keyframes.

The renderer validates player identity, possession, ball ownership, court bounds, shot anchors, and camera cuts before it draws anything. The result is a 3D tabletop court with animated ball flight, near-sideline substitution handoffs, a broadcast-style scoreboard, and both teams' on-court lineups.

How we used Codex and GPT-5.6

The existing Low Post product had game data and a basketball audience before Build Week. Court Lens was the new Build Week surface. We collaborated with Codex and GPT-5.6 to inspect the existing data and tracking artifacts, design the semantic replay model, implement the reconstruction pipeline and WebGL presentation, write red/green regression tests, and run repeated visual/browser QA.

The biggest lesson from that collaboration was that a replay should not pretend uncertain data is precise. Earlier prototypes could make a player teleport across a camera cut or let a ball float without an owner. Codex helped us replace that with immutable player identities and explicit reviewed/inferred/unobserved states. When the evidence does not support continuous motion, Court Lens shows an honest gap instead of inventing one.

Challenges we ran into

Basketball broadcast footage is not a tracking feed. It changes camera angles, hides players, and does not give us all ten locations on every frame. We solved for trust first: reviewed shot anchors stay grounded, passes have named endpoints, unknown ball states disappear, and camera cuts do not interpolate fake motion.

The other challenge was clarity. A 3D court can look impressive while still being hard to follow. We iterated toward a single live-action spotlight, readable player labels, event cards, and lineups/stat rows that explain the play without covering it.

Accomplishments we are proud of

  • A three-minute, deep-linkable Duke–UNC replay with verified event and shot context.
  • An interaction model that explains game flow rather than just replaying a highlight.
  • A transparent reconstruction system that labels uncertainty instead of hiding it.
  • Launch coverage across TypeScript, 2,027 automated tests, production build validation, and browser replay tests.

What we learned

For sports visualization, visual polish matters—but data provenance matters more. The most compelling version of this product is not the one that animates the most; it is the one fans can trust.

What is next for Court Lens

Next we want to add more reviewed games, richer computer-vision inputs, spacing and play-type layers, personalized team views, and native iPad/AR modes. The core principle will stay the same: give fans a richer view of the game without claiming more certainty than the data earns.

Built With

Share this project:

Updates