Boards

Custom dashboards for data visualization

Boards

Entrolytics Boards are customizable dashboards that let you create personalized views of your analytics data.

Overview

Boards allow you to:

  • Create custom layouts with drag-and-drop widgets
  • Combine multiple data sources in one view
  • Share dashboards with team members
  • Focus on key metrics that matter to your business

Creating Boards

Via Dashboard

  1. Navigate to Boards in the sidebar
  2. Click Create Board
  3. Enter a name and description
  4. Click Create
  5. Add widgets to your board

Via API

import { getClient } from '@entro314labs/entro-api'

const client = getClient({
  hostUrl: 'https://cloud.entrolytics.click',
  websiteId: 'your-website-id',
})

const board = await client.boards.create({
  name: 'Marketing Dashboard',
  description: 'Key marketing metrics and campaign performance',
})

Widget Types

Metric Card

Display a single metric with optional comparison.

await client.boards.createWidget(boardId, {
  type: 'metric',
  title: 'Total Page Views',
  config: {
    metric: 'pageviews',
    comparison: 'previous_period',
  },
})

Line Chart

Time-series data visualization.

await client.boards.createWidget(boardId, {
  type: 'line',
  title: 'Traffic Over Time',
  config: {
    metrics: ['pageviews', 'visitors'],
    period: '30d',
    granularity: 'day',
  },
})

Bar Chart

Categorical comparisons.

await client.boards.createWidget(boardId, {
  type: 'bar',
  title: 'Top Pages',
  config: {
    dimension: 'url',
    metric: 'pageviews',
    limit: 10,
  },
})

Pie Chart

Distribution visualization.

await client.boards.createWidget(boardId, {
  type: 'pie',
  title: 'Device Distribution',
  config: {
    dimension: 'device',
    metric: 'visitors',
  },
})

Table

Tabular data display.

await client.boards.createWidget(boardId, {
  type: 'table',
  title: 'Top Referrers',
  config: {
    dimensions: ['referrer'],
    metrics: ['visitors', 'pageviews', 'bounce_rate'],
    limit: 20,
  },
})

Map

Geographic data visualization.

await client.boards.createWidget(boardId, {
  type: 'map',
  title: 'Visitors by Country',
  config: {
    metric: 'visitors',
    level: 'country', // or 'region', 'city'
  },
})

Funnel

Conversion funnel visualization.

await client.boards.createWidget(boardId, {
  type: 'funnel',
  title: 'Checkout Funnel',
  config: {
    steps: [
      { name: 'Product View', event: 'view_product' },
      { name: 'Add to Cart', event: 'add_to_cart' },
      { name: 'Checkout', event: 'begin_checkout' },
      { name: 'Purchase', event: 'purchase' },
    ],
  },
})

Real-time

Live visitor counter.

await client.boards.createWidget(boardId, {
  type: 'realtime',
  title: 'Active Visitors',
  config: {
    refreshInterval: 5000, // ms
  },
})

Widget Configuration

Common Options

All widgets support these options:

{
  type: string,          // Widget type
  title: string,         // Display title
  description?: string,  // Optional description
  width?: 1 | 2 | 3 | 4, // Grid width (1-4 columns)
  height?: 1 | 2,        // Grid height (1-2 rows)
  websiteId?: string,    // Override default website
  config: {
    // Type-specific configuration
  },
}

Filtering

Add filters to any widget:

{
  config: {
    filters: [
      { field: 'country', operator: 'eq', value: 'US' },
      { field: 'device', operator: 'in', value: ['desktop', 'tablet'] },
      { field: 'url', operator: 'contains', value: '/blog' },
    ],
  },
}

Date Ranges

Configure time periods:

{
  config: {
    period: '30d',        // Preset: 7d, 30d, 90d, 12m, all
    // Or custom range:
    startDate: '2024-01-01',
    endDate: '2024-12-31',
  },
}

Comparison

Enable period comparison:

