https://codurance.com/2019/11/15/crafting-websites-using-finite-state-machines-part-I/