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

gateway-gamers.net

Monorepo for the *.gateway-gamers.net static sites. Each site is an independent Vite + Tailwind v4 + daisyUI project, deployed to its own subdomain, but they share a header shell, footer, and hero-carousel images so a logo/photo swap doesn't need to happen four times.

Layout

shared/
  header.template.html   # full header markup, nav swapped in at build time
  footer.html             # byte-identical across every site
  images/                 # logo + carousel photos, one copy
scripts/
  render-header.mjs        # shared/header.template.html + sites/<site>/nav.html -> sites/<site>/public/header.html
sites/
  40k-rankings/
  aos-rankings/
  kingmaker/
  scouting/

Each sites/<name>/ is a full Vite project (own package.json, vite.config.js, src/, index.html). Two things are not duplicated per site:

  • public/footer.html and public/images are symlinks into ../../../shared/.
  • public/header.html is generated (gitignored) from shared/header.template.html plus that site's own nav.html (just its <li> nav entries) — run automatically via the predev/prebuild npm scripts, so npm run dev / npm run build always regenerate it fresh. Nothing else about the header (carousel, logo, theme toggle) varies per site.

To add a new site's nav, edit sites/<name>/nav.html. To change the shared photos, logo, footer copy, or header markup/structure, edit under shared/ once.

Commands (per site)

cd sites/<name>
npm install
npm run dev       # http://localhost:5173, regenerates header.html first
npm run build     # -> dist/
npm run preview

Deploy

.gitlab-ci.yml at the repo root builds/deploys each site independently (path-scoped via rules: changes:), plus a deploy:shared job that syncs shared/images/ and shared/footer.html to /var/www/domains/gateway-gamers.net/shared/ on the webserver — the box the GitLab Runner executes on. Every site's nginx server block points /images/ and /footer.html at that shared directory via alias, so the webserver only ever holds one copy of the ~25MB of images. See each sites/<name>/<name>.gateway-gamers.net.conf for the live nginx reference config (applied manually on the box — CI doesn't touch nginx).

S
Description
No description provided
Readme
27 MiB
Languages
JavaScript 57.9%
HTML 34.8%
Python 6.4%
CSS 0.9%