further modularize the project, by putting the core code into its own modules