Welcome to the FlickFusion repository!
FlickFusion is an app built using Kotlin Multiplatform (KMP) that leverages the TMDB API to provide movie, TV show, and series fanatics with the latest information on trending, popular, upcoming, on-air, and many other films.
This kotlin-platform project showcases the integration of cutting-edge technologies and demonstrates a sleek UI design using Compose multiplatform, Ktor for network communication, Koin for dependency injection, Voyager for navigation, coil for image loading and also Clean Architecture.
Supports: Android 📱, iOS📱, Desktop
- A layered Domain-Driven Design architecture:
- Core Layer: Contains Domain and Data modules, forming the heart of the business logic.
- Framework Layer: Includes Framework modules (Network and Persist, implementing Data interfaces) for external interactions.
- Feature Layer: Houses Common-UI and Util modules for shared resources, alongside feature-specific modules (Main, Search, Favorite, Detail, Profile).
- App Layer: The topmost layer, orchestrating the entire application.
- Key Concepts:
- Domain Driven design
- Modularization
- Dependency Inversion
- MVVM Architecture
- UDF (Unidirectional Data Flow)
- Compose Multiplatform - 100% compose based.
- Kotlin Multiplatform (KMP) - Enables sharing code across multiple platforms, such as Android, iOS, and the web, ensuring maximum code reuse and efficiency.
- Coroutines & Flow - Provides a framework for asynchronous programming and handling streams of data, allowing for efficient, non-blocking code execution.
- Ktor - A Kotlin framework for building asynchronous servers and clients in connected systems, used for handling network operations and API requests.
- Koin - A lightweight dependency injection framework for Kotlin, making it easy to manage dependencies and build testable and maintainable applications.
- Coil3 - An image loading library for Android backed by Kotlin Coroutines, offering efficient image loading and caching.
- Voyager - A multiplatform navigation library for KMP, simplifying the implementation of navigation within the app.
- Lottie - Library for rendering Adobe After Effects animations natively on mobile and web, enhancing the app's UI with high-quality animations.
- Kotlin Serialization - Library for JSON serialization and deserialization, enabling seamless handling of JSON data.
- kotlin.test - Testing framework for Kotlin, used for writing unit tests to ensure the app's functionality and reliability.
- mockk - Mocking library for Kotlin, used for creating mock objects in unit tests to simulate the behavior of real objects.
- Compose Testing - Provides tools and utilities for testing Compose UI components, ensuring the app's UI is functioning as expected.
- turbine - A testing library for Kotlin Flow, used for testing asynchronous code and handling streams of data in unit tests.
- Robolectric - Testing framework for Android, used for running unit tests on Android devices and emulators.
Obtain an API key from TMDB and add it to your local.properties file:
apiKey=your api key
accountId=your account id
- Search module
- persist data
- Error Handling
If you want to contribute to this, you're always welcome!
This project is licensed under the MIT License - see the LICENSE file for details.