- Set PRISMA_SCHEMA_ENGINE_BINARY to 3.0.x binary path
- Set PRISMA_QUERY_ENGINE_LIBRARY to 3.0.x library path
- node:20-alpine has libssl.so.3 but no openssl CLI binary
- Prisma detection fails silently, defaults to 1.1.x engines
- Explicit paths bypass detection and use correct binaries
- Remove apk add openssl (not needed, causes build failure without VPN)
- backend Dockerfile: use PRISMA_CLI_BINARY_TARGETS to generate correct client
- Backend Dockerfile: add chown for node_modules (Prisma permissions fix)
- Frontend Dockerfile: add ARG/ENV for NEXT_PUBLIC_API_URL, VITE_API_URL
- nginx.conf: template with __PLACEHOLDERS__ for per-env substitution
- deploy.yml: SSH keepalive, sudo for VPN
- api.ts: dynamic API URL via env vars instead of hardcoded
- next.config.ts: rewrite only in development mode
- scripts: deploy.sh, compose.stage.yml, compose.prod.yml