246 lines
5.1 KiB
Markdown
246 lines
5.1 KiB
Markdown
# Transcriptarr Frontend
|
|
|
|
Vue 3 + TypeScript + Vite frontend for Transcriptarr.
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### Prerequisites
|
|
- Node.js 18+ (use nvm for easy management)
|
|
- npm or yarn
|
|
|
|
### Install nvm (if not installed)
|
|
|
|
```bash
|
|
# Install nvm
|
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
|
|
|
# Reload shell
|
|
source ~/.bashrc # or ~/.zshrc
|
|
|
|
# Install Node.js 18
|
|
nvm install 18
|
|
nvm use 18
|
|
```
|
|
|
|
### Install Dependencies
|
|
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
```
|
|
|
|
### Development
|
|
|
|
```bash
|
|
# Start dev server (with hot-reload)
|
|
npm run dev
|
|
|
|
# Backend proxy is configured to http://localhost:8000
|
|
# Frontend runs on http://localhost:3000
|
|
```
|
|
|
|
### Build for Production
|
|
|
|
```bash
|
|
npm run build
|
|
|
|
# Output in dist/ directory
|
|
```
|
|
|
|
### Preview Production Build
|
|
|
|
```bash
|
|
npm run preview
|
|
```
|
|
|
|
## 📁 Project Structure
|
|
|
|
```
|
|
frontend/
|
|
├── src/
|
|
│ ├── assets/
|
|
│ │ └── css/
|
|
│ │ └── main.css # Global styles (Tdarr-inspired dark theme)
|
|
│ ├── components/ # Reusable Vue components
|
|
│ ├── views/ # Page components
|
|
│ │ ├── DashboardView.vue # Main dashboard
|
|
│ │ ├── WorkersView.vue # Worker management
|
|
│ │ ├── QueueView.vue # Job queue
|
|
│ │ ├── ScannerView.vue # Library scanner
|
|
│ │ ├── RulesView.vue # Scan rules
|
|
│ │ └── SettingsView.vue # Settings
|
|
│ ├── stores/ # Pinia state management
|
|
│ │ ├── system.ts # System status store
|
|
│ │ ├── workers.ts # Workers store
|
|
│ │ └── jobs.ts # Jobs store
|
|
│ ├── services/
|
|
│ │ └── api.ts # Axios API client
|
|
│ ├── types/
|
|
│ │ └── api.ts # TypeScript interfaces
|
|
│ ├── router/
|
|
│ │ └── index.ts # Vue Router configuration
|
|
│ ├── App.vue # Root component
|
|
│ └── main.ts # App entry point
|
|
├── index.html
|
|
├── vite.config.ts # Vite configuration
|
|
├── tsconfig.json # TypeScript configuration
|
|
└── package.json
|
|
```
|
|
|
|
## 🎨 Design
|
|
|
|
### Theme
|
|
- Dark theme inspired by Tdarr
|
|
- Color palette optimized for monitoring and data visualization
|
|
- Fully responsive design
|
|
|
|
### Features Implemented
|
|
- ✅ Dashboard with system overview
|
|
- ✅ Worker management with real-time updates
|
|
- ✅ Auto-refresh every 3-5 seconds
|
|
- ✅ Modal dialogs for actions
|
|
- ✅ Status badges and progress bars
|
|
- ⏳ Job queue view (placeholder)
|
|
- ⏳ Scanner control (placeholder)
|
|
- ⏳ Rules editor (placeholder)
|
|
- ⏳ Settings (placeholder)
|
|
|
|
## 🔌 API Integration
|
|
|
|
The frontend communicates with the backend API via Axios:
|
|
|
|
```typescript
|
|
// Example usage
|
|
import { workersApi } from '@/services/api'
|
|
|
|
// Get all workers
|
|
const workers = await workersApi.getAll()
|
|
|
|
// Add a GPU worker
|
|
await workersApi.add({
|
|
worker_type: 'gpu',
|
|
device_id: 0
|
|
})
|
|
```
|
|
|
|
### API Proxy Configuration
|
|
|
|
Vite dev server proxies API requests to the backend:
|
|
|
|
```typescript
|
|
// vite.config.ts
|
|
server: {
|
|
proxy: {
|
|
'/api': 'http://localhost:8000',
|
|
'/health': 'http://localhost:8000'
|
|
}
|
|
}
|
|
```
|
|
|
|
## 🧩 State Management
|
|
|
|
Uses Pinia for state management:
|
|
|
|
```typescript
|
|
// Example store usage
|
|
import { useWorkersStore } from '@/stores/workers'
|
|
|
|
const workersStore = useWorkersStore()
|
|
await workersStore.fetchWorkers()
|
|
```
|
|
|
|
## 🔧 Development
|
|
|
|
### Recommended IDE Setup
|
|
|
|
- VS Code with extensions:
|
|
- Volar (Vue 3 support)
|
|
- TypeScript Vue Plugin
|
|
- ESLint
|
|
|
|
### Type Checking
|
|
|
|
```bash
|
|
npm run build # Includes type checking with vue-tsc
|
|
```
|
|
|
|
### Linting
|
|
|
|
```bash
|
|
npm run lint
|
|
```
|
|
|
|
## 📦 Dependencies
|
|
|
|
### Core
|
|
- **Vue 3** - Progressive JavaScript framework
|
|
- **Vite** - Fast build tool
|
|
- **TypeScript** - Type safety
|
|
- **Vue Router** - Client-side routing
|
|
- **Pinia** - State management
|
|
- **Axios** - HTTP client
|
|
|
|
### Dev Dependencies
|
|
- vue-tsc - Vue TypeScript compiler
|
|
- ESLint - Code linting
|
|
- TypeScript ESLint - TypeScript linting rules
|
|
|
|
## 🚀 Deployment
|
|
|
|
### Standalone Deployment
|
|
|
|
```bash
|
|
# Build
|
|
npm run build
|
|
|
|
# Serve with any static file server
|
|
npx serve dist
|
|
```
|
|
|
|
### Integration with Backend
|
|
|
|
The built frontend can be served by FastAPI:
|
|
|
|
```python
|
|
# backend/app.py
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
app.mount("/", StaticFiles(directory="frontend/dist", html=True), name="static")
|
|
```
|
|
|
|
## 📱 Responsive Design
|
|
|
|
- Desktop-first design
|
|
- Breakpoint: 768px for mobile
|
|
- Touch-friendly controls
|
|
- Optimized for tablets and phones
|
|
|
|
## 🎯 Roadmap
|
|
|
|
### Phase 1 (Current)
|
|
- ✅ Dashboard
|
|
- ✅ Worker management
|
|
- ⏳ Job queue view
|
|
|
|
### Phase 2
|
|
- ⏳ Scanner controls
|
|
- ⏳ Rules editor
|
|
- ⏳ Settings page
|
|
|
|
### Phase 3
|
|
- ⏳ WebSocket support for real-time updates
|
|
- ⏳ Advanced filtering and search
|
|
- ⏳ Job logs viewer
|
|
- ⏳ Dark/light theme toggle
|
|
|
|
## 🐛 Known Issues
|
|
|
|
- Auto-refresh uses polling (will migrate to WebSocket)
|
|
- Some views are placeholders
|
|
- No authentication yet
|
|
|
|
## 📄 License
|
|
|
|
MIT License - Same as backend
|
|
|