/03 · App ← All apps
Live PWA · TMDb API · Cloudflare Workers

Watchlist.

Streaming PWA with a filter stack: what we watch tonight, without 20 minutes of scrolling.

Watchlist main view.
01/03

Step 01 · of3

8 titles on the list

Streaming platforms are no search tools.

Netflix, Disney+, Prime — every platform shows its own recommendations, its own lists, its own ranking. If you’re looking for “any thriller under 90 minutes with an IMDb rating above 7”, you scroll through five apps, compare in your head, give up after 20 minutes and watch whatever loads first.

Cross-platform aggregators like JustWatch only solve half the problem. They show availability, but not the actual constraint — the right title for the hour you have right now.

A filter stack that cuts, not sorts.

Watchlist takes multiple filters at once: genre, platform, language, minimum rating, length. Instead of a list, it shows hits at the filter intersection. TMDb API delivers the data, Cloudflare Workers proxy-cache the calls. Frontend is a static PWA — installable, offline-capable, no logins.

Live in family use. Filter state in the URL makes sharing trivial — Christine sends me a link with her three suggestions for the evening. Three clicks, not twenty minutes.

/ tech-decisions

Three decisions that mattered.

Hosting

GitHub Pages instead of Vercel

Watchlist is a pure static PWA — no server-side rendering needed. GitHub Pages is free, no quota risk. Cloudflare Workers only proxy the TMDb API for rate-limit protection.

Data Model

Filter stack instead of lists

Genre + platform + minimum rating + language + length — all combined at once. No long scrolling through streaming libraries. Filter state lives in the URL — shareable with the family.

Offline

TMDb cache via service worker

Once-loaded titles stay available offline. Saves roundtrips on repeat searches. Cache eviction after 30 days — new releases appear automatically.

Open Watchlist live → Status   Live · in production

/ other apps