summaryrefslogtreecommitdiff
path: root/requirements/architecture/arch-v1.md
blob: 0d25e78c97e9f99946ccaf536fa060ad69763515 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 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)
- 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)
- 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
- 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)
- Do we need or want any virtualisation or containerisation on the CRDT sync
  server?