mdxui

Product as App

How Products render as full applications - ProductApp, ProductView, ProductPanel

Product as App

A Product can render as a complete application with its own views, panels, and navigation. The rendering adapts based on the product type - SaaS products get different interfaces than API products, Data products, or Headless services.


ProductApp

The ProductApp component renders a Product as a full application shell with navigation, views, and panels appropriate for the product type.

Props

interface ProductAppProps {
  /** Product to render */
  product: string | Product
  /** App configuration override */
  config?: {
    /** Custom navigation items */
    navigation?: NavItem[]
    /** Shell layout options */
    shell?: {
      sidebar?: boolean
      header?: boolean
      sidebarCollapsed?: boolean
    }
    /** Theme settings */
    theme?: {
      preset?: string
      mode?: 'light' | 'dark' | 'system'
      custom?: Record<string, string>
    }
  }
  /** Loading state */
  loading?: boolean
  /** Error state */
  error?: string
  /** Custom className */
  className?: string
}

Usage

import { ProductApp } from '@mdxui/cockpit'

// Render full product application
<ProductApp product={product} />

// With custom config
<ProductApp
  product={product}
  config={{
    navigation: [
      { label: 'Overview', href: '/overview', icon: 'Home' },
      { label: 'Analytics', href: '/analytics', icon: 'BarChart' },
      { label: 'Settings', href: '/settings', icon: 'Settings' },
    ],
    shell: {
      sidebar: true,
      header: true,
      sidebarCollapsed: false,
    },
  }}
/>

Product Type Adaptations

The ProductApp automatically configures itself based on product type:

SaaS Product → SaaSApp

// SaaS product renders with:
<SaaSApp product={saasProduct}>
  <Shell>
    <Sidebar navigation={[
      'Dashboard',
      'Workspaces',
      'Team',
      'Billing',
      'Settings',
    ]} />
    <MainContent>
      <DashboardView />
    </MainContent>
  </Shell>
</SaaSApp>

Default Views:

  • Dashboard: Key metrics, usage, activity
  • Workspaces: Multi-tenant workspace management
  • Team: Members, roles, invitations
  • Billing: Subscription, invoices, payment methods
  • Settings: App preferences, integrations

Default Panels:

  • UsageMetrics: Current plan usage
  • RecentActivity: Latest user activity
  • QuickActions: Common tasks
  • WorkspaceSwitcher: Switch between workspaces

API Product → DeveloperApp

// API product renders with:
<DeveloperApp product={apiProduct}>
  <Shell>
    <Sidebar navigation={[
      'Overview',
      'API Keys',
      'Webhooks',
      'Usage',
      'Logs',
      'Documentation',
    ]} />
    <MainContent>
      <DashboardView />
    </MainContent>
  </Shell>
</DeveloperApp>

Default Views:

  • Overview: API status, quick stats
  • API Keys: Create, rotate, revoke keys
  • Webhooks: Configure webhook endpoints
  • Usage: Request counts, rate limits
  • Logs: Request/response logs
  • Documentation: API reference

Default Panels:

  • APIStatus: Endpoint health
  • UsageMetrics: Requests, bandwidth
  • RecentRequests: Latest API calls
  • QuickStart: Getting started guide

Data Product → DataApp

// Data product renders with:
<DataApp product={dataProduct}>
  <Shell>
    <Sidebar navigation={[
      'Datasets',
      'Sources',
      'Pipelines',
      'Query Explorer',
      'Quality',
      'Usage',
    ]} />
    <MainContent>
      <DashboardView />
    </MainContent>
  </Shell>
</DataApp>

Default Views:

  • Datasets: Browse available datasets
  • Sources: Manage data sources
  • Pipelines: ETL pipeline status
  • Query Explorer: SQL/query interface
  • Quality: Data quality metrics
  • Usage: Storage, query usage

Default Panels:

  • DatasetStats: Row counts, size
  • PipelineStatus: Active pipelines
  • RecentQueries: Latest queries
  • QualityScore: Data quality metrics

Headless Product → HeadlessApp

// Headless product renders with:
<HeadlessApp product={headlessProduct}>
  <Shell>
    <Sidebar navigation={[
      'MCP Servers',
      'AI Agents',
      'API Playground',
      'Schema',
      'Usage',
      'Logs',
    ]} />
    <MainContent>
      <DashboardView />
    </MainContent>
  </Shell>
</HeadlessApp>

Default Views:

  • MCP Servers: Model Context Protocol servers
  • AI Agents: Agent configuration
  • API Playground: Interactive testing
  • Schema: API schema explorer
  • Usage: Request metrics
  • Logs: Request/response logs

Default Panels:

  • MCPStatus: Server status
  • AgentActivity: Recent agent runs
  • APIMetrics: Request stats
  • QuickTest: API testing widget

ProductView

The ProductView component renders a single view/page within a product application.

Props

interface ProductViewProps extends BaseViewProps {
  /** Product context */
  product: string | Product
  /** View type to render */
  viewType:
    | 'dashboard'
    | 'settings'
    | 'usage'
    | 'apiKeys'
    | 'webhooks'
    | 'team'
    | 'billing'
    | 'datasets'
    | 'sources'
    | 'pipelines'
    | 'mcpServers'
    | 'agents'
    | 'playground'
  /** View-specific data */
  data?: any
  /** Custom panels to display */
  panels?: Array<{
    type: string
    props?: Record<string, any>
  }>
}

Usage

import { ProductView } from '@mdxui/cockpit'

// Render specific view for a product
<ProductView
  product={product}
  viewType="dashboard"
/>

// With custom panels
<ProductView
  product={product}
  viewType="usage"
  panels={[
    { type: 'UsageMetrics', props: { period: 'week' } },
    { type: 'UsageChart', props: { metric: 'requests' } },
    { type: 'RateLimitStatus' },
  ]}
