initial
initial setup and refactor