# --- build stage: bundle the PWA + the realtime server ---
FROM oven/bun:1 AS build
WORKDIR /app
COPY package.json bun.lock* bun.lockb* ./
RUN bun install
COPY . .
RUN bun run build          # tsc -b && vite build → /app/dist
RUN bun run build:server   # esbuild → /app/server/dist/index.js

# --- runtime stage: small node image, non-root, serves dist + /ws ---
FROM node:20-slim AS runtime
ENV NODE_ENV=production STATIC_DIR=/app/dist PORT=8787
WORKDIR /app/server
COPY server/package.json ./
RUN npm install --omit=dev --no-audit --no-fund
COPY --from=build /app/server/dist ./dist
COPY --from=build /app/dist /app/dist
# Cloud-sync data dir; create it node-owned so a fresh named volume mounts writable.
ENV DATA_DIR=/data
RUN mkdir -p /data && chown -R node:node /app /data
USER node
EXPOSE 8787
CMD ["node", "dist/index.js"]
