Summary
Improve Fanout's chat and dashboard experience so users can move naturally from a question, to an investigation, to a persistent operational view. The goal is to make Fanout feel like one investigation workspace rather than separate chat and dashboard surfaces.
Current UX gaps
- Chat retains only one thread locally; starting a new chat reloads the application.
- The composer is disabled during a run, with no visible Stop or Retry action.
- Streaming progress is represented by a generic “Analyzing your system” state.
- Interactive results cannot be pinned to a dashboard or opened in a focused view.
- Dashboard widgets are always draggable/removable on desktop, without an explicit edit mode or undo.
- Widget summaries are largely passive and do not support progressive drill-down.
- Dashboard freshness is ambiguous: the product says “Live,” dashboard records poll, widget data generally does not continuously refresh after success, and a manual Refresh action is also present.
- Widget configuration exists in the model but has no user-facing editor.
Proposed scope
1. Conversation management
- Add a collapsible conversation-history panel.
- Show generated title, last-updated time, and active state.
- Support opening, renaming, deleting, and searching conversations.
- Replace the full-page reload used by “New chat” with an in-app reset and focus the composer.
2. Agent run controls and recovery
- Add a visible Stop action while a run is active.
- Preserve composer text while a run is active.
- Show concise, user-facing progress such as “Checking service health” or “Reviewing traces”; do not expose protocol or tool names.
- Add Retry/regenerate for failed runs and preserve the failed prompt.
- Add copy and feedback actions to completed assistant messages.
3. Chat-to-dashboard actions
For interactive views returned in chat, add:
- Pin to dashboard
- Open full screen
- Ask about this view
- Navigate to related service, logs, or trace when applicable
When opening chat from a dashboard or widget, pass the selected dashboard, time window, namespace, service, and originating widget as context.
4. Dashboard view/edit modes
- Default dashboards to a stable view mode.
- Add an explicit “Edit layout” mode.
- Show drag handles, resize affordances, widget settings, and removal actions only in edit mode.
- Provide undo after widget removal.
- Add keyboard-accessible alternatives for reorder/resize operations.
5. Dashboard management and configuration
- Add direct create, rename, duplicate, set-default, and delete actions.
- Add widget configuration for supported fields such as service, severity, log search, and trace ID.
- Improve the empty state with “Add a view,” “Use a template,” and “Create with AI.”
6. Drill-down and freshness
- Make service, endpoint, trace, and log rows actionable.
- Preserve the active time window and namespace when drilling down.
- Define one refresh model with live refresh on/off, last-updated time, manual refresh, and an optional interval.
- Replace free-text namespace entry with selection/autocomplete when namespace data is available.
- Persist shareable filters in the dashboard URL.
7. Loading, responsive, and accessibility refinements
- Add widget-level skeletons instead of blank metric placeholders.
- Replace loader-style error states with an error card and Retry action.
- Avoid forced auto-scroll when the user has scrolled away from the latest message; show a “New response” control instead.
- Avoid announcing every streamed token through
aria-live; announce meaningful progress or message completion.
- Respect reduced-motion preferences.
- Propagate the active light/dark theme into embedded MCP views.
- Reconsider the fixed product footer on small screens to reclaim workspace height.
Acceptance criteria
Suggested delivery phases
- Conversation history plus Stop/Retry controls.
- Dashboard edit mode, widget settings, and undo.
- Chat ↔ dashboard context and pinning.
- Drill-downs, freshness controls, responsive polish, and accessibility validation.
Relevant implementation areas
ui/host/src/App.tsx
ui/host/src/dashboard.tsx
ui/host/src/mcp-app-frame.tsx
ui/apps/src/*
- Agent thread API under
/api/agent
- Dashboard APIs under
/api/dashboards
Summary
Improve Fanout's chat and dashboard experience so users can move naturally from a question, to an investigation, to a persistent operational view. The goal is to make Fanout feel like one investigation workspace rather than separate chat and dashboard surfaces.
Current UX gaps
Proposed scope
1. Conversation management
2. Agent run controls and recovery
3. Chat-to-dashboard actions
For interactive views returned in chat, add:
When opening chat from a dashboard or widget, pass the selected dashboard, time window, namespace, service, and originating widget as context.
4. Dashboard view/edit modes
5. Dashboard management and configuration
6. Drill-down and freshness
7. Loading, responsive, and accessibility refinements
aria-live; announce meaningful progress or message completion.Acceptance criteria
Suggested delivery phases
Relevant implementation areas
ui/host/src/App.tsxui/host/src/dashboard.tsxui/host/src/mcp-app-frame.tsxui/apps/src/*/api/agent/api/dashboards