Token导航 LogoToken导航

Agent Skill · 前端设计

dashboard-patterns(仪表板模式)

用于辅助前端页面、组件、样式和交互逻辑的开发与维护。它适合让 Agent 生成或审查 React、Next.js、Vue、Tailwind、CSS 等相关代码,整理组件结构,或定位布局和性能问题。使用时需要结合项目现有设计系统、路由和构建方式,避免只生成孤立片段;涉及页面改动时,应配合本地预览和构建检查确认视觉效果。

dashboard-patterns 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证信息还不明确,第三方扫描已通过,按安装量在前端设计类的 10,216 个 Skill 里排第 6,616。

总安装 483周安装 17GitHub Stars 1下载 140核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:dashboard-patterns(仪表板模式)
来源仓库:https://github.com/cleanexpo/nodejs-starter-v1
仓库路径:skills/dashboard-patterns
安装命令:
npx skills add https://github.com/cleanexpo/nodejs-starter-v1 --skill dashboard-patterns
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/cleanexpo/nodejs-starter-v1 --skill dashboard-patterns

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

dashboard-patterns 固化 NodeJS-Starter-V1 仪表板架构,包含状态监控组件与实时数据可视化模式。适用于需要统一数据展示风格、增强用户体验与运维监控能力的 Web 应用。集成光谱色彩映射、物理动画与澳大利亚本地化格式化,强化设计一致性。

使用前请确认项目已采用 Supabase Realtime 与 Scientific Luxury 设计体系。建议在开发早期即引入该模式,避免后期重构带来的成本与风险。

来源仓库内路径:skills/dashboard-patterns

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/cleanexpo/nodejs-starter-v1 --skill dashboard-…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

dashboard-patterns 怎么安装?

在终端执行 npx skills add https://github.com/cleanexpo/nodejs-starter-v1 --skill dashboard-patterns。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

dashboard-patterns 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

dashboard-patterns 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

dashboard-patterns 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

dashboard-patterns 用的人多吗?

公开数据是累计安装 483 次,近一周安装 17 次,下载 140 次,GitHub 1 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

dashboard-patterns 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
frontend-design

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
dashboard-patterns

仪表板模式 · 本页

4831需要联网未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Dashboard Patterns - Real-Time Data Visualisation

Codifies the project's existing dashboard architecture: the Status Command Centre component library, backend analytics APIs, and the Scientific Luxury design rules that govern every data surface. Enforces timeline layout, spectral colours, physics-based animations, and Australian locale formatting.

Description

Codifies real-time dashboard patterns for NodeJS-Starter-V1 including the Status Command Centre component library, timeline/orbital layouts, Supabase Realtime integration, spectral colour mapping, and Scientific Luxury design enforcement for all data visualisation surfaces.


When to Apply

Positive Triggers

  • Building new dashboard pages or metric displays
  • Adding real-time data visualisation components
  • Integrating Supabase Realtime for live updates
  • Creating loading skeletons or empty states for dashboards
  • Composing MetricTile, DataStrip, or ProgressOrb components
  • Reviewing dashboard layouts for Scientific Luxury compliance
  • User mentions: "dashboard", "metrics display", "real-time", "monitoring UI", "command centre"

Negative Triggers

  • Collecting or storing metrics data (use metrics-collector instead)
  • Designing email templates (use email-template instead)
  • Adding log statements (use structured-logging instead)
  • Implementing non-dashboard UI components (use scientific-luxury instead)

Core Directives

The Three Laws of Dashboards

  1. Timeline, never grid: No grid-cols-2/grid-cols-4 layouts. Use vertical timelines, horizontal data strips, and orbital arrangements.
  2. Spectral, never static: Every status maps to a spectral colour with breathing animation. No grey placeholder states.
  3. Real-time, never stale: Live data via Supabase Realtime or 30-second polling. Always show connection status.

Existing Project Infrastructure

Component Library

Location: apps/web/components/status-command-centre/

CategoryComponents
MainStatusCommandCentre (full/compact/minimal variants)
Data DisplayDataStrip (horizontal metrics), MetricTile (stat tile with trends)
VisualisationProgressOrb, ProgressRing, StatusPulse, StatusBadge
ActivityAgentNode, AgentActivityCard, ActivityTimeline, AgentThinkingIndicator
UtilityNotificationStream, ElapsedTimer
HooksuseElapsedTime, useCountdown, useStatusTransitions, useStatusColourTransition
UtilsformatElapsedAU, formatTimestampAU, formatDateAU, getAustralianTimezone

