freeze-frame: can you read an nba possession before it resolves?
a game built on real 2015-16 sportvu player-tracking data — freeze a possession 2-4 seconds out, call the outcome, then watch it play forward against an elo ladder that rates the plays too.
freeze-frame is a small game with one question: given a real nba possession, frozen a couple seconds before it resolves, can you call what happens next? made shot, missed shot, turnover, foul. you stake a confidence level, lock in a guess, then watch the actual play roll forward on the real player-tracking data.
the data is 2015-16 sportvu, 25hz x/y for every player and the ball, from the season the nba's optical tracking was briefly public. so a freeze frame is a genuine short clip that stops right before the outcome, not a still image, anchored in the tracking stream by game clock and walked back a randomized 2.5-4 second lead of live play. about half of candidate plays survive that extraction, which is plenty for a season.
the part i like most is that the plays are elo-rated too, not just the guessers. a play that fools almost everyone gains rating, so the ladder also quietly surfaces which possessions are structurally deceptive versus basically free reads. anti-cheat took real care for something this simple: outcome and animation only serialize after you've committed to a guess, and play order is dictated server-side so you can't reroll a bad draw.
built on next.js and postgres, with a python pipeline that joins the tracking archives to the season play-by-play and seeds the db. free fan project, not affiliated with the nba.
it's live at freeze-frame-five.vercel.app. 37 visitors and 98 page views in the first month, mostly on mobile, mostly people in the us, with one clean spike the day i posted it here.
Live projectfreeze-frame-five.vercel.appFreeze FrameAn interactive archive for exploring the moment NBA games changed direction, possession by possession.Explore the project