- Added User Authentication section with security features
- Updated Frontend Interface section to note authentication requirement
- Updated Database Schema with users table and new channel/video fields
- Updated Database Layer architecture with User model details
- Updated Dependencies to include Flask-Login and bcrypt
- Documented user data isolation and multi-tenant architecture
- Added first-time setup instructions for registration
Documentation now reflects:
- Complete authentication system
- User-scoped data model
- Enhanced video metadata fields
- Security best practices
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created base.html template with navigation and flash messages
- Created dashboard.html for video listing sorted by date
- Created channels.html for channel management
- Created add_channel.html with subscription form
- Created watch.html with HTML5 video player
- Created static/style.css with YouTube-inspired dark theme
- Updated main.py with frontend routes:
- / (index): Dashboard with all videos
- /channels: Channel management page
- /add-channel: Add new channel form (GET/POST)
- /watch/<video_id>: Video player page
- Added new API endpoints:
- /api/videos/refresh/<channel_id>: Refresh channel videos
- /api/video/stream/<video_id>: Stream/download video files
- Enhanced /api/download/<video_id> with status checks
- Updated CLAUDE.md with comprehensive frontend documentation
Features:
- Video grid with thumbnails and download status badges
- Inline download buttons for pending videos
- Channel subscription and refresh functionality
- HTML5 video player for downloaded videos
- Auto-refresh during video downloads
- Responsive design for mobile/desktop
- Flash message system for user feedback
- Dark theme with hover effects and animations
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created docker-compose.yml with 4 services:
- postgres: PostgreSQL 16 database with persistent volume
- redis: Redis 7 message broker
- app: Flask web application (port 5000)
- celery: Celery worker for async downloads
- Created Dockerfile with Python 3.14, FFmpeg, and uv
- Added psycopg2-binary dependency for PostgreSQL driver
- Updated database.py to use DATABASE_URL environment variable
- Supports PostgreSQL in production
- Falls back to SQLite for local development
- Updated celery_app.py to use environment variables:
- CELERY_BROKER_URL and CELERY_RESULT_BACKEND
- Created .env.example with all configuration variables
- Created .dockerignore to optimize Docker builds
- Updated .gitignore to exclude .env and Docker files
- Updated CLAUDE.md with comprehensive Docker documentation:
- Quick start with docker-compose commands
- Environment variable configuration
- Local development setup instructions
- Service architecture overview
All services have health checks and automatic restart configured.
Start entire stack with: docker-compose up
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added yt-dlp, celery, and redis dependencies to pyproject.toml
- Extended VideoEntry model with download tracking fields:
- download_status (enum: pending, downloading, completed, failed)
- download_path, download_started_at, download_completed_at
- download_error, file_size
- Created celery_app.py with Redis broker configuration
- Created download_service.py with async download tasks:
- download_video() task downloads as MP4 format
- Configured yt-dlp for best MP4 quality with fallback
- Automatic retries on failure (max 3 attempts)
- Progress tracking and database updates
- Added Flask API endpoints in main.py:
- POST /api/download/<video_id> to trigger download
- GET /api/download/status/<video_id> to check status
- POST /api/download/batch for bulk downloads
- Generated and applied Alembic migration for new fields
- Created downloads/ directory for video storage
- Updated .gitignore to exclude downloads/ directory
- Updated CLAUDE.md with comprehensive documentation:
- Redis and Celery setup instructions
- Download workflow and architecture
- yt-dlp configuration details
- New API endpoint examples
Videos are downloaded as MP4 files using Celery workers.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added SQLAlchemy 2.0 and Alembic 1.13 dependencies
- Created models.py with Channel and VideoEntry ORM models
- Created database.py for database configuration and session management
- Initialized Alembic migration system with initial migration
- Updated feed_parser.py with save_to_db() method for persistence
- Updated main.py with database initialization and new API routes:
- /api/feed now saves to database by default
- /api/channels lists all tracked channels
- /api/history/<channel_id> returns video history
- Updated .gitignore to exclude database files
- Updated CLAUDE.md with comprehensive ORM and migration documentation
Database uses SQLite (yottob.db) with upsert logic to avoid duplicates.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created feed_parser.py module with YouTubeFeedParser and FeedEntry classes
- Refactored main.py to focus on Flask routing with two endpoints:
- GET / for homepage
- GET /api/feed for REST API with query parameters
- Updated CLAUDE.md with new architecture documentation
- Implemented clean separation between core logic and web server layers
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>