# Watch Finished Turbo A modern, full-stack video processing system built with Turborepo. Automatically monitors directories, processes videos with HandBrake, and provides a complete web interface for management. ## System Overview ```mermaid graph TB subgraph "User Interfaces" WEB[Web Dashboard
Next.js + React] CLI[Command Line
Node.js CLI] end subgraph "API Service" NEST[NestJS Server
REST + WebSocket] end subgraph "Core Services" WATCH[File Watcher
Chokidar] QUEUE[Task Queue
Background Processing] HANDBRAKE[Video Encoder
HandBrake CLI] end subgraph "Data Storage" DB[(SQLite Database
Files & Tasks)] end subgraph "File System" INPUT[Input Directories
Video Files] OUTPUT[Output Directories
Processed Videos] end WEB --> NEST CLI --> NEST NEST --> WATCH NEST --> QUEUE QUEUE --> HANDBRAKE WATCH --> DB QUEUE --> DB HANDBRAKE --> DB WATCH --> INPUT HANDBRAKE --> OUTPUT style WEB fill:#e3f2fd style NEST fill:#f3e5f5 style DB fill:#e8f5e8 style INPUT fill:#fff3e0 style OUTPUT fill:#e0f2f1 ``` ## Quick Start ### Option 1: Dev Container (Recommended) For the most consistent development experience, use the included dev container: 1. Open in VS Code 2. When prompted, click "Reopen in Container" 3. Wait for the container to build and dependencies to install 4. Start developing! See `.devcontainer/README.md` for detailed setup instructions. ### Option 2: Local Development If you prefer local development: ```bash # Install dependencies pnpm install # Start all services (web + API) pnpm run dev # Or start individually pnpm run web # Web interface on :3000 pnpm run service # API server on :3001 pnpm run cli # Interactive CLI ``` ## Docker Support The project includes Docker support for containerized deployment and development. ### Running with Docker Compose ```bash # Build and run the application docker-compose up --build # Run in detached mode docker-compose up -d # View logs docker-compose logs -f # Stop the application docker-compose down ``` ### Docker Image Features The Docker image includes: - **Node.js 20** with pnpm package manager - **HandBrake CLI** for video processing - **FFmpeg** for media operations - **SQLite3** for database management - **CLI as Default Shell**: The container starts with the interactive CLI by default ### Using the CLI in Docker ```bash # Interactive CLI (default) docker-compose run --rm app # Direct CLI commands docker-compose run --rm app files:list --dataset movies docker-compose run --rm app task:list # Override to run development servers docker-compose run --rm app pnpm dev ``` ### Data Persistence Database files are persisted in the `./data` directory and mounted into the container for data persistence across container restarts. ## Project Structure ``` ├── apps/ │ ├── web/ # Next.js web interface │ ├── service/ # NestJS API server │ └── cli/ # Command-line interface ├── packages/ # Shared configurations ├── data/ # SQLite database ├── docs/ # Documentation └── scripts/ # Build scripts ``` ```mermaid graph TD ROOT[watch-finished-turbo/] --> APPS[apps/] ROOT --> PACKAGES[packages/] ROOT --> DATA[data/] ROOT --> DOCS[docs/] ROOT --> SCRIPTS[scripts/] ROOT --> CONFIG[Configuration Files
package.json, turbo.json, etc.] APPS --> WEB[web/
Next.js UI] APPS --> SERVICE[service/
NestJS API] APPS --> CLI[cli/
Node.js CLI] PACKAGES --> ESLINT[eslint-config/
Shared linting] PACKAGES --> TSCONFIG[typescript-config/
Shared TS config] PACKAGES --> UI[ui/
Shared components] DATA --> DB[(database.db
SQLite)] DATA --> BACKUP[database.db.bak] DOCS --> ARCH[architecture.md
System design] DOCS --> DEV[DEVELOPMENT_NOTES.md
Dev guide] DOCS --> CLI_DOCS[cli.md
CLI reference] WEB --> W_SRC[src/app/
Pages] WEB --> W_COMP[src/components/
UI components] WEB --> W_LIB[src/lib/
Utilities] SERVICE --> S_SRC[src/
Controllers & Services] SERVICE --> S_TEST[test/
Unit tests] CLI --> C_SRC[src/
CLI commands] CLI --> C_BIN[bin/
Entry point] style ROOT fill:#e3f2fd style APPS fill:#f3e5f5 style PACKAGES fill:#e8f5e8 style DATA fill:#fff3e0 style DOCS fill:#fce4ec ```