design.md 6.2 KB

Design Document

Overview

The YouTube Downloader App is a standalone desktop application built with Electron that allows users to download YouTube videos with a comprehensive interface for managing multiple downloads. The application provides native system integration for file management, binary execution (yt-dlp/ffmpeg), and desktop-native user experience. The design follows a dark theme with a professional video management interface similar to GrabZilla, featuring a header, input section, video list, and control panel.

Architecture

Component Structure

VideoDownloader (Main Container)
├── Header (App branding and window controls)
├── InputSection (URL input and configuration)
├── VideoList (Table-style list of videos)
└── ControlPanel (Action buttons and status)

Technology Stack

  • Desktop Framework: Electron (main process + renderer process)
  • Frontend: HTML5, Tailwind CSS, Vanilla JavaScript
  • System Integration: Node.js APIs for file system, process management
  • Binary Integration: yt-dlp and ffmpeg local binaries
  • IPC: Secure Inter-Process Communication between main and renderer
  • Styling: Tailwind CSS with custom color variables from Figma
  • Layout: CSS Grid and Flexbox for responsive design
  • Icons: SVG icons as provided in Figma design

Components and Interfaces

1. Header Component

  • Purpose: App branding and window controls
  • Elements:
    • App logo with blue background (#155dfc)
    • App title "GrabZilla 2.0.0" (customizable for YouTube Downloader)
    • Window control buttons (minimize, maximize, close)
  • Styling: Dark header (#0f172b) with bottom border

2. Input Section Component

  • Purpose: URL input and download configuration
  • Elements:
    • Large textarea for YouTube URLs (placeholder: "Paste YouTube/Vimeo URLs here (one per line)...")
    • "Add Video" button (primary blue #155dfc)
    • "Import URLs" button (secondary with border)
    • Save path selector
    • Default quality dropdown (1080p, 720p, 4K options)
    • Conversion format dropdown (None, H264, ProRes, DNxHR, Audio only)
    • Filename pattern input
  • Styling: Dark background (#314158) with rounded corners

3. Video List Component

  • Purpose: Display and manage video queue
  • Structure: Grid-based table layout with columns:
    • Checkbox for selection
    • Drag handle icon
    • Video thumbnail (64x48px, rounded corners)
    • Video title (truncated with ellipsis)
    • Duration
    • Quality selector dropdown
    • Conversion format dropdown
    • Status badge (Ready, Downloading, Converting, Completed, Error)
  • Interactive Elements:
    • Dropdown menus for quality and format selection
    • Status badges with integrated progress display:
    • Ready: Green badge (#00a63e)
    • Downloading: Green badge with progress percentage (e.g., "Downloading 65%")
    • Converting: Blue badge (#155dfc) with progress percentage (e.g., "Converting 42%")
    • Completed: Gray badge (#4a5565)
    • Error: Red badge (#e7000b)

4. Control Panel Component

  • Purpose: Bulk actions and download management
  • Elements:
    • "Clear List" button (secondary)
    • "Update Dependencies" button (secondary)
    • "Cancel Downloads" button (red #e7000b)
    • "Download Videos" button (primary green #00a63e)
    • Status message area

Data Models

Video Object

{
  id: string,
  url: string,
  title: string,
  thumbnail: string,
  duration: string,
  quality: string, // "720p", "1080p", "4K", etc.
  format: string, // "None", "H264", "ProRes", "DNxHR", "Audio only"
  status: string, // "ready", "downloading", "converting", "completed", "error"
  progress: number, // 0-100 for downloading/converting
  filename: string
}

App State

{
  videos: Video[],
  savePath: string,
  defaultQuality: string,
  defaultFormat: string,
  filenamePattern: string,
  isDownloading: boolean
}

Design System Variables

Colors (Exact Figma Values)

  • Primary Blue: #155dfc
  • Success Green: #00a63e
  • Error Red: #e7000b
  • Background Dark: #1d293d
  • Header Dark: #0f172b
  • Card Background: #314158
  • Border Color: #45556c
  • Text Primary: #ffffff
  • Text Secondary: #cad5e2
  • Text Muted: #90a1b9
  • Text Disabled: #62748e

Typography

  • Font Family: Inter (Regular, Medium)
  • Sizes:
    • Headers: 16px (Medium)
    • Body: 14px (Regular)
    • Small: 12px (Regular/Medium)
  • Line Heights: 16px, 20px, 24px
  • Letter Spacing: -0.1504px, -0.3125px

Spacing & Layout

  • Container Padding: 16px
  • Component Gaps: 8px, 12px, 16px
  • Border Radius: 4px (small), 6px (medium), 8px (large)
  • Grid Columns: Auto-fit layout for video list
  • Video Item Height: 64px

Error Handling

URL Validation

  • Validate YouTube/Vimeo URL format
  • Display inline error messages for invalid URLs
  • Prevent duplicate URLs in the list

Download Errors

  • Network connectivity issues
  • Video unavailable/private
  • Format not supported
  • Insufficient storage space
  • Display error badges and detailed error messages

User Feedback

  • Loading states for all async operations
  • Progress indicators for downloads
  • Success/error notifications
  • Status messages in the bottom panel

Testing Strategy

Unit Tests

  • URL validation functions
  • Video object manipulation
  • State management functions
  • Format conversion utilities

Integration Tests

  • Complete download workflow
  • UI component interactions
  • Error handling scenarios
  • Progress tracking accuracy

User Interface Tests

  • Responsive design across screen sizes
  • Keyboard navigation
  • Accessibility compliance (ARIA labels, focus management)
  • Visual regression testing against Figma design

Performance Tests

  • Multiple simultaneous downloads
  • Large video file handling
  • Memory usage optimization
  • UI responsiveness during operations

Accessibility Considerations

  • Keyboard Navigation: Full keyboard support for all interactive elements
  • Screen Readers: Proper ARIA labels and descriptions
  • Color Contrast: Ensure sufficient contrast ratios for all text
  • Focus Management: Clear focus indicators and logical tab order
  • Status Announcements: Live regions for download progress updates