Dependency inversion and proper Python packaging
This project needs to be adapted to be packaged properly according to https://packaging.python.org/tutorials/packaging-projects/ and https://stackoverflow.com/questions/1471994/what-is-setup-py
This also requires dependency inversion. Instead of the current approach where the user copies the user folder content and a set of hook functions is expected and called, the user should instead pass an instance of a special base object which contains abstract functions. All of those abstract functions are the expected hook functions.