MATIH Platform is in active MVP development. Documentation reflects current implementation status.
16. User Experience
Cross-Workbench Navigation

Cross-Workbench Navigation

The MATIH platform provides seamless navigation across its eight workbench applications through a shared navigation shell, a workbench switcher overlay, global search with command palette functionality, entity handoff between workbenches, deep linking for direct access to specific resources, and cross-tab synchronization via the BroadcastChannel API. This section covers the navigation architecture, its components, and the patterns for implementing cross-workbench workflows.


Navigation Architecture

+-----------------------------------------------------------+
|  TopNavigation                                             |
|  [Logo] [Global Search (Cmd+K)] [Env] [CI] [Notif] [User]|
+-----+---------------------------------------------------------+
|     |                                                      |
| S   |  Workbench Content                                   |
| i   |  (Per-workbench routes)                              |
| d   |                                                      |
| e   |  +---WorkbenchSwitcher (Cmd+Shift+W)---+            |
| b   |  | [BI]  [Data]  [ML]  [Agentic]       |            |
| a   |  | [Control] [Ops] [Onboarding]         |            |
| r   |  +--------------------------------------+            |
|     |                                                      |
+-----+------------------------------------------------------+

Navigation Components

ComponentTriggerPurpose
SidebarAlways visibleWorkbench-specific menu items
TopNavigationAlways visibleGlobal actions: search, notifications, user
GlobalSearchCmd+K (Mac) / Ctrl+K (Windows)Search across all entities and commands
WorkbenchSwitcherCmd+Shift+W / Ctrl+Shift+WSwitch between workbench applications
TenantSelectorClick in top barSwitch between tenant contexts
PersonaSwitcherClick in sidebarSwitch role-based view
NotificationCenterClick bell iconView and manage notifications
UserMenuClick avatarProfile, preferences, logout
EnvironmentSwitcherClick environment badgeSwitch between dev/staging/production

Global Search

The GlobalSearch component at frontend/shared/src/components/Navigation/GlobalSearch.tsx provides a command-palette-style search interface.

Search Interface

+-----------------------------------------------------------+
|  [Search icon] Search everything...              (Cmd+K)   |
+-----------------------------------------------------------+
|                                                            |
|  Recent:                                                   |
|  [Dashboard icon] Q4 Revenue Analysis                      |
|  [Table icon] sales.orders                                 |
|  [Query icon] Top products by category                     |
|                                                            |
|  Commands:                                                 |
|  [>] Create new dashboard                                  |
|  [>] Open query editor                                     |
|  [>] Switch to Data Workbench                              |
|                                                            |
+-----------------------------------------------------------+

Search Categories

CategoryIconSearch Scope
DashboardsChart iconDashboard names and descriptions
TablesGrid iconTable and view names across all schemas
QueriesSQL iconSaved query names and contents
PipelinesFlow iconPipeline names and descriptions
ModelsCube iconML model names and versions
ExperimentsFlask iconExperiment names
UsersPerson iconUser names and emails
CommandsChevronWorkbench actions and shortcuts

Search Behavior

FeatureDescription
Fuzzy matchingMatches partial and misspelled terms
Category filteringType prefix to filter (e.g., table:orders)
Keyboard navigationArrow keys to navigate results, Enter to select
Recent itemsShows recently accessed items before typing
Command executionCommands prefixed with > execute actions directly
Cross-workbenchResults span all workbenches; selecting an item navigates to the appropriate workbench

Recent Commands

The preferences store tracks the last 10 commands executed through global search:

// From preferencesStore.ts
commandPaletteRecentCommands: string[];  // Max 10 entries
addRecentCommand: (commandId: string) => void;
clearRecentCommands: () => void;

Workbench Switcher

The WorkbenchSwitcher at frontend/shared/src/components/WorkbenchSwitcher/index.tsx provides a grid overlay for switching between workbench applications.

Switcher Interface

+-----------------------------------------------------------+
|  Switch Workbench                          (Cmd+Shift+W)   |
+-----------------------------------------------------------+
|                                                            |
|  +------------------+  +------------------+                |
|  | [BI icon]        |  | [Data icon]      |                |
|  | BI Workbench     |  | Data Workbench   |                |
|  | Dashboards &     |  | Catalog &        |                |
|  | Analytics        |  | Engineering      |                |
|  +------------------+  +------------------+                |
|                                                            |
|  +------------------+  +------------------+                |
|  | [ML icon]        |  | [AI icon]        |                |
|  | ML Workbench     |  | Agentic          |                |
|  | Models &         |  | Workbench        |                |
|  | Experiments      |  | AI Conversations |                |
|  +------------------+  +------------------+                |
|                                                            |
|  +------------------+  +------------------+                |
|  | [Admin icon]     |  | [Ops icon]       |                |
|  | Control Plane    |  | Ops Workbench    |                |
|  | Administration   |  | Monitoring       |                |
|  +------------------+  +------------------+                |
|                                                            |
+-----------------------------------------------------------+

Workbench Routing

Each workbench runs as a separate application on its own port. Navigation between workbenches triggers a page navigation to the target URL:

