$ show joelkanyi/Muviz
Muviz is a modern Android application built with Jetpack Compose that serves as a movie and TV show discovery client for the TMDB API. It follows a clean MVVM architecture with feature-based packaging, using Hilt for dependency injection, Retrofit for networking, Room for local favorites persistence, and the Paging 3 library for efficient data loading. The app provides a bottom-navigation interface with Home, Search, Favorites, and Account screens, supporting both movies and TV series with categories like trending, popular, upcoming, and top-rated. It includes a custom theme system with light, dark, system, and Material You options, and features animated UI components such as a vote average arc indicator and swipe-to-delete on favorites. The codebase is well-structured and uses modern Android development practices, though some screens (like cast details) are incomplete and there is some code duplication in ViewModels.
The LLM identified 3 files worth highlighting for reuse:
A self-contained Composable that renders an animated circular arc indicator to display a percentage (e.g., vote average). It uses animateFloatAsState for smooth animation, draws an arc on a Canvas with configurable color, stroke width, and radius, and overlays the percentage text. This component is fully parameterized and can be extracted into any Compose project needing a rating indicator.
The SwipeToDeleteContainer composable provides a generic swipe-to-delete pattern using SwipeToDismissBox. It wraps any content, animates removal with shrinkVertically and fadeOut, and triggers a delete callback after the animation. The DeleteBackground shows a red background with a delete icon. This pattern is reusable across any list where swipe-to-delete is needed.
The PagedRow composable is a generic horizontal LazyRow that accepts LazyPagingItems and handles all loading, error, and empty states with appropriate UI feedback (progress indicators, error messages). It is parameterized by item type and content lambda, making it reusable for any paged data displayed in a horizontal scrolling row.