Commit Graph
15 Commits
Author SHA1 Message Date
mandaloreandClaude Sonnet 5 1ed31e1fbf Add Warhammer Global Rankings 2026 circuit, restricted to 500mi of St. Louis
This is the national ITC league, not a BCP "circuit" — verified it has
523 upcoming events nationwide, so without the distance restriction
this would swamp the page. Filtered to St. Louis + 500mi it's 99,
which matches the point of this page (events the team would actually
consider attending).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 16:32:15 -05:00
mandaloreandClaude Sonnet 5 9337a2a01c Add per-circuit distance radius support (near: {lat, lon, miles})
Prep for a new circuit that should only show events within 500 miles
of St. Louis, MO — the ID given (OlkMrRfxrN) 404s against the leagues
endpoint (every other circuit ID is 12 chars, this one is 10, so it's
likely missing characters from a copy/paste), so adding the actual
circuit entry once that's confirmed. This part is independent and
verified against known distances (Collinsville IL ~10mi, Ashland MO
~111mi, PA ~748mi from St. Louis) — a no-op for every existing circuit
since `near` is optional and withinRadius() passes everything through
when it's unset.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 16:30:58 -05:00
mandaloreandClaude Sonnet 5 83b6a2069d Add RTT/GT scope tag and a format/scope filter bar
BCP has no structured scope field (eventType/eventSubType are always
empty), and name-matching against RTT/GT/Major only covered ~55% of
events while systematically missing well-known majors that don't
literally say "GT" (ATC, 8TC, the Gateway Open...). Instead: RTT vs GT
is inferred from event duration (single day vs multi-day), Singles
events only, no Major tag — per team captain's call.

Duration has to be computed in each event's own timezone, not raw UTC
or the viewer's browser timezone: BCP end-times often land on the next
UTC calendar date purely from offset (a Chicago RTT running 9am-9pm
local reports as spanning two UTC dates). Verified against real RTT-
and GT-named events before shipping. The existing date-range display
had the same latent bug — fixed alongside this using the same
timezone-aware day comparison, so the badge and the displayed date
range can never visually contradict each other.

Also adds a filter bar (Format: Singles/Team Event, Scope: RTT/GT) —
toggling narrows the list per circuit without refetching, since the
already-fetched events are now kept around and just re-filtered.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 16:26:51 -05:00
mandaloreandClaude Sonnet 5 17093e3d25 Fix awkward multi-day event date formatting
Same-month ranges were rendering as e.g. "Sat, Oct 10, 2026 – 11" (full
start date, then a bare trailing day number for the end). Now:
single day "Sat, Oct 17, 2026", same-month range "Oct 10–11, 2026",
cross-month "Oct 30 – Nov 1, 2026", cross-year "Dec 30, 2026 – Jan 2, 2027".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 16:19:00 -05:00
mandaloreandClaude Sonnet 5 40c41fad08 Flag each event as Singles or Team Event
Investigated BCP's API for a team-size field (5-man vs 8-man, etc.) —
there isn't one. The only candidate, totalPlayers / totalTeamPlayers,
tracks live registration progress rather than the event's configured
format, so it's unreliable for upcoming events with thin early signups
(verified: "TEO-8 - All in.", an event explicitly branded as an 8-man
format, currently shows 21/8 ≈ 2.6 via that ratio — would round to a
wrong "3-Man Teams"). Sticking to the one field BCP does report
reliably (teamEvent) rather than shipping a specific size that's
sometimes confidently wrong.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 16:04:42 -05:00
mandaloreandClaude Sonnet 5 efa3b7f6da Sync events.gateway-gamers.net.conf to match live production
DNS was pointed at gg1-roc-web1, so ran certbot --nginx to issue the
cert (same flow as the other 4 sites), then re-applied the security
headers/CSP/shared-asset alias blocks the same way as before. Site is
now live at https://events.gateway-gamers.net — verified header,
footer, images, and compiled CSS all resolve correctly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 16:00:25 -05:00
mandaloreandClaude Sonnet 5 e4b314f418 Add missing package-lock.json for events site
npm ci requires a lockfile; I have no Node available in this sandbox
to generate one, so adapted scouting's (identical devDependencies
across every site in this repo) and renamed the two embedded package
names to match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 15:56:20 -05:00
mandaloreandClaude Sonnet 5 58d930f289 Add events.gateway-gamers.net: upcoming events across BCP circuits
New 5th site in the monorepo, following the same shared header/footer/
images pattern as the others. Shows upcoming events for a configurable
list of BCP circuits (CONFIG.circuits in sites/events/src/main.js) —
adding a circuit is a one-line edit.

