5.7 KiB
5.7 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Video Player with Remote Control - A desktop video player built with Nuxt 4 and Tauri 2 that supports WebSocket-based remote control. The application automatically searches for and plays video.mp4
files from multiple locations and provides a fullscreen video experience with remote control capabilities.
Architecture
Tech Stack
- Frontend: Nuxt 4 (Vue 3) with TypeScript
- Backend: Rust with Tauri 2 framework
- UI Framework: NuxtUI v3 with TailwindCSS v4
- Communication: WebSocket server (port 6666) for remote control
- Package Manager: pnpm (enforced)
Key Components
Frontend (app/
)
- Main Page:
app/pages/index.vue
- Fullscreen video player with connection status - Tauri Module:
app/modules/tauri.ts
- Auto-imports Tauri APIs - Assets:
app/assets/
- CSS and icons - Layouts:
app/layouts/
- Application layouts - Components:
app/components/
- Reusable UI components
Backend (src-tauri/
)
- Main Entry:
src-tauri/src/main.rs
- Application bootstrap - Library:
src-tauri/src/lib.rs
- Tauri application setup and state management - WebSocket Server:
src-tauri/src/websocket_server.rs
- Remote control server on port 6666 - Player State:
src-tauri/src/player_state.rs
- Video playback state management - Commands:
src-tauri/src/commands.rs
- Tauri commands for frontend interaction - Permissions:
src-tauri/capabilities/main.json
- Tauri v2 permission configuration
Communication Flow
- Backend-to-Frontend: Tauri events (
player-command
,connection-status
) - Frontend-to-Backend: Tauri commands (
get_player_state
,load_video
, etc.) - Remote Control: WebSocket server accepts JSON commands for playback control
- Auto-discovery: Backend searches for
video.mp4
in multiple directories on startup
Development Commands
Setup & Installation
# Install dependencies (requires Node.js 23+)
pnpm install
# Verify Rust toolchain is installed for Tauri
rustc --version # Should be >= 1.70
cargo --version
Development
# Start development server with Tauri
pnpm tauri:dev
# Frontend only (port 3000)
pnpm dev
# Lint and fix code
pnpm lint
Build & Distribution
# Build production application
pnpm tauri:build
# Build with debug symbols
pnpm tauri:build:debug
# Generate static site only
pnpm generate
# Version bump
pnpm bump
Testing WebSocket Control
# Test WebSocket connection (requires Node.js)
node test_websocket.js
Key Features
Video Playback
- Auto-loading: Searches for
video.mp4
in current directory, public folder, and executable path - Fullscreen: Auto-fullscreen mode configurable via
app.config.ts
- Controls: Play/pause, seek, volume, loop, fullscreen toggle
- Format Support: MP4 with fallback handling
Remote Control
- WebSocket Server: Runs on port 6666
- JSON Protocol: Standardized message format for all commands
- Connection Status: Real-time connection indicator in UI
- Playlist Support: Load and play from video playlists
State Management
- PlayerState: Comprehensive video state including position, volume, loop status
- VideoInfo: Metadata tracking for loaded videos
- Real-time Sync: Frontend/backend state synchronization via Tauri events
Configuration Files
Application Config
app.config.ts
- Player settings (volume, fullscreen, etc.)player_config.json
- Runtime configurationnuxt.config.ts
- Nuxt and Tauri integration settings
Build Configuration
src-tauri/tauri.conf.json
- Tauri application settingssrc-tauri/Cargo.toml
- Rust dependencies and featurespackage.json
- Node.js dependencies and scripts
Important Notes
Permissions
- Tauri v2 uses capabilities-based permissions in
src-tauri/capabilities/main.json
- Required permissions: file system access, notifications, OS info, shell commands
- WebSocket server runs on port 6666 (configurable in
src-tauri/src/lib.rs
)
Development Gotchas
- SSR Disabled:
ssr: false
in nuxt.config.ts is required for Tauri - Asset URLs: Uses
asset://localhost/
protocol for local file access - Auto-fullscreen: Configurable but may be disabled in some environments
- Video Discovery: Searches up to 6 directory levels up from executable
File Structure
video-player/
├── app/ # Nuxt frontend
│ ├── pages/index.vue # Main video player
│ ├── modules/tauri.ts # Tauri API auto-imports
│ └── assets/ # Static assets
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── lib.rs # Main Tauri app
│ │ ├── websocket_server.rs # Remote control
│ │ └── player_state.rs # Video state
│ └── capabilities/ # Tauri permissions
├── public/ # Static files (video.mp4)
└── types/ # TypeScript definitions
Environment Requirements
- Node.js: >= 23.0.0
- Rust: >= 1.70.0
- pnpm: >= 10.13.1 (enforced)
- Platform: Windows, macOS, or Linux with Tauri prerequisites
Common Development Tasks
Adding New Tauri Commands
- Add command function in
src-tauri/src/commands.rs
- Register command in
src-tauri/src/lib.rs
invoke_handler - Add TypeScript bindings in frontend
- Update capabilities if new permissions needed
WebSocket Protocol
- Connect:
ws://localhost:6666
- Commands: JSON format
{"type":"command","data":{"type":"play"}}
- Status: Real-time updates after each command
- Playlist: Support for multiple video files