Basic List/Detail's app for efficiently loading and displaying Jelly Beans fetched from the open-source Jelly Belly Wiki API. This app is built with Jetpack Compose and uses modern MVI/MVVM archictecture.
- Jelly Beans are efficiently loaded from the Jelly Bean Wiki using Ktor in pages using Paging3 then displayed in a
LazyColumn
. - Jelly Beans are cached locally using Room.
- Jelly Bean images are asynchronsouly loaded using Coil
- The
lightVibrant
colors are extracted from Jelly Bean images using Palette to add vibrancy to the UI. - All Viewmodels, Repository and Networking components are injected using Koin.
- Kotlin (2.1.21)
- Jetpack Compose (BOM: 2025.06.01):
- Coil (3.2.0):
- Jetpack Pallete library (1.0.0)
- Jetpack Room Persistence library (2.7.2)
- Jetpack Paging 3 library (3.3.6)
- Ktor (3.1.2)
- Koin (4.1.0)
- Clone the repository:
git clone [https://github.com/jdavisAR/BeanTown.git](https://github.com/jdavisAR/BeanTown.git) cd BeanTown
- Install dependencies: Make sure the latest version of Android Studio is installed. Downloads can be found here.
Perform a gradle sync by clicking the 'sync' button in the Android Studio menu:
Once the sync completes, make sure the 'App' module is selected and hit run app:
demo-screen-rec.mp4
The Jelly Bean Wiki API appears to enter a hibernation/low power mode, potentially to cut back on operating cost, and API hits are delayed while the backend spins back up (This is my theory based on usage; as this is undocumentated behavior). This should only be an issue for the first page fetch as the paging library runs them one after another. Aubsequent pages will be fetched under ≈ 200 ms. Since, the app caches Jelly Beans for an hour in a local database this shouldn't be much of an issue in practice.