Bookshelf is a modern Android application that lets readers discover titles from the public Gutendex catalogue and create a personal bookshelf stored locally on device. The app demonstrates a clean, testable architecture built with Jetpack Compose, Hilt, Room, and Retrofit.
- 🔍 Search Gutendex with a debounced text field and responsive Compose list.
- 📚 Save or remove books from a Room‑backed bookshelf that persists offline.
- 🗂️ Browse saved titles with dedicated loading, error, and empty states.
- ✅ Unit-tested architecture covering repositories, DAOs, and feature view models (MockK, Turbine, Truth).
| Layer | Technologies |
|---|---|
| UI | Jetpack Compose, Material 3, Navigation Compose, Kotlin Coroutines |
| DI | Hilt |
| Data | Retrofit + Moshi, Room (SQLite) |
| Domain | Clean Architecture style use cases & models |
| Testing | JUnit4, MockK, kotlinx-coroutines-test, Turbine, Truth, Room testing utilities |
app/
└── com.pardip.bookshelf
├── data/ # Retrofit service, Room DAO/entities, repository
├── domain/ # Business models & use cases
├── presentation # Compose UI, view models, navigation, theme
└── BookshelfApp / MainActivity
The layers communicate through interfaces (e.g., IBooksRepository) so UI code stays decoupled from networking and persistence concerns.
-
Prerequisites
- Android Studio Giraffe (or newer)
- JDK 17
- Device or emulator running Android 7.0 (API 24) or higher
-
Clone & build
git clone https://github.com/Pardip235/Bookself.git cd Bookself ./gradlew assembleDebug -
Run the app via Android Studio or
./gradlew installDebug.
Run the unit test suite (data + presentation layers):
./gradlew testDebugUnitTest- Book detail screen with richer metadata
- Offline caching & pagination for search results
- User accounts / cloud sync for the bookshelf
- Additional UI polish and accessibility improvements
Contributions and suggestions are welcome—feel free to open an issue or PR. Happy reading!