Dashboard Pages

PageLocationData Source
Agent Dashboardapps/web/app/(dashboard)/agents/page.tsx/api/agents/stats, /api/agents/list
Analytics Dashboardapps/web/app/dashboard-analytics/page.tsx/api/analytics/metrics/overview
Status Command CentreEmbedded componentSupabase Realtime (agent_runs table)

Backend APIs

RouteLocationReturns
/analytics/metrics/overviewapps/backend/src/api/routes/analytics.pyRuns, success rate, cost, tokens
/analytics/metrics/agentsSame filePer-agent performance breakdown
/analytics/metrics/costsSame fileCost by model, token breakdown
/api/agents/statsapps/backend/src/api/routes/agent_dashboard.pyAggregate agent statistics
/api/agents/{id}/healthSame fileAgentHealthReport model
/api/agents/performance/trendsSame fileTime-series trend data

Layout Patterns

BANNED: Card Grid

// REJECTED — violates Scientific Luxury and Timeline law
<div className="grid grid-cols-2 lg:grid-cols-4 gap-4">
  <Card>...</Card>
  <Card>...</Card>
</div>

REQUIRED: Timeline Layout

The StatusCommandCentre implements a vertical timeline spine with agent nodes:

<div className="relative pl-4">
  {/* Vertical Timeline Spine */}
  <motion.div
    initial={{ scaleY: 0 }}
    animate={{ scaleY: 1 }}
    transition={{ delay: 0.3, duration: 0.8, ease: [0.19, 1, 0.22, 1] }}
    className="absolute top-0 bottom-0 left-8 w-px origin-top
               bg-gradient-to-b from-white/10 via-white/5 to-transparent"
  />
  {/* Agent Nodes along the spine */}
  <div className="space-y-8">
    {runs.map((run, index) => (
      <AgentNode key={run.id} run={run} index={index} />
    ))}
  </div>
</div>

REQUIRED: Horizontal Data Strip

Replace metric grids with DataStrip — inline horizontal layout with spectral-coloured values:

<DataStrip
  metrics={[
    { label: 'Total', value: runs.length },
    { label: 'Active', value: activeRuns.length, variant: 'info' },
    { label: 'Completed', value: completedRuns.length, variant: 'success' },
    { label: 'Failed', value: failedRuns.length, variant: 'error' },
  ]}
/>

DataStrip uses JetBrains Mono for values, text-[10px] tracking-widest uppercase for labels, pipe separators between metrics, and spectral glow on non-zero highlighted values.


Spectral Colour Mapping

Every AgentRunStatus maps to a spectral colour defined in constants.ts:

StatusColourHSLAnimation
pendingSlatehsl(220 14% 46%)Pulse (idle)
in_progressBluehsl(217 91% 60%)Spin (active)
awaiting_verificationAmberhsl(38 92% 50%)Pulse (active)
verification_in_progressAmberhsl(38 92% 50%)Spin (active)
verification_passedGreenhsl(142 76% 36%)None (idle)
verification_failedRedhsl(0 84% 60%)Pulse (urgent)
completedEmerald#00FF88None (idle)
failedRed#FF4444Pulse (urgent)
blockedSlateMutedNone (idle)
escalated_to_humanMagenta#FF00FFPulse (urgent)

Access via getStatusConfig(status) from constants.ts. Each config includes colour (primary, glow, background), icon, animation, and intensity.

DataStrip variants use simplified spectral colours: info=#00F5FF, success=#00FF88, warning=#FFB800, error=#FF4444.


Animation Patterns

All animations use Framer Motion. CSS transitions are BANNED.

Staggered Entry

Components animate in sequence with delay offsets:

<motion.div
  initial={{ opacity: 0, y: 20 }}
  animate={{ opacity: 1, y: 0 }}
  transition={{ delay: 0.1 * index, ease: [0.19, 1, 0.22, 1] }}
>

Breathing Orbs

Status indicators use breathing animation for active states:

