docs: document Services UI refactor in wiki
Unit Tests / test (push) Successful in 11m29s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-28 06:58:24 -04:00
parent 0afdee32da
commit 63c0dfb9d9
+62 -7
View File
@@ -16,12 +16,13 @@ The goal is to give a person full ownership of their core internet services on t
4. [Authentication](#authentication) 4. [Authentication](#authentication)
5. [API Reference](#api-reference) 5. [API Reference](#api-reference)
6. [DDNS](#ddns) 6. [DDNS](#ddns)
7. [Service Store](#service-store) 7. [Services UI](#services-ui)
8. [Cell-to-Cell Networking](#cell-to-cell-networking) 8. [Service Store (Add-ons)](#service-store-add-ons)
9. [Extended Connectivity](#extended-connectivity) 9. [Cell-to-Cell Networking](#cell-to-cell-networking)
10. [Security Model](#security-model) 10. [Extended Connectivity](#extended-connectivity)
11. [Testing](#testing) 11. [Security Model](#security-model)
12. [Development](#development) 12. [Testing](#testing)
13. [Development](#development)
--- ---
@@ -247,7 +248,61 @@ Supported providers: `pic_ngo`, `cloudflare`, `duckdns`, `noip`, `freedns`.
--- ---
## Service Store ## Services UI
### Navigation
The left-hand navigation contains a **Services** group (previously labelled "Store"). Both admin and peer users see this group. It has three collapsible sub-items: **Email**, **Calendar**, and **Files**.
Legacy paths redirect to their new canonical locations:
| Old path | New path |
|---|---|
| `/email` | `/services/email` |
| `/calendar` | `/services/calendar` |
| `/files` | `/services/files` |
| `/store` | `/services` |
### Services page (`/services`)
The top of the page shows a **Built-in** section with three cards — Email, Calendar, and Files. Each card has a **Manage** link that navigates to the corresponding sub-page.
Below the Built-in section, the optional add-on store lists third-party services that can be installed or removed (see [Service Store (Add-ons)](#service-store-add-ons)).
### Service sub-pages — admin view
Each sub-page at `/services/email`, `/services/calendar`, and `/services/files` shows:
1. **Connection info** — hostnames, ports, and protocol details (e.g. IMAP/SMTP/Webmail, CalDAV/CardDAV, WebDAV/Filegator).
2. **Service status** — current running state fetched from the API.
3. **Users list** — accounts registered with that service.
4. **Inline config form** — editable fields for that service's settings:
- Email: ports and mail domain.
- Calendar: port and data directory.
- Files: ports, data directory, and per-user quota.
Config forms save automatically with an 800 ms debounce after the last change. Dirty state persists through navigation: if a user edits the form and navigates away before the debounce fires, clicking **Apply Now** on return still saves the pending changes.
### Service sub-pages — peer view
Peers access the same URLs without an admin gate. The peer view shows only:
- Connection info (hostnames, ports, copy buttons).
- Personal credentials for that service (email address, CalDAV username, or WebDAV username), fetched from `/api/peer/*`.
The config form and users list are not shown to peers.
### Settings page
The Email, Calendar, and Files configuration forms have been removed from the Settings page. Settings now covers: Identity, DDNS, Network (DNS/DHCP/NTP), WireGuard, Routing & Firewall, Vault & Trust, and Backup & Restore.
### API change
`GET /api/config` now includes an `installed_services` field — a dict keyed by service ID — listing services currently installed on the cell.
---
## Service Store (Add-ons)
`ServiceStoreManager` fetches a manifest index from `http://git.pic.ngo/roof/pic-services/raw/branch/main/index.json`. Each manifest declares: `ServiceStoreManager` fetches a manifest index from `http://git.pic.ngo/roof/pic-services/raw/branch/main/index.json`. Each manifest declares:
- Container image - Container image