summaryrefslogtreecommitdiff
path: root/requirements
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2025-07-17 07:21:56 +0100
committerJoe Carstairs <me@joeac.net>2025-07-17 07:21:56 +0100
commit30a50108f7d7246c38fabd0e8c895c644d2ae106 (patch)
tree983866597b609678565991d2c15443bb655f484e /requirements
parentadc9078dd674d6849e24add3ad9412858ed4697f (diff)
add ard-002, ard-003, ard-004
Diffstat (limited to 'requirements')
-rw-r--r--requirements/architecture/arch-v1.md12
-rw-r--r--requirements/architecture/ard-002.md4
-rw-r--r--requirements/architecture/ard-003.md13
-rw-r--r--requirements/architecture/ard-004.md22
4 files changed, 44 insertions, 7 deletions
diff --git a/requirements/architecture/arch-v1.md b/requirements/architecture/arch-v1.md
index 999cb23..fd25708 100644
--- a/requirements/architecture/arch-v1.md
+++ b/requirements/architecture/arch-v1.md
@@ -4,12 +4,11 @@
- 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
-- The desktop GUI must send and receive messages to the REST API via HTTPS
-- There must be a REST API
-- The REST API must send and receive messages to the CRDT sync server via Unix
- sockets
-- There must be a CRDT sync server
+- 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 CRDT sync server must send and receive messages to the NoSQL database via
Unix sockets
- There must be a backup service
@@ -19,7 +18,6 @@
- There must be a Web app server, which serves a Web GUI over HTTPS
- The Web GUI must save domain entities to IndexedDB
- The Web GUI must persist config and caches to Local Storage
-- The Web GUI must send and receive messages to the REST API via HTTPS
- There must be an SMS API
- The SMS API must send and receive messages to the CRDT sync server via Unix
sockets
diff --git a/requirements/architecture/ard-002.md b/requirements/architecture/ard-002.md
new file mode 100644
index 0000000..0c5fab8
--- /dev/null
+++ b/requirements/architecture/ard-002.md
@@ -0,0 +1,4 @@
+# ard-002: desktop GUI persists config and caches to files
+
+The desktop GUI must persist config and caches somehow. Nobody has considered
+any alternatives, except that it stores it in files. So that's what we'll do.
diff --git a/requirements/architecture/ard-003.md b/requirements/architecture/ard-003.md
new file mode 100644
index 0000000..cb5486a
--- /dev/null
+++ b/requirements/architecture/ard-003.md
@@ -0,0 +1,13 @@
+# ard-003: CRDT sync server
+
+I'd like a local-first architecture, because:
+
+- It means I can develop a working local app first, then extend it to sync with
+ other devices
+- It's a cool architectural pattern I'd like to practice building
+- It makes my app more resilient against network issues
+- It makes my app more performant
+- It means my data lives locally, which is nice
+
+There is really only one mature local-first architectural reference, and that
+involves a CRDT sync server as an essential component. So that's what we'll do.
diff --git a/requirements/architecture/ard-004.md b/requirements/architecture/ard-004.md
new file mode 100644
index 0000000..9ce6d73
--- /dev/null
+++ b/requirements/architecture/ard-004.md
@@ -0,0 +1,22 @@
+# ard-004
+
+## Problem
+
+There needs to be an inter-process interface available at a distance between the
+CRDT sync server and the UIs.
+
+## Options
+
+- Internet
+ - Web
+ - REST API
+ - GraphQL API
+ - Gopher
+ - DNS
+- Landline
+- Carrier pigeon
+
+## Decision
+
+REST API. GraphQL is unfamiliar to me, and REST is adequate. All the other
+options are silly.