{"id":31545447,"url":"https://github.com/victorkabata/notflix","last_synced_at":"2025-10-04T14:49:10.914Z","repository":{"id":38240727,"uuid":"357360151","full_name":"VictorKabata/Notflix","owner":"VictorKabata","description":"My Kotlin Multiplatform playground that is NOT a clone of netflix","archived":false,"fork":false,"pushed_at":"2025-04-16T06:04:29.000Z","size":403886,"stargazers_count":641,"open_issues_count":3,"forks_count":97,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-04-16T07:47:59.633Z","etag":null,"topics":["desktop-compose","jetpack-compose","koin","kotlin","kotlin-coroutines","kotlin-multiplatform","ktor-client","multiplatform-settings"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VictorKabata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-04-12T22:49:41.000Z","updated_at":"2025-04-15T13:07:51.000Z","dependencies_parsed_at":"2023-10-05T00:52:07.089Z","dependency_job_id":"b9594653-8e33-4bc1-85de-15c2fa0dbe03","html_url":"https://github.com/VictorKabata/Notflix","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VictorKabata/Notflix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VictorKabata%2FNotflix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VictorKabata%2FNotflix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VictorKabata%2FNotflix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VictorKabata%2FNotflix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VictorKabata","download_url":"https://codeload.github.com/VictorKabata/Notflix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VictorKabata%2FNotflix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278328163,"owners_count":25968899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["desktop-compose","jetpack-compose","koin","kotlin","kotlin-coroutines","kotlin-multiplatform","ktor-client","multiplatform-settings"],"created_at":"2025-10-04T14:49:06.672Z","updated_at":"2025-10-04T14:49:10.906Z","avatar_url":"https://github.com/VictorKabata.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Notflix\n\n\u003c!-- \u003cp align=\"center\"\u003e\u003cimg src=\"assets/logo_notflix.png\" alt=\"NotFlix\" height=\"31px\"\u003e\u003c/p\u003e --\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg  src=\"https://img.shields.io/badge/-KOTLIN-E50914?logo=kotlin\u0026logoColor=white\u0026style=for-the-badge\"\u003e\n\u003cimg  src=\"https://img.shields.io/badge/-ANDROID-E50914?logo=android\u0026logoColor=white\u0026style=for-the-badge\"\u003e\n\u003cimg  src=\"https://img.shields.io/badge/-IOS-E50914?logo=ios\u0026logoColor=white\u0026style=for-the-badge\"\u003e\n\u003cimg  src=\"https://img.shields.io/badge/-DESKTOP-E50914?logo=desktop\u0026logoColor=white\u0026style=for-the-badge\"\u003e\n\u003c/p\u003e\n\nNotflix is a [Kotlin Multiplatform]((https://kotlinlang.org/docs/multiplatform.html)) app that demonstrates cross-platform development using a single codebase and [Compose Multiplatform](https://www.jetbrains.com/lp/compose-mpp) for a consistent UI across Android, iOS and desktop(Linux, Windows \u0026 macOS) devices.\n\nIt consumes the TMDB API to fetch movie data and display it on all platforms.\n\n\u003e [!note]\nThis repository is under constant development/refactor since the project is designed to showcase the basics of Kotlin/Compose Multiplatform and is not intended for production use\n\n\n## Table Of Content\n\n- [Screenshots](##screenshots)\n- [Getting Started](##getting-started)\n  - [Prerequisite](###prerequisite)\n  - [Installation](###installation)\n- [Libraries](##libraries)\n- [Related Resources](##related-resources)\n  - [Videos 📽️](###videos-️)\n  - [Articles/Blogs 📖](###articlesblogs-)\n  - [Sample Projects 🤖](###sample-projects-)\n\n## Screenshots\n\n## Android\n\n\u003cimg src=\"screenshots/android1.png\" width=\"200\"/\u003e  \u003cimg src=\"screenshots/android2.png\" width=\"200\"/\u003e \u003cimg src=\"screenshots/android3.png\" width=\"200\"/\u003e \u003cimg src=\"screenshots/android4.png\" width=\"200\"/\u003e \u003cimg src=\"screenshots/android5.png\" width=\"200\"/\u003e \u003cimg src=\"screenshots/android6.png\" width=\"200\"/\u003e\n\n## iOS\n\n\u003cimg src=\"screenshots/ios1.png\" width=\"200\"/\u003e  \u003cimg src=\"screenshots/ios2.png\" width=\"200\"/\u003e \u003cimg src=\"screenshots/ios3.png\" width=\"200\"/\u003e \u003cimg src=\"screenshots/ios4.png\" width=\"200\"/\u003e \u003cimg src=\"screenshots/ios5.png\" width=\"200\"/\u003e \u003cimg src=\"screenshots/ios6.png\" width=\"200\"/\u003e\n\n## Desktop\n\n\u003cimg src=\"screenshots/desktop1.png\" width=\"640\"/\u003e \u003cimg src=\"screenshots/desktop2.png\" width=\"640\"/\u003e\n\n\n## Getting Started\n\n### Prerequisite\n\n- [JDK](https://www.oracle.com/java/technologies/downloads/?er=221886) - Required for Android development.\n- [Android Studio](https://developer.android.com/studio) - For Android development and project management.\n- [Xcode](https://apps.apple.com/us/app/xcode/id497799835) - For iOS development and project management.\n- [Kotlin Multiplatform Plugin](https://kotlinlang.org/docs/multiplatform-plugin-releases.html?_gl=1*130bj1*_gcl_au*MTk1MDYwOTc4MS4xNzIxNjMzNjAy*_ga*MTM4NzQwMTA3NS4xNjk3NDg5MzQ5*_ga_9J976DJZ68*MTcyMzExNTUwNy43Ni4xLjE3MjMxMTU1OTYuNDQuMC4w#release-details)- In Android Studio, select Settings/Preferences | Plugins, search Marketplace for Kotlin Multiplatform, and then install it.\n\n### Installation\n- Clone the repository from GitHub:\n```bash\ngit clone https://github.com/VictorKabata/Notflix.git\n```\n\nTo install the __android__ application:\n- Open the project in Android Studio and connect your android device/emulator.\n- Configure the TMDB API key in the `local.properties` file.\n```properties\napi_key=\u003cYOUR TMDB API KEY\u003e\n```\n- Sync the Gradle project to download dependencies.\n- Run the gradle command below from Android Studio terminal to build and install the android application on the connected android device/emulator:\n```bash\n./gradlew installDebug\n```\n\nTo install the __iOS__ application:\n- Open the __iOS__ project from XCode and connect your iOS device/emulator.\n- Run the project.\n\nTo install the __desktop__ application:\n- Open the project in Android Studio and run the gradle command below to build and install the application on the desktop:\n```bash\ngradlew desktopRun\n```\n\n## Project Structure\n\nThe application has two main modules:\n1. composeApp: This is the core module containing the shared Kotlin Multiplatform code for network, caching, and UI logic.\n  - __androidMain__: Contains Android-specific code, primarily serving as an entry point for the Android application. This directory includes the MainActivity class, application-level configuration, and Android-specific dependencies or initialization.\n\n  - __iOSMain__: Contains iOS-specific code, primarily serving as an entry point for the iOS application. This directory includes the ContentView class, application-level configuration, and iOS-specific initialization for Koin.\n\n  - __desktopMain__: Contains desktop-specific code, primarily serving as an entry point for the desktop application. This directory includes the main application class, window creation, and desktop-specific dependencies or initialization.\n  - __commonMain__: Contains the core business logic, data access, and UI components that are shared across all platforms.\n    - __domain__: This package houses the domain layer, which defines the business logic and entities of the application. It typically includes interfaces, data classes, and utils.\n    - __data__: This package houses the data layer, which is responsible for fetching and caching data. It might include repositories, data sources, and network clients.\n    - __ui__: This package houses the UI components that are shared across all platforms. These components can be implemented using Compose Multiplatform, allowing for a consistent user experience.\n    - __di__: Contains the dependency injection setup, managing the creation and provision of dependencies throughout the application.\n\n2. appiOS:  This module houses the iOS-specific app code, serving as the entry point for the iOS application, providing the necessary configuration and integration with the shared _composeApp_ module.\n\n## Libraries\n\n- [Kotlin Multiplatform](https://kotlinlang.org/docs/multiplatform.html) - The foundation of the project, enabling shared code across platforms.\n- [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform) - Enables building consistent UI components for Android, iOS, and desktop.\n- [KotlinX  Coroutines](https://github.com/Kotlin/kotlinx.coroutines) - Manages asynchronous operations for efficient app performance.\n- [Datastore](https://developer.android.com/kotlin/multiplatform/datastore) - Provides a mechanism for storing and retrieving key value pairs like user preferences.\n- [Koin](https://insert-koin.io/) - A dependency injection framework for managing dependencies throughout the application.\n- [kotlinx.serialization]() - Enables serialization and deserialization of data objects.\n- [Ktor](https://ktor.io/docs/client-create-and-configure.html) - A multiplatform HTTP client for making network requests and handling responses.\n- [Napier](https://github.com/AAkira/Napier) - A logging library for providing detailed logs during development.\n- [kotlinx.datetime](https://github.com/Kotlin/kotlinx-datetime) - A multiplatform Kotlin library for working with date and time.\n- [Room](https://developer.android.com/kotlin/multiplatform/room) - Provides a persistence layer for storing data locally.\n- [Paging](https://github.com/cashapp/multiplatform-paging) - Enables efficient handling of large datasets for pagination in UI components.\n- [BuildKonfig](https://github.com/yshrsmz/BuildKonfig) - Supports embedding values from gradle file.\n- [Coil3](https://github.com/qdsfdhvh/compose-imageloader) - Compose Image library for Kotlin Multiplatform\n- [Jetpack Navigation](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-navigation-routing.html) - Provides navigation components for handling UI transitions within the app.\n- [KMP Palette](https://github.com/jordond/kmpalette) - Provides tools for working with colors on multiple platforms.\n- [Ktlint](https://github.com/pinterest/ktlint): For enforcing code style consistency.\n- [Detekt](https://github.com/detekt/detekt): For static code analysis and quality checks.\n\n## Related Resources\n\nIn this section I've included some resources ie. articles and GitHub repositories that i used to learn about kotlin multiplatform:\n\n### Videos 📽️\n\n- [Your First Kotlin Multiplatform Mobile App Tutorial](https://www.youtube.com/watch?v=GcqFhoUuNNI)\n- [Sharing Code between iOS and Android with Kotlin #1](https://www.youtube.com/watch?v=mdN6P6RI__k\u0026t=13s)\n\n### Articles/Blogs 📖\n\n- [Kotlin Multiplatform Hands-on: Networking and Data Storage](https://play.kotlinlang.org/hands-on/Networking%20and%20Data%20Storage%20with%20Kotlin%20Multiplatfrom%20Mobile/01_Introduction)\n- [KaMPKit General Architecture](https://github.com/touchlab/KaMPKit/blob/main/docs/GENERAL_ARCHITECTURE.md)\n- [Using Koin in a Kotlin Multiplatform Project](https://johnoreilly.dev/posts/kotlinmultiplatform-koin/)\n- [Create your first cross-platform mobile app – tutorial](https://kotlinlang.org/docs/multiplatform-mobile-create-first-app.html) - Learn how to create and run your first Kotlin Multiplatform Mobile application.\n- [Kotlin Multiplatform. Very beginner’s guide (part 1-3)](https://medium.com/proandroiddev/kotlin-multiplatform-very-beginners-guide-part-1-6419f74afa0f)\n- [Using Realm persistence library in a Kotlin Multiplatform project](https://johnoreilly.dev/posts/realm-kotlinmultiplatform/)\n\n### Sample Projects 🤖\n\n- [KMM Sample](https://github.com/KaterinaPetrova/kmm-sample) - A sample project for experiments with Kotlin Multiplatform mobile.\n- [Fantasy Premier League](https://github.com/joreilly/FantasyPremierLeague) - Kotlin Multiplatform project with Jetpack Compose, Compose for Desktop and SwiftUI clients (and using Ktor for remote API requests and Realm for persistence).\n- [KaMPKit](https://github.com/touchlab/KaMPKit)\n- [People In Space](https://github.com/joreilly/PeopleInSpace) - Minimal Kotlin Multiplatform project with SwiftUI, Jetpack Compose, Compose for Wear OS, Compose for Desktop, Compose for Web, and Kotlin/JS + React clients along with Ktor backend.\n- [Poetree](https://github.com/MamboBryan/poetree) - Poetree is a minimalistic poetry app that helps people freely access art from a global community full of poetry lovers.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvictorkabata%2Fnotflix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvictorkabata%2Fnotflix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvictorkabata%2Fnotflix/lists"}