Android App
The Movie App

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
Movie poster with title, rating, and release date.
StaleHome
STALE — shows the old bottom nav (Home / Search / Settings / Profile). Sections are still valid.
StaleSearch
STALE — shows the old bottom nav. Search is now debounced with infinite scroll.

Movie Details
Backdrops, ratings, and full plot overview with pull-to-refresh and a favorite toggle.
StaleSettings
STALE — Settings was a bottom-nav tab here; it now lives in the Profile top bar. Content is still valid.
StaleProfile
STALE — shows the old bottom nav. Profile now hosts Settings in its top bar.
PlaceholderFavorites
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