Static read-only overview for the raid sheet.
It fetches sheet data from Apps Script first, falls back to parsing published HTML if needed, then renders the result in the browser.
src/app/OverviewPage.tsxloads the overview snapshot on page load.src/lib/overviewAppsScript.tsfetches the Apps Script endpoint and normalizes JSON into the shared snapshot shape.src/lib/overviewHtml.tsparses raw Google Sheets HTML when the response is not JSON.src/lib/overviewView.tsholds shared display logic, normalization helpers, theming, and row filtering.src/app/OverviewPage.tsxrenders the table, applies sticky behavior, and writes the snapshot to local cache.src/lib/googleSheets.tsstores the cached snapshot inlocalStorage.
Main page component.
Responsibilities:
- loads the current overview snapshot
- chooses which source path was used
- renders the table
- applies sticky row and column behavior
- applies wing theming
- exposes refresh and cache controls
Apps Script source loader.
Responsibilities:
- fetches the Apps Script web app response
- converts JSON payloads into the shared snapshot shape
- preserves row/column dimensions, merged ranges, alignment, and bold state
- filters CMS rows
- falls back to HTML parsing if the response is not JSON
HTML fallback parser.
Responsibilities:
- parses raw Google Sheets HTML
- extracts cell text, links, spans, styles, row heights, and column count
- filters CMS rows
- rebuilds the row matrix after filtering
- returns the same shared snapshot shape used by the Apps Script path
Shared view/model helpers.
Responsibilities:
- defines shared overview types and constants
- normalizes text, colors, and alignment values
- detects wing headers and divider columns
- computes wing theming
- builds basic cell CSS
- computes sticky row offsets
- rebuilds rows after filtering while preserving merged cells
Local cache helper.
Responsibilities:
- defines the local cache key
- reads the cached snapshot from
localStorage - writes the cached snapshot to
localStorage - clears the cached snapshot
The app works with a shared snapshot model:
titlefetchedAtrowsrowHeightscolumnWidths
Each cell can include:
texthrefrowSpancolSpanboldstyle
The overview renderer applies a few layers of polish on top of the raw sheet data:
- wing rows drive row theme colors for the sections below them
Sub 2is used as a visual divider- Challenge Mode rows are removed before render
- special instruction cells can overflow across empty cells
- the top rows and first columns are sticky
- the parsed or API-provided dimensions are used where available
The loader uses this order:
- Apps Script JSON
- HTML fallback
The UI displays which path was used.
npm run devnpm run buildnpm run preview
The repo includes a GitHub Actions workflow at .github/workflows/deploy-pages.yml.
It builds on pushes to main and deploys the dist folder to GitHub Pages.
The Vite base path is read from VITE_BASE_PATH during the Pages build, so the generated asset URLs match the repository subpath.
- The app is intentionally read-only.
- All persistence is browser-side cache only.