refactor the project loading to respond to hash change