Epic: Consolidated Administration settings (single entry → grouped rail → tabs) #250

Closed
opened 2026-08-16 17:06:22 +00:00 by Cordy · 2 comments
Owner

Problem

Admin configuration has grown past what a single modal can hold: basic settings, storage/quotas, retention, auto-purge, legal holds, audit logging, sharing policy, spaces backend, encryption/key custody, peering (relationships + inbound keys + settings), licensing (license + seats + billing), updates. Today these are scattered across a Settings modal and a few purpose dialogs. It deserves a dedicated location, the way Keycloak, Nextcloud, and Paddle give admin config its own shell.

Decision (mockups reviewed 2026-08-16)

Chosen layout: Option A — grouped rail + tabs. One Administration entry → a left rail of topics grouped into sections → a content pane with a topic header, a tab strip for the topic's parallel views (the Paddle "API keys / Client-side tokens" pattern), and setting rows. Rejected: a three-pane Keycloak-style console (B, extra chrome, only worth it at ~2x the topic count) and a rail-plus-sticky-anchors scroll (C, mixes idioms). A is the lowest-friction and maps cleanly onto what already exists.

Interaction model:

  • Single admin entry point (account menu → Administration), admin-gated exactly as today (auth.admins / auth.adminGroups).
  • Deep-linkable: #/admin/<topic> and #/admin/<topic>/<tab>, so docs and support can link straight to a tab.
  • Keyboard-navigable rail and tabs; in-memory session unaffected.
  • Wears Cairn's skin — glacier-teal active states, amber for keys/warnings, mono for fingerprints/IDs — reusing the existing peering-card component styles, not a new visual language. (Mockups were neutral wireframes for layout selection only.)

Topic inventory + tabs

Section Topic Tabs
Instance Basic settings General (instance name, default share expiry, email server)
Instance Storage & quotas Usage · Limits
Instance Retention & holds Retention · Auto-purge · Legal holds
Instance Audit log Settings · Query
Instance Updates Version (running version + upstream check)
Access Users & access Admins · Two-factor
Access Encryption & keys Custody · Recovery
Sharing & spaces Sharing Policy · Active links
Sharing & spaces Spaces General (backend, IdP power mode)
Federation Peering Relationships · Inbound keys · Settings
Billing Licensing License · Seats · Billing

Optional landing Overview topic (instance name, version, license tier, storage used, peering on/off) — mirrors the Nextcloud/Paddle overview; decide during the shell build.

Non-goals

  • No change to the underlying settings APIs — this is an information-architecture / presentation change over the existing endpoints.
  • No new policy features introduced here.
  • Per-user (non-admin) settings stay where they are.

