summaryrefslogtreecommitdiff
path: root/requirements/architecture/arch-v1.0.0.md
diff options
context:
space:
mode:
Diffstat (limited to 'requirements/architecture/arch-v1.0.0.md')
-rw-r--r--requirements/architecture/arch-v1.0.0.md63
1 files changed, 63 insertions, 0 deletions
diff --git a/requirements/architecture/arch-v1.0.0.md b/requirements/architecture/arch-v1.0.0.md
new file mode 100644
index 0000000..014cd59
--- /dev/null
+++ b/requirements/architecture/arch-v1.0.0.md
@@ -0,0 +1,63 @@
+# Architecture
+
+Status: accepted
+
+## 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)
+- Schist should have a Web GUI (ass-018)
+
+## Decisions
+
+![architecture diagram](./architecture.png)
+
+- There must be a desktop GUI implemented in iced.rs (ard-000)
+- There must be documented processes for installing and updating the desktop GUI
+ on the user's machine (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, ard-011)
+- 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 backups bucket, running on a separate machine to the CRDT sync
+ server and the users' machines (ard-007)
+- There must be a documented process for recovering the server machine from a
+ backup after a failure (ard-007)
+- There must be a backup service, which makes regular backups of the CRDT sync
+ server from the same machine, and stores the backups in the backups bucket
+ over HTTPS (ard-007)
+- 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 (ard-008)
+- There must be documented processes for installing, updating and operating the
+ software on the server machine (ard-008)
+- There must be a Web app server, which serves a Web GUI over HTTPS (ard-009)
+- The Web GUI must persist config and caches to Local Storage (ard-010)
+- There must be an SMS API (req-031, req-045, req-047, req-053)
+- The SMS API must send and receive messages to the CRDT sync server via Unix
+ sockets (ard-011)
+
+## 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)
+- Right now we're assuming that Schist should have a Web GUI (ass-018). Can we
+ trace this assumption back to user needs?
+- Do we need or want any virtualisation or containerisation on the CRDT sync
+ server?
+- Are there expensive lookups or aggregations we should be caching? If so, how
+ and where should we implement caching?
+- Do we want or need any monitoring or logging?
+- What patterns or frameworks should we use -- or avoid -- in the Web GUI?