Every athlete in one place: squad, biometrics, lifts, ergs, health, and the stroke reports the analyzer produced for them. Data lives in this browser and, once linked, auto-saves to a .json file on your own disk — nothing is uploaded anywhere.
.json file on disk that every change is written to as you work. Clearing site data, using a different browser, or switching between file:// and localhost gives you a different store, so the linked file is the copy that outlives all of that, and the thing you hand to another coach. The line above the roster says which of those two you currently have.
Squad and name are all that's required. Everything else can be filled in later.
What athletes have sent back. Nothing here is on a record until you accept it.
Either the .json the athlete's file produced, or the CATCHLINE1: code they pasted
into a message. Both carry the same thing.
The browser store is the working copy. JSON files are the save state.
Link a .json once and every change from then on is written to it in the background — no button to remember.
The file mirrors this browser, so it is overwritten, never merged into; to go the other way, import below.
The browser asks for permission again after each reload, which is one click on the line above.
Merge keeps what you have and adds anything new, matching athletes by id then by name. Replace throws away the current store.
The backup is the only one that restores, and it is encrypted — it needs the passphrase that was in use when you made it, so keep that written down somewhere physical. A .csv is a report: it opens in a spreadsheet, it is not encrypted, and it cannot be imported back.
Pushes the encrypted vault to a sync worker you run yourself, so any device with the
passphrase can open it. The server never sees your passphrase and cannot read a byte of the data.
Setting one up is a five-minute job — see worker/README.md.
Syncs to .