| # Tambi — Hugging Face Docker Space | |
| # Copy this file to the Space repo root (next to package.json). | |
| FROM node:22-alpine AS builder | |
| WORKDIR /app | |
| # Prisma schema must exist before npm ci (postinstall runs `prisma generate`) | |
| COPY package.json package-lock.json prisma.config.ts .npmrc ./ | |
| COPY prisma ./prisma | |
| RUN npm ci | |
| COPY . . | |
| # Build-time placeholder — env.ts validates this as a URL during `next build`. | |
| # The real value is injected at runtime via HF Space secrets. | |
| ARG DATABASE_URL=postgresql://placeholder:placeholder@localhost:5432/placeholder | |
| ENV DATABASE_URL=$DATABASE_URL \ | |
| NODE_ENV=production | |
| RUN npm run build | |
| FROM node:22-alpine AS runner | |
| WORKDIR /app | |
| ENV NODE_ENV=production | |
| # HF Spaces run best as a non-root user (uid 1000) — node:alpine ships one: "node" | |
| COPY --from=builder --chown=node:node /app . | |
| USER node | |
| EXPOSE 3000 | |
| CMD ["npx", "next", "start", "-H", "0.0.0.0", "-p", "3000"] | |