No description
  • HTML 68.7%
  • TypeScript 31%
  • CSS 0.2%
Find a file
Olmo Jiménez Alaminos a9efc0ad55
Some checks failed
Backend CI / lint (push) Failing after 0s
Backend CI / test-unit (push) Failing after 0s
Backend CI / test-integration (push) Failing after 1s
Backend CI / build-dev (push) Has been skipped
Frontend CI / lint (push) Failing after 0s
E2E / playwright (push) Failing after 0s
Frontend CI / build-dev (push) Has been skipped
Frontend CI / test-unit (push) Failing after 1s
Frontend CI / build-prod (push) Failing after 1s
Backend CI / build-prod (push) Failing after 13s
docs: replace Turborepo boilerplate README with Kultrak-specific docs
Rewrites the root README to describe Kultrak — tech stack, repo layout,
prerequisites, dev/migration/test commands, external API env vars, and
deployment notes. Also picks up incidental working-tree changes to the
Forgejo backend workflow (prettier-formatted, pinned catthehacker image
to act-22.04) and package-lock.json.
2026-05-21 18:51:37 +02:00
.claude . 2026-04-15 20:43:12 +02:00
.forgejo/workflows docs: replace Turborepo boilerplate README with Kultrak-specific docs 2026-05-21 18:51:37 +02:00
.serena . 2026-03-23 19:57:07 +01:00
apps feat(media): add Comenzar button and gate Valorar while in progress 2026-05-19 23:00:23 +02:00
deploy chore(domain): migrate to kultrak.com (keep old domain) 2026-05-16 12:36:31 +02:00
docs/superpowers docs: implementation plan for frontend SSR 2026-05-14 17:21:08 +02:00
e2e refactor(rating): reword MediaLog rating scale to disliked/indifferent/entertained/liked/loved 2026-05-14 20:17:16 +02:00
.dockerignore chore: gitlab ci 2026-03-19 22:30:03 +01:00
.gitignore chore: ignore .worktrees/ for isolated workspace dirs 2026-04-26 16:09:14 +02:00
.gitlab-ci.e2e.yml ci(gitlab): disable lint, test and e2e jobs via hidden-job prefix 2026-05-14 21:00:14 +02:00
.gitlab-ci.yml ci(gitlab): disable lint, test and e2e jobs via hidden-job prefix 2026-05-14 21:00:14 +02:00
.npmrc feat(create-turbo): create basic 2025-12-18 19:13:29 +01:00
CLAUDE.md feat(e2e): Phase 5 — Playwright stack with mocked external APIs 2026-04-28 17:23:31 +02:00
docker-compose.test.yml chore(test): add postgres-test docker-compose for fast local integration runs 2026-04-26 17:01:40 +02:00
package-lock.json docs: replace Turborepo boilerplate README with Kultrak-specific docs 2026-05-21 18:51:37 +02:00
package.json feat(e2e): Phase 5 — Playwright stack with mocked external APIs 2026-04-28 17:23:31 +02:00
README.md docs: replace Turborepo boilerplate README with Kultrak-specific docs 2026-05-21 18:51:37 +02:00
turbo.json chore: prettier and eslint 2026-03-25 16:13:48 +01:00

Kultrak

Media tracking platform for movies, TV shows, books and video games. Keep a personal collection with ratings and start/end dates, manage a watchlist, browse a calendar of upcoming releases, follow other users via an activity feed, and import or sync titles from Goodreads, TMDB, IGDB, Google Books and OpenLibrary.

Production: https://kultrak.com · API: https://api.kultrak.com

Tech stack

  • Backend — NestJS 11, TypeORM 0.3, PostgreSQL 18, Socket.io, JWT + Google OAuth
  • Frontend — Angular 21 (standalone components, SSR, PWA), Tailwind CSS 4 with the tw: prefix
  • Monorepo — Turborepo + npm workspaces
  • Tests — Vitest (unit + integration), Testcontainers for Postgres, Playwright for E2E

Repo layout

apps/
  backend/         NestJS REST API
  frontend/        Angular 21 SPA + SSR + PWA
packages/
  core-domain/     Shared domain types (placeholder)
e2e/               Playwright specs, page objects, mock API server
deploy/            Production docker-compose + sample env files
docs/              Design docs and implementation plans

Prerequisites

  • Node >= 18 (Docker images use Node 24-alpine)
  • npm 10.2.5 (pinned via packageManager)
  • Docker (required for integration tests via Testcontainers and for the E2E stack)
  • PostgreSQL 18, if you prefer to run the database directly instead of via Docker

Getting started

npm install

Create apps/backend/.env (no committed example — use deploy/backend.sample.env as a reference) and fill in at least the TMDB, IGDB, Google OAuth and Google Books credentials listed in External integrations.

Then, from the repo root:

npm run dev           # runs backend + frontend together via Turbo

Or run each app individually:

cd apps/backend  && npm run start:dev   # NestJS in watch mode
cd apps/frontend && npm start           # ng serve

Other root tasks: npm run build, npm run lint, npm run check-types, npm run format.

Database & migrations

The TypeORM data source runs with synchronize: false — migrations are authoritative. From apps/backend:

npm run migration:generate -- --name=MyChange
npm run migration:run
npm run migration:revert

Testing

Scope Command (run from) Notes
Backend unit npm test (apps/backend) Vitest, no DB, no network.
Backend integration npm run test:int Real Postgres via Testcontainers. Set USE_LOCAL_TEST_DB=1 to reuse docker-compose.test.yml.
Backend coverage npm run test:cov Unit + coverage.
Frontend npm test (apps/frontend) Vitest + jsdom.
End-to-end npx playwright test (e2e) Boots a full Postgres + backend + frontend + mock-API compose stack.

E2E env flags: E2E_SKIP_COMPOSE=1 if the stack is already running, E2E_KEEP_STACK=1 to leave it up between runs.

External integrations

All external APIs are intercepted by e2e/mock-server during E2E runs.

API Purpose Env vars
TMDB Movies, TV shows TMDB_APIKEY, TMDB_BASE_URL
IGDB Video games IGDB_CLIENT_ID, IGDB_SECRET, IGDB_API_URL
Goodreads (scraped) Books GOODREADS_BASE_URL
Google Books Books enrichment GOOGLE_BOOKS_API_KEY, GOOGLE_BOOKS_BASE_URL
OpenLibrary Books OPENLIBRARY_BASE_URL
Google OAuth Sign-in GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_CALLBACK_URL

Deployment

Each app has its own multi-stage Dockerfile. The frontend image builds an Angular SSR bundle served by Express.

Production compose lives in deploy/docker-compose.yml and orchestrates the backend, the frontend, Postgres 18 and a one-shot migration runner, behind Traefik. Images are published to registry.gitlab.com/olmo/kultrak/{backend,frontend}.

Sample env files: deploy/sample.env, deploy/backend.sample.env, deploy/frontend.sample.env.

CI

  • GitLab CI.gitlab-ci.yml triggers per-app child pipelines; .gitlab-ci.e2e.yml runs the E2E pipeline on MRs to main and pushes to main.
  • Forgejo Actions — mirrored workflows live in .forgejo/.

Conventions

In-repo conventions (entity inheritance rules, Tailwind tw: prefix usage, test helpers, commit message style) are documented in CLAUDE.md.

License

UNLICENSED — proprietary, all rights reserved.