Paperclip Agent 20be1d73be feat: implement minimal vertical slice — backend, worker, frontend, docker-compose
- FastAPI backend with /health, /api/search, /api/downloads CRUD + retry
- Provider abstraction (mock provider for architecture validation)
- SQLAlchemy models with DownloadStatus state machine
- Python polling worker simulating job lifecycle without real downloads
- React/Vite/TypeScript frontend: search, results table, download queue with progress
- Docker Compose wiring all services with postgres healthcheck
- .env.example, updated README and .gitignore

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-13 17:54:45 +02:00

project-kino

Docker-hosted web GUI for searching and downloading movies/series, with Jellyfin integration.

Quick Start

cp .env.example .env
# edit .env — set DB_PASSWORD, SECRET_KEY, JELLYFIN_URL, JELLYFIN_API_KEY
docker compose up --build

Architecture

frontend (React/Vite + nginx)
    └─ /api/* → backend (FastAPI)
                    └─ PostgreSQL
worker (Python polling)
    └─ reads pending downloads from DB, simulates job execution

API

Method Path Description
GET /health Health check
GET /api/search?q= Search across configured providers
POST /api/downloads Queue a download
GET /api/downloads List all downloads
GET /api/downloads/:id Get one download
POST /api/downloads/:id/retry Retry a failed download

Providers

Providers are operator-configured search sources. The default mock provider returns test data. Add real providers by implementing BaseProvider in backend/src/providers.py and registering them in the _registry.

No hardcoded piracy sources. All download URLs come from operator-configured providers only.

Configuration

All secrets via environment variables or .env (never committed):

Variable Description
DB_PASSWORD PostgreSQL password
SECRET_KEY App secret key
JELLYFIN_URL Jellyfin base URL
JELLYFIN_API_KEY Jellyfin API key
MEDIA_PATH Local path for downloaded media
Description
No description provided
Readme 3.1 MiB
Languages
Python 95.1%
JavaScript 3.1%
TypeScript 0.6%
HTML 0.6%
CSS 0.4%
Other 0.2%