Skip to content

Add Airtable Dashboard gap analysis documentation - #715

Merged
hotlong merged 2 commits into
mainfrom
copilot/update-sales-dashboard-documentation
Feb 18, 2026
Merged

Add Airtable Dashboard gap analysis documentation#715
hotlong merged 2 commits into
mainfrom
copilot/update-sales-dashboard-documentation

Conversation

CopilotAI commented Feb 18, 2026

Copy link
Copy Markdown
Contributor

Documents protocol and component gaps between ObjectStack dashboards and Airtable's Sales Performance interface. Provides implementation roadmap with effort estimates and issue references.

Documentation Added

content/docs/guides/airtable-dashboard-analysis.mdx

  • UI Zone Analysis — 9 zones mapped to current coverage (global filters, KPI cards, pivot tables, widget actions)
  • Protocol EnhancementscolorVariant/actionUrl on widgets, optionsFrom on globalFilters, header config, pivotConfig with multi-measure
  • Component SpecsDashboardFilterBar, MetricCard variants, PivotTable, widget header actions, advanced charts (funnel/grouped-bar/gauge)
  • Complete Example — Full sales dashboard implementation (TypeScript + JSON)
  • 3-Phase Roadmap — 22 days effort across Foundation (P0), Advanced Widgets (P1), Polish (P2)

Roadmap Integration

