Admin only

You need to sign in as an administrator to access this page.

Go to sign-in
Prophesy admin
// signed in
⭐ Open Shortlist (Admin) ← Menu

Share invite link

// what to send a new coach
Anyone you send this link to gets through the URL gate on first visit. Their browser then remembers the unlock permanently — no expiry timer. To revoke access for everyone currently unlocked, rotate the invite code (instructions below); their cached unlock will stop matching the new hash and they'll see the gate again on their next page load. Sign-in (username + password) is still required after the gate, so this URL alone doesn't grant account access.

Just the invite code

Rotating the code (= revoking everyone): rotation IS the revoke button. There's no separate "revoke all" — the moment the hash changes, every previously-unlocked browser sees the gate again on its next page load.
One click: generates a fresh random code, commits both gate.js and this admin.html via your saved GitHub token, and updates this browser's stored unlock so you don't lock yourself out. After GitHub Pages finishes rebuilding (usually 30–60 s), every previously-unlocked browser will see the gate on its next page load. Send the new link (shown above) to anyone who should still have access.
Manual rotation steps (if auto-rotate fails or you prefer the command line)
  1. Pick a new code (any string).
  2. Run echo -n "MY-NEW-CODE" | openssl dgst -sha256 to get its SHA-256 hex.
  3. Paste the hex into INVITE_HASH_HEX near the top of gate.js.
  4. Update SHARED_INVITE_CODE near the top of this admin file's script so the "Share invite link" card shows the new code.
  5. Commit + push. Done — old links are now dead, send the new link to anyone who should still have access.

Suspend invite gate

// global open-access toggle
What this does: when suspended, anyone who visits prophesyscouting.co.uk is let through without an invite code, and the current invite hash is silently saved to their browser. When you switch the gate back ON later, every browser that visited during the suspension keeps access — so this is the right tool for opening the site temporarily (open trial / demo / launch event) without having to send everyone an invite link.
The toggle commits config/gate-suspended.json via your saved GitHub token. Takes effect after the next GitHub Pages rebuild (~30–60 s). Sign-in (username + password) is still required after the gate even when suspended, so this URL toggle alone doesn't grant account access — only gate-bypass.
Heads-up: people who visit during the suspension are auto-unlocked permanently (their browser keeps the matching hash). To revoke them afterwards, use the Rotate invite code button above — rotation invalidates every stored unlock regardless of how it was obtained.

Users

// who can sign in, what they see
UNSAVED   You have user changes that haven't been published yet.
Username Password Role Data folder Apps  

Add a user

Publish

With a GitHub token saved (see the "GitHub publishing token" card below), click ⬆ Publish to repo in the unsaved-changes banner to commit config/users.json directly. The new sign-in list and per-user app access go live in ~30–60 seconds. If you don't have a token, use ⬇ Download users.json instead and drag the file into config/users.json on GitHub manually.

Data & visibility

// where shared content lives
⭐
Prophesy Shortlist (Admin) Edit profiles & choose visibility per player
🏀
Lineup Analyzer View as admin (auto-fills the analyzer password)

Per-user data folders

Each user record can have an optional data folder. The apps look for CSVs in data/<folder>/ first and fall back to the shared data/ folder. Leave the field blank to give a user the shared default.
To publish data for a specific user: in the GitHub repo, create data/<folder>/ and upload that user's CSVs there (same filenames as listed in data/README.md).

Player visibility

Open the Prophesy Shortlist (Admin) view. Each player row gets a Visible to control where you tick which regular users can see that player. Click Export visibility.json at the top of the shortlist tab and commit the file to config/visibility.json.
A player with no visibility entry — or with an empty list — is visible to all users. Admins always see everyone regardless.

Lineup Analyzer password

The Lineup Analyzer ships with built-in copy protection that prompts for a password every load. lineup.html hosts it inside an iframe and pre-fills this password via the analyzer's documented parent-bridge — your users skip the prompt entirely. Set the password once below; it lives in config/lineup.json.
UNSAVED   Lineup password change hasn't been published yet.
Heads-up: config/lineup.json is a public file — anyone who knows its URL can read the password. Acceptable for shared coaching access; if it ever leaks, change the analyzer password (in the analyzer's own admin) and update it here too.

Lineup Data Folders

// upload per-user analyzer data straight from your browser
Each user's data folder (set in the Users card above) maps to data/<folder>/ in the repo. Drop CSVs into the per-user upload area below — with a GitHub token configured, they're committed straight to the repo and live within ~60 seconds. Without a token, you'll get the renamed files to upload manually.

GitHub publishing token

A Personal Access Token (classic, scope: repo) lets the dashboard commit files directly to the repo on your behalf. Stored only in this browser's localStorage — never sent anywhere except api.github.com. Create a new token →
Heads-up: a PAT with repo scope can write to all your repos. Treat it like a password. If you ever lose your laptop or share the browser, click Forget here and revoke the token at github.com/settings/tokens.

Share token with all users

For the per-user save buttons in the Prophesy Shortlist to work for non-admins, the token has to be reachable from every signed-in browser. Publishing it XOR-encodes it against the invite-code hash and commits to config/github-token.json. GitHub's secret-scanning bot won't recognise it as a token, but anyone with the invite link can decode it (so any signed-in user can save). Use a fine-grained token scoped only to this repo if you can.

Per-user folders

GameVis competitions

// schedule URLs the FIBA Game Visualizer pulls for each competition
Each competition has a short code (used in the URL ?comp=…), a label shown in the dropdown, and one or more FIBA LiveStats schedule URLs. When a user picks a competition, the wrapper iterates each URL, fetches the game list, and merges them into one schedule. Add as many schedule URLs as you need (e.g. one per competition phase).
How publishing works: the in-browser editor edits a working copy. Hit Publish to repo to commit config/gamevis-competitions.json via your saved GitHub token (set in the GitHub publishing-token card above). If you don't have a token, use Download JSON and upload it manually via GitHub's web UI.