The Portainer host keeps failing on `npm ci` inside the build stage
(both Alpine+libc6-compat and Debian slim exited 1 without ever surfacing
the real error to us). For a dev showcase this isn't worth chasing —
the dev machine is the source of truth for the built output anyway.
- Dockerfile: drop the Node build stage. Image is just nginx:1.27.3-alpine
with /dist copied in. No npm inside the container.
- docker-compose.yml: drop the production hardening (read_only, tmpfs,
security_opt, resource caps) and the container_name. Dev-only, don't
inhibit things.
- .gitignore / .dockerignore: stop ignoring dist/ — it's committed now.
- README: document the `npm run build && commit && push` release flow
and note what to reinstate when this graduates to real production.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Alpine + libc6-compat still lost the fight with Tailwind v4's prebuilt
oxide / lightningcss / rolldown bindings on the Portainer host. Debian
slim (glibc-native) is the known-good base for this stack. The serve
stage stays nginx:alpine, so the deployed image size is unchanged —
only the discarded build stage grew.
Also flip the home-page navbar from floating to the standard layout.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The prebuilt @tailwindcss/oxide and lightningcss .node bindings expect a
glibc-compat runtime. On bare Alpine musl they fail to load during the
install-time probe, which cascades into `npm ci` exiting 1 in the
Portainer build.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
node:24.13.0-alpine3.20 was never published to Docker Hub, so the
Portainer build failed on pull. Switch to node:24.15.0-alpine3.23
(current Node 24 line on current Alpine line) and update README.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>