# Build every talk and serve the result with nginx — the whole site is `dist/` # (an index page plus one Slidev SPA per talk), so nothing runs server-side # once the image is up. Coolify builds this on push and only swaps the # container if the build succeeds, same pattern as tyler.fun/chalky.town. FROM node:24-alpine AS build WORKDIR /app # Pinned rather than left to corepack's default, matching the version the # lockfile was written with. RUN npm install --global pnpm@10.18.3 # Manifests first, so the install layer survives slide edits. COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN pnpm install --frozen-lockfile COPY . . RUN pnpm build FROM nginx:1.27-alpine COPY nginx.conf /etc/nginx/conf.d/default.conf COPY --from=build /app/dist /usr/share/nginx/html