project structure

separate cli from functionality