Landing Page and Dashboard
Two files set what users see before they open a quote or policy. userExperiences/config.json sets the page users land on after they log in, plus defaults for select inputs and the quote timezone. plugins/config.json turns on built-in components, such as the dashboard, and sets them up. Both files sit at the top level of the surface folder, beside products/ (see UI-Specific Folders).
Landing Page
userExperiences/config.json sets a default landing page and, optionally, a landing page per role:
{
"defaultLanding": "operations",
"landings": [
{ "role": "Underwriter", "page": "lastAccessedTenantWorkManagement" },
{ "role": "Agent", "page": "lastAccessedTenantAccounts" }
]
}| Property | Type | Description |
|---|---|---|
defaultLanding | string | The page users land on when no entry in landings matches. |
landings | array | Landing pages per role, as { role, page }. The first entry whose role matches the user wins. |
defaultLanding and each landing's page take one of these values:
| Value | Page |
|---|---|
operations | The operations home, where the dashboard shows |
lastAccessedTenantWorkManagement | Work management, for the tenant the user last accessed |
lastAccessedTenantAccounts | Accounts, for the tenant the user last accessed |
A landing's role matches the same way as an access rule's roles: the exact, case-sensitive role name, and a ! prefix matches every user without that role. For example, { "role": "!Underwriter", "page": "operations" } lands everyone who isn't an underwriter on the operations home. See Roles.
Form Controls and Timezone
userExperiences/config.json also holds two app-wide defaults:
{
"defaultLanding": "operations",
"controls": { "select": { "placeholder": "select-value" } },
"timezoneSource": "account"
}| Property | Type | Description |
|---|---|---|
controls.select.placeholder | string | The placeholder in an empty select input: empty (blank), select-value ("Select a value"), or select-display-name (the field's display name). |
timezoneSource | string | How the create-quote dialog sets the quote's timezone: account uses the selected account's timezone, or the tenant's default if the account has none; default uses the tenant's default timezone. Defaults to default. |
The resolved timezone is used by the date and time pickers and sent with the create-quote request.
Dashboard
plugins/config.json is keyed by where each built-in component appears: dashboard (the task dashboard on the operations home), accounts (account search), and editor.producerSearch (producer search in the editor). { "dashboard": {} } adds the dashboard with its defaults. To change them, set taskTable and recentEntities:
{
"dashboard": {
"taskTable": {
"availableFilters": [
"taskType",
"referenceType",
"dueDate",
"taskState",
"labels",
"assignedTo"
],
"taskSubtextTemplate": "${taskNumber} · ${account.accountNumber} · ${account.displayName}"
},
"recentEntities": {
"maxItems": 15
}
}
}Task Table
| Property | Type | Description |
|---|---|---|
availableFilters | array | The filters to show, in display order: taskType, referenceType, dueDate, taskState, labels, and assignedTo. Omit to show all of them; [] hides every filter. |
taskSubtextTemplate | string | The text under each task's type, as a ${…} template. Defaults to ${taskNumber}. |
- The dashboard first shows active tasks assigned to the current user. Hiding a filter doesn't clear an active filter or change that default
- The
labelsfilter appears only when the tenant's data model sets at least one task label inworkManagement.labels
taskSubtextTemplate can use these variables:
| Variable | Value |
|---|---|
${taskNumber} | The task number, formatted with its # prefix |
${account.accountNumber} | The account number, formatted with its # prefix |
${account.displayName}, ${account.type}, ${account.locator} | The task's account |
${account.data.<field>} | A field from the account's data, when it's included with the task |
${inquiry.from}, ${inquiry.referenceLocator}, ${inquiry.tag} | The task's inquiry, when it has one |
Missing values become empty text, and a separator (·, |, ,, or ;) left at either end of the line is dropped. Templates are plain text, not JavaScript.
Recent Items
| Property | Type | Description |
|---|---|---|
recentEntities.maxItems | number | How many recent quotes and policies the dashboard shows, combined and ordered by most recently accessed. Defaults to 6; values above 21 are capped at 21. |