# Crunchyroll Watchlist A polished, Streamlit-based dashboard for viewing and managing your Crunchyroll watchlist. This project provides a custom-styled interface with category-based grouping and interactive carousels. ## Project Overview - **Purpose:** Provide an enhanced visual interface for the Crunchyroll watchlist using the Crunchyroll API. - **Main Technologies:** - [Python](https://www.python.org/) - [Streamlit](https://streamlit.io/) (Web Framework) - [Requests](https://requests.readthedocs.io/) (API communication) - **Key Features:** - OAuth2 Authentication with Crunchyroll. - Custom CSS for a dark-themed, "Netflix-style" UI. - Category-based sorting (Action, Adventure, Comedy, etc.). - Interactive row carousels for series navigation. ## Building and Running ### Using Docker (Recommended) The project is fully containerized for easy deployment. 1. **Build the image:** ```bash docker build -t crunchyroll-watchlist . ``` 2. **Run the container:** ```bash docker run -p 8501:8501 \ -e CR_EMAIL="your-email@example.com" \ -e CR_PASSWORD="your-password" \ crunchyroll-watchlist ``` Access the app at `http://localhost:8501`. If environment variables are provided, the app will attempt to log in automatically. ### Local Development 1. **Install dependencies:** ```bash pip install streamlit requests ``` 2. **Run the application:** ```bash streamlit run crunchyroll_watchlist.py ``` ## Development Conventions - **Frontend:** Custom styling is handled via `st.markdown` with `unsafe_allow_html=True`. - **Components:** Complex interactive elements (like the carousel) are implemented using Streamlit HTML components (`components.html`). - **State Management:** Uses `st.session_state` to manage authentication tokens and account data. - **Caching:** API calls are cached using `st.cache_data` to improve performance and reduce API load. ## Project Structure - `crunchyroll_watchlist.py`: The main application logic, including authentication, API interaction, and UI rendering. - `Dockerfile`: Configuration for building the project as a container.