You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/docs/frontend/dashboard.mdx
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
---
2
2
title: Tenant dashboard
3
-
lastUpdated: 2026-06-11
3
+
lastUpdated: 2026-07-13
4
4
description: The end-user-facing React + Vite app at clients/dashboard - catalog, chat, files, tickets, invoices, identity admin, plus real-time SignalR + SSE feeds.
5
5
sidebar:
6
6
label: Tenant dashboard
@@ -46,7 +46,7 @@ clients/dashboard/src/pages/
46
46
├── identity/ Tenant-scoped admin: users, roles, groups (+ detail pages)
47
47
├── invoices.tsx Invoice list + invoice-detail.tsx
48
48
├── subscription.tsx Current plan + billing status
49
-
├── settings/ Profile, security (2FA), appearance, notifications, API keys
49
+
├── settings/ Profile, security (2FA), appearance, branding, notifications, API keys
50
50
├── system/ Sessions, trash (recycle bin) - plus health + audits routes
51
51
├── tickets/ File ticket, list, detail, comments
52
52
├── impersonation-ended.tsx Graceful landing when an operator grant ends
@@ -65,7 +65,7 @@ A few notes:
65
65
66
66
The dashboard's appearance system is **per-user**: light/dark/system mode, an accent colour (presets or a custom hue), font, density, and reduced motion - all stored in localStorage and applied via CSS custom properties (Settings → Appearance). The neutral chassis is deliberately untinted so the accent does the branding work.
67
67
68
-
Per-**tenant** branding lives server-side as the Multitenancy module's `TenantTheme` (palette, brand assets, typography, layout)with a permission-gated editor in the admin console. Full details: [theming](/docs/frontend/theming/).
68
+
Per-**tenant** branding lives server-side as the Multitenancy module's `TenantTheme` (palette, brand assets, typography, layout). A tenant admin edits their **own** tenant's brand from **Settings → Branding** (light + dark palettes + logo/favicon URLs, with a live preview and reset-to-defaults) - the tab is permission-gated on `Tenants.UpdateTheme` and the calls are current-tenant-scoped (no `tenant:` header). Operators can still edit any tenant's brand from the admin console. Full details: [theming](/docs/frontend/theming/).
Copy file name to clipboardExpand all lines: src/content/docs/frontend/theming.mdx
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
---
2
2
title: Per-tenant theming
3
-
lastUpdated: 2026-06-11
3
+
lastUpdated: 2026-07-13
4
4
description: How tenant branding works in the kit - the TenantTheme aggregate in the Multitenancy module, the admin branding editor, and the dashboard's per-user appearance system.
5
5
sidebar:
6
6
label: Theming
@@ -14,10 +14,10 @@ seo:
14
14
15
15
Theming in the kit has two layers that are easy to conflate, so let's name them up front:
16
16
17
-
1.**Per-tenant branding** - the Multitenancy module owns a `TenantTheme` aggregate (colour palettes, brand assets, typography, layout) with permission-gated read/update/reset endpoints and an editor in the admin console. Themes are **data, not deploys** - editing one never requires a rebuild.
17
+
1.**Per-tenant branding** - the Multitenancy module owns a `TenantTheme` aggregate (colour palettes, brand assets, typography, layout) with permission-gated read/update/reset endpoints. Two editors write it: operators edit any tenant from the admin console, and a tenant admin edits their **own** tenant from the dashboard's **Settings → Branding** (gated on `Tenants.UpdateTheme`, current-tenant-scoped). Themes are **data, not deploys** - editing one never requires a rebuild.
18
18
2.**Per-user appearance** - the dashboard ships a rich appearance system (light/dark/system mode, accent colour, font, density, reduced motion) that each **user** controls from Settings → Appearance and that persists in localStorage.
19
19
20
-
The `TenantTheme` store + editor are fully wired end-to-end on the backend and admin side. The dashboard does **not yet**read `TenantTheme` to repaint its chrome per tenant - its visual identity today comes from the per-user appearance system. If you want full white-label rendering, the wiring point is small and described [below](#rendering-tenanttheme-in-your-own-frontend).
20
+
The `TenantTheme` store + both editors are fully wired end-to-end. What's **not yet**wired is *rendering*: neither app reads `TenantTheme` to repaint its chrome per tenant - visual identity today comes from the per-user appearance system, and the dashboard's Branding tab edits the stored theme without yet consuming it for its own paint. If you want full white-label rendering, the wiring point is small and described [below](#rendering-tenanttheme-in-your-own-frontend).
0 commit comments