FROM node:22-alpine WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --omit=optional --no-audit --no-fund COPY tsconfig.json vitest.config.ts ./ COPY src ./src COPY static ./static ENV BOARD_DIST_DIR=/output ENTRYPOINT ["/bin/sh", "-c", "while true; do node --experimental-strip-types src/cli.ts \"$BOARD_CONFIG_PATH\" || echo 'render failed; will retry next tick'; sleep ${BOARD_TICK_SEC:-300}; done"]