All CUJ Case Studies
Critical User Journey Case Study

Plex Media Hub: Solving My Media Discovery & Watchlist Gaps

📅 2026-08-20 👤 Daniel Herrington
GitHub Repository
Plex Media Hub: Solving My Media Discovery & Watchlist Gaps Hero Graphic

An automation tool and dashboard designed to bridge the gap between my global Plex Watchlist, local server libraries, and real-time TV guide schedules.


The Problem Space

Context

Plex has a fantastic Watchlist feature. Whenever I'm having a conversation with friends, reading a review, or hearing a recommendation, my immediate reflex is to say, "Let me add it to my watchlist." It is a friction-free, single-tap repository for future entertainment.

The Core Friction

However, the Plex Watchlist operates as a black box. It knows what I want to watch, but it has no integration with my local media server to show what I can watch.

Once a title is added, there is no visual indicator to show whether it is:

  1. Already downloaded and available on my local server.
  2. Fully or partially missing from my server.
  3. Airing in the future or currently between seasons.

To figure out if a watchlist item was playable, I had to manually search my server or click into every single detail card. This manual checking loop created high cognitive load and friction, turning my curation watchlist into a graveyard of unorganized titles.


Critical User Journeys (CUJs)

CUJ 1: Watchlist Availability & Media Discovery Gaps

CUJ 2: The New Season Hype & Rewatch Trigger


The Ideal Flows

Flow 1: Watchlist Availability Gaps

  1. Trigger: I hear about a movie at lunch and add it to my Plex Watchlist on my phone.
  2. Action: The custom Plex Media Hub periodically syncs with the Plex API.
  3. Automated Response: The backend parses my local server libraries, compares them against my watchlist, and identifies that the movie is missing.
  4. Resolution: The movie appears in the Watchlist Gaps tab on the dashboard, complete with direct links to download or purchase it.

Flow 2: Upcoming New Season Alerts

  1. Trigger: I watch the finale of Season 2 of a show on my local server.
  2. Action: The dashboard removes the show from my active "Continue Watching" queue because I'm caught up.
  3. Automated Response: The backend runs scheduled TV guide checks and detects that Season 3 of the show is premiering in 14 days.
  4. Resolution: The show automatically reappears on the dashboard in a dedicated Upcoming New Seasons section, displaying the premiere countdown.

The Solution: Plex Media Hub

To solve these journeys, I built a lightweight, containerized dashboard consisting of a Python (FastAPI) backend and a Modern HTML5/JS frontend running locally at http://localhost:8085.

graph TD
    A[Plex Watchlist API] -->|Syncs| B(FastAPI Backend)
    C[Local Plex Media Server] -->|Indexes Libraries| B
    D[TVmaze API] -->|Fetch Schedules| B
    B -->|Generates Dashboard Data| E[HTML/JS Frontend]
    E -->|Renders Tabbed UI| F[Plex Media Hub Dashboard]

Key UI Features


Under the Hood (Code & Architecture)

1. Library Indexing & GUID Matching

To resolve the watchlist "black box," the system translates global Plex metadata identifiers into local files.

2. Status Scheduling & Out-of-Order History

Calculating upcoming season releases requires matching watch counts with scheduled airings.

3. Frontend Partitioning


Repository & Source Code

Explore the full open-source codebase, installation instructions, and schema definitions on GitHub:

Have thoughts on this CUJ or framework?

Let's discuss product strategy, machine learning engineering, or system architecture.

Connect on LinkedIn Explore Other CUJs