سينماتي — متتبع أفلام ومسلسلات شخصي
  • JavaScript 73.6%
  • CSS 19.1%
  • HTML 7.1%
  • Dockerfile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
debe a63f42d8bd
All checks were successful
Build and publish Docker image / build (push) Successful in 3s
chore: release v1.5.2
2026-08-27 00:03:15 +03:00
.forgejo/workflows ci: make latest point to the newest release (sha-... on every push, vX.Y.Z + latest only on releases) 2026-08-17 21:57:08 +03:00
public fix: stop trailer playback when closing modal or leaving item page 2026-08-27 00:03:15 +03:00
scripts docs: add 1.5.1 changelog entry; enforce changelog on release 2026-08-26 23:49:12 +03:00
test simplify: remove per-episode tracking/rating/notes, keep seasons only with whole-series rating 2026-08-18 21:34:12 +03:00
.dockerignore دوكر: Dockerfile + docker-compose + بناء تلقائي عبر Forgejo Actions 2026-08-16 20:34:01 +03:00
.env.example docs: translate README and configs to English; add i18n foundation 2026-08-17 21:03:54 +03:00
.gitignore docs: translate README and configs to English; add i18n foundation 2026-08-17 21:03:54 +03:00
CHANGELOG.md fix: stop trailer playback when closing modal or leaving item page 2026-08-27 00:03:15 +03:00
config.example.json docs: translate README and configs to English; add i18n foundation 2026-08-17 21:03:54 +03:00
docker-compose.yml docs: translate README and configs to English; add i18n foundation 2026-08-17 21:03:54 +03:00
Dockerfile fix: copy CHANGELOG.md into the Docker image so the in-app changelog works 2026-08-18 01:09:07 +03:00
package.json chore: release v1.5.2 2026-08-27 00:03:15 +03:00
qa-frontend.js style/qa: translate CSS and QA test comments to English 2026-08-17 21:15:10 +03:00
README.md ci: make latest point to the newest release (sha-... on every push, vX.Y.Z + latest only on releases) 2026-08-17 21:57:08 +03:00
server.js refactor: deduplicate shared code across server and frontend 2026-08-26 23:42:30 +03:00

🎬 Cinemati — Personal Movie & Series Tracker

A simple local app to manage your watchlist: movies, series, seasons, ratings, franchises, custom lists, and statistics. All data stays on your machine in data/library.json.

No AI required — all metadata (titles, descriptions, images, cast, franchises) comes straight from TMDB.

Storage (works offline)

  • data/library.json — your library with all its details (descriptions, cast, franchises...)
  • data/images/images are stored locally (posters, backdrops, cast photos)
  • After adding an item, all its data and images stay with you — browsing your library works fully offline
  • Only searching for new items and new franchises requires internet

Requirements

Running

node server.js

Then open: http://127.0.0.1:8080

TMDB Token (one-time)

  1. Sign up at https://www.themoviedb.org, open the API page, and get a token.
  2. From the app: ⚙️ Settings → paste the token → 💾 Save token (or place it manually in config.json like this:)
    { "tmdbToken": "your_token_here" }
    
  3. Without a token, TMDB search/add won't work — everything else still works fine.

Moving the app to another machine

  1. Copy the whole project folder (or clone it):
    git clone https://git.majlis.lab/debe/cinemati.git
    cd cinemati
    
  2. Run node server.js
  3. Your data: copy data/library.json (and config.json for the token) from the old machine to the same locations on the new one — or use the ⬇️ Export data button on the home page, then ⬆️ Import backup on the new machine.

Running with Docker (docker-compose)

The image is published to the built-in Forgejo registry: git.majlis.lab/debe/cinemati.

  1. One-time: make Docker trust the git.majlis.lab self-signed certificate — add to /etc/docker/daemon.json and restart Docker:
    { "insecure-registries": ["git.majlis.lab"] }
    

    The repo is public — no docker login is needed to pull.

  2. Copy docker-compose.yml to the server and create a .env from .env.example with your TMDB token:
    cp .env.example .env   # then edit TMDB_TOKEN inside .env
    
  3. Copy your current data/ folder (library + images) next to docker-compose.yml to keep your data.
  4. Run:
    docker compose pull
    docker compose up -d
    
    Then open: http://:8080

Automatic builds (Forgejo Actions)

The Dockerfile is built and published to the registry with this tagging strategy:

Tag When it updates
sha-xxxxxxx Every push to main or a v* tag (immutable per commit)
vX.Y.Z Only when a release tag (v*) is pushed
latest Only when a release tag (v*) is pushed — always points to the newest release

So docker compose pull (using :latest) always gets the latest released version, while :sha-... lets you pin any specific commit.

One-time requirements (on the server):

  1. Register a Forgejo Runner on git.majlis.lab (see the Forgejo docs).
  2. Add a secret named REGISTRY_TOKEN in the repo (Settings → Actions → Secrets) with an access token.
  3. Make sure the runner's Docker trusts git.majlis.lab (same insecure-registries as above).

Features

  • 🎬 Movies / 📺 Series with search and filters by genre and grouping (year / decade / genre)
  • ▶️ Currently watching, Watched with 👍 OK / 👎 No rating
  • 🎬 Franchises: detects the franchise and shows the remaining parts with quick add
  • 📁 Custom lists, Watch later, 🔢 Episode progress, 🔁 Rewatch
  • 📊 Statistics: monthly, watch calendar, genres
  • 🎲 Random pick, 📋 List view, 🌙 Light/dark mode, 🔄 Refresh from TMDB
  • ⬇️ Backup (JSON export/import)

Internationalization (i18n)

All UI text lives in public/locales/ (one file per language). The default UI language is Arabic.

  • public/locales/ar.js — Arabic translations
  • public/locales/en.js — English translations

To add a language, create public/locales/<lang>.js, add the matching keys, and include the file in index.html. Switch languages with setLang("<lang>").

Versioning

The project uses Semantic Versioning (MAJOR.MINOR.PATCH):

  • MAJOR — radical/large changes (breaking changes, big rewrites).
  • MINOR — adding/removing a feature or medium changes.
  • PATCH — small fixes and tweaks only.

To release a new version:

npm run release -- major    # or: minor | patch

This bumps package.json, commits, and tags vX.Y.Z. Pushing the tag builds and publishes the versioned Docker image. See CHANGELOG.md for the release history.

Notes

  • Language: Arabic UI, metadata (titles and descriptions) in English from TMDB
  • Requires internet for TMDB (search, images, cast, franchises)
  • Data is stored locally only — nothing is uploaded anywhere