A self-hosted web application for tracking TV shows and Movies that need to be updated on your Jellyfin media server.
- Frontend: React + Vite + TypeScript + Tailwind CSS
- Backend: Python + FastAPI + Uvicorn
- Database: SQLite with SQLModel
- Containerization: Docker + docker-compose
- Track TV shows and Movies
- CRUD operations for show management
- Simple, clean interface
- Fully containerized for easy deployment
- Docker
- Docker Compose
-
Clone the repository:
git clone <repository-url> cd Media-Tracker
-
Start the application with Docker Compose:
docker-compose up --build
-
Access the application:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Documentation: http://localhost:8000/docs
To run without Docker:
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reloadcd frontend
npm install
npm run devMedia-Tracker/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI entrypoint
│ │ ├── models.py # SQLModel database models
│ │ ├── schemas.py # Pydantic schemas
│ │ ├── database.py # Database connection
│ │ ├── crud.py # CRUD operations
│ │ └── api.py # API routes
│ ├── requirements.txt
│ └── Dockerfile
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ ├── api/
│ │ ├── App.tsx
│ │ └── main.tsx
│ ├── package.json
│ └── Dockerfile
└── docker-compose.yml
GET /health- Health checkGET /- Root endpointGET /media- List all showsPOST /media- Create a new showPUT /media/{id}- Update a showDELETE /media/{id}- Delete a show
- Integration with Jellyfin API
- Automated episode tracking
- Notifications for new episodes
- User authentication
- Show metadata from TMDB
DATABASE_URL: Database connection string (defaults to SQLite in./backend/data).ALLOW_ORIGINS: Comma-separated list of allowed CORS origins (defaults tohttp://localhost:3000,http://localhost:5173).API_KEY: Optional API key for write operations. If set, requests that create/update/delete media must send headerX-API-Key.RATE_LIMIT_REQUESTS: Requests allowed per window per client IP (default 60).RATE_LIMIT_WINDOW_SECONDS: Window length in seconds (default 60).TMDB_API_KEY: API key for The Movie Database integration (required for metadata search/enrich).MEDIA_CACHE_DIR: Directory to cache poster/backdrop images (defaults todata/cache, persisted via the backend volume).
MIT