Vite embeds env vars at build time, not runtime. The frontend code uses VITE_BE_API_URL/VITE_BE_WS_URL but the workflow was setting wrong names (VITE_API_URL/VITE_WS_URL). Now Dockerfile accepts build args and workflow passes production URLs during docker build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>