|
|
2 minggu lalu | |
|---|---|---|
| .devcontainer | 1 bulan lalu | |
| .vscode | 1 bulan lalu | |
| apps | 3 minggu lalu | |
| data | 2 minggu lalu | |
| docs | 3 minggu lalu | |
| packages | 1 bulan lalu | |
| scripts | 4 minggu lalu | |
| .cursorrules | 1 bulan lalu | |
| .gitignore | 4 minggu lalu | |
| .npmrc | 1 bulan lalu | |
| CHANGELOG.md | 1 bulan lalu | |
| Dockerfile | 1 bulan lalu | |
| README.md | 1 bulan lalu | |
| WATCHER_HEALTH_IMPLEMENTATION.md | 3 minggu lalu | |
| docker-compose.yml | 1 bulan lalu | |
| package.json | 3 minggu lalu | |
| pnpm-lock.yaml | 3 minggu lalu | |
| pnpm-workspace.yaml | 1 bulan lalu | |
| turbo.json | 3 minggu lalu |
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.
graph TB
subgraph "User Interfaces"
WEB[Web Dashboard<br/>Next.js + React]
CLI[Command Line<br/>Node.js CLI]
end
subgraph "API Service"
NEST[NestJS Server<br/>REST + WebSocket]
end
subgraph "Core Services"
WATCH[File Watcher<br/>Chokidar]
QUEUE[Task Queue<br/>Background Processing]
HANDBRAKE[Video Encoder<br/>HandBrake CLI]
end
subgraph "Data Storage"
DB[(SQLite Database<br/>Files & Tasks)]
end
subgraph "File System"
INPUT[Input Directories<br/>Video Files]
OUTPUT[Output Directories<br/>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
For the most consistent development experience, use the included dev container:
See .devcontainer/README.md for detailed setup instructions.
If you prefer local development:
Install pnpm (if not already installed):
# Using npm (recommended)
npm install -g pnpm
# Using Homebrew (macOS)
brew install pnpm
# Using other package managers
# See: https://pnpm.io/installation
# 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
The project includes Docker support for containerized deployment and development.
# 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
The Docker image includes:
# 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
Database files are persisted in the ./data directory and mounted into the container for data persistence across container restarts.
├── 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
graph TD
ROOT[watch-finished-turbo/] --> APPS[apps/]
ROOT --> PACKAGES[packages/]
ROOT --> DATA[data/]
ROOT --> DOCS[docs/]
ROOT --> SCRIPTS[scripts/]
ROOT --> CONFIG[Configuration Files<br/>package.json, turbo.json, etc.]
APPS --> WEB[web/<br/>Next.js UI]
APPS --> SERVICE[service/<br/>NestJS API]
APPS --> CLI[cli/<br/>Node.js CLI]
PACKAGES --> ESLINT[eslint-config/<br/>Shared linting]
PACKAGES --> TSCONFIG[typescript-config/<br/>Shared TS config]
PACKAGES --> UI[ui/<br/>Shared components]
DATA --> DB[(database.db<br/>SQLite)]
DATA --> BACKUP[database.db.bak]
DOCS --> ARCH[architecture.md<br/>System design]
DOCS --> DEV[DEVELOPMENT_NOTES.md<br/>Dev guide]
DOCS --> CLI_DOCS[cli.md<br/>CLI reference]
WEB --> W_SRC[src/app/<br/>Pages]
WEB --> W_COMP[src/components/<br/>UI components]
WEB --> W_LIB[src/lib/<br/>Utilities]
SERVICE --> S_SRC[src/<br/>Controllers & Services]
SERVICE --> S_TEST[test/<br/>Unit tests]
CLI --> C_SRC[src/<br/>CLI commands]
CLI --> C_BIN[bin/<br/>Entry point]
style ROOT fill:#e3f2fd
style APPS fill:#f3e5f5
style PACKAGES fill:#e8f5e8
style DATA fill:#fff3e0
style DOCS fill:#fce4ec