Android App

The Movie App

View Code
The Movie App home screen

Native movie browser powered by the TMDB API

The Movie App is a modern Android application built with Jetpack Compose that leverages the TMDB API to showcase popular, now playing, and top-rated movies. It adds Firebase email/password authentication, a persistent Favorites watchlist, personalized recommendations, and full offline support on top of a clean Material 3 design with DataStore-backed preferences.

Single Activity

All navigation handled within one MainActivity using Navigation Compose.

Manual DI

Repositories (Movie, Preferences, Watchlist, Auth) and services are provisioned by MovieApplication and injected into ViewModels via factories.

This app demonstrates a full client-server Android workflow: fetching real movie data from the TMDB REST API, rendering it with a reactive Compose UI, and persisting user preferences with DataStore — all wrapped in a clean MVVM architecture with type-safe navigation.

Core Features

  • →Browse Popular, Now Playing, and Top Rated sections, plus single-category grids with infinite scroll
  • →"Because you like X" recommendations derived from your favorite genre
  • →Debounced live search with pagination
  • →Movie details with pull-to-refresh, offline fallback, and a favorite heart toggle with snackbar confirmations
  • →Persistent Favorites/Watchlist tab
  • →Firebase Email/Password auth — your signup name becomes your in-app display name
  • →Profile overview with Settings in the top bar; Settings edits name, bio, and genre picked from the official TMDB list
  • →Offline support (HTTP disk cache + in-memory cache with stale fallback), pull-to-refresh, and specific error messages with retry

Screenshots

Poster

Poster

Movie poster with title, rating, and release date.

Home
Stale

Home

STALE — shows the old bottom nav (Home / Search / Settings / Profile). Sections are still valid.

Search
Stale

Search

STALE — shows the old bottom nav. Search is now debounced with infinite scroll.

Movie Details

Movie Details

Backdrops, ratings, and full plot overview with pull-to-refresh and a favorite toggle.

Settings
Stale

Settings

STALE — Settings was a bottom-nav tab here; it now lives in the Profile top bar. Content is still valid.

Profile
Stale

Profile

STALE — shows the old bottom nav. Profile now hosts Settings in its top bar.

Favorites
Placeholder

Favorites

New Favorites-tab screenshot (placeholder). Bottom nav is now Home / Search / Favorites / Profile.

Specifications

Language

Kotlin 2.2.10

Architecture

MVVM + Repository

Interface

Jetpack Compose (M3)

Networking

Retrofit & OkHttp

Auth

Firebase Email/Password

Caching

OkHttp disk cache + in-memory

Storage

Jetpack DataStore

Min / Target SDK

API 24 / 37

Core Components

Home (Popular / Now Playing / Top Rated)
Search Screen
Movie Details View
Favorites Screen
Auth Screens (Login / Signup)
Settings Screen
Profile Screen
WatchlistRepository
AuthRepository
Retrofit Service + DTOs
DataStore Preferences

Tech Stack

KotlinJetpack ComposeMaterial 3RetrofitOkHttpFirebase AuthCoilDataStoreNavigation ComposeViewModelCoroutines & FlowKotlinx Serialization
View full README