Commit Graph

31 Commits

Author SHA1 Message Date
Gan, Jimmy 296422ff57 remove unused ffmpeg from Dockerfile (saves ~450MB) 2026-07-09 10:52:03 +08:00
Gan, Jimmy 271ad96612 fix: j/k only navigates sidebar when video selected, add publish_date to detail view 2026-07-09 10:43:05 +08:00
Gan, Jimmy 575fdabbc0 fix: proxy support for transcript download, scroll-based mark-read, enable agent worker 2026-07-09 03:39:08 +08:00
Gan, Jimmy 672ad58ca4 fix: agent tab effect condition vs tab label mismatch 2026-07-09 00:48:59 +08:00
Gan, Jimmy ffa47a1335 sprint1: agent queue worker, proxy support, auto-mark-on-navigate-away, test fixes 2026-07-08 22:05:05 +08:00
Gan, Jimmy a154bc7978 feat: notes + agent queue, frontend rebuild, pip mirror, gitignore sync_rotation.json
- Add video_notes table and agent_queue table for persistent notes and AI agent tasks
- Add API endpoints: POST/GET /api/notes/{id}, POST /api/notes/migrate, agent queue endpoints
- Rebuild frontend: fix duplicate loadVideos(), non-blocking localStorage migration, notes UI
- Switch pip install to Tsinghua mirror for faster downloads in China
- Add backend/sync_rotation.json to .gitignore (runtime state)
2026-07-08 02:23:00 +08:00
Gan, Jimmy 77c6a9d963 sprint: fixes batch — saveNote history, DeepSeek retry, channel rotation, test fixes, docker env, blocking transcript, sync errors 2026-06-28 17:08:32 +08:00
Gan, Jimmy 5c641903c9 fix: clickable channel badge filters by channel; fix cat dropdown value; clean up saveNote 2026-06-27 01:40:06 +08:00
Gan, Jimmy 94ef5e2bb2 feat: channel/category dropdown with API filter; AI auto-categories embedded 2026-06-24 18:20:12 +08:00
Gan, Jimmy 63d42594d0 feat: restore manual sync button — safe at ~50 units/sync 2026-06-24 02:59:16 +08:00
Gan, Jimmy d87c2aba44 feat: RSS hybrid fetcher — 221 channels, 2,414 videos, ~50 units (was 2,000) 2026-06-24 02:47:34 +08:00
Gan, Jimmy d5af5e9b7d feat: rotate 50 channels daily — covers all 229 over 5 days 2026-06-24 02:38:04 +08:00
Gan, Jimmy 8ce359764f feat: 50 channels, daily 3AM cron sync, countdown timer, remove manual button 2026-06-24 02:35:22 +08:00
Gan, Jimmy 1c4f9dc713 fix: decode HTML entities in titles; add note timestamps; reorder layout — title first, AI digest below 2026-06-24 02:18:18 +08:00
Gan, Jimmy 5bfd72ab3d feat: add per-video notes with localStorage, notes tab filter 2026-06-24 01:42:12 +08:00
Gan, Jimmy f74a428521 fix: proper scroll containment — no body scroll, panel overflow-y with bind:this ref 2026-06-24 01:29:34 +08:00
Gan, Jimmy 6fe4c32a2f fix: use tick() for panel scroll reset on video switch 2026-06-24 01:24:45 +08:00
Gan, Jimmy 404d57f0b1 feat: redesigned UI — AI Digest hero, keyboard nav (j/k/↑↓), dark/light mode, description-based summaries 2026-06-24 01:17:56 +08:00
Gan, Jimmy 7b485abfbb feat: DeepSeek API + transcript fixes; add OAuth captions scope 2026-06-24 00:50:36 +08:00
Gan, Jimmy 963e9dbdf1 feat: switch summarizer to DeepSeek API, add cookie support for transcripts 2026-06-24 00:38:13 +08:00
Gan, Jimmy a0ffa41c9e feat: replace yt-dlp cookies with YouTube Data API v3 OAuth
- Add auth.py: OAuth credential manager with auto-refresh
- Rewrite fetcher.py: use googleapiclient subscriptions/search
- Add google-auth, google-api-python-client dependencies
- Update docker-compose for config volume mount
- Add .gitignore for secrets (client_secret.json, token.pickle)
- Live test: 198 videos ingested from 229 channels
2026-06-24 00:14:16 +08:00
Gan, Jimmy dba070531e Add --extractor-args youtubetab:skip=authcheck to yt-dlp to bypass blocking
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 13:55:09 +08:00
Gan, Jimmy 7f943b86a2 Merge live integration test into unified run_tests.sh and remove run_live_test.sh 2026-06-04 11:19:20 +08:00
Gan, Jimmy 5e91a1f056 Inject custom requests.Session with browser User-Agent into YouTubeTranscriptApi
- Add requests import to summarizer.py
- Configure requests.Session with macOS Chrome User-Agent and English Accept-Language headers
- Initialize YouTubeTranscriptApi with custom http_client to bypass YouTube anti-scraping blocks on residential IPs

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 11:13:17 +08:00
Gan, Jimmy 08fbaf7d78 Add automated run_live_test.sh integration test script
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 11:07:07 +08:00
Gan, Jimmy 85fd40acf8 Fix youtube-transcript-api call structure and make test assertions environment-robust
- Instantiate YouTubeTranscriptApi class and call list() as required by v1.2.4
- Decorate async database fixture with pytest_asyncio.fixture
- Replace hardcoded base URL string assertion in test_summarizer.py with dynamized summarizer.BASE_URL value to support proxy profiles

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 10:38:50 +08:00
Gan, Jimmy 7f4de7e8d2 Auto-detect and inject proxy configurations in run_tests.sh
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 11:50:07 +08:00
Gan, Jimmy eae72dbfc0 Add run_tests.sh test runner script
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 11:22:33 +08:00
Gan, Jimmy fe4d019ffa Add standard .gitignore configuration
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 11:15:41 +08:00
Gan, Jimmy 1e67eeb25b Add automated unit and mock integration test suite
- Configure conftest.py with pytest tmp_path DB isolation fixtures
- Add test_db.py for schema connection validations
- Add test_fetcher.py with mocked yt-dlp subprocess parser checks
- Add test_summarizer.py with mocked transcripts and Claude API requests
- Add test_main.py for FastAPI router endpoints and state updates

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 11:15:27 +08:00
Gan, Jimmy dbd3dc0237 Initial commit: Add T YouTube text-based reader web app
- FastAPI backend running on port 8000
- Svelte 5 runes frontend dashboard supporting Read/Skip state toggles
- YouTube subscription feed scraper using yt-dlp & Netscape cookies.txt
- Transcript downloader and Claude 3.5 Haiku summarizer via bytecatcode proxy
- Multi-stage Dockerfile and docker-compose.yml configuration

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 11:00:34 +08:00