A Netflix-style catalog for PlayStation 1 games. Browse a curated grid of titles, open a details view with cover, screenshots, and disc metadata. React frontend, PocketBase backend.
PSflix is self-hosted software — run your own instance (see the user guide or the local dev section below).
See AGENTS.md for the full breakdown of psflix_design/, pocketbase-docs/, pb_schema.json, and the conventions to follow when working on this repo.
- Design system:
psflix_design/design/DESIGN.md - PocketBase docs mirror:
pocketbase-docs/ - Backend schema (source of truth):
pb_schema.json
The original 10-stage build plan is archived at archive/specs/README.md. All stages are done; new work happens directly against the source tree.
Implemented in Stage 1 (archive/specs/build-stages/01-scaffold.md). Bring up the full local stack with:
npm install
npm run pocketbase:download # fetches the PocketBase binary into bin/
npm run build # builds the SPA into dist/
npm run pocketbase:serve # serves API + SPA at http://127.0.0.1:8090
The serve script applies pb_migrations/ and loads pb_hooks/ automatically. For frontend work with hot reload, run npm run dev (Vite targets the local PocketBase by default).
The repo runs four checks per PR — these are the green-light gates configured in Stage 8 (archive/specs/build-stages/08-quality-gates.md):
| Command | What it does |
|---|---|
npm run lint |
ESLint + Prettier (check only) |
npm run typecheck |
tsc --noEmit |
npm run test |
Vitest unit + component tests |
npm run test:cov |
Vitest with coverage report (target: ≥ 70% on src/features/** and src/components/**) |
npm run test:e2e |
Playwright e2e (Chromium + iPhone 13) against the local dev server |
The same four scripts are run by CI on every push and PR.
A pre-commit hook (Husky + lint-staged) runs ESLint and Prettier on staged files. Install it locally with npm install (it runs husky via the prepare script).
Produce the static artifact that ships inside the Docker image:
npm run build # outputs dist/
npm run verify:build # boots dist/ via a local server and curls it
Pushing a v* git tag builds the SPA, builds a Docker image (PocketBase + dist/ + pb_migrations/ + pb_hooks/) and pushes it to harbor.alexklingenbeck.de/my/psflix:<version>. The Flux cluster runs the image. See AGENTS.md.