A full-stack application for searching movies and TV shows and finding where to stream them across multiple countries using the JustWatch API.
Screenshots
- π Search for movies and TV shows
- π View streaming offers across 30+ countries
- π° Compare prices with automatic USD conversion
- π¬ Detailed information including genres, runtime, ratings
- π¨ Modern UI with dark mode
- π Sortable and filterable offers table
- π Direct links to streaming platforms
- FastAPI - Modern Python web framework
- uv - Fast Python package manager
- httpx - Async HTTP client
- Pydantic - Data validation
- SvelteKit - Web framework
- TypeScript - Type safety
- Flowbite - UI components
- Vite - Build tool
- pnpm - Package manager
# Start the application
docker-compose up -d
# Access the application at http://localhost:8000
# API Docs: http://localhost:8000/docscd backend
# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate
uv pip install -r pyproject.toml
# Run the server
uv run fastapi dev main.pyThe API will be available at http://localhost:8000
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
GET /api/justwatch/search?q={query}&country={country}- Search for titlesGET /api/justwatch/title/{node_id}- Get title detailsGET /api/justwatch/offers/{node_id}?path={path}- Get offers for a titleGET /api/justwatch/locales?path={path}- Get available locales
cd frontend
# Install pnpm if not already installed
npm install -g pnpm
# Install dependencies
pnpm install
# Run the dev server
pnpm devThe app will be available at http://localhost:5173
cd frontend
pnpm build
pnpm previewPre-built Docker images are automatically published to GitHub Container Registry:
# Pull the latest image
docker pull ghcr.io/ulnanlu/justwatch:latest
# Run it
docker run -p 8000:8000 ghcr.io/ulnanlu/justwatch:latest
# Or use a specific version
docker pull ghcr.io/ulnanlu/justwatch:v1.0.0backend/
βββ main.py # FastAPI application
βββ app/
β βββ api/ # API routes
β βββ models/ # Pydantic models
β βββ services/ # Business logic
βββ pyproject.toml # Dependencies
frontend/
βββ src/
β βββ lib/
β β βββ api/ # API client
β β βββ components/ # Svelte components
β βββ routes/ # SvelteKit routes
βββ package.json
- Search: The frontend sends search queries to the FastAPI backend
- GraphQL: The backend makes GraphQL queries directly to JustWatch's API
- Data Processing: Server-side processing eliminates CORS issues and handles currency conversion
- Display: Results are displayed in a clean, responsive UI using Flowbite components
The original project used client-side requests with CORS proxies. This implementation:
- β Uses server-side requests (no CORS issues)
- β Implements a robust REST API with FastAPI
- β Better error handling and type safety
- β Docker support for easy deployment
- β Automated CI/CD with GitHub Actions
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - see LICENSE file for details
- β Cleaner separation of concerns
- β No dependency on third-party CORS proxies
- FastAPI: Modern, fast web framework for building APIs
- httpx: Async HTTP client for making requests to JustWatch
- Pydantic: Data validation and settings management
- uv: Fast Python package installer and resolver
- SvelteKit: Fast, modern web framework
- Flowbite: Tailwind CSS component library
- TypeScript: Type-safe JavaScript
- Vite: Fast build tool and dev server
- The backend requires Python 3.14+ and uses uv for package management
- The frontend uses pnpm for package management
- Both services must be running for the application to work
- CORS is configured to allow requests from the Vite dev server
Original concept from JustWatch-Search - reimplemented with a proper backend/frontend architecture.

