Streaming Lists is a movie and TV discovery app that brings catalogs from major streaming services into one place. Browse popular titles, filter by year and genre, search by title or person, watch trailers, and save favorites or reminders without jumping between provider apps.
Version 2.0.0 runs on Angular 22 with server-side rendering, an Express API layer, and Progressive Web App support.
- Discover movies and TV series available on Netflix, Prime Video, Disney+, Max, Hulu, Apple TV+, and other supported providers
- Filter results by release year, genre, media type, and provider group
- Search by title, actor, or director
- View details, credits, trailers, related recommendations, ratings, and provider availability
- Save favorites and reminders in browser storage
- Render pages on the server for faster first loads and shareable metadata
- Cache the production client with an Angular service worker
- Throttle and retry requests to handle TMDB rate limits more gracefully
Movie, TV, artwork, credit, recommendation, and provider data comes from The Movie Database (TMDB). This project is not endorsed or certified by TMDB or the streaming providers it references.
- Angular 22 and TypeScript 6
- Angular SSR with an Express server
- Angular service worker
- RxJS
- TMDB API
- Karma and Jasmine tests
- Heroku-compatible production scripts
- Node.js 24.x
- npm 11.12.1
- A TMDB API key
The required runtime versions are also declared in package.json. Using the pinned npm version keeps package-lock.json reproducible between local development and deployment.
Clone the repository and install the exact dependency versions from the lockfile:
git clone https://github.com/iposton/angular-streaming-movie-lists.git
cd angular-streaming-movie-lists
npm ciCreate a .env file in the project root:
TOKEN=your_tmdb_api_key
NG_ALLOWED_HOSTS=localhostTOKEN is read only by the Express server and is not bundled into the browser application. The server stops during startup when the value is missing.
Angular SSR validates request hostnames. Use a comma-separated list when the app must respond to more than one hostname:
NG_ALLOWED_HOSTS=localhost,streaming-lists.herokuapp.comDo not commit .env or use NG_ALLOWED_HOSTS=* in production.
Start the SSR development server:
npm run dev:ssrOpen http://localhost:4200. The development server rebuilds the browser and server bundles when source files change.
For a browser-only Angular development server, run:
npm run ng -- serveBuild the optimized browser bundle, service worker, and Node server:
npm run build:ssrStart the compiled server on port 4000:
npm run serve:ssrSet PORT to choose another port:
PORT=8080 npm run serve:ssr| Command | Purpose |
|---|---|
npm run dev:ssr |
Run browser and SSR development builds |
npm run build |
Build the browser application |
npm run build:ssr |
Build optimized browser and server bundles |
npm run serve:ssr |
Run the compiled SSR server |
npm test -- --watch=false --browsers=ChromeHeadless |
Run unit tests once in headless Chrome |
npm run prerender |
Prerender configured routes |
npm start |
Start the compiled server in production |
The Express layer keeps the TMDB key out of client-side code and exposes these application endpoints:
| Endpoint | Purpose |
|---|---|
POST /data |
Load provider-based movie or TV lists |
POST /search |
Load movie details and recommendations |
POST /searchtv |
Load TV details and recommendations |
POST /searchtrending |
Search titles, actors, or directors |
POST /trending |
Load trending titles |
Configure the required environment values:
heroku config:set TOKEN=your_tmdb_api_key
heroku config:set NG_ALLOWED_HOSTS=streaming-lists.herokuapp.comDeploy the current branch:
git push heroku masterHeroku runs heroku-postbuild to create the browser and SSR bundles, then starts the server with the repository's Procfile.
Before committing dependency changes, confirm that the lockfile is valid:
npm ci --dry-runAlways commit package.json and package-lock.json together.
api/ TMDB request and aggregation logic
src/app/ Angular components, services, and routing
src/environments/ Browser build environments
server.ts Express and Angular SSR entry point
angular.json Angular workspace and build configuration
ngsw-config.json Service-worker caching configuration
Procfile Heroku process definition
Version 2.0 moves the application to Angular 22 and TypeScript 6. The existing Webpack-based Angular builders, Protractor tests, and TSLint configuration still work where used but are deprecated. Moving to Angular's application builder, Vitest, and a modern lint setup should be handled as focused follow-up migrations.