moved validate into its own file
packages to help with  command
refactored code again for easier testing

`new` command requires user input which makes it hard for testing.
Im sure there might be a package to help with this