diff --git a/docs/architecture-modes.md b/docs/architecture-modes.md index a19177c..31a30cb 100644 --- a/docs/architecture-modes.md +++ b/docs/architecture-modes.md @@ -1,9 +1,9 @@ # App modes: Account vs Private (secure) -Schuly runs in one of two modes, chosen at the gate. Both read the same -operator-provided school systems and the same backend-served catalog; the -difference is **who authenticates** and **where the data rests**. The app is -provider-agnostic - concrete systems are catalog data, never hardcoded. +Schuly runs in one of two modes, chosen at the gate. Both read the same school +systems from the same backend catalog; the difference is **who signs the user in** +and **where the data ends up**. No school system is hardcoded in the app - every one +of them comes from the catalog. ```mermaid flowchart TB @@ -13,7 +13,7 @@ flowchart TB Gate -->|"Account"| Login Gate -->|"Private (no login)"| Catalog - subgraph ACCOUNT["🔐 Account mode - Schuly login"] + subgraph ACCOUNT["Account mode - Schuly login"] direction TB Login["OIDC login
(Keycloak)"] ApiClient["ApiClient
Bearer token + auto-refresh"] @@ -25,7 +25,7 @@ flowchart TB Sync -->|"stores"| DB end - subgraph PRIVATE["🕶️ Private / secure mode - NO login, NO OIDC"] + subgraph PRIVATE["Private / secure mode - NO login, NO OIDC"] direction TB Catalog["SchoolSystemsService
clean Dio (no auth interceptor)"] AnonCat[("GET /api/app/school-systems
[AllowAnonymous]")] @@ -59,7 +59,7 @@ flowchart TB Stateless -->|"live, nothing stored"| ScrapeProvider ``` -| | 🔐 Account mode | 🕶️ Private / secure mode | +| | Account mode | Private / secure mode | | ------------------- | ------------------------------ | ------------------------------------------------- | | Auth to Schuly | OIDC (Keycloak) bearer | **none** | | HTTP client | `ApiClient` (auth interceptor) | clean `Dio`, anonymous endpoints only |