Love this! a testament to what can be done with pure JS no frameworks, how does the sync work? I'm assuming websockets for the transport layer, does the backend store the full state of the image being drawn or is it sort of p2p/client owned?
Yup, everything's via websockets. The backend stores the draw-commands in-memory, so the clients can restore the drawings by replaying the commands client side. No peer to peer stuff, wouldn't want to expose IP addresses or overcomplicate things :)