Personal streaming service watch time tracker. Monitors and displays screen time across Netflix, YouTube TV, Amazon Video, and other streaming platforms.
- 📊 Dashboard View: Monthly watch time totals per service
- 📈 Detailed Analytics: Historical trends, shows watched, episode breakdowns
- 🔄 Automated Scraping: Daily collection of viewing history
- 🎯 Single User: Simple setup, no authentication required
- Backend: Go with SQLite database
- Frontend: React with Tailwind CSS
- Infrastructure: Docker Compose
- Scraping: chromedp (headless Chrome)
- Docker and Docker Compose
- Or: Go 1.21+, Node.js 18+, Chrome/Chromium
-
Copy the example config:
cp config.example.yaml config.yaml
-
Export authentication cookies for your streaming services:
# Netflix ./backend/export-cookies --service netflix # YouTube TV ./backend/export-cookies --service youtube_tv # Amazon Video ./backend/export-cookies --service amazon_video
The tool will:
- Open a browser window for you to log in
- Automatically extract and validate cookies
- Update
config.yamlwith the correct configuration
See Cookie Export Tool Documentation for details.
-
(Optional) Configure scraping schedule (default: daily at 3 AM)
docker-compose up -dAccess the app at http://localhost:3000
Backend:
cd backend
go mod download
go run cmd/server/main.goFrontend:
cd frontend
npm install
npm startCookies typically expire after 30-90 days. To maintain your scrapers:
Check if cookies are valid:
./backend/export-cookies --service netflix --validate
./backend/export-cookies --service youtube_tv --validate
./backend/export-cookies --service amazon_video --validateRefresh expired cookies:
./backend/export-cookies --service youtube_tvThe tool will open a browser, you log in, and it automatically updates your config.
GET /api/services- List all services with current month totalsGET /api/services/:id/history- Get detailed watch historyPOST /api/scrape/:service- Manually trigger scrapingGET /api/health- Health check
See IMPLEMENTATION_PLAN.md for detailed development stages and technical decisions.