Skip to content

πŸŽ₯ RandomBoxd - A Kotlin Multiplatform app that picks a random movie from a Letterboxd user's watchlist or custom lists. Built for Android & iOS with Jetpack Compose. πŸΏπŸ“±

License

Notifications You must be signed in to change notification settings

Nacchofer31/RandomBoxd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

45 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ₯ 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! πŸŽ¬πŸ€

About

πŸŽ₯ RandomBoxd - A Kotlin Multiplatform app that picks a random movie from a Letterboxd user's watchlist or custom lists. Built for Android & iOS with Jetpack Compose. πŸΏπŸ“±

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published