Tivi is a cross-platform application for discovering and tracking television shows, built with Kotlin Multiplatform and Compose Multiplatform to share its user interface across Android, iOS, and desktop platforms. The app follows the Model-View-Intent (MVI) architecture pattern, where user actions are modelled as sealed class intents that reduce into a single immutable state object, ensuring predictable and unidirectional data flow managed through Kotlin coroutines and StateFlow.
The application uses Hilt for compile-time dependency injection and SQLDelight for type-safe local data storage, combining remote API calls with offline caching through a repository pattern. Navigation is enforced at compile time using sealed class route definitions, and large lists of TV shows are loaded incrementally with the Paging library. The codebase is organized into a shared multiplatform module containing business logic, domain models, and network client code that compiles to Android, iOS, and JVM targets.
Tivi enables users to browse a catalog of TV shows, manage a personal watchlist with status tracking, and synchronize watch progress across all devices by connecting to a third-party service. The app supports tracking watched episodes and shows across multiple streaming services, with data syncing to keep viewing history consistent everywhere.