I like your prefs and provider setup. But other things are pretty immature tho. There is no default setup for api calls error handling, no coroutine setup in BaseViewModel, no retrofit+coroutines setup, no dependency injection setup, you use MVP, but call your presenter a ViewModel