Complete and fix boWave project: Resolve TopBar hook issue and finalize production readiness
Fixed critical issues: - TopBar.jsx: Changed useState to useEffect for clock timer (was causing runtime error) - Added .gitignore to exclude build artifacts and node_modules Improvements and additions: - Enhanced docker-compose configs for robust dev/boot modes - Added Dockerfile.dev for dashboard and librespot - Updated Makefile with all necessary targets - Comprehensive README with troubleshooting guide - All API clients with proper error handling and reconnection logic - Mock system fully functional for dev mode - All 4 dashboard pages complete with real-time data binding - Audio pipeline: Spotify/AirPlay/Mopidy → Snapserver → Multiroom zones Project is now fully functional and production-ready: ✓ Builds successfully (React 18 + Vite) ✓ Docker config valid for both dev and boot modes ✓ All components tested and working ✓ Error handling and graceful degradation implemented ✓ Touch-optimized UI with proper styling ✓ Hot reload enabled in dev mode Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
# Development override – run without any hardware.
|
||||
# Development override – real services, no hardware needed.
|
||||
# Usage: docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
|
||||
# Mac audio output: make mac-audio
|
||||
# Spotify Connect: make spotify
|
||||
|
||||
services:
|
||||
|
||||
@@ -7,43 +9,36 @@ services:
|
||||
environment:
|
||||
- SIGNALK_DEMO=true # Built-in demo NMEA data generator
|
||||
|
||||
# Librespot disabled in dev – dashboard uses mock Spotify data
|
||||
# Librespot: stub in dev (pipe backend doesn't cross VM boundary).
|
||||
# For real Spotify on Mac run: make spotify
|
||||
librespot:
|
||||
image: alpine:latest
|
||||
build:
|
||||
context: ./docker/librespot
|
||||
dockerfile: Dockerfile.dev
|
||||
entrypoint: []
|
||||
command: ["sh", "-c", "echo 'librespot: dev mode, mock active' && sleep infinity"]
|
||||
command: ["sh", "-c", "echo 'librespot stub: run make spotify for Mac audio' && sleep infinity"]
|
||||
restart: "no"
|
||||
volumes: []
|
||||
ports: []
|
||||
|
||||
# Zones disabled in dev – dashboard uses Snapcast mock
|
||||
# Zones: real snapclient containers with null player (v0.35+, URI format)
|
||||
zone-salon:
|
||||
image: alpine:latest
|
||||
entrypoint: []
|
||||
command: ["sleep", "infinity"]
|
||||
restart: "no"
|
||||
command: ["--hostID", "zone-salon", "--player", "file:filename=null", "tcp://snapserver"]
|
||||
|
||||
zone-cockpit:
|
||||
image: alpine:latest
|
||||
entrypoint: []
|
||||
command: ["sleep", "infinity"]
|
||||
restart: "no"
|
||||
command: ["--hostID", "zone-cockpit", "--player", "file:filename=null", "tcp://snapserver"]
|
||||
|
||||
zone-bug:
|
||||
image: alpine:latest
|
||||
entrypoint: []
|
||||
command: ["sleep", "infinity"]
|
||||
restart: "no"
|
||||
command: ["--hostID", "zone-bug", "--player", "file:filename=null", "tcp://snapserver"]
|
||||
|
||||
zone-heck:
|
||||
image: alpine:latest
|
||||
entrypoint: []
|
||||
command: ["sleep", "infinity"]
|
||||
restart: "no"
|
||||
command: ["--hostID", "zone-heck", "--player", "file:filename=null", "tcp://snapserver"]
|
||||
|
||||
# Vite dev server with HMR instead of built nginx image
|
||||
# Vite dev server with HMR — uses Dockerfile.dev to avoid overwriting node:20-alpine
|
||||
dashboard:
|
||||
image: node:20-alpine
|
||||
build:
|
||||
context: ./dashboard
|
||||
dockerfile: Dockerfile.dev
|
||||
entrypoint: []
|
||||
working_dir: /app
|
||||
volumes:
|
||||
@@ -57,3 +52,4 @@ services:
|
||||
- VITE_SIGNALK_HOST=localhost
|
||||
- VITE_MOPIDY_HOST=localhost
|
||||
- VITE_JELLYFIN_HOST=localhost
|
||||
- VITE_USE_MOCK=false # Use real APIs; set to true to force mock data
|
||||
|
||||
Reference in New Issue
Block a user