I had coded something similar for TADHack 2018[0] we didn't get it as cleanly as this but we got it working enough to demo. I haven't had a good chance to post our original code yet though. Looks nice, would love to know about the back-end stack used. We used Flask / MongoDB for ours.
[0] http://blog.tadhack.com/2018/03/12/tadhack-mini-orlando-2018...
Ours is Poll IO (terrible name I know...)