RandomBoxd

๐ŸŽฅ RandomBoxd ๐Ÿฟ

RandomBoxd is a Kotlin Multiplatform project designed to fetch a random movie from a Letterboxd user’s watchlists or custom lists. This app is built for Android and iOS devices. ๐Ÿ“ฑ๐ŸŽฌ

โœจ Features

  • ๐ŸŽฒ Fetch a random movie from a Letterboxd user’s watchlist or custom lists.
  • ๐Ÿ“ฑ Supports Android and iOS platforms.
  • ๐Ÿ”— Seamless deep linking with the Letterboxd app.
  • ๐Ÿ” Intuitive user search functionality.
  • ๐Ÿท๏ธ Stores and displays previously entered UserNames locally via Room, shown as tappable tags for quick reuse or deletion.

๐Ÿ—๏ธ Project Architecture

This project follows the Clean Architecture principles to ensure a scalable and maintainable codebase.

๐Ÿ›๏ธ KMP Structure

  • /composeApp is for code that will be shared across your Compose Multiplatform applications.

    • commonMain contains code common for all targets.
    • Other folders include platform-specific code (e.g., iosMain for iOS-specific code like CoreCrypto integration).
  • /iosApp contains iOS applications.

    • Even if you’re sharing UI with Compose Multiplatform, this folder is the entry point for the iOS app.
    • This is also where you can add SwiftUI code if needed.

๐Ÿ”ง Tech Stack

  • Kotlin Multiplatform Mobile (KMP) – Shared logic for Android and iOS.
  • Jetpack Compose – UI for Android.
  • Ktor – Network requests.
  • Coroutines & Flow – Asynchronous programming.
  • Koin – Dependency Injection.
  • Coil – Image loading.
  • Room – Database.
  • Navigation Compose – Jetpack Compose navigation.
  • Kotlinx Serialization – JSON serialization.
  • Spotless – Code formatting.
  • Junit5 – Unit testing.
  • Turbine – State testing.
  • Jacoco – Code coverage.

๐ŸŒ Localization Support

RandomBoxd is built with full localization support, allowing the app to be translated into any language.

  • ๐Ÿณ๏ธ Uses Kotlin Multiplatform’s localization tools for seamless translations.
  • ๐Ÿ“ Supports dynamic text updates based on user preferences.
  • ๐ŸŒ Easily adaptable for different regions and languages.

โœ… Testing

RandomBoxd’s codebase is tested with:

  • ๐Ÿงช JUnit5 for unit tests.
  • ๐ŸŒŠ Turbine for verifying Kotlin Flow emissions and state changes.
  • ๐Ÿ”Œ Ktor Client Mock for mocking and testing network requests.
  • ๐Ÿ“ˆ Jacoco to measure and ensure code coverage across the project.

๐Ÿ“ธ Screenshots

๐Ÿค– Android

๐Ÿ iOS

๐Ÿ” Search user lists & Deeplinking

โœ๏ธ See Previous UserName Prompts

๐Ÿš€ Getting Started

  1. Clone the repository:

    git clone https://github.com/Nacchofer31/RandomBoxd.git
  2. Open the project in Android Studio (latest version with KMP Plugin).

  3. Run on an Android Emulator or an iOS Simulator.

  4. Run spotless commmands:

    ./gradlew :composeApp:spotlessApply 
  5. Generate jacoco reports:

    ./gradlew :composeApp:jacocoTestReport
  6. Start selecting random movies from Letterboxd lists! ๐ŸŽž๏ธ

๐Ÿค Contributing

Feel free to open issues or submit pull requests to improve the project. ๐Ÿ› ๏ธ

๐Ÿ“œ License

This project is licensed under the MIT License.


Enjoy RandomBoxd and never struggle to pick a movie again! ๐ŸŽฌ๐Ÿ€

Visit original content creator repository https://github.com/Nacchofer31/RandomBoxd

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *