Web application to manage your movies, series and books library. Track watched/read, pending, and in-progress items with automatic TMDB and Google Books synchronization.
π Read this in: EspaΓ±ol
https://watchlog-vtlx.netlify.app/ - Hosted on Netlify
See all features in action: authentication, adding movies with poster search, rating system, filters, and more.
- Description
- Features
- Requirements
- Installation
- Usage
- Deploy
- Technologies
- Project Structure
- Development
- License
- Resources
- Future Improvements
Web application to manage your movies, series and books library. Track watched/read, pending, and in-progress items with automatic TMDB and Google Books synchronization.
WatchLog was born from the need to have a single centralized place to manage all your entertainment content. Tired of using third-party applications or CSVs to record what movies you watched.
Future vision: Expand beyond movies to include TV series and books. A unified space where you own your data and can access it from any device, anytime.
- π― Centralized - All your content in one place
- π Private - Your data, your server, no spying algorithms
- π± Accessible - From mobile, tablet or desktop
- π Open - Open source, you can fork and customize
- π¬ Movies, Series & Books - Complete CRUD for movies, TV series and books
- π Secure Authentication - Token-based with database validation
- πΎ Persistence - All data stored in PostgreSQL (Supabase)
- Movies: Pending, Watched, Favorite
- Series: Pending, Watched, Favorite, Watching (track current season with progress bar)
- Books: Pending, Reading, Read, Favorite (track reading progress via status and rating)
- Track seasons watched for series with visual progress indicator
- Shows 0% progress for pending series to avoid confusion
- π Global Search - By title, year, or director
- π Filter by Status - View content by current status
- β Filter by Rating - Find highly-rated content
- π¬ Filter by Genre - Organize by content type
- π Statistics - Visual breakdown by status
- πΌοΈ Automatic Posters - TMDB integration for covers
- π Books Metadata - Google Books integration for covers, pages, genres and ISBN
- β Rating System - Rate with half-star precision
- π₯ Export Data - Download library as CSV or JSON
- π± Responsive Design - Mobile, tablet and desktop
- β‘ Ultra Fast - Built with Vite
- π Dark Theme - Easy on the eyes
π Click "Fork" button on GitHub to create your own copy.
Then clone your fork:
git clone https://github.com/YOUR-USERNAME/WatchLog.git
cd WatchLognpm install- Create a free account on Supabase
- Create a new project
- Go to SQL Editor and execute
SUPABASE_SETUP.sqlfrom this repo - Copy your credentials:
VITE_SUPABASE_URL: Settings β API β Project URLVITE_SUPABASE_ANON_KEY: Settings β API β anon key
Create a .env file in the root (never commit this!):
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your_anon_key
VITE_TMDB_API_KEY=your_tmdb_api_key
VITE_AUTH_TOKEN=your_secret_token_here.env to .gitignore - it's already there, never push this file!
Reference: See .env.example for the structure
- Register on TMDB
- Create an API key (free tier available)
- Add it to
.envasVITE_TMDB_API_KEY
Generate a strong random token (no spaces):
# Linux/Mac
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# Or use any online generator: https://random.org/strings/Then:
- Add it to
.envasVITE_AUTH_TOKEN - Add it to Supabase: SQL Editor β Insert into
valid_tokenstable
npm run dev- ποΈ Switch between Movies, Series and Books tabs
- π Search movies/series by title, year, or director
- π Search books by title, author or ISBN
- π Filter by status (Pending, Watched, Favorite, Watching)
- β Filter by minimum rating
Sign in with your token to:
- β Add new movies/series
- β Rate with half-star precision
- π― Change status
- ποΈ Delete items
- πΊ Track current season with +/- buttons
- π Progress bar shows seasons watched
- π₯ Auto-sync from TMDB
- π Add books using Google Books search (by title, author or ISBN)
- π Avoid duplicates by checking existing library ISBNs
- π§ Fill missing ISBNs in existing books using Google Books
- Push to GitHub
- Connect to Netlify
- Automatic configuration:
- Build:
npm run build - Publish:
dist
- Build:
- Add environment variables in dashboard
- β¨ Automatic deploy on each push
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | React + Vite | Interactive UI |
| Styles | Tailwind CSS | Responsive styling |
| Icons | Lucide React | Modern icons |
| Backend | Supabase | PostgreSQL + REST API |
| External Data | TMDB API | Movie information |
| Auth | Token-based | Security |
watchlog/
βββ src/
β βββ app.jsx # Main application component
β βββ config.js # Configuration
β βββ index.jsx # Entry point
β βββ api/
β β βββ supabase.js # Supabase REST client
β β βββ supabase-client.js # Supabase client instance
β β βββ tmdb.js # TMDB API client
β βββ auth/
β β βββ useAuth.js # Authentication hook
β β βββ LoginModal.jsx # Login modal component
β βββ components/
β β βββ common/ # Reusable components
β β β βββ StarRating.jsx
β β β βββ PosterImage.jsx
β β β βββ DeleteButton.jsx
β β β βββ StatusSelector.jsx
β β βββ movies/ # Movie-specific components
β β β βββ MovieCard.jsx
β β βββ series/ # Series-specific components
β β β βββ SeriesCard.jsx
β β βββ books/ # Book-specific components
β β β βββ BookCard.jsx
β β β βββ BookSearchForm.jsx
β β βββ shared/ # Shared UI components
β β β βββ AddItemForm.jsx
β β β βββ Filters.jsx
β β β βββ Stats.jsx
β β β βββ Export.jsx
β βββ styles/
β β βββ buttonStyles.js # Button styling constants
β βββ utils/
β βββ ratingUtils.js
β βββ exportUtils.js
β βββ dateUtils.js
βββ public/
βββ index.html
βββ package.json
βββ vite.config.js
βββ .env.example
βββ README.md
npm run dev # Development with HMR
npm run build # Optimized build
npm run preview # Build previewUse .env.example as reference for new contributors.
This project is under the MIT license.
You are free to:
- β Use in personal projects
- β Use in commercial projects
- β Modify the code
- β Distribute
Conditions:
- π Include copy of the license
See LICENSE for more details.
- CSV/JSON export functionality
- Advanced filters (by year range, director, etc.)
- Sort options (by rating, date added, etc.)
- Separate
seriestable in database - TMDB TV API integration
- Series card component with seasons tracking
- Series management (add, edit, delete, rate)
- Search and filter for series
- Track current season with progress bar
- Consistent UI between movies and series
- Recent updates sorting (by
updated_at) - Display "Updated X hours ago" on cards (using
updated_at) - Loading spinners during data fetch
- Separate
bookstable in database - Google Books API integration
- Book card component with author/ISBN and pages
- ISBN search capability (search and metadata lookup)
- Books management (add, edit, delete, rate)
- Custom lists and collections
- Dark/Light theme toggle
- Change languaje ...
