The Gitea runner hung for over 30 minutes on `npm ci` because it cannot
reach registry.npmjs.org. The registry is now configurable through the
NPM_REGISTRY repository variable, passed on to the server's Docker
build, and npm gives up after bounded retries. Jobs also have time
limits (test 15 min, deploy 30 min) so the runner is never held forever.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A two-stage image runs the tests and builds the game with Node, then
serves dist/ with Caddy, which obtains and renews Let's Encrypt
certificates for robotmarkets.ir (configurable via SITE_ADDRESS).
HTTPS is required for installing the PWA and for GPS mode.
- Caddyfile: gzip/zstd, long-lived caching for hashed assets, no-cache
for the page, service worker and manifest, SPA fallback, permissions
policy for location and motion sensors
- docker-compose.yml: ports 80/443, persistent certificate volumes
- README: server setup, updates, running behind an existing proxy, and
workarounds when Docker Hub is unreachable from servers in Iran
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>