init setup and boilerplate