Rollout (incremental, one topic per PR)

  1. Settings shell — grouped rail + tab framework + deep-link routing + admin gate. Land with one pilot topic.
  2. Pilot: Peering — it is the most tab-shaped and freshest surface (Relationships / Inbound keys / Settings), so it validates the shell.
  3. Port the rest topic-by-topic, each PR moving one existing surface in and leaving the old entry as a redirect until everything is migrated.
  4. Remove the legacy Settings modal; redirect old entry points.
  5. Docs: refresh admin-policy.md and peering.md, deep-link tabs, add screenshots (ties into #206).

Task checklist

  • Settings shell: grouped rail + tab framework + #/admin/<topic>/<tab> routing + admin gate
  • Pilot: port Peering into the shell (Relationships / Inbound keys / Settings)
  • Port Licensing (License / Seats / Billing)
  • Port Sharing (Policy / Active links) + Storage & quotas (Usage / Limits)
  • Port Retention & holds (Retention / Auto-purge / Legal holds) + Audit log (Settings / Query)
  • Port Encryption & keys (Custody / Recovery) + Spaces + Basic settings + Updates + Users & access
  • Optional: Overview landing topic
  • Remove legacy Settings modal + redirect old entries
  • Docs: refresh admin-policy.md / peering.md, deep-link tabs, screenshots (see #206)

Milestone: v0.7 (the closed-beta UI/UX batch). Refs: #206 (docs refresh), #176/#150 (peering panel this generalizes), #178/#186 (quotas/audit surfaces to fold in).

Break the checklist into individual issues when we're ready to schedule the batch.

## Problem Admin configuration has grown past what a single modal can hold: basic settings, storage/quotas, retention, auto-purge, legal holds, audit logging, sharing policy, spaces backend, encryption/key custody, peering (relationships + inbound keys + settings), licensing (license + seats + billing), updates. Today these are scattered across a Settings modal and a few purpose dialogs. It deserves a dedicated location, the way Keycloak, Nextcloud, and Paddle give admin config its own shell. ## Decision (mockups reviewed 2026-08-16) Chosen layout: **Option A — grouped rail + tabs.** One **Administration** entry → a left rail of topics grouped into sections → a content pane with a topic header, a tab strip for the topic's parallel views (the Paddle "API keys / Client-side tokens" pattern), and setting rows. Rejected: a three-pane Keycloak-style console (B, extra chrome, only worth it at ~2x the topic count) and a rail-plus-sticky-anchors scroll (C, mixes idioms). A is the lowest-friction and maps cleanly onto what already exists. Interaction model: - Single admin entry point (account menu → Administration), admin-gated exactly as today (`auth.admins` / `auth.adminGroups`). - **Deep-linkable**: `#/admin/<topic>` and `#/admin/<topic>/<tab>`, so docs and support can link straight to a tab. - Keyboard-navigable rail and tabs; in-memory session unaffected. - Wears Cairn's skin — glacier-teal active states, amber for keys/warnings, mono for fingerprints/IDs — reusing the existing peering-card component styles, not a new visual language. (Mockups were neutral wireframes for layout selection only.) ## Topic inventory + tabs | Section | Topic | Tabs | |---|---|---| | Instance | Basic settings | General (instance name, default share expiry, email server) | | Instance | Storage & quotas | Usage · Limits | | Instance | Retention & holds | Retention · Auto-purge · Legal holds | | Instance | Audit log | Settings · Query | | Instance | Updates | Version (running version + upstream check) | | Access | Users & access | Admins · Two-factor | | Access | Encryption & keys | Custody · Recovery | | Sharing & spaces | Sharing | Policy · Active links | | Sharing & spaces | Spaces | General (backend, IdP power mode) | | Federation | Peering | Relationships · Inbound keys · Settings | | Billing | Licensing | License · Seats · Billing | Optional landing **Overview** topic (instance name, version, license tier, storage used, peering on/off) — mirrors the Nextcloud/Paddle overview; decide during the shell build. ## Non-goals - No change to the underlying settings APIs — this is an information-architecture / presentation change over the existing endpoints. - No new policy features introduced here. - Per-user (non-admin) settings stay where they are. ## Rollout (incremental, one topic per PR) 1. **Settings shell** — grouped rail + tab framework + deep-link routing + admin gate. Land with one pilot topic. 2. **Pilot: Peering** — it is the most tab-shaped and freshest surface (Relationships / Inbound keys / Settings), so it validates the shell. 3. Port the rest topic-by-topic, each PR moving one existing surface in and leaving the old entry as a redirect until everything is migrated. 4. Remove the legacy Settings modal; redirect old entry points. 5. Docs: refresh `admin-policy.md` and `peering.md`, deep-link tabs, add screenshots (ties into #206). ## Task checklist - [x] Settings shell: grouped rail + tab framework + `#/admin/<topic>/<tab>` routing + admin gate - [x] Pilot: port Peering into the shell (Relationships / Inbound keys / Settings) - [x] Port Licensing (License / Seats / Billing) - [x] Port Sharing (Policy / Active links) + Storage & quotas (Usage / Limits) - [x] Port Retention & holds (Retention / Auto-purge / Legal holds) + Audit log (Settings / Query) - [x] Port Encryption & keys (Custody / Recovery) + Spaces + Basic settings + Updates + Users & access - [ ] Optional: Overview landing topic - [x] Remove legacy Settings modal + redirect old entries - [x] Docs: refresh admin-policy.md / peering.md, deep-link tabs, screenshots (see #206) Milestone: v0.7 (the closed-beta UI/UX batch). Refs: #206 (docs refresh), #176/#150 (peering panel this generalizes), #178/#186 (quotas/audit surfaces to fold in). _Break the checklist into individual issues when we're ready to schedule the batch._
Author
Owner

Broken into five dependency-ordered sub-issues (v0.7):

  • Phase 1 — #251 — Settings shell + Peering pilot (blocks the rest)
  • Phase 2 — #252 — Port Licensing, Sharing, Storage & quotas
  • Phase 3 — #253 — Port Retention & holds, Audit log, Encryption & keys
  • Phase 4 — #254 — Port Spaces, Basic settings, Updates, Users & access (+ Overview decision)
  • Phase 5 — #255 — Retire legacy modal + redirects + docs refresh (closeout)

Note: the ports (2–4) are logically independent but should land sequentially, not in parallel — they all edit the same web/static/index.html, so concurrent branches would fight over anchors and conflict on merge.

Broken into five dependency-ordered sub-issues (v0.7): - Phase 1 — #251 — Settings shell + Peering pilot (blocks the rest) - Phase 2 — #252 — Port Licensing, Sharing, Storage & quotas - Phase 3 — #253 — Port Retention & holds, Audit log, Encryption & keys - Phase 4 — #254 — Port Spaces, Basic settings, Updates, Users & access (+ Overview decision) - Phase 5 — #255 — Retire legacy modal + redirects + docs refresh (closeout) Note: the ports (2–4) are logically independent but should land **sequentially**, not in parallel — they all edit the same `web/static/index.html`, so concurrent branches would fight over anchors and conflict on merge.
Cordy closed this issue 2026-08-26 17:40:15 +00:00
Author
Owner

Closing — all mandatory rollout items complete (shell + all topics ported, legacy modal removed, docs refreshed). The one remaining checklist item, the optional Overview landing topic, shipped separately and is tracked/closed via #302.

Closing — all mandatory rollout items complete (shell + all topics ported, legacy modal removed, docs refreshed). The one remaining checklist item, the optional Overview landing topic, shipped separately and is tracked/closed via #302.
Sign in to join this conversation.
No labels
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#250
No description provided.