Skip to content

Clean MVI architecture app for movie recommendations with package structure by feature. Including Jetpack Compose, Kotlin coroutines/flow, koin, ktor, turbine, mockk and more.

Notifications You must be signed in to change notification settings

AdamDawi/Popcorn-Picks

Repository files navigation

Popcorn Picks

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.

Android Unit Tests Android Instrumentation Tests

⭐️Features

🎬 Movie Discovery & Recommendations

  • 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.

📝 Onboarding & Genre Selection

  • 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.

📅 Movie Details

  • 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.

👤 User Profile & Liked Movies

🚧 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.

⚙️Technologies

📱App:

  • 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.

✅Testing:

  • 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.

Here are some overview pictures:

🚧 Work in Progress...

Image Image Image Image Image

Animations:

🚧 Work in Progress...

Image Image Image Image

📈 Recommendation System Diagram

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.

1. Full Diagram

Image An overview of the entire recommendation system, highlighting the interactions between different components.

2. Onboarding Section

Image This section covers the onboarding process, where users are introduced to the system and initial preferences are set.

3. Recommendations Section

Image This part explains how the recommendation system generates personalized suggestions for users based on their preferences.

4. User Interactions Section

Image

This section illustrates how users interact with the system and how their feedback influences future recommendations.

Installation

  1. Clone the repository:
git clone https://github.com/AdamDawi/Popcorn-Picks
  1. Open the project in Android Studio.
  2. Be sure the versions in gradle are same as on github
  3. Get the TMBD API Key
  4. Add the API key to your local gradle.properties file:
API_KEY="your_api_key_here"

Requirements

Minimum version: Android 7.0 (API level 24) or later📱

Target version: Android 14 (API level 34) or later📱

Author

Adam Dawidziuk🧑‍💻

About

Clean MVI architecture app for movie recommendations with package structure by feature. Including Jetpack Compose, Kotlin coroutines/flow, koin, ktor, turbine, mockk and more.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages