Skip to content

Guides

Dashboard UI

Brand the dashboard, override any page and add your own pages, navigation and settings.

Brand the dashboard with your Nuxt UI theme, then add your product's name, pages, navigation, and settings. The shared dashboard components are in @nuxtagentic-pro/vue.

Applying Your Brand

Set the product name and icon shown on the sign-in page:

export default defineAppConfig({
  agentic: {
    branding: { name: 'Acme', icon: 'i-lucide-rocket' },
  },
})

Customizing a Dashboard Page in Nuxt

Every dashboard page is a small file in the layer. Copy one into your app and edit it; Nuxt uses your copy instead of the layer's:

pnpm exec agentic eject                              # list the files you can copy
pnpm exec agentic eject pages/dashboard/agents.vue   # copy into app/pages/dashboard/agents.vue

Ejected files are yours, so upgrades no longer change them. Eject the smallest file that does the job, and compose the exported page components so the page itself keeps receiving fixes:

app/pages/dashboard/agents.vue
<script setup lang="ts">
import { AgenticAgentsPage } from '@nuxtagentic-pro/vue/pages'

definePageMeta({ layout: 'agentic' })
</script>

<template>
  <UAlert
    title="Agents run on the Acme plan."
    class="mb-4"
  />
  <AgenticAgentsPage />
</template>

Adding Pages, Navigation, and Settings

A UI feature adds dashboard routes, sidebar items, settings sections, and prompt commands:

app/features/reports.ts
import { defineAsyncComponent } from 'vue'
import { defineUiFeature } from '@nuxtagentic-pro/vue'

export const reports = defineUiFeature({
  id: 'reports',
  navigation: [{ label: 'Reports', icon: 'i-lucide-chart-line', to: '/dashboard/reports' }],
  routes: [
    { path: '/dashboard/reports', component: () => import('../components/ReportsPage.vue') },
  ],
  settingsSections: [
    {
      id: 'reports',
      area: 'workspace',
      component: defineAsyncComponent(() => import('../components/ReportSettings.vue')),
    },
  ],
})

Settings sections with area: 'workspace' receive workspace, role, active, and disabled props; sections with area: 'account' receive active and disabled. Register the feature:

import { reports } from '../features/reports'

export default defineNuxtPlugin(() => ({
  provide: { agenticUiFeatures: [reports] },
}))

In Nuxt, pages come from your app/pages directory, so routes is not needed there: add app/pages/dashboard/reports.vue with definePageMeta({ layout: 'agentic' }) and the feature adds its sidebar item, settings sections, and prompt commands. In Void, createAgenticRouter registers the feature's routes.

To include a custom settings panel in the Done button and navigation guards, register its callbacks during setup:

import { useSettingsPanel } from '@nuxtagentic-pro/vue/settings'

useSettingsPanel({
  save: saveSettings,
  prepareLeave: () => !isBusy.value && !hasUnsavedToken.value,
})

Return true from saveSettings to save the draft; return false to keep the panel open. Either callback may be async. The page waits before saving another panel or navigating. Registration ends when the settings panel unmounts. Use props and emitted events for field changes.

Reusing Dashboard Building Blocks

@nuxtagentic-pro/vue exports the shell (AgenticApp, WorkspacePromptInput), every page under /pages, and settings building blocks such as SettingsSection under /settings. Inside the dashboard, useAgenticContext() gives the typed API client, request helpers, and branding.