A modern, modular, and robust movie discovery application built with Clean Architecture, best practices, and a focus on scalability and maintainability.
Splash Screen | Welcome Screen | Home Screen(1) | Home Screen(2) |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
List Screen(1) | List Screen(2) | Details Screen(1) | Details Screen(2) |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Settings Screen(1) | Settings Screen(2) | Search Screen(1) | Search Screen(2) |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Splash Screen | Welcome Screen | Home Screen(1) | Home Screen(2) |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
List Screen(1) | List Screen(2) | Details Screen(1) | Details Screen(2) |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Settings Screen(1) | Settings Screen(2) | Search Screen(1) | Search Screen(2) |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Share Content(1) | Share Content(2) | Error Screen | Error Screen | Auth Screen |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
Details Feature | List Feature | Search Feature |
---|---|---|
![]() |
![]() |
![]() |
Movie Discovery App allows users to explore, search, and discover movies with a beautiful, fast, and offline-first experience. The app is designed with a strong focus on modularity, scalability, and clean code principles.
- Multi-language support with instant language switching (app & API language)
- Light, dark, and system theme selection with a single tap
- Explore movies by category: Popular, Now Playing, Top Rated, Upcoming
- Powerful search for movies, series, and actors with pagination
- Offline-first experience: fast loading, caching, and pagination (Paging 3)
- Seamless login with token-based authentication (web approval flow)
- Persistent login: token stored securely, auto-login if valid
- Easy logout with a single tap
- Settings screen for theme, language, and account management
- Share movie details with friends
- Error handling with user-friendly messages
- Smooth transitions and animations for enhanced user experience
- Shimmer loading animation on every screen for network data
- Clean Architecture with strict separation of concerns
- Modularized project structure (feature & core modules)
- Type-safe, encapsulated navigation via navigation-contracts
- Centralized, unified database (Room)
- AppException: unified error handling, surfaced to UI via core-ui
- Offline-first data strategy for home/list screens (cache, fast load)
- Pagination in search & list screens
- Language & API key as interceptors for network requests
- Enum-based language architecture: add a new language with a single line
- UI contracts: consistent, maintainable screen logic
- Best practices applied, pitfalls avoided
- Shimmer loading animation for all network-fetched data (user always sees a polished loading state)
- Smooth transitions between screens and UI states
- Kotlin
2.1.0
- Jetpack Compose (UI)
BOM 2025.06.01
- Hilt (Dependency Injection)
2.56.2
- Room (Database)
2.6.1
- Retrofit (Networking)
2.11.0
& OkHttp4.12.0
- Paging 3 (Pagination, offline-first)
3.2.1
- DataStore (Preferences)
1.1.7
- Kotlin Coroutines & Flow (Async, reactive)
1.9.0
- Coil (Image loading)
3.2.0
- JUnit
4.13.2
, Mockito5.8.0
, Espresso3.6.1
(Testing) - Modular Gradle setup
app/
core-domain/
core-ui/
core-network/
core-database/
core-preferences/
core-android/
feature-movies/
feature-auth/
feature-splash/
navigation-contracts/
app
: Application entry, DI setup, navigation host, global configcore-domain
: Business logic, domain models, contractscore-ui
: Shared UI components, themes, error UI, UI contractscore-network
: Network layer, API config, interceptorscore-database
: Room DB, DAOs, cachingcore-preferences
: DataStore, user preferences (theme, language, token)core-android
: Android-specific utilities, base ViewModelfeature-movies
: Home, list, details, search screens & logicfeature-auth
: Authentication (login, logout, token flow)feature-splash
: Splash screen, initial loadingnavigation-contracts
: Type-safe navigation contracts, decoupled navigation
- Clean Architecture: Strict separation (domain, data, presentation)
- MVI Pattern: Unidirectional data flow, UI contracts for all screens
- Dependency Injection: Hilt for scalable, testable DI
- Modularization: Each feature/core is a separate Gradle module
- Offline-First: Caching, fast load, pagination
- Type-Safe Navigation: navigation-contracts for decoupled, safe navigation
- Unified Error Handling: AppException, surfaced to UI
- Best Practices: Naming, file structure, code quality
- β Multi-language support (add new language via enum)
- β Offline-first home/list screens
- β Unified error handling
- β Modular navigation
- π Profile feature (planned)
- π Push notifications (planned)
- π Favorites and rating feature for logged-in users (planned)
- π Comprehensive testing (planned)
- π Onboarding flow with ViewPager2 (planned)
π Dive into the Full Technical Deep-Dive β
Curious about how everything is built? Discover detailed architecture explanations, real-world code examples, and the decisions that power this project. If you want to see the structure and implementation up close, this is the place to start!
If you want to see the full experience of the application in action, check out the video below:
π Watch Full Demo on YouTube Β»
Experience the app firsthand on your Android device. You can download the latest release APK directly from the GitHub Releases page.