I built the board from scratch but used the awesome chess.js library by Jeff Hlywa for move validation.