add a generic createProject function