split the project into two for better learning