docs: update all READMEs for v1.1.0

Add Electron desktop app section, document all 8 plugins, update
features list (assets, super-buckets, find/replace, arrow nav, PDF
upload), fix relay docs (chat shipped, not future), add missing API
endpoints, correct electron data storage paths and php-bin fetch info.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
thandClaude Opus 4.6 committed 2026-04-12 18:00:06 +02:00
1 parent d5f44370b6
commit c5bf8b0407
4 files changed
+84 -31

No files matched your search

+15 -12
View File
@@ -2,9 +2,8 @@
A self-hosted **multi-tenant** message relay for hyprcrd. Multiple users
share one relay instance; each one has their own login, their own client
encryption secret, and their own inbox. Cards (and in the future:
encrypted chat messages) can be sent **between tenants** on the same
relay.
encryption secret, and their own inbox. Cards and encrypted chat
messages can be sent **between tenants** on the same relay.
The relay is a single-file PHP app — drop the directory into any PHP
webspace and it works.
@@ -55,9 +54,9 @@ The admin only ever touches secrets #1 and #3. The user only ever touches secret
The relay **does** see plaintext briefly during the cross-tenant hop
(steps 2–3 and 5–6). This is the same trust model as email: you trust
the relay operator. **Strict end-to-end encryption** for the planned
chat feature is on the roadmap and will require a per-pair key exchange
(Curve25519/ECDH) — this is documented as future work in `index.php`.
the relay operator. Chat between tenants is shipped (via the chat
plugin with delivery + read receipts). **Strict end-to-end encryption**
with per-pair key exchange (Curve25519/ECDH) is on the roadmap.
For at-rest data, all sensitive values are encrypted with the master
key, so a stolen DB without the master key file gives an attacker
@@ -155,7 +154,7 @@ incoming messages.
### 6. Send a card to another tenant
(currently in the relay UI; hyprcrd-side recipient picker is coming)
(in the relay UI compose tab)
In the relay UI **compose** tab:
- Pick a recipient from the dropdown (defaults to yourself)
@@ -166,8 +165,7 @@ The recipient will see it on their next hyprcrd poll, materialized as a
card in their board.
You can also right-click a card in hyprcrd and pick **push to relay** —
this currently sends to your own inbox; recipient picker on the hyprcrd
side is on the TODO.
this sends to your own inbox (or pick a recipient in the relay UI).
## Data lifetime
@@ -226,6 +224,10 @@ All endpoints under `/api/`. JSON in/out.
| GET | `/api/me` | — | Current tenant info |
| GET | `/api/tenants` | — | List of all usernames (for recipient picker) |
| POST | `/api/messages` | `{title, body, recipient?}` | UI compose path: server encrypts with inter-tenant key |
| GET | `/api/messages/inbox` | — | Read own inbox messages (decrypted for display) |
| DELETE | `/api/messages/{id}` | — | Delete a message from own inbox |
| GET | `/api/chat/sent` | — | Sent chat messages with delivery/read status |
| POST | `/api/chat/seen` | `{ids: [...]}` | Mark chat messages as seen (read receipts) |
### Admin only (session + `is_admin`)
@@ -302,8 +304,7 @@ use the same code path.
- A compromised relay machine = compromised messages. Use HTTPS, keep
PHP up to date, restrict shell access.
**Future work for stronger guarantees** (planned for the encrypted chat
feature):
**Future work for stronger guarantees** (roadmap for strict E2E):
- Per-tenant Curve25519 key pair stored in the DB (public key plus
master-key-encrypted private key, or even private key never on the
server)
@@ -522,7 +523,9 @@ relay/
│ └── routes/
│ ├── public.php # /api/status, /setup, /login, /logout, /me
│ ├── admin.php # /api/users CRUD, /api/tenants directory
│ └── messages.php # /api/messages, /api/attachments, cross-tenant routing
│ ├── messages.php # /api/messages, /api/attachments, cross-tenant routing
│ ├── chat.php # /api/chat/sent, /api/chat/seen (read receipts)
│ └── collab-buckets.php # /api/collab-buckets CRUD + card sync
├── ui/
│ ├── layout.php # HTML shell + view containers
│ ├── style.css # all CSS (including responsive media queries)