# ── Stage 1: build the Vite client ──────────────────────────────────────── FROM node:22-alpine AS build WORKDIR /app/client COPY client/package.json client/package-lock.json* ./ RUN npm install COPY client/ . # Deliberately empty: relies on nginx same-origin-proxying /api to the # api service (see nginx.conf) instead of an absolute cross-origin URL # — the CORS bug that broke local dev earlier in this build. No # SPOTIFY_CLIENT_ID build-arg needed — the client fetches it from # /api/config at runtime instead (see client/src/lib/pkce.ts); it's not # sensitive data, and this keeps it configured in exactly one place # (the server's own .env), not a second copy baked in here. ENV VITE_API_BASE= RUN npx tsc && npx vite build # ── Stage 2: serve ───────────────────────────────────────────────────────── FROM nginx:alpine COPY --from=build /app/client/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80