The Docker setup built but never came up. Three separate blockers, each
found by running the full compose stack against a real Postgres:
- The runner stage hand-copied prisma/@prisma/dotenv, which misses the
CLI's transitive deps (valibot) and crash-looped the entrypoint. A
dedicated migrator stage now installs the CLI at the exact lockfile
version with its real dependency tree.
- Docker sets HOSTNAME to the container id and Next's standalone server
binds to it verbatim, so the app was unreachable on localhost inside
the container and the healthcheck could never pass. Pinned to 0.0.0.0.
- openssl was missing from the build stages but present at runtime, so
Prisma detected a different platform and tried to download a matching
query engine at boot, as an unprivileged user, into a root-owned
directory. Aligned openssl across every stage that touches Prisma.
Verified from a clean volume: migrations apply, both containers report
healthy, /api/health returns 200, and the app serves from the image.
Also:
- Publish multi-arch images to GHCR on push to main and on v* tags, with
an SBOM and a signed provenance attestation.
- Default compose to the published image; add a build override for
working on the app itself. Host port and image are configurable.
- Drop two unused dependencies: canvas (19MB of native node-canvas; the
pipeline uses @napi-rs/canvas) and multer (routes use formData()).
- Add a root .gitignore. There wasn't one, so a real .env was one
`git add .` away from being committed. Untrack .DS_Store.
- Rewrite the README around what the tool does and how to run it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Introduce a new Next.js `client` app for XRayPDF: adds frontend pages (dashboard, upload, layout, Navbar, globals) and API routes for documents (upload, OCR, pixel processing, delete, list). Include Tesseract traineddata (eng.traineddata), update next.config.ts to allow native server packages and remote images, update package.json to add dependencies (canvas, sharp, tesseract.js, pdfjs-dist, multer, uuid), and update Prisma schema. Also add .gitignore entries for user uploads/results and a README describing the project and architecture.
Introduce a new 'client' Next.js app scaffold: configuration files (next.config.ts, eslint.config.mjs, postcss, tsconfig), Prisma config and schema, app routes including NextAuth API and server actions, session/provider utilities, proxy, public assets, README and .gitignore. Also add IDE project files under .idea and a root README to initialize the repository structure for development.