/>

View Type Examples

Dashboard View

<ProductView
  product={apiProduct}
  viewType="dashboard"
  panels={[
    { type: 'APIStatus', props: { realtime: true } },
    { type: 'UsageMetrics', props: { period: 'month' } },
    { type: 'RecentRequests', props: { limit: 10 } },
    { type: 'QuickStart' },
  ]}
/>

API Keys View

<ProductView
  product={apiProduct}
  viewType="apiKeys"
  data={{
    keys: [
      {
        id: 'key_1',
        name: 'Production',
        key: 'sk_live_••••••••',
        created: '2024-01-15',
        lastUsed: '2024-03-20',
        scopes: ['read', 'write'],
      },
    ],
    allowCreate: true,
    showUsage: true,
  }}
/>

ProductPanel

The ProductPanel component renders individual panels/widgets within product views.

Props

interface ProductPanelProps {
  /** Product context */
  product: string | Product
  /** Panel type to render */
  panelType:
    | 'usageMetrics'
    | 'apiStatus'
    | 'recentActivity'
    | 'quickActions'
    | 'workspaceSwitcher'
    | 'datasetStats'
    | 'pipelineStatus'
    | 'mcpStatus'
    | 'agentActivity'
    | 'quickStart'
  /** Panel-specific configuration */
  config?: Record<string, any>
  /** Custom className */
  className?: string
  /** Collapsible panel */
  collapsible?: boolean
  /** Initially collapsed */
  defaultCollapsed?: boolean
}

Usage

import { ProductPanel } from '@mdxui/cockpit'

// Render usage metrics panel
<ProductPanel
  product={apiProduct}
  panelType="usageMetrics"
  config={{
    period: 'month',
    metrics: ['requests', 'bandwidth', 'errors'],
  }}
/>

// Collapsible panel
<ProductPanel
  product={saasProduct}
  panelType="quickActions"
  collapsible={true}
  defaultCollapsed={false}
/>

Panel Types by Product

SaaS Product Panels

// Usage metrics for SaaS
<ProductPanel
  product={saasProduct}
  panelType="usageMetrics"
  config={{
    metrics: ['seats', 'storage', 'apiRequests'],
    showLimits: true,
  }}
/>

// Workspace switcher
<ProductPanel
  product={saasProduct}
  panelType="workspaceSwitcher"
  config={{
    showCreateNew: true,
    groupByRole: true,
  }}
/>

// Recent activity
<ProductPanel
  product={saasProduct}
  panelType="recentActivity"
  config={{
    limit: 20,
    types: ['user.login', 'workspace.created', 'member.invited'],
  }}
/>

API Product Panels

// API status panel
<ProductPanel
  product={apiProduct}
  panelType="apiStatus"
  config={{
    endpoints: ['/v1/users', '/v1/posts'],
    showLatency: true,
    realtime: true,
  }}
/>

// Usage metrics
<ProductPanel
  product={apiProduct}
  panelType="usageMetrics"
  config={{
    metrics: ['requests', 'bandwidth', 'errors'],
    period: 'week',
    groupBy: 'endpoint',
  }}
/>

// Quick start guide
<ProductPanel
  product={apiProduct}
  panelType="quickStart"
  config={{
    language: 'typescript',
    showSDK: true,
  }}
/>

Data Product Panels

// Dataset statistics
<ProductPanel
  product={dataProduct}
  panelType="datasetStats"
  config={{
    metrics: ['rows', 'size', 'columns'],
    showGrowth: true,
  }}
/>

// Pipeline status
<ProductPanel
  product={dataProduct}
  panelType="pipelineStatus"
  config={{
    statuses: ['running', 'failed'],
    showLogs: true,
  }}
/>

Headless Product Panels

// MCP server status
<ProductPanel
  product={headlessProduct}
  panelType="mcpStatus"
  config={{
    servers: ['mcp://server1', 'mcp://server2'],
    showTools: true,
  }}
/>

// AI agent activity
<ProductPanel
  product={headlessProduct}
  panelType="agentActivity"
  config={{
    limit: 10,
    showMetrics: true,
  }}
/>

Auto-Wiring

ProductApp components automatically query product data from Payload:

// Queries products collection by ID
<ProductApp product="prod_123" />

// Or pass full product object
<ProductApp product={productObject} />

When a product ID is provided, the component automatically:

  1. Fetches product data from Payload CMS
  2. Loads related features, prices, and categories
  3. Configures the app shell based on product type
  4. Renders appropriate views and panels

Examples

Complete SaaS Application

<ProductApp
  product={saasProduct}
  config={{
    navigation: [
      { label: 'Dashboard', href: '/', icon: 'LayoutDashboard' },
      { label: 'Workspaces', href: '/workspaces', icon: 'Building' },
      { label: 'Team', href: '/team', icon: 'Users' },
      { label: 'Billing', href: '/billing', icon: 'CreditCard' },
      { label: 'Settings', href: '/settings', icon: 'Settings' },
    ],
    shell: {
      sidebar: true,
      header: true,
    },
    theme: {
      mode: 'system',
    },
  }}
/>

Developer Portal for API Product

<ProductApp
  product={apiProduct}
  config={{
    navigation: [
      { label: 'Overview', href: '/', icon: 'Home' },
      { label: 'API Keys', href: '/keys', icon: 'Key' },
      { label: 'Webhooks', href: '/webhooks', icon: 'Webhook' },
      { label: 'Usage', href: '/usage', icon: 'BarChart' },
      { label: 'Logs', href: '/logs', icon: 'FileText' },
      { label: 'Docs', href: '/docs', icon: 'Book' },
    ],
    shell: {
      sidebar: true,
      header: true,
    },
  }}
/>

Next Steps

On this page