Fantastic job! I see a bundle.js -- did you use webpack to bundle and cross-compile the typescript? What about the server? My guess is you're using websockets or some equivalent for the communication with the server, right? Still, keeping all that in sync sounds challenging. Especially for a player who is currently trying to make a move while everything is still falling down from a previous match made by another player. Fantastic work. Would love to hear some of the technical details.