<motion.span
  className="h-1.5 w-1.5 rounded-full"
  style={{ backgroundColor: config.colour.primary }}
  animate={{ opacity: [1, 0.4, 1], scale: [1, 1.2, 1] }}
  transition={{ duration: 2, repeat: Infinity, ease: 'easeInOut' }}
/>

Ambient Glow

Active agents trigger a radial gradient background glow:

{activeRuns.length > 0 && (
  <motion.div
    initial={{ opacity: 0 }}
    animate={{ opacity: 0.1 }}
    className="pointer-events-none absolute inset-0"
    style={{ background: 'radial-gradient(ellipse at 20% 10%, hsl(217 91% 60% / 0.15) 0%, transparent 50%)' }}
  />
)}

Status Transitions

Use useStatusTransitions hook to detect state changes and apply transition animations (success ripple, error shake).


Data Fetching Patterns

Server Components (Initial Load)

Use Next.js Server Components for initial data fetch with cache: 'no-store':

async function fetchAgentStats() {
  const backendUrl = process.env.BACKEND_URL || 'http://localhost:8000';
  const res = await fetch(`${backendUrl}/api/agents/stats`, { cache: 'no-store' });
  if (!res.ok) return FALLBACK_STATS;
  return res.json();
}

Always provide fallback data so the page renders even when the backend is unavailable.

Polling (Analytics Dashboard)

For non-realtime pages, poll at 30-second intervals:

useEffect(() => {
  fetchMetrics();
  const interval = setInterval(fetchMetrics, 30_000);
  return () => clearInterval(interval);
}, []);

Supabase Realtime (Command Centre)

For the Status Command Centre, subscribe to agent_runs table changes:

const channel = supabase
  .channel('agent-runs')
  .on('postgres_changes', { event: '*', schema: 'public', table: 'agent_runs' },
    (payload: RealtimePayload) => {
      if (payload.eventType === 'INSERT') addRun(payload.new);
      if (payload.eventType === 'UPDATE') updateRun(payload.new);
    })
  .subscribe();

Types RealtimeEvent, RealtimePayload, and ConnectionStatus are defined in types.ts.

Connection Status

Always display connection state using the ConnectionIndicator component:

  • Connected (Emerald breathing dot + "Live" label)
  • Reconnecting (Amber dot + "Reconnecting" label)
  • Disconnected (Red dot + "Offline" label)

Loading & Empty States

Loading Skeleton

Every dashboard page must show a skeleton that matches the final layout structure:

function LoadingSkeleton() {
  return (
    <div className="space-y-8">
      <motion.div
        className="h-10 w-64 rounded-sm bg-white/5"
        animate={{ opacity: [0.5, 1, 0.5] }}
        transition={{ duration: 1.5, repeat: Infinity }}
      />
      {/* More skeleton elements matching the real layout */}
    </div>
  );
}

Rules: Use bg-white/5 for skeleton blocks, rounded-sm only, breathing opacity animation, staggered delays per element.

Empty State

When no data is available, show a centred empty state with a breathing orb:

<div className="flex flex-col items-center justify-center py-20">
  <motion.div
    className="h-3 w-3 rounded-full bg-white/20"
    animate={{ scale: [1, 1.5, 1], opacity: [0.5, 1, 0.5] }}
    transition={{ duration: 2, repeat: Infinity, ease: 'easeInOut' }}
  />
  <h3 className="text-xl font-light text-white">No Active Agents</h3>
  <p className="font-mono text-xs text-white/40">Description text.</p>
</div>

Component Composition

New Dashboard Page Template

Every dashboard page follows this structure:

// 1. Server Component wrapper (data fetch)
export default async function DashboardPage() {
  const data = await fetchData();
  return (
    <div className="relative min-h-screen bg-[#050505]">
      {/* Header */}
      <header className="border-b border-white/[0.06] px-8 py-6">
        <p className="text-[10px] tracking-[0.3em] text-white/30 uppercase">Category Label</p>
        <h1 className="text-4xl font-extralight tracking-tight text-white">Page Title</h1>
        <DataStrip metrics={[...]} />
      </header>

      {/* Content — timeline or orbital, never grid */}
      <Suspense fallback={<LoadingSkeleton />}>
        <DashboardContent data={data} />
      </Suspense>

      {/* Footer */}
      <footer className="px-8 py-4">
        <p className="font-mono text-[10px] text-white/20">
          {new Date().toLocaleDateString('en-AU')}
        </p>
      </footer>
    </div>
  );
}

