14 / 17Lesson

Pick your site.

Each site has its own Commissioner rule for the Championship. Tap your site card below to open the What-If Loadout Recalculator with the right rule loaded.

Sites — pulled live from the facilitator sheet

Loading…

Loading site list…

Teachers — how this list works ▾

This page reads a single Google Sheet that every site's facilitator updates with their day-17 What-If URL. Students stay on one stable bookmark (this page) and always see the latest URL for their site.

1. Create the sheet (once per program)

Make a new Google Sheet with these columns (the first row must be headers, spelled exactly):

SiteURLRulesLast Updated
Gotham Techhttps://…#eyJ…E ≤ 82026-06-04
Crosstownhttps://…#eyJ…E ≤ 72026-06-04
Claremont International HShttps://…#eyJ…S ≥ 42026-06-04

The Site cell can be the site's display name (e.g. "Crosstown") or the site code (NY1, NY2, NY3, TN). Either matches the user's site selection for highlighting "YOUR SITE".

2. Publish the sheet as CSV

  1. File → Share → Publish to web
  2. Under "Link", choose the tab you want and change the format from "Web page" to Comma-separated values (.csv)
  3. Click Publish
  4. Copy the URL it shows you (it looks like https://docs.google.com/spreadsheets/d/e/2PACX-1v…/pub?output=csv)

3. Paste it into config.js

Open public/config.js and set:

whatIfSheetCsvUrl: "https://docs.google.com/spreadsheets/d/e/2PACX-1v…/pub?output=csv"

Commit and push. This page will start rendering cards as soon as Vercel finishes building.

4. Generate and paste each site's URL

Each site's facilitator opens /lessons/what-if-loadout-recalculator.html, configures their Commissioner rules and teams, clicks Generate Shareable URL, and pastes the URL into their row in the sheet. Updates take effect the next time a student opens this page (no redeploy needed).

Auto-publish (no copy/paste — recommended once tabs are set up)

You can skip the copy/paste step entirely. With one Apps Script deploy, the recalculator's Publish to Sheet button writes the URL directly into the right tab.

  1. Open the Google Sheet, then Extensions → Apps Script.
  2. Paste the contents of apps-script/what-if-publish.gs (in this repo) into Code.gs, replacing what's there.
  3. Deploy → New deployment → Web app. Execute as: Me. Who has access: Anyone. Click Deploy and authorize.
  4. Copy the resulting /exec URL.
  5. In public/config.js, set whatIfPublishEndpoint: "<that /exec URL>".
  6. Commit + push. The recalculator now shows Publish to Sheet next to Generate URL — clicking it writes to the tab matching the site picker selection.

If you keep Apps Script disabled, the recalculator still works — facilitators just copy/paste their URLs into the sheet by hand.

Per-site tabs with protection (recommended for multi-site programs)

If you want each site's facilitator to own their own row without any chance of accidentally editing another site's URL, give each site its own tab:

  1. In the Sheet, add a tab per site (e.g. NY1, NY2, NY3, TN) with the same column headers (Site, URL, Rules, Last Updated).
  2. For each tab, use Data → Protect sheets and ranges to restrict edit access to that site's facilitator.
  3. For each tab, File → Share → Publish to web, pick that specific tab in the dropdown, choose CSV, click Publish. Note the URL — it has a gid=<number> param identifying the tab.
  4. In public/config.js, replace the single whatIfSheetCsvUrl: "..." with an object keyed by site code:

whatIfSheetCsvUrl: { NY1: "https://docs.google.com/.../pub?gid=0&output=csv", NY2: "https://docs.google.com/.../pub?gid=12345&output=csv", NY3: "https://docs.google.com/.../pub?gid=67890&output=csv", TN: "https://docs.google.com/.../pub?gid=11111&output=csv", }

The picker fetches all four tabs in parallel and merges them. Any tab that fails to load (sheet not published, range protected too aggressively) shows up as a disabled card with "No URL yet" — the other sites keep working.

If a single site's facilitator only has their own row

When using per-site tabs, each tab typically holds one row of data. The Site column can be left blank — the picker defaults it to the site code on that tab. So a Crosstown tab can be just:

SiteURLRulesLast Updated
(blank)https://…#eyJ…E ≤ 72026-06-04