Skip to content

App modes ​

Use this page to see how the two app modes differ. You choose a mode at the gate. Both modes read the same school systems from the same backend catalog. They differ in who signs you in, where your login is kept, and whether data rests on a server. The app hardcodes no school system.

Account modePrivate mode
Auth to SchulySchuly account bearer tokenNone
HTTP clientApiClient (auth interceptor)Clean Dio, anonymous endpoints only
Where data livesServer side, in PostgresOn the device only
Backend roleStores data and syncs in the backgroundLive stateless proxy, stores nothing
Provider selectionPer connected accountCatalog privateAuthStrategy (token or scrape)

The privacy notice ​

Both modes show the privacy notice once, and again when Privacy:PolicyVersion changes on the server. On a server with SignUp:SwitzerlandOnly, the user also confirms "I attend a school in Switzerland." Account mode records this on the server. Private mode has no server record, so it stores the version and time on the device and forgets them on sign-out. If the check fails, the app starts anyway.

What private mode does on the device ​

  • The app writes the school login to the device keystore. The login leaves the device only when the app sends it to the school system through the backend's anonymous proxy endpoints.
  • The connect screen is generic. It renders the login fields the catalog lists for your school and follows the catalog's privateAuthStrategy:
    • token: a headless login creates a bearer token and a refreshable session.
    • scrape: the app sends the credentials again on each fetch.
  • If your school uses a one-time code, the app stores its seed with the login. The Authenticator screen generates codes on the device.
  • When a session expires, the app reconnects from the keystore without asking you to sign in.