How to verify this

Don't take our word for it.

Three checks anyone can run in a few minutes, no technical background needed for the first two.

1. The airplane-mode test

  1. Open the app once while online so your browser saves it.
  2. Turn off Wi-Fi, or switch on airplane mode.
  3. Add a student, run a session, open a graph, download a backup.

Everything works. A site that stored your data on a server could not do this.

2. The Network tab

  1. In Chrome, press Ctrl+Shift+I (or ⌘+Option+I on a Mac) and choose the Network tab.
  2. Use the app normally: add students, tap trials, export a file.
  3. Watch the list. The only requests are for the site's own pages, scripts and styles. No request carries your data, and none go to any other domain.

3. The security headers

Every page of the app is delivered with this Content Security Policy header, which instructs the browser to block connections to any other server:

Content-Security-Policy: default-src 'self'; connect-src 'self'; script-src 'self'; ...

You can see it in the Network tab under the page request's Headers, or with a free header checker such as securityheaders.com. Because of connect-src 'self', even a bug in the app's own code could not send data elsewhere. The website's pages carry the same policy with one addition, https://api.slpdata.org, where the contact form posts.

The app also has its own address, app.slpdata.org, apart from the rest of this site. Your browser keeps each address's storage separate, so no page here, the contact form included, can read what you saved in the app. And the app's policy adds form-action 'none': it cannot submit a form anywhere, not even to its own server. Your session data has nowhere to go.

4. The source code

Publishing the source code so the privacy claim can be checked line by line is on the roadmap. This page will link to it when it is public.