If refresh_elo.py failed, the trailing '&& cd ../../..' never ran,
leaving the job's shell inside statcheck-elo-scraper/ for the
subsequent git commands — which then tried to add a doubly-nested,
nonexistent path and failed with a confusing pathspec error instead
of the real failure. A subshell scopes the cd regardless of the
script's exit status.
Found by manually triggering the new project's ELO-refresh schedule:
the underlying scraper is currently failing on its own (OneDrive
source URL now 404s) — that's a separate, pre-existing data-source
issue outside this repo, not something this commit addresses.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
Merge the four independent gateway-gamers.net site repos (40k-rankings,
aos-rankings, kingmaker, scouting) into one monorepo under sites/,
preserving each site's full commit history via a manual subtree-style
merge (git-subtree isn't available in this environment).
- shared/: header.template.html (nav swapped in per site), footer.html,
and images/ — previously byte-identical copies duplicated 4x (~100MB).
- Each site's public/footer.html and public/images are now symlinks into
shared/; public/header.html is generated at predev/prebuild time from
shared/header.template.html + the site's own nav.html, so nav bars stay
individual while everything else about the header is shared.
- Single root .gitlab-ci.yml with path-scoped build/deploy jobs per site
plus a deploy:shared job, replacing the 4 separate per-repo pipelines.
- nginx confs (kept per-site as reference, same as before) gain
location /images/ and location = /footer.html alias blocks pointing at
a shared webserver directory, so the deployed site no longer duplicates
the images either — see README.md for the full layout and the runbook
for applying this on the webserver.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
- Add refresh-elo job to .gitlab-ci.yml triggered by schedules; runs
the Python scraper and commits updated elo-data.json back to main
- Hide Stat-Check ELO column header on mobile (sm:hidden), fold ELO
score as a subtitle under ITC Points on mobile instead
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
stat-check.com's ELO data is behind Microsoft auth with no public
API or download endpoint available. Removing the sync script,
placeholder JSON, CI job, table column, and all related JS.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Python 3.12 (PEP 668) blocks bare pip installs into the system.
Move the install step into the CI script and drop the self-install
fallback from the Python script.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
GitLab's YAML parser treats bare " mid-string as a new scalar.
Single-quote the affected lines and use a | block for the if/else.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- scripts/sync-elo.py: downloads Excel sheet, auto-detects columns,
writes public/elo-data.json keyed by lowercase player name
- .gitlab-ci.yml: sync-elo stage (schedules only) commits the JSON
then a normal push pipeline handles build + deploy; build/deploy
skip on scheduled runs to avoid double deployment
- index.html + main.js: ELO Rank column with sort support; loads
elo-data.json asynchronously and re-renders when ready; fails
silently if data is missing
Requires one-time setup:
1. GitLab project token (write_repository) stored as GITLAB_PUSH_TOKEN
2. Pipeline schedule: cron 0 2 * * 3 (Wednesday 02:00 UTC) on main
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update deploy path, environment URL, nginx conf, and package name
to reflect the new subdomain.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Hero carousel header with logo and photos matching kingmaker site
- Renamed "League Rank" to "ITC Rank"
- Full cursor-paginated standings scan with circular-cursor detection
to handle BCP API's pagination bug at the end of results; incremental
rendering shows results as each page arrives
- credentials:omit on all BCP fetches to prevent session cookie 500s
- GitLab CI pipeline: npm ci + vite build, rsync dist/ to
/var/www/domains/gateway-gamers.net/rankings/ on push to main
- nginx config for rankings.gateway-gamers.net with CSP allowing
connect-src to newprod-api.bestcoastpairings.com
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>