Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

🎬 MyCineTracker

Movies + TV Shows — Rate & Track

A multi-module, offline-first Android app for discovering, rating, and tracking movies & TV shows — built with Jetpack Compose, Clean Architecture, and Firebase.

Kotlin minSdk targetSdk License


About

MyCinemaTracker is an open-source Android app for browsing movies and TV shows, rating them across multiple dimensions, recommendations, advanced search system and building a personal watchlist — backed by TMDB and my custom DB for catalog data and Firebase for auth, storage, and sync.

It's also a deliberate architecture showcase: a production-shaped multi-module app rather than a toy demo, covering the patterns — Clean Architecture with a strictly enforced dependency direction, MVI/UDF, Gradle convention plugins over copy-pasted build scripts, cache-aside offline support, RBAC-gated content moderation, and a statistically sound multi-dimensional rating system.

Features

Catalog & discovery

  • Movies & TV shows with full metadata: poster, backdrops, genres, an extensible custom sub-genre taxonomy, cast, seasons (TV), release date, country
  • Paginated, prefetching browse screens backed by TMDB, with delta sync so the local cache stays current without full re-fetches
  • IMDb rating enrichment via OMDb, kept honestly distinct from the app's own community rating rather than mislabeling one as the other

Rating system

  • Quick 10-point rating, or a 6-dimension breakdown (Performance & Character, Graphics & VFX, Production & Costume Design, Cinematography & Scenery, Spirit & Atmosphere, Soundscape)
  • A Bayesian-weighted aggregate, so a handful of extreme votes can't outrank a title with thousands of ratings — see docs/FEATURES.md

Accounts & moderation

  • Firebase Authentication (email/password + Google via Credential Manager)
  • Four-tier RBAC — GUEST / USER / MODERATOR / ADMIN — enforced through Firebase custom claims and Firestore security rules, never trusted client-side alone
  • User-submitted titles enter a PENDING_MODERATION queue for moderator/admin review, with dedup checking before they land there

Personal tracking

  • Watchlist with Watch Later / Watched / Favorite states, usable offline
  • Paginated reviews per title
  • Push notifications (FCM) — personal (your submission was approved) and role-targeted (new item awaiting moderation)

Offline & resilience

  • Cache-aside against TMDB and custom MoviesDB via Room; Firestore's own offline persistence for social data
  • WorkManager-driven delta sync, resumable poster uploads, retry with exponential backoff + jitter, a hand-rolled circuit breaker

Planned

  • 🚧 "Ask AI what to watch" via Firebase AI Logic (Gemini)
  • 🚧 Real-time chat over a self-hosted gRPC service

Architecture at a glance

Clean Architecture, one-way dependencies, feature modules that never depend on each other directly:

graph TD
    APP["app"] --> FEATURE["feature:*<br/>UI + ViewModel, MVI"]
    FEATURE --> DOMAIN["domain<br/>UseCases + Repository interfaces"]
    DATA["data:*<br/>Repository implementations"] -. implements .-> DOMAIN
    FEATURE --> CORE["core:*<br/>network, database, firebase, ui..."]
    DATA --> CORE
    DOMAIN --> CORE
Loading

Full breakdown — every layer, the Coordinator navigation pattern, why the build is structured this way — in docs/ARCHITECTURE.md.

Modules

Layer What lives there
app Composition root — DI graph, NavDisplay, app-level wiring
core:* Shared building blocks: network, database, design system, security, navigation contracts
domain Pure Kotlin — UseCases and Repository interfaces, zero Android dependencies
data:* Repository implementations — TMDB, Firestore, Room, cache-aside
feature:* One module per screen group — Compose UI + MVI ViewModels

Full module-by-module table with responsibilities and build status → docs/MODULES.md.

Tech stack

UI Jetpack Compose, Material 3
Architecture Clean Architecture, MVI / Unidirectional Data Flow
Navigation Navigation 3, Coordinator pattern
DI Hilt
Async Kotlin Coroutines & Flow
Local storage Room (cache-aside), Proto DataStore + Tink (encrypted)
Networking Retrofit, OkHttp, kotlinx.serialization
Backend Firebase — Auth, Firestore, Storage, Cloud Functions, Cloud Messaging, AI Logic
Catalog data TMDB + OMDb
Pagination Paging 3 — RemoteMediator + a custom Firestore PagingSource
Background work WorkManager
Build Gradle version catalogs + a composite build-logic build of precompiled convention plugins
Testing JUnit, MockK, Turbine, Firestore Rules Unit Testing

Project status

Core functionality — catalog, auth/RBAC, rating, moderation, watchlist, reviews, notifications — is built end-to-end. The AI assistant and real-time chat are architected (module scaffolding compiles) but their feature work is intentionally paused until the rest of the app is solid — see docs/MODULES.md for exact status per module.

Documentation

  • Architecture — layers, module graph, navigation, build system
  • Modules — every module, its responsibility, and its status
  • Features — the rating system, moderation workflow, RBAC, sub-genres
  • Setup — Firebase project, API keys, running locally

License

MIT — see LICENSE.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages