# 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: signalk: environment: - SIGNALK_DEMO=true # Built-in demo NMEA data generator # Librespot: stub in dev (pipe backend doesn't cross VM boundary). # For real Spotify on Mac run: make spotify librespot: build: context: ./docker/librespot dockerfile: Dockerfile.dev entrypoint: [] command: ["sh", "-c", "echo 'librespot stub: run make spotify for Mac audio' && sleep infinity"] restart: "no" volumes: [] ports: [] # Zones: real snapclient containers with null player (v0.35+, URI format) zone-salon: command: ["--hostID", "zone-salon", "--player", "file:filename=null", "tcp://snapserver"] zone-cockpit: command: ["--hostID", "zone-cockpit", "--player", "file:filename=null", "tcp://snapserver"] zone-bug: command: ["--hostID", "zone-bug", "--player", "file:filename=null", "tcp://snapserver"] zone-heck: command: ["--hostID", "zone-heck", "--player", "file:filename=null", "tcp://snapserver"] # Vite dev server with HMR — uses Dockerfile.dev to avoid overwriting node:20-alpine dashboard: build: context: ./dashboard dockerfile: Dockerfile.dev entrypoint: [] working_dir: /app volumes: - ./dashboard:/app - /app/node_modules command: ["sh", "-c", "npm install --legacy-peer-deps && npm run dev -- --host 0.0.0.0 --port 8090"] ports: - "8090:8090" environment: - VITE_SNAPCAST_HOST=localhost - VITE_SIGNALK_HOST=localhost - VITE_MOPIDY_HOST=localhost - VITE_JELLYFIN_HOST=localhost - VITE_USE_MOCK=true # Use mock data for dev testing (real APIs when false)