- Backend: Rust + Tauri 2.x, Burn framework for ML training
- Frontend: React 18 + TypeScript + Vite
- ML: YOLO models (YOLOv8/11/12), pure Rust inference via Burn/onnxruntime-rs
- Styling: CSS Modules (no Tailwind, no inline styles in new code)
- State: Zustand for frontend state management
src/ # React frontend
src/modules/yolo/pages/ # Page components (TrainingPage, VideoPage, etc.)
src/shared/components/ui/ # Shared UI (Toast, Modal, etc.)
src/core/stores/ # Zustand stores
src-tauri/src/ # Rust backend
src-tauri/src/modules/yolo/ # YOLO domain (commands, services)
src-tauri/src/modules/yolo/services/trainer.rs # Burn training
src-tauri/src/modules/yolo/services/inference_core.rs # Rust inference
- No Python env checks — pure Rust with CUDA detection only
- Proxy config:
~/.config/rust-tools/proxy.json(no hardcoded proxy URLs) - Model download: GitHub release URLs + configurable proxy
- num_classes: always read from project's
data.yaml(nc field), never hardcode - CSS Modules required for all new page components (no inline
style={{}}) - Toast over alert() — use shared Toast component, never browser alert
npm run dev # Frontend dev
cargo build --manifest-path src-tauri/Cargo.toml # Rust build
cargo check --manifest-path src-tauri/Cargo.toml # Rust type check
npm run build # Frontend production buildWhen asked to implement a feature or fix:
- Read relevant files first
- Check existing patterns in similar code
- Follow the adversarial-dev-workflow skill for significant changes
- Always verify with cargo check / npm run build before committing
- TypeScript: strict mode, explicit types on all function signatures
- Rust: clippy-compliant, no unsafe unless necessary
- CSS: CSS Modules only, modern dark theme colors (bg: #0f0f1a, accent: #00d4ff)
- Components: functional React with hooks, no class components