refactor the project structure, will do further refactor