Data comes from the BCP API (`GET /v1/events?leagueId=<circuitId>`,
same auth-free headers the other sites already use) — "circuit" in
BCP's frontend URLs maps to `leagueId` in the API, confirmed via
/v1/leagues/<id> returning circuitLeague: true. Paginates newest-date-
first and stops once a full page has entirely concluded, so it doesn't
walk a circuit's whole history just to find the handful of upcoming
events. Verified against the live API for all 4 configured circuits
before writing this commit.

Nav cross-links with scouting only (per request), not the other 3
sites. nginx conf follows the same shared-asset-alias pattern as the
rest; TLS/DNS for the new subdomain still need to be provisioned
before it can go live (see follow-up).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 15:55:25 -05:00
mandaloreandClaude Sonnet 5 d0fee77bae Fix broken header styling: stop gitignoring generated header.html
Tailwind v4's automatic content detection skips gitignored files, and
public/header.html was gitignored (generated) — so every header-only
utility class (hero-carousel, navbar-center, swap-rotate,
menu-horizontal, drop-shadow-2xl, etc.) got purged from the compiled
CSS on the last deploy. The header markup was correct, just entirely
unstyled.

Fixed two ways for certainty: added an explicit @source in each
site's style.css (Tailwind's documented way to force-include a
gitignored path), and also stopped gitignoring public/header.html
so automatic detection picks it up regardless — matching how the
original per-site repos worked before this generated a real file.
predev/prebuild still regenerate it on every dev/build, so it can't
go stale.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 15:39:36 -05:00
mandaloreandClaude Sonnet 5 997e7dcd0b Sync nginx confs to match live production + add shared-asset aliases
The committed .conf files were stale pre-certbot templates that no
longer matched what's actually running on gg1-roc-web1 (certbot --nginx
had rewritten 40k-rankings/aos-rankings/kingmaker's structure, and in
the process 40k-rankings and aos-rankings lost their security headers
entirely). Replaced each with the true live config, plus the new
location /images/ and location = /footer.html alias blocks that were
applied directly on the server.

Also fixed on gg1-roc-web1 while there (not reflected in this repo,
just noting for the record):
- kingmaker's TLS cert had expired 2026-08-26; renewed.
- certbot-renew.timer was enabled but never started (box hasn't
  rebooted in 172 days), so nothing was auto-renewing; started it and
  ran a full certbot renew, which also caught 40k-rankings/aos-rankings
  sitting inside their renewal window.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
2026-09-04 15:18:37 -05:00
mandaloreandClaude Sonnet 5 0ab611b6fc Consolidate gateway-gamers sites, dedupe shared header/footer/images
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
2026-09-04 14:59:06 -05:00
mandalore 60076ac885 Import scouting.gateway-gamers.net into monorepo 2026-09-04 14:55:10 -05:00
mandalore 3116ae3a1c Import kingmaker.gateway-gamers.net into monorepo 2026-09-04 14:55:10 -05:00
mandalore 0bd939a18e Import aos-rankings.gateway-gamers.net into monorepo 2026-09-04 14:55:10 -05:00
mandalore 3bb044da95 Import 40k-rankings.gateway-gamers.net into monorepo 2026-09-04 14:55:09 -05:00