![](/assets/codelabs/insplash_1-49753a2ce55aaaf7be040f15de4da966fe978cbc0fa4607df6135ecd7e26e26f.png)
![](/assets/codelabs/insplash_3-0d25df65fdd96b9149b79ede64401fa6481f433381a678a3b930fe34c20ac1d4.png)
![](/assets/codelabs/insplash_2-4def3745102c1970f5389b93b2543bd04044b4a4885d53b055b9a7a6571257ce.png)
Project Overview
Insplash is an application developed in Kotlin language for Android using the Jetpack Compose UI Toolkit to build the interface and consumes the Unsplash API which is a repository of free images.
The app has a photo listing screen with search option, a screen for displaying the photo + information and a screen for listing favorite photos. It has a feature to bookmark photos that will only be saved in the local database for simplicity.
The defined architecture follows recommendations and principles from the official Android documentation and is based on the structure as shown in the image below:
![](https://user-images.githubusercontent.com/2924219/132413978-d6026326-ed73-4956-9e47-0515938a8f96.png)
Architecture & Technologies
UI building with Jetpack Compose
MVVM architecture with ViewModel for repository and UI interaction
Data layer using repository + data sources
Coroutines for asynchronous programming and managing long tasks
HTTP client and API connection configuration with Retrofit
Dependency Injection with Dagger Hilt
Loading and caching images with Glide
Storing API results in local database with Room
Manually implemented result paging engine
Creation of generic auxiliary classes in order to avoid code repetitions (DRY code principles)
Tags
Kotlin
MVVM
Jetpack Compose UI
Coroutines
Repository Pattern
Retrofit
Dagger Hilt
Glide
Room