An online sport concussion assessment for English speaking athletes across the world compliant with the international SCAT6 standard. Initially motivated by helping student athletes in Washington, USA, the goal is to make concussion tests more accessible and remove some of the subjective nature of the tests. The tool also allows health professionals to easily compare test results over time to make more informed decisions about patient health. URL: https://scat6-web.web.app/.
Contact: scat6@sandergi.com
- CISG approved SCAT6 assessment with 16 assessed domains (memory, balance, coordination, orientation, delayed recall, etc.)
- Automatically sync data via your own Google Account (login via OAuth2)
- Works completely locally in the browser for maximum privacy and offline use
- Simple and easy to use UI to administer concussion tests, compare results over time/against baselines, and follow up with post injury assessments
- Automated Balance Error Scoring System (BESS) with 6 poses, implemented using Machine Learning with TensorFlow.js (pose detection, face landmark detection) and traditional computer vision techniques
- Lovely graphs and charts and extensive use of Web APIs (LocalStorage/SessionStorage, MediaDevices, Speech Recognition, Speech Synthesis, etc.)
- Standardized subjective tests with objective machine calculated results
- Cross platform compatibility and responsive design (works on desktop, tablet, and mobile)
- Export the full assessment results as CSV, PDF report, and traditional paper SCAT6 (without having to manually do the paper assessment)
- Free to use (for any amount of athletes) and open source. Note that some optional features that require paying for server hosting, e.g., shared workspaces, may require self-hosting or reimbursing me for providing pre-hosted servers
How do I know if Google Drive Sync was successful?
If sync is successful, you should see the "Sync" button turn green, change text to "Synced", and display your linked Google Drive account photo:

You can click on the button to see details about when the data was last successfully synced with your Google Drive.
When sync is enabled, where are documents saved in my Google Drive?
You won't find the data in your regular documents. It is instead stored in the app data which you can find in your Google Drive Settings by selecting "Administer Apps" and scrolling down until you see "Concussion Assessment (Unverified)" like this:

Make sure you are using the same account that you have linked with the SCAT6 Web Tool.
If you want to delete the data, you could do it from here in the Google Drive Settings. However it is recommended to do it from the SCAT6 Web Tool (by clicking on the green "Synced" button and selecting to delete drive data) to make sure nothing gets corrupted and everything is fully deleted. The data synced to Google Drive is encrypted. This means you won't be able to view individual test data from Google Drive.
Is it correctly understood that data will only be stored on my computer/synced with Google Drive and not be sent to a third party?
Yes, all information stays locally on your computer, no third parties.
If you choose to activate "Sync", data will also be saved on your personal Google Drive. Access to your Google Drive remains local, so there is no risk of it being compromised. Due to the way syncing with Google Drive works, we do have to track a list of Gmails using "Sync" and when they have last saved data. This list is never shared with third parties.
Is data stored permanently if I don't sync with Google Drive?
In most scenarious, yes. However it is still recommended to activate Google Drive sync to be on the safe side. It happens rarely, but depending on your browser settings, the browser may force the Web App to delete the local copy of data if your device runs out of memory. There is also the chance of loosing your device or it getting damaged. An alternative solution, if you prefer not to use Google Drive, would be to "Export" each test after completing it to save its information somewhere else.
I have found a bug, have an idea for improvements, or want to get involved in making this tool better. How can I help?
Feel free to reach out to scat6@sandergi.com or post an issue here on GitHub. We also have a feedback form you can fill out.
Run npm install -g firebase-tools to install the Firebase CLI.
Run firebase serve to run the development server locally.
Run firebase deploy to deploy the project to Firebase.
The collaborative multi-account workspace backend lives in:
workers/shared-workspace
It uses:
honofor API routes- Cloudflare Worker runtime
- Cloudflare D1 for workspace/membership/data storage
- Create a D1 database and copy its ID into
workers/shared-workspace/wrangler.toml(database_id). - Install deps:
cd workers/shared-workspace
npm install- Apply D1 migrations:
npm run d1:migrate- Set Worker secrets (required for admin dashboard + analytics):
wrangler secret put ADMIN_DASHBOARD_PASSWORD
wrangler secret put ADMIN_SESSION_SECRET
wrangler secret put ANALYTICS_HMAC_SECRETGenerate strong secret values with OpenSSL:
openssl rand -base64 48Local development (workers/shared-workspace/.dev.vars) example:
ADMIN_DASHBOARD_PASSWORD=change-me-admin-password
ADMIN_SESSION_SECRET=dev_admin_session_secret_4mTQHk0j2M4I9m1aY8rM9eS3E2nJ6qkP
ANALYTICS_HMAC_SECRET=dev_analytics_hmac_secret_Xk9pQ2dL7zN1vA5fR3uT8wB6cY0mH4sD- Run locally:
npm run dev- Deploy:
npm run deployFrontend calls window.__SCAT6_WORKSPACE_API_BASE + '/api/*'.
At the end of index.html, we set window.__SCAT6_WORKSPACE_API_BASE to http://localhost:8787 in local development and https://scat6-shared-workspace.alexander-le.workers.dev in production.
We use template-driven static generation for language variants:
- Templates:
templates/index.template.html - Language config:
i18n/languages.json - Per-language translation data:
public/i18n/translations/<lang>.json - Generated catalog of English source + locations:
i18n/catalog.en.json - Build script:
scripts/build-i18n.mjs
Run:
node scripts/build-i18n.mjsWhat it does:
- Regenerates
public/index.html(default English) - Generates each localized page in
public/<lang>/index.html - Keeps shared libraries/scripts/assets in
public/(no duplicatedlib/copies per language) - Syncs translation files so each entry includes:
source(English source string)locations(where it appears in templates)value(translated string for that language)
- SCAT6 Instructions
- SCAT6 Assessment
- BESS Manual
- BESS and Gait Study
- Immediate and Delayed Recall Study
- Symptom Severity Study
- SCAT6 Results Study
- Google Fonts
- Font Awesome
The SCAT6 content itself is not mine to license, but the code is licensed under the MIT License.




