- Shared Compose-based UI
- Reactive UI with Kotlin flows as data sources
- Compose-based animated visual transitions between screens
- Centralized UI styling, including custom fonts
- Dependency injection (Koin)
- Network communication (Ktorfit)
- Database storage (SqlDelight)
- Key-value storage for things like user preferences (multiplatform-settings)
- Single source of truth with remote-local data synchronisation (Store5)
- Remote images (Coil)
- MVVM/MVI with view models (Orbit MVI)
- Shared diagnostic logging (Napier)
It works reliably on both Android and iOS (other platforms are out of scope of this project).
You can use it as a template for kick-starting a new mobile app.
The app features artworks by Calude Monet sourced from the Art Institute of Chicago's API. Artwork information received from network is stored locally in an SQL database (SqlDelight library), and images themselves are cached on disk and in memory (Coil library), both as thumbnails and header images.
home screen features a grid of 100 square artwork tiles with images and one-line titles (ellipsized if needed). Tapping a tile on the home screen brings a user to the artwork details screen featuring a larger image, title, author, date, type, and description. Both home and the details screens include favorite icons that enable the user to add an artwork to their favorites. Favorites screen is invoked by tapping the top-right icon on the home screen. You can un-favorite artworks there, and the list gets updated with a nice animation.
Going between screens includes transitions that animate images and titles.