- Install next-openapi-gen for automatic OpenAPI spec generation from routes
- Add /api-docs page with Scalar UI for interactive API documentation
- Add generate step to build script (runs on every deploy)
- Configure to scan Zod schemas and App Router API routes
- Fix migration 0071 to use IF NOT EXISTS for idempotency
- Add public/openapi.json to .gitignore (generated file)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Research confirmed TensorFlow has wheels for Linux x86_64 (including
Synology NAS). The previous failures were due to:
1. Training scripts not being copied to Docker image
2. Venv path not being writable in container
Changes:
- Update isPlatformSupported() to include Linux ARM64 support
- Move venv to data/vision-training/.venv (mounted volume, writable)
- Add python3-venv to Docker image dependencies
- Copy training scripts to Docker image
- Create vision-training directories in Docker build
Sources:
- https://www.tensorflow.org/install/pip
- https://pypi.org/project/tensorflow/ (shows manylinux_2_17_aarch64 wheels)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add platform detection before attempting TensorFlow installation.
TensorFlow doesn't have wheels for ARM Linux (like Synology NAS),
so the hardware detection now returns a clear "Platform Not Supported"
message instead of failing during pip install.
Changes:
- Add isPlatformSupported() check in config.ts
- Check platform before attempting venv setup in hardware/route.ts
- Check platform before starting training in train/route.ts
- Show user-friendly message in HardwareCard for unsupported platforms
- Add data/vision-training/collected/ to .gitignore
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The hardware detection was using system python3 which was x86_64
(Rosetta) instead of native ARM. This prevented TensorFlow from
detecting the Metal GPU on Apple Silicon.
Now uses a Python 3.11 venv with tensorflow-macos and tensorflow-metal
for proper M4 Max GPU detection.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add VISION_DOCK_INTEGRATION_PLAN.md for vision dock architecture
- Add VisionCameraControls.stories.tsx for storybook
- Update .gitignore to exclude venv, uploads, and training data
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
**Problem:**
- TypeScript was compiling .js files directly into src/ alongside .ts files
- This broke the app and polluted source control with build artifacts
**Solution:**
1. Moved socket-server.ts from root to src/socket-server.ts
- Updated imports to remove './src/' prefix (now './lib/...')
2. Updated tsconfig.server.json:
- Added rootDir: "./src" to ensure clean dist/ structure
- Updated include path from "socket-server.ts" to "src/socket-server.ts"
3. server.js already correctly requires from ./dist/*
**Result:**
- TypeScript now compiles to dist/ with clean structure:
- src/socket-server.ts → dist/socket-server.js ✓
- src/db/index.ts → dist/db/index.js ✓
- No dist/src/ subdirectory ✓
- No .js files created in src/ ✓
- Dev server starts successfully
- Build artifacts properly separated from source code
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
BREAKING: This fixes a critical issue where compiled .js files were
being committed directly into src/ alongside .ts files, breaking the
app and polluting source control.
Changes:
- Fix tsconfig.server.json: outDir "." → "./dist", rootDir "." → "./src"
- Remove 23 tracked .js files from src/ directory
- Update .gitignore to block src/**/*.js and /dist
- Clean working directory of all .js artifacts
This ensures TypeScript compilation outputs to dist/ folder, not src/.
Fixes player ownership implementation and all future builds.
Add Biome for formatting and general linting, with minimal ESLint
configuration for React Hooks rules only. This provides:
- Fast formatting via Biome (10-100x faster than Prettier)
- General JS/TS linting via Biome
- React Hooks validation via ESLint (rules-of-hooks)
- Import organization via Biome
Configuration files:
- biome.jsonc: Biome config with custom rule overrides
- eslint.config.js: Minimal flat config for React Hooks only
- .gitignore: Added Biome cache exclusion
- LINTING.md: Documentation for the setup
Scripts added to package.json:
- npm run lint: Check all files
- npm run lint:fix: Auto-fix issues
- npm run format: Format all files
- npm run check: Full Biome check
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>