View on GitHub

MovieDB-App

App to list movies using the MovieDB API.

MovieDB

Build Status Kotlin badge-android badge-ios PRs Welcome License: MIT

A Kotlin Multiplatform app built with Compose Multiplatform that lets you browse, search, and discover movies using The Movie Database (TMDB) API. Runs on Android and iOS from a single shared codebase.

Google Dev Library


Features

Feature Description
Browse Movies Paginated grid of popular, top-rated, upcoming, and now-playing movies
Movie Details Backdrop image, rating, release date, genres, overview, and trailers
Search Debounced search with inline results as you type
Wishlist Add/remove favorites persisted locally with swipe-to-delete
Deep Links Open movies, search, and favorites from external links (Rinku)
Theming Dynamic Material 3 with dark/light mode support
Cross-Platform Shared UI and business logic for Android & iOS

Teaser

Android
iOS

Tech Stack

Category Libraries
UI Compose Multiplatform, Material 3, Navigation Compose
Networking Ktor (OkHttp / Darwin engines), kotlinx-serialization
Image Loading Coil (ktor3 network engine)
Database Room with sqlite-bundled
Dependency Injection Koin (annotations + KSP + Koin Compiler)
State Management Coroutines, StateFlow, MVI pattern (BaseViewModel)
Architecture Clean Architecture (data/domain/feature layers)
Logging Kermit
Deep Links Rinku
Build Config BuildKonfig
CI Bitrise + GitHub Actions
Crash Reporting Firebase Crashlytics
Analytics / Performance Kotzilla
Linting Detekt
Coverage Kover
Dependency Audit Popcorn Guineapig

Architecture

Clean Architecture + MVI

The app follows Clean Architecture with strict module dependency rules enforced by Popcorn Guineapig:

composeApp (UI orchestrator)
  │
  ├── feature:*      → depends on domain, designsystem, platform
  ├── domain         → LEAF — pure business logic, no project dependencies
  ├── data           → depends ONLY on domain (implements repository interfaces)
  ├── designsystem   → LEAF — no project dependencies
  └── platform       → LEAF — no project dependencies

Data flow:

UI (Screen composable)
  → ViewModel (intent → state via StateFlow)
    → UseCase (business logic)
      → Repository interface (domain layer)
        → MoviesDataRepository (data layer)
          → ApiService (Ktor → TMDB API)
          → FavoriteMoviesDAO (Room → SQLite)

Getting Started

Prerequisites

Setup

  1. Clone the repository
    git clone https://github.com/gabrielbmoro/MovieDB-App.git
    
  2. Open in Android Studio
    • File → Open → select the src/ directory
  3. Get a TMDB API token
    • Create an account at themoviedb.org
    • Copy your Bearer token
    • Add it to src/local.properties:
      MOVIE_DB_API_TOKEN=your_bearer_token_here
      
  4. Run the app

    Platform Instructions
    Android Select the androidApp run configuration in Android Studio and hit Run
    iOS Open iosApp/iosApp.xcodeproj in Xcode, build, and run on a simulator

Contributing

Contributions are welcome! Please check the Contributor Covenant Code of Conduct and our contribution guidelines.


License

This project is licensed under the MIT License — see the license file for details.