FROM node:24-bookworm-slim

# git is needed for the read-only /git/status and /git/diff endpoints
RUN apt-get update \
 && apt-get install -y --no-install-recommends git ca-certificates \
 && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci

COPY tsconfig.json config.example.jsonc ./
COPY src ./src
COPY scripts ./scripts

# Non-root user. Mounted vaults are usually owned by a host uid that doesn't
# match the container user, which git refuses to touch by default — allow it
# system-wide (read-only endpoints only; braindump never commits).
RUN useradd -m braindump \
 && git config --system --add safe.directory '*' \
 && mkdir -p /data /config /vaults \
 && chown braindump /data

USER braindump
ENV BRAINDUMP_CONFIG=/config/config.jsonc \
    BRAINDUMP_DB=/data/braindump.sqlite \
    NODE_ENV=production

EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \
  CMD node -e "fetch('http://localhost:'+(process.env.PORT||3000)+'/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"

CMD ["npx", "tsx", "src/bin/braindump-web.ts"]
