refactored entire repo for easier development and testing