# 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//nav.html -> sites//public/header.html sites/ 40k-rankings/ aos-rankings/ kingmaker/ scouting/ ``` Each `sites//` 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 `
  • ` 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//nav.html`. To change the shared photos, logo, footer copy, or header markup/structure, edit under `shared/` once. ## Commands (per site) ```bash cd sites/ npm install npm run dev # http://localhost:5173, regenerates header.html first npm run build # -> dist/ npm run preview ``` ## Deploy `.gitea/workflows/` at the repo root builds/deploys each site independently (one workflow per site, path-triggered via `on.push.paths`), plus a `deploy-shared.yml` workflow that syncs `shared/images/` and `shared/footer.html` to `/var/www/domains/gateway-gamers.net/shared/` on the webserver — the box the Gitea Actions runner (`act_runner`, host mode, no Docker) 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//.gateway-gamers.net.conf` for the live nginx reference config (applied manually on the box — CI doesn't touch nginx). A separate `refresh-elo.yml` workflow runs weekly (~02:00 UTC) to refresh `40k-rankings`' stat-check ELO data and push the result back to `main`, authenticating via the `SYNC_ACCESS_TOKEN` repo secret. This previously ran on self-hosted GitLab CI (`.gitlab-ci.yml`); that GitLab instance was migrated to Gitea, so the pipeline was ported to Gitea Actions accordingly.