WorkbenchBase URLPort
BI Workbenchhttp://localhost:30003000
ML Workbenchhttp://localhost:30013001
Data Workbenchhttp://localhost:30023002
Agentic Workbenchhttp://localhost:30033003
Control Plane UIhttp://localhost:30043004
Data Plane UIhttp://localhost:30053005
Ops Workbenchhttp://localhost:30063006
Onboarding UIhttp://localhost:30073007

In production, all workbenches are served behind Kong API Gateway with path-based routing.


Entity Handoff

The cross-workbench store enables entity handoff -- selecting an entity in one workbench and using it in another.

Handoff Flow

Data Workbench                         BI Workbench
     |                                      |
  User browses schema                       |
  User selects table "sales.orders"         |
     |                                      |
  selectEntity({                            |
    id: 'sales.orders',                     |
    type: 'table',                          |
    name: 'orders',                         |
    fqn: 'production.sales.orders',         |
    metadata: { catalog: 'production',      |
                schema: 'sales',            |
                rowCount: 1200000 },        |
    sourceWorkbench: 'data',                |
    selectedAt: '2024-12-15T...'            |
  })                                        |
     |                                      |
  BroadcastChannel ------------------>      |
                                            |
                                    selectedEntity updated
                                    BI Workbench shows:
                                    "Table 'orders' from Data"
                                    [Open in Query Builder]

Navigation Requests

For more directed cross-workbench actions, the store supports explicit navigation requests:

// Request navigation from one workbench to another
requestNavigation({
  targetWorkbench: 'bi',
  action: 'openQueryBuilder',
  entityId: 'production.sales.orders',
  entityType: 'table',
  params: {
    preloadColumns: true,
    suggestQueries: true,
  },
});

The target workbench listens for navigation requests and processes them:

// In the BI Workbench
const navigationRequest = useCrossWorkbenchStore((s) => s.navigationRequest);
const clearNavigation = useCrossWorkbenchStore((s) => s.clearNavigation);
 
useEffect(() => {
  if (navigationRequest?.targetWorkbench === 'bi') {
    switch (navigationRequest.action) {
      case 'openQueryBuilder':
        router.navigate(`/query-builder?table=${navigationRequest.entityId}`);
        break;
      case 'openDashboard':
        router.navigate(`/dashboards/${navigationRequest.entityId}`);
        break;
    }
    clearNavigation();
  }
}, [navigationRequest]);

Deep Linking

Each workbench supports deep linking to specific resources via URL parameters:

WorkbenchDeep Link PatternExample
BI/dashboards/:id/dashboards/dash-123
BI/query-builder?table=:fqn/query-builder?table=sales.orders
Data/catalog/:catalog/:schema/:table/catalog/production/sales/orders
Data/lineage/:table/lineage/production.sales.orders
ML/experiments/:id/experiments/exp-456
ML/models/:name/versions/:version/models/churn_predictor/versions/3
Agentic/conversations/:id/conversations/conv-789
Control/tenants/:slug/tenants/acme-corp
Ops/incidents/:id/incidents/INC-2024-0042

Sidebar Configuration

Each workbench provides its own sidebar menu configuration:

BI Workbench Sidebar

SectionItems
HomeHome page with recent dashboards
DashboardsAll dashboards, favorites, shared with me
QueriesSaved queries, recent queries, query editor
Semantic ModelsModel list, model builder
MetricsMetrics library, metric builder
AI AssistantChat interface

Data Workbench Sidebar

SectionItems
CatalogCatalog browser, search, recent tables
PipelinesPipeline list, pipeline builder, run history
QualityQuality dashboard, check configuration
dbtdbt projects, models, runs
LineageLineage explorer
GovernancePolicies, classifications, access reviews

Tenant Selector

The TenantSelector component allows administrators to switch between tenant contexts:

// TenantSelector changes the tenant ID in the API client
const handleTenantChange = (tenantId: string) => {
  // Update API client configuration
  apiClient.updateConfig({ tenantId });
 
  // Update cross-workbench store
  setCatalogContext(null);  // Clear catalog context
 
  // Reload current page data
  window.location.reload();
};

When a tenant is changed, the API client's X-Tenant-ID header is updated, all cached data is invalidated, and the current page reloads to fetch tenant-specific data.


Key Source Files

ComponentLocation
Global searchfrontend/shared/src/components/Navigation/GlobalSearch.tsx
Sidebarfrontend/shared/src/components/Navigation/Sidebar.tsx
Top navigationfrontend/shared/src/components/Navigation/TopNavigation.tsx
Workbench switcherfrontend/shared/src/components/WorkbenchSwitcher/index.tsx
Tenant selectorfrontend/shared/src/components/Navigation/TenantSelector.tsx
Persona switcherfrontend/shared/src/components/Navigation/PersonaSwitcher.tsx
User menufrontend/shared/src/components/Navigation/UserMenu.tsx
Notification centerfrontend/shared/src/components/Navigation/NotificationCenter.tsx
Environment switcherfrontend/shared/src/components/Navigation/EnvironmentSwitcher.tsx
Navigation storefrontend/shared/src/components/Navigation/store.ts
Navigation typesfrontend/shared/src/components/Navigation/types.ts
Cross-workbench storefrontend/shared/src/stores/crossWorkbenchStore.ts
Cross-workbench hookfrontend/shared/src/hooks/useCrossWorkbench.ts