When to Use Each Component

NeedComponentImport From
Inline metrics rowDataStripstatus-command-centre
Single stat with trendMetricTilestatus-command-centre
Agent execution statusAgentNodestatus-command-centre
Circular progressProgressOrb or ProgressRingstatus-command-centre
Status dotStatusPulsestatus-command-centre
Status labelStatusBadgestatus-command-centre
Step timelineActivityTimelinestatus-command-centre
Notification sidebarNotificationStreamstatus-command-centre
Elapsed time counterElapsedTimerstatus-command-centre

Anti-Patterns

Anti-PatternWhy It FailsCorrect Approach
grid-cols-2 / grid-cols-4 metric cardsViolates Scientific Luxury layout rulesDataStrip or timeline layout
Standard <Card> with rounded-lgWrong corners, wrong aestheticrounded-sm border-[0.5px] border-white/[0.06]
CSS transition: all 0.3s linearBanned by Bezier (Council of Logic)Framer Motion with physics-based easing
White/light background dashboardsViolates OLED black requirementbg-[#050505] always
No loading skeletonLayout shift on data loadSkeleton matching final layout structure
No connection indicatorUsers cannot tell if data is liveConnectionIndicator in every realtime page
Hardcoded status coloursDrift from spectral palettegetStatusConfig(status).colour
setInterval without cleanupMemory leak on unmountuseEffect with clearInterval in cleanup

Checklist for New Dashboard Pages

Layout

  • OLED black background (bg-[#050505])
  • Timeline or orbital layout (no card grids)
  • DataStrip for summary metrics (not metric grid)
  • Single pixel borders (border-[0.5px] border-white/[0.06])
  • rounded-sm only (no rounded-lg, rounded-xl)
  • JetBrains Mono for data values

Data

  • Server Component for initial fetch with fallback data
  • Polling interval (30s) or Supabase Realtime subscription
  • Connection status indicator shown
  • Loading skeleton matching final layout
  • Empty state with breathing orb

Animation

  • Framer Motion for all transitions (no CSS transitions)
  • Staggered entry for list items
  • Breathing animation for active status indicators
  • Ambient glow when agents are active

Integration

  • Uses metrics-collector MetricsRegistry for data source
  • Spectral colours from STATUS_CONFIG constants
  • Australian locale formatting (formatDateAU, formatTimestampAU)
  • Types imported from status-command-centre/types.ts

Response Format

[AGENT_ACTIVATED]: Dashboard Patterns
[PHASE]: {Design | Implementation | Review}
[STATUS]: {in_progress | complete}

{dashboard analysis or implementation guidance}

[NEXT_ACTION]: {what to do next}

Integration Points

Scientific Luxury

  • OLED black background, spectral colours, single-pixel borders, physics-based animations
  • All dashboard components enforce the design system automatically via constants.ts

Metrics Collector

  • MetricsRegistry provides the data layer (counters, gauges, histograms)
  • Time-series aggregation powers trend charts
  • Summary endpoint feeds DataStrip and MetricTile components

State Machine

  • AgentRunStatus (10 states) maps directly to STATUS_CONFIG colour/animation entries
  • useStatusTransitions hook handles state change animations

Structured Logging

  • Dashboard pages log dashboard_loaded, dashboard_error events
  • Connection status changes logged for debugging

Cron Scheduler

  • Cron job metrics displayed via DataStrip or MetricTile
  • Daily report data powers the analytics dashboard trends

Australian Localisation (en-AU)

  • Date Format: DD/MM/YYYY via formatDateAU() utility
  • Time: H:MM am/pm AEST/AEDT via formatTimeAU() and getAustralianTimezone()
  • Currency: AUD ($) — total_cost_usd converted to AUD for display
  • Spelling: colour, behaviour, analyse, optimise, centre
  • Footer: Australian date format in dashboard footers

平台分布

Codex

33.26%
按下载量换算47

Claude

31.87%
按下载量换算45

Cursor

16.99%
按下载量换算24

Gemini CLI

9.36%
按下载量换算13

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills