I pretty much just rebuilt what Lichess did perfectly well already.

Points at a game URL or ID and streams moves back over server-sent events, reconstructing the full board position and UCI move history for each tracked game. For an authenticated Board API game, moves can be filled in by clicking two squares or typing UCI notation and are submitted server-side, with Lichess validating legality.