ROADMAP.md Section 8.2 — Added dashboard enhancement phases with effort estimates, priority levels, and links to tracking issues (#712-714, objectui#585-588)

Example Enhancement

Current widget schema lacks visual variants and actions:

{title: 'Total Revenue',type: 'metric',object: 'opportunity',valueField: 'amount',layout: {x: 0,y: 0,w: 4,h: 2}}

Proposed enhancement adds color theming, descriptions, and navigation:

{title: 'Total Revenue',description: 'YTD revenue across all regions',type: 'metric',colorVariant: 'orange',// NEWactionUrl: '/reports/revenue-detail',// NEWactionType: 'internal',// NEWobject: 'opportunity',valueField: 'amount',layout: {x: 0,y: 0,w: 4,h: 2}}
Original prompt

背景

参考 Airtable 的"销售业绩与团队绩效"仪表盘界面,对 ObjectStack spec 和 ObjectUI 的协议、组件、页面进行了全面的 Gap Analysis。现需将分析结果和优化建议写入项目文档,以便后续开发参考。

目标

objectstack-ai/spec 仓库中创建或更新文档,记录以下内容:

1. Airtable Dashboard 目标界面分解

目标界面包含以下关键 UI 区域:

ZoneAirtable FeatureCurrent Coverage
A. Global Filter BarTime Period / Team / Product Line dropdowns⚠️ Protocol defined (globalFilters), NO component
B. KPI Card Row3 colored KPI cards with external-link icon⚠️MetricCard exists, lacks color variants & action link
C. Line ChartMonthly revenue trend✅ Supported
D. Bar ChartFunnel distribution by stage✅ Supported
E. Pie/Donut ChartConversion rate by stage✅ Supported
F. Grouped Bar ChartTeam performance comparison⚠️ In spec, NOT in objectui
G. Pivot TableOwner×Stage cross-tab with Sum rowMissing entirely
H. Widget Action ButtonExternal-link icon on each widgetMissing
I. Dashboard Title/DescriptionPage header with title + subtitle⚠️ Exists but not in Dashboard protocol

2. Protocol Enhancements (spec)

记录以下协议增强建议:

  • 1.1DashboardWidgetSchema 新增 colorVariant, actionUrl, description, actionType 属性
  • 1.2DashboardSchema 新增 header 结构化配置(showTitle, showDescription, actions)
  • 1.3globalFilters 增强:支持 options, optionsFrom(动态数据绑定), defaultValue, scope, targetWidgets
  • 1.4 确保 pivot 作为 first-class widget type
  • 1.5 新增 measures 数组支持 multi-measure pivot/matrix widgets

3. Component Enhancements (objectui)

记录以下组件增强建议:

  • 2.1 新增 DashboardFilterBar 组件(渲染 globalFilters)
  • 2.2MetricCard 彩色变体支持(colorVariant: orange/teal/blue 等)+ action button
  • 2.3 新增 PivotTable 组件(交叉矩阵/透视表)
  • 2.4 Widget header 支持 description + action button
  • 2.5AdvancedChartImpl 补充 funnel, grouped-bar, stacked-bar, horizontal-bar, gauge
  • 2.6 新增 DashboardHeader 复合组件

4. 页面组合优化

提供完整的 JSON Schema 示例(sales_performance_dashboard.json),展示如何用协议描述完整的 Airtable 风格仪表盘。

5. 实施优先级 & Roadmap

PriorityTaskPackageEffort
🔴 P0DashboardFilterBar componentplugin-dashboard3d
🔴 P0MetricCard color variants + action buttonplugin-dashboard1d
🔴 P0Widget header description + action iconplugin-dashboard1d
🔴 P0PivotTable componentplugin-report5d
🔴 P0Spec: colorVariant, actionUrl, description on DashboardWidgetSchemaspec0.5d
🔴 P0Spec: Enhanced globalFilters with optionsFromspec0.5d
🟡 P1funnel, grouped-bar, stacked-bar chart typesplugin-charts3d
🟡 P1DashboardHeader composite componentplugin-dashboard1d
🟡 P1Spec: header property on DashboardSchemaspec0.5d
🟡 P1Spec: measures array for multi-value pivot widgetsspec0.5d
🟢 P2gauge chart typeplugin-charts2d
🟢 P2Dashboard export (PDF/Image) actionplugin-dashboard3d

6. 关联 Issues

请在文档中引用以下已创建的 Issue:

objectstack-ai/spec:

objectstack-ai/objectui:

文档位置建议

建议放在 content/docs/guides/content/docs/protocol/ 目录下,如 content/docs/guides/airtable-dashboard-analysis.mdx

注��事项

  • 开发完成后运行 test
  • 更新 roadmap 相关文件(如有)
  • 使用 MDX 格式
  • 包含代码示例(TypeScript/JSON)

This pull request was created from Copilot chat.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

@vercel

vercelBot commented Feb 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
objectstack-playReadyReadyPreview, CommentFeb 18, 2026 7:26am
specCanceledCanceledFeb 18, 2026 7:26am

Request Review

Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
CopilotAI changed the title [WIP] Update project documentation with gap analysis resultsAdd Airtable Dashboard gap analysis documentationFeb 18, 2026
CopilotAI requested a review from hotlongFebruary 18, 2026 06:03
@hotlong
hotlong marked this pull request as ready for review February 18, 2026 06:04
CopilotAI review requested due to automatic review settings February 18, 2026 06:04
@hotlong
hotlong merged commit 2c0801b into mainFeb 18, 2026
3 of 5 checks passed

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an Airtable vs ObjectStack dashboard gap-analysis guide and integrates a phased implementation plan into the project roadmap so upcoming protocol/objectui work can be tracked against concrete parity targets.

Changes:

  • Added a new guide airtable-dashboard-analysis.mdx covering UI zone breakdown, protocol/component gaps, examples, and a phased roadmap.
  • Registered the new guide in content/docs/guides/meta.json navigation.
  • Added a new “Dashboard Enhancement — Airtable Dashboard Parity” section to ROADMAP.md with linked issues and effort estimates.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

FileDescription
content/docs/guides/meta.jsonAdds the new guide to the Guides sidebar order.
content/docs/guides/airtable-dashboard-analysis.mdxNew MDX guide documenting dashboard parity gaps, proposed schema changes, component work, examples, and roadmap.
ROADMAP.mdIntroduces a dedicated dashboard parity roadmap section and updates section numbering/links accordingly.

Comment on lines +705 to +714
field: 'product_line',
label: 'Product Line',
type: 'select',
optionsFrom: {
object: 'product',
valueField: 'category',
labelField: 'category'
},
scope: 'dashboard'
}

CopilotAIFeb 18, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

optionsFrom is described here as being “for lookup type”, but the example uses type: 'select' together with optionsFrom. This is internally inconsistent in the doc and could confuse implementers; either change the example to type: 'lookup' or update the proposed GlobalFilterSchema docs to state that optionsFrom is supported for select as well.

Copilot uses AI. Check for mistakes.
Comment on lines +724 to +756
object: 'opportunity',
valueField: 'amount',
aggregate: 'sum',
filter: { field: 'stage', operator: 'eq', value: 'closed_won' },
colorVariant: 'orange',
actionUrl: '/reports/revenue-detail',
actionType: 'internal',
layout: { x: 0, y: 0, w: 4, h: 2 }
},
{
title: 'Win Rate',
description: 'Percentage of opportunities closed won',
type: 'kpi',
object: 'opportunity',
valueField: 'stage',
aggregate: 'count',
colorVariant: 'teal',
actionUrl: '/reports/win-rate',
actionType: 'internal',
layout: { x: 4, y: 0, w: 4, h: 2 }
},
{
title: 'Active Deals',
description: 'Opportunities in pipeline',
type: 'metric',
object: 'opportunity',
valueField: 'id',
aggregate: 'count',
filter: {
field: 'stage',
operator: 'nin',
value: ['closed_won', 'closed_lost']
},

CopilotAIFeb 18, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The examples use a { field, operator, value } shape for filter, but DashboardWidgetSchema.filter is typed as FilterConditionSchema (ObjectStack query DSL like { status: { $eq: 'paid' } } / { is_closed: false }). Even though the current Zod schema is permissive, keeping examples aligned with the canonical filter DSL will avoid confusion and match existing tests/usages.

Copilot uses AI. Check for mistakes.
Comment on lines +650 to +652
import { Dashboard } from '@objectstack/spec';

export const salesPerformanceDashboard = Dashboard.create({

CopilotAIFeb 18, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The TypeScript example imports Dashboard from @objectstack/spec, but the package root only exports protocol namespaces (e.g. UI) and a few DX helpers. As written, this import won't work; use import * as UI from '@objectstack/spec/ui' (or import { UI } from '@objectstack/spec') and reference UI.Dashboard.create(...) / the subpath export instead.

Suggested change
import { Dashboard } from'@objectstack/spec';
exportconst salesPerformanceDashboard =Dashboard.create({
import { UI } from'@objectstack/spec';
exportconst salesPerformanceDashboard =UI.Dashboard.create({

Copilot uses AI. Check for mistakes.
Comment on lines +154 to +160
chartConfig: {
series: [
{ name: 'closed_won', label: 'Won', color: '#10b981' },
{ name: 'closed_lost', label: 'Lost', color: '#ef4444' }
]
},
layout: { x: 0, y: 6, w: 6, h: 4 }

CopilotAIFeb 18, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Several examples use chartConfig without the required type field. ChartConfigSchema currently requires type: ChartTypeSchema, so these snippets won’t validate as-is. Either include type in the examples (matching the widget’s type) or clarify that the schema would need to be adjusted to infer it from the widget.

Copilot uses AI. Check for mistakes.
Comment on lines +773 to +776
chartConfig: {
xAxis: { field: 'close_date', format: 'MMM YYYY' },
yAxis: { field: 'amount', format: '$0,0' },
series: [

CopilotAIFeb 18, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the full dashboard example, chartConfig.yAxis is shown as a single object, but ChartConfigSchema defines yAxis as an array of axes. This example won’t validate against the current schema unless yAxis is changed to an array (even for a single axis).

Copilot uses AI. Check for mistakes.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@hotlong