Popcorn Picks is a movie recommendation app that turns discovery into a game. Pick your favorite genres, scratch to reveal tailored film suggestions, and save the ones you love. Built with Kotlin, Jetpack Compose, and the TMBD API, it features smooth animations, interactive UI effects, and a personalized recommendation loop.
-
Scratch Card System: Reveal movie recommendations one at a time by scratching off the interactive card.
-
Personalized Suggestions: Movies are recommended based on your chosen genres and previously liked films.
-
Reroll Option: Not interested in the current recommendation? Use reroll to get a new one instantly.
-
First-Time Setup: Users must select at least two genres to start.
-
Data Fetching: For each selected genre, up to 60 movies are fetched to choose from.
-
Dynamic Borders Animation: A red border animation highlights selected genres during setup.
-
Smooth Scrolling Effect: The header image smoothly transitions as you scroll through movie details.
-
Additional Information: View detailed movie info, including rating, released date, description and more.
-
Shimmer Effect: A loading animation enhances the user experience while fetching images.
🚧 Work in Progress...
- This feature is not yet implemented. Development is in progress, and the User Profile screen will include a list of saved movies and more features in future updates.
-
Kotlin & Jetpack Compose - Modern UI toolkit for declarative UI design.
-
MVI Architecture - Organized with package structure by feature for maintainability.
-
Ktor - Network client for fetching movie data from TMDB API.
-
Room Database - Stores user-selected genres, liked movies and cached movie recommendations.
-
Koin - Dependency injection
-
Coil - Efficient image loading and loading states.
-
Timber - Logging utility.
-
Gson Serialization - Data parsing.
-
JUnit4 - Utilized to write and execute unit tests.
-
Kotlin Coroutines Test - Used to test asynchronous code that utilizes coroutines.
-
Hamcrest & Truth - Assertion libraries for test validations.
-
MockK - Mocking framework for unit tests.
-
Turbine - Used for testing Kotlin Flow emissions.
-
Ktor Client Mock - Mock API responses.
-
Compose UI testing - Used to UI testing and end-to-end testing.
🚧 Work in Progress...
🚧 Work in Progress...
Below is a visual representation of how the recommendation system works. The diagram is divided into three main sections: Onboarding, Recommendations, and User Interactions. To make it easier to follow, the full diagram is shown first, followed by a closer look at each section.
An overview of the entire recommendation system, highlighting the interactions between different components.
This section covers the onboarding process, where users are introduced to the system and initial preferences are set.
This part explains how the recommendation system generates personalized suggestions for users based on their preferences.
This section illustrates how users interact with the system and how their feedback influences future recommendations.
- Clone the repository:
git clone https://github.com/AdamDawi/Popcorn-Picks
- Open the project in Android Studio.
- Be sure the versions in gradle are same as on github
- Get the TMBD API Key
- Add the API key to your local
gradle.properties
file:
API_KEY="your_api_key_here"
Minimum version: Android 7.0 (API level 24) or later📱
Target version: Android 14 (API level 34) or later📱
Adam Dawidziuk🧑💻