# Architecture Status: draft ## Problems - Schist must have a read/write SMS interface (req-031, req-045, req-047, req-053) - Schist must have a read/write desktop interface (req-021, req-023, req-048, req-052) - Schist must read transactions automatically from a banking API (req-015) - Schist must persist buckets, pipes, drips, and transactions (req-034, req-056, req-057, req-058, req-051) - Schist's persisted data must be resilient and recoverable (req-064) ## Decisions ![architecture diagram](./architecture.png) - There must be a desktop GUI implemented in iced.rs (ard-000) - The desktop GUI must persist domain entities to an SQLite file (ard-001) - The desktop GUI must persist config and caches to files (ard-002) - There must be a CRDT sync server (ard-003) - There must be a REST API, which sends and receives messages to and from the desktop GUI and the Web GUI via HTTPS, and sends and receives messages to and from the CRDT sync server via Unix sockets (ard-004) - The Web GUI must persist domain entities in IndexedDB (ard-005) - The CRDT sync server must persist domain entities in an SQLite file (ard-006) - There must be a backup service - The backup service must communicate to the backups bucket via HTTPS - There must be a backups bucket - There must be a server machine - The backups bucket and the server machine must be different machines - The server machine must host the CRDT sync server, the SQLite file, the backup service, the REST API, the SMS API and the Web GUI - There must be documented processes for installing, updating and operating the software on the server machine - There must be documented processes for installing and updating the desktop GUI on the user's machine - There must be a documented process for recovering the server machine from a backup after a failure - There must be a Web app server, which serves a Web GUI over HTTPS - The Web GUI must persist config and caches to Local Storage - There must be an SMS API - The SMS API must send and receive messages to the CRDT sync server via Unix sockets ## Gaps - Schist must read transactions automatically from a banking API (req-015) - Schist must not allow anybody other than the user to access its data at rest (req-062) - Schist must not allow anybody other than the user to access its data in motion (req-063)