FROM node:22-slim AS base
# Run as the host user so bind-mounted sources stay writable: compose passes
# LOCAL_UID / LOCAL_GID (default 1000) as build args and as `user:`.
ARG LOCAL_UID=1000
ARG LOCAL_GID=1000
RUN groupmod -o -g "$${LOCAL_GID}" node && usermod -o -u "$${LOCAL_UID}" -g "$${LOCAL_GID}" node
WORKDIR /app
RUN chown node:node /app
USER node
COPY --chown=node:node ./src/frontend/package.json ./src/frontend/package-lock.json* ./
RUN npm install
# Compose bind-mounts src/ and index.html over this copy for hot reload;
# package.json and node_modules stay from the image.
COPY --chown=node:node ./src/frontend/ .
EXPOSE ${frontend_port}
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
