VITE_* variables are baked into the bundle at vite build time. Docker's
env_file only applies at runtime, so they were missing from the build.
Pass them as ARGs from docker-compose so the client bundle includes the
correct Supabase URL and anon key.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Vite dev mode is incompatible with Discord Activity's iframe CSP — the
HMR WebSocket is blocked which breaks the React JSX dev runtime (_jsxDEV).
- Build client (vite build) during Docker image build so dist/spa/ exists
- Add express.static serving dist/spa/ assets in server/index.ts
- Add SPA catch-all to serve dist/spa/index.html for non-API routes
The Activity now loads the production compiled bundle instead of Vite's
dev-mode TypeScript modules, resolving the _jsxDEV crash.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>