Watch List: A Private JustWatch Alternative PWA Powered by TMDB

TLDR: I got tired of JustWatch's ads, tracking, and bloat, so I built my own replacement. Watch List is a private Progressive Web App that uses the TMDB API to search movies and TV shows, find where to stream them, and keep a personal watchlist — with no ads, no tracking, and a much faster experience.

Watch List PWA interface showing movie and TV show cards with streaming provider badges for Netflix, Hulu, and Prime Video

I use JustWatch all the time. It's genuinely useful — one place to search across every streaming service and find out where a title is available. But using it has become increasingly frustrating. Ads everywhere, slow load times, tracking pixels, dark-pattern upsells, and a UI that seems to grow heavier with every visit. I just want to look up a movie.

So I built my own. Watch List is a private Progressive Web App that does what JustWatch does — minus everything I don't need.

The Problem with JustWatch

JustWatch is a great idea executed with too much commercial overhead. Here's what I was running into daily:

  • Ads and promoted content — results are influenced by what services pay to promote
  • Tracking — browsing history, clicks, and behavior all feeding into ad profiles
  • Slow performance — heavy JavaScript bundles, third-party scripts, and lazy-loaded ads all fighting for bandwidth
  • Noise — recommendations, "trending" rows, email prompts, and push notification requests cluttering a simple lookup task

"The best tool is the one that does exactly what you need and nothing else."

The core feature — "what's streaming where?" — is simple. The TMDB API provides all the data needed to replicate it cleanly. So I did.

What Watch List Does

The app covers the full JustWatch core loop:

  • Search — find any movie or TV show via the TMDB API
  • Streaming availability — see which services have the title (Netflix, Hulu, Prime, Disney+, etc.)
  • Movie & TV details — cast, synopsis, ratings, release year, runtime
  • Personal watchlist — save titles to watch later, stored locally
  • Installable PWA — add to home screen, use it like a native app on any device

What it does not do: collect data, serve ads, track anything, or ask for an account.

Why TMDB?

The Movie Database (TMDB) is a community-built, open API covering virtually every movie and TV show. It provides:

  • Rich metadata — titles, posters, ratings, cast, crew, overviews
  • Watch providers endpoint — streaming availability by country, sourced from JustWatch's own data (the irony is not lost on me)
  • Generous free tier for personal projects
  • Stable, well-documented API that's been around for years

The watch provider data is the key piece. TMDB exposes it via /movie/{id}/watch/providers and /tv/{id}/watch/providers, returning flatrate, rent, and buy options with provider logos — everything needed to replicate the core JustWatch feature.

Building It as a PWA

Making Watch List a Progressive Web App was a deliberate choice. The goal was something that feels native on mobile without the overhead of an app store submission or a backend.

Service Worker for Offline Support

A service worker caches the app shell — HTML, CSS, JS, and static assets — so the interface loads instantly even on a slow connection. API results are cached with a short TTL so recently searched titles don't need a fresh network request every time.

Web App Manifest

The manifest enables "Add to Home Screen" on both iOS and Android. The installed app launches in standalone mode with no browser chrome — full-screen, icon on the home screen, indistinguishable from a native app at a glance.

Local Storage for the Watchlist

The watchlist is stored entirely in localStorage. No account, no server, no sync across devices (yet). For a private single-user app, this is exactly the right level of complexity. The data is yours, on your device, gone when you want it gone.

Performance by Default

Without ads, tracking scripts, or third-party tag managers, the app is fast by default. A few intentional decisions keep it that way:

  • No framework overhead — vanilla JavaScript, no React or Vue build pipeline to bundle
  • TMDB images via CDN — poster and backdrop images served directly from TMDB's image CDN, sized appropriately
  • Debounced search — input is debounced before hitting the API, reducing unnecessary requests as you type
  • Minimal dependencies — the entire app is a few files; nothing to audit, nothing to update, nothing to break

The difference in feel compared to JustWatch is immediate. No layout shift from ads loading in. No spinner while a consent management platform initializes. Just the app.

Private by Design

This isn't an anti-JustWatch screed — it's a recognition that commercial products optimize for their business model, not your preferences. Watch List optimizes for mine:

  • Self-hosted or run locally — no third party sees your searches
  • No analytics, no error tracking, no telemetry
  • TMDB API key stays in your environment — your usage, your account
  • The watchlist never leaves your browser

The trade-off is that it's not going to get new features driven by A/B tests and product managers. That's fine. It does what I need.

What I'd Add Next

A few things on the list for future iterations:

  • Filter by streaming service — show only titles available on services I subscribe to
  • Watchlist sync — optional export/import or sync via a simple self-hosted endpoint
  • Watched history — mark titles as watched, separate from the watchlist
  • Person search — look up an actor or director and browse their filmography
  • Notifications — alert when a watchlisted title becomes available on a specific service

Lessons from the Build

A few things stood out building this:

  1. The TMDB API is excellent — well-documented, reliable, and the watch provider data is surprisingly comprehensive for most countries
  2. PWAs are underused — for personal tools and internal apps, the install experience is good enough and the deployment story (static files) is dramatically simpler than native apps
  3. Constraints improve focus — no backend, no accounts, no framework forced clean decisions at every step
  4. Speed is a feature — removing the things that slow down a page isn't just a performance optimization, it changes how the app feels to use

Try It Yourself

Watch List is a private project, but the approach is straightforward to replicate. A free TMDB API key, a few hundred lines of JavaScript, and a service worker is all it takes to have a personal streaming guide that works exactly the way you want.

If you're tired of being the product on sites you use purely as tools, building your own version is a satisfying exercise — and often less work than it sounds.

Need a Custom PWA Built?

I build fast, focused Progressive Web Apps that do exactly what you need — without the bloat. From API integrations to offline-capable tools, let's build something useful together.