{
  config: {
    comparison: 'previous_period', // or 'previous_year'
  },
}

Board Layout

Grid System

Boards use a 4-column grid:

┌─────────┬─────────┬─────────┬─────────┐
│ Widget  │ Widget  │  Widget (2 cols)  │
│ (1 col) │ (1 col) │                   │
├─────────┴─────────┴───────────────────┤
│        Widget (4 cols, full width)    │
├─────────┬─────────────────────────────┤
│ Widget  │     Widget (3 cols)         │
│ (1 col) │                             │
└─────────┴─────────────────────────────┘

Drag and Drop

In the dashboard:

  1. Click Edit Board
  2. Drag widgets to reorder
  3. Resize widgets by dragging corners
  4. Click Save when done

Programmatic Layout

await client.boards.update(boardId, {
  layout: [
    { widgetId: 'w1', x: 0, y: 0, width: 1, height: 1 },
    { widgetId: 'w2', x: 1, y: 0, width: 2, height: 1 },
    { widgetId: 'w3', x: 3, y: 0, width: 1, height: 2 },
    { widgetId: 'w4', x: 0, y: 1, width: 3, height: 1 },
  ],
})

Sharing Boards

Team Sharing

Share with organization members:

await client.boards.update(boardId, {
  visibility: 'org', // 'private' | 'org' | 'public'
})

Public Sharing

Create a public share link:

const shareUrl = await client.boards.createShareLink(boardId)
// Returns: https://cloud.entrolytics.click/share/board/abc123

Embedding

Embed boards in external pages:

<iframe
  src="https://cloud.entrolytics.click/embed/board/abc123"
  width="100%"
  height="600"
  frameborder="0"
></iframe>

API Reference

Create Board

const board = await client.boards.create({
  name: string,
  description?: string,
  visibility?: 'private' | 'org' | 'public',
})

Get Board

const board = await client.boards.get(boardId)

Update Board

const board = await client.boards.update(boardId, {
  name?: string,
  description?: string,
  visibility?: string,
  layout?: LayoutConfig[],
})

Delete Board

await client.boards.delete(boardId)

List Boards

const boards = await client.boards.list()

Widget Operations

// Create widget
const widget = await client.boards.createWidget(boardId, widgetConfig)

// Get widget
const widget = await client.boards.getWidget(boardId, widgetId)

// Update widget
await client.boards.updateWidget(boardId, widgetId, updates)

// Delete widget
await client.boards.deleteWidget(boardId, widgetId)

// List widgets
const widgets = await client.boards.getWidgets(boardId)

Template Boards

Marketing Dashboard

const board = await client.boards.createFromTemplate('marketing', {
  name: 'Marketing Overview',
})

Includes:

  • Traffic overview metrics
  • Top channels chart
  • Campaign performance table
  • Conversion funnel
  • Geographic distribution

E-commerce Dashboard

const board = await client.boards.createFromTemplate('ecommerce', {
  name: 'E-commerce Analytics',
})

Includes:

  • Revenue metrics
  • Conversion funnel
  • Top products table
  • Average order value trend
  • Cart abandonment rate

Content Dashboard

const board = await client.boards.createFromTemplate('content', {
  name: 'Content Performance',
})

Includes:

  • Page views over time
  • Top pages table
  • Engagement metrics
  • Read time distribution
  • Social shares

Best Practices

Dashboard Design

  1. Lead with key metrics - Put most important data at the top
  2. Group related widgets - Keep similar data together
  3. Limit to 6-8 widgets - Avoid information overload
  4. Use consistent time ranges - Makes comparisons easier
  5. Add descriptions - Help viewers understand the data

Performance

  1. Limit table rows - Use pagination or limits
  2. Choose appropriate granularity - Daily for long periods, hourly for recent
  3. Cache expensive queries - Use reports for complex analysis

Sharing

  1. Set appropriate visibility - Private for sensitive data
  2. Use descriptive names - Help others find relevant boards
  3. Document data sources - Add descriptions explaining the data