The app is written entirely in Kotlin. Used Couroutines for asynchronous and non-blocking code.
The architecture is built around Android Architecture Components.
Logic kept away from Activity and moved it to ViewModel.
Data is observed using LiveData and used Kotlin View Binding Extension to bind UI components in layouts to the app's data sources.
For loading and diaplaying small chunks of result data used Paging
Used Dagger2 for dependency injection and heavily relied on dagger-android to abstract away boiler-plate code.
Retrofit for communication with server side.
OkHttp for HTTP application network.
Gson for deserialization to convert JSON into Objects.
Glide for image loading.
Timber for logging.
Mockito for unit testing.
Espresso for instrumented unit testsing.