add UserFactory and prepare app to save user preference