Skip to content
schdiefPublic

About

keep track of the movies you would like to watch in future

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

About

Build Status Gui Quality Gate Status

Moveez is a service to keep track of the movies you would like to watch in future. It shows you the ratings from sites like iMDB.com and Rottentomatoes.com.

Visit us at www.moveez.de

Moveez PWA reboot

The repository root now contains the GitHub Pages version of Moveez. It is a mobile-first, installable progressive web app for iPhone that keeps the original teal/popcorn identity while combining the old modular services into one static app.

Design and implementation plan

  1. Single app shell: three pages (Watchlist, Binged and Cinema – the current programme of the cinemas with showtimes per day), a counter bubble next to the heading, a fixed iPhone-style bottom navigation, one search field that filters the list and suggests IMDb titles to add, format/genre/service/FSK filters and sorting (added, release year, IMDb, RT audience, moveez score).

  2. Local-first data: titles, FSK age ratings, streaming services and cinemas, watched dates, and popcorn ratings are stored in browser localStorage, so the app works without a server and can be installed on iOS.

  3. Catalogue import: use Add title to search OMDb (IMDb data), open a result to see poster, plot, IMDb rating, the Rotten Tomatoes audience score and the moveez score (IMDb × RT audience %, so 10 is perfect), jump to the IMDb/Rotten Tomatoes pages, and add it. Nothing else has to be entered by hand: after adding, the app looks up in the background

    • FSK and streaming services in Germany via TMDB (streaming offers are JustWatch data). The key comes from the TMDB_API_KEY repository secret, stamped in by the Pages workflow (or can be set in Settings); JustWatch itself does not allow browser requests.
    • FSK fallback via Wikidata, and via the cinema programme for films in cinemas.
    • Cinemas (CinemaxX Dresden, Filmpalast Bautzen, UCI Dresden): scripts/cinemas.mjs reads the programmes from kinoprogramm.com in the Pages workflow (on every push and every 6 hours) and publishes them as data/cinemas.json; matching uses the original and the German TMDB title.

    The FSK filter hides titles without a known rating. On start-up the app refreshes the ratings of watchlist titles in the background (at most every 12 hours per title). The original Moveez OMDb key is built in; a personal key can be set in Settings. RT has no official API, so the audience score comes from the public search index the RT website itself uses and may break if RT changes it.

  4. Personal discovery: “Surprise me” uses an optional OpenAI-compatible LLM endpoint configured in Settings; without one it chooses an unseen title already on the list.

  5. Pages delivery: .github/workflows/pages.yml publishes the repository root and sw.js serves the app shell network-first with an offline fallback (API calls are never cached).

Rotten Tomatoes does not provide a supported public browser catalogue API, so the PWA does not scrape RT pages or claim live RT coverage. A future backend/provider integration can replace the catalogue adapter with licensed RT data. kinoprogramm.com has no official API either, so the cinema script may need adjustments if its HTML changes.

The test deployment will be available at https://schdief.github.io/moveez/ after the Pages workflow completes.

Future updates might include:

  • It even alerts you when a movie is running in cinema or is available on a VoD-plattform of your choice.
  • Furthermore you can browse your list by ratings, release date or genre.
  • an own score calculated by the individual ratings of all moveez-users.

Screenshot

CI/CD with Azure DevOps

We have switched from Jenkins to Azure DevOps. You can find the workspace here. Within Azure DevOps we are using Azure Pipelines to build and release moveez. The pipeline configuration is done via azure-pipeline.yml per service.

Code analysis with sonarcloud.io

We use sonarcloud.io for our static code analysis. It is automaticly triggered for all branches as a parallel step to the build. The results are published to Azure DevOps and a dashboard.

Linting our code style with prettier.io

We use prettier.io to lint our code style. To prevent manual effort, you can add the prettier to your .git/hooks. Just use the following pre-commithook (requires prettier to be installed globally via npm):

#!/bin/sh
FILES=$(git diff --cached --name-only --diff-filter=ACM “.js” “.jsx” | sed ‘s| |\\ |g’)
[ -z “$FILES” ] && exit 0
# Prettify all selected files
echo “$FILES” | xargs prettier --write
# Add back the modified/prettified files to staging
echo “$FILES” | xargs git add
exit 0

Regression testing with cypress.io

We use cypress.io to perform our regression testing. It is automaticly triggered for all branches on UAT stage after the deployment. The results are published to Azure DevOps and a dashboard.

Stack/Architecture

This app consists of multiple microservices, all based on Express. Our data is managed by MongoDB - the setup is described in the database directory. To run the services and database we are using Rancher, which setup is described here. The deployment of services to Rancher is done via helm.

Run

Initial Setup

  1. Set up the servers and rancher
  2. Set up the network configuration including DNS and TLS
  3. Set up the databases for UAT and PROD
  4. Set up the secret for the facebook login

Monitoring

To monitor our services we are using uptime robot that can be visited here: https://uptimerobot.com/dashboard#mainDashboard

Logs

Currently you have to look at the container logs e. g. via Rancher, but in future we want to use Graylog or something similar.

About

keep track of the movies you would like to watch in future

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages