Gabriel Kaszewski ead65e6be2 feat: implement multi-provider support in media library
- Introduced IProviderRegistry to manage multiple media providers.
- Updated AppState to use provider_registry instead of a single media_provider.
- Refactored library routes to support provider-specific queries for collections, series, genres, and items.
- Enhanced ProgrammingBlock to include provider_id for algorithmic and manual content types.
- Modified frontend components to allow selection of providers and updated API calls to include provider parameters.
- Adjusted hooks and types to accommodate provider-specific functionality.
2026-03-14 23:59:21 +01:00

k-tv

Self-hosted linear TV channel orchestration. Turns a personal media library into broadcast-style channels.

Stack

  • Backend — Rust (Axum), SQLite/PostgreSQL, Jellyfin
  • Frontend — Next.js 16, React 19, TanStack Query, Tailwind v4, shadcn/ui

Docker

Registry: registry.gabrielkaszewski.dev

Build

NEXT_PUBLIC_API_URL is baked into the frontend bundle at build time — always pass it explicitly.

# Backend
docker build -t registry.gabrielkaszewski.dev/k-tv-backend:latest ./k-tv-backend

# Frontend — NEXT_PUBLIC_API_URL required
docker build \
  --build-arg NEXT_PUBLIC_API_URL=https://tv-api.gabrielkaszewski.dev/api/v1 \
  -t registry.gabrielkaszewski.dev/k-tv-frontend:latest \
  ./k-tv-frontend

Push

docker push registry.gabrielkaszewski.dev/k-tv-backend:latest
docker push registry.gabrielkaszewski.dev/k-tv-frontend:latest

Build + push (one-liner)

docker build -t registry.gabrielkaszewski.dev/k-tv-backend:latest ./k-tv-backend && \
docker push registry.gabrielkaszewski.dev/k-tv-backend:latest && \
docker build \
  --build-arg NEXT_PUBLIC_API_URL=https://tv-api.gabrielkaszewski.dev/api/v1 \
  -t registry.gabrielkaszewski.dev/k-tv-frontend:latest \
  ./k-tv-frontend && \
docker push registry.gabrielkaszewski.dev/k-tv-frontend:latest

Deploy (on server)

docker compose -f compose.yml -f compose.traefik.yml pull
docker compose -f compose.yml -f compose.traefik.yml up -d

Ports

Service Port
Backend 3000
Frontend 3001

Env vars

Var Where Note
NEXT_PUBLIC_API_URL frontend build arg Baked in at build time — must point to the public backend URL
API_URL frontend runtime env Server-side only (Next.js API routes). Set in compose.
DATABASE_URL backend sqlite:///app/data/k-tv.db or postgres DSN
SESSION_SECRET backend Change in production
Description
Self hosted TV broadcast that uses existing media libary
Readme 2.2 MiB
Languages
TypeScript 55.4%
Rust 43.9%
CSS 0.4%
Dockerfile 0.2%