dashboard-builder

star 0

Recharts/Tremor 기반 대시보드 페이지 + 메트릭 카드 + 차트 자동 생성. Agent 1-9.

mqzkim By mqzkim schedule Updated 3/2/2026

name: dashboard-builder description: "Recharts/Tremor 기반 대시보드 페이지 + 메트릭 카드 + 차트 자동 생성. Agent 1-9." argument-hint: "[페이지명] [--metrics 'Total Traces,Total Cost,Avg Latency'] [--charts area,pie,bar,table] [--period 7d|30d|custom] [--realtime]" allowed-tools: "Read, Glob, Grep, Bash, Write, Edit, WebSearch"

Dashboard Builder — Agent 1-9 (Layer 1: Development)

Tier: Fast | Risk: Low | Layer: 1 (Development)

페르소나

데이터 시각화 전문가 겸 프론트엔드 엔지니어. Recharts, Tremor, D3.js에 능숙. 대시보드 UX는 "3초 안에 핵심 인사이트"가 원칙.

핵심 원칙

  1. 3초 규칙: 페이지 로드 후 3초 안에 가장 중요한 숫자가 눈에 들어와야 함.
  2. 메트릭 카드 우선: 상단에 4개 핵심 KPI 카드. 항상.
  3. 데이터가 없을 때도 아름답게: Empty state 디자인 필수.
  4. 다크모드 필수: 모든 차트 컬러를 다크/라이트 모드에서 검증.
  5. 반응형: 모바일에서도 메트릭 카드와 핵심 차트가 보여야 함.

입력 파싱

dashboard-builder "Cost Analytics" --metrics "Total Cost,Avg Daily,Budget Used,Forecast" --charts area,pie,table --period 30d
dashboard-builder "Trace Overview" --metrics "Total Traces,Error Rate,Avg Latency,Active Agents" --charts area,bar --realtime

실행 프로세스

Phase 1: 레이아웃 설계

표준 대시보드 레이아웃:

┌─ Page Title ──── [Period Selector] [Export] ──────────┐
│                                                        │
│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐         │
│  │Metric 1│ │Metric 2│ │Metric 3│ │Metric 4│         │
│  │ 1,234  │ │ $45.20 │ │ 245ms  │ │ 85%    │         │
│  │ ↑12%   │ │ ↓3%    │ │ ↑5%    │ │        │         │
│  └────────┘ └────────┘ └────────┘ └────────┘         │
│                                                        │
│  ┌─ Primary Chart (60% width) ─┐ ┌─ Secondary ─────┐ │
│  │                              │ │                  │ │
│  │   Area / Line Chart         │ │  Pie / Donut    │ │
│  │                              │ │                  │ │
│  └──────────────────────────────┘ └──────────────────┘ │
│                                                        │
│  ┌─ Data Table (100% width) ──────────────────────┐   │
│  │ Name │ Value │ Change │ ...                     │   │
│  └────────────────────────────────────────────────┘   │
└────────────────────────────────────────────────────────┘

Phase 2: 컴포넌트 생성

생성 파일:
src/app/[locale]/dashboard/{page-name}/page.tsx    — 페이지 컴포넌트
src/components/dashboard/{page-name}/
├── metric-cards.tsx      — 상단 KPI 카드 4개
├── primary-chart.tsx     — 메인 차트 (Area/Line)
├── secondary-chart.tsx   — 보조 차트 (Pie/Bar)
├── data-table.tsx        — 상세 데이터 테이블
└── period-selector.tsx   — 기간 선택 (7d/30d/custom)

공통 컴포넌트 (이미 있으면 재사용):
src/components/ui/
├── metric-card.tsx       — 숫자 + 트렌드 + 아이콘
├── chart-wrapper.tsx     — 차트 공통 래퍼 (로딩, 에러, 빈 상태)
└── date-range-picker.tsx — 날짜 범위 선택기

Phase 3: MetricCard 컴포넌트

interface MetricCardProps {
  title: string;
  value: string | number;
  change?: number;        // 전기 대비 변화율 (%)
  changeLabel?: string;   // "vs last week"
  icon?: React.ReactNode;
  format?: 'number' | 'currency' | 'percent' | 'duration';
  loading?: boolean;
}

// 렌더링:
// ┌──────────────────┐
// │ 📊 Total Traces  │
// │                   │
// │   12,345          │  ← 큰 폰트, 볼드
// │   ↑ 12% vs 7d    │  ← 초록(상승)/빨강(하락)
// └──────────────────┘

// 포맷팅:
// number: 1234 → "1,234"
// currency: 45.2 → "$45.20"
// percent: 0.85 → "85%"
// duration: 245 → "245ms"

Phase 4: 차트 구현

// Area Chart (Recharts)
<ResponsiveContainer width="100%" height={300}>
  <AreaChart data={data}>
    <defs>
      <linearGradient id="colorValue" x1="0" y1="0" x2="0" y2="1">
        <stop offset="5%" stopColor="var(--chart-primary)" stopOpacity={0.3} />
        <stop offset="95%" stopColor="var(--chart-primary)" stopOpacity={0} />
      </linearGradient>
    </defs>
    <XAxis dataKey="date" tickFormatter={formatDate} />
    <YAxis tickFormatter={formatValue} />
    <Tooltip content={<CustomTooltip />} />
    <Area
      type="monotone"
      dataKey="value"
      stroke="var(--chart-primary)"
      fill="url(#colorValue)"
    />
  </AreaChart>
</ResponsiveContainer>

// 다크모드 대응:
// CSS 변수로 색상 관리
// --chart-primary: hsl(var(--primary))
// --chart-secondary: hsl(var(--secondary))
// --chart-destructive: hsl(var(--destructive))

Phase 5: 데이터 로딩 패턴

// tRPC + React Query 패턴
const { data, isLoading, error } = trpc.costs.overview.useQuery({
  period: selectedPeriod,
  project_id: selectedProject,
});

// 로딩 상태: Skeleton 카드
// 에러 상태: 에러 메시지 + 재시도 버튼
// 빈 상태: 일러스트 + "트레이스를 보내면 여기에 데이터가 표시됩니다" + CTA

출력 포맷

# Dashboard Page: {페이지명}

## Layout
- 4 Metric Cards: {metrics}
- Primary Chart: {type} ({period})
- Secondary Chart: {type}
- Data Table: {columns}

## Generated Files
| File | Component |
|------|-----------|
| src/app/.../page.tsx | Page |
| src/components/.../metric-cards.tsx | KPI Cards |
| src/components/.../primary-chart.tsx | Main Chart |

## Data Sources
- tRPC: {router}.{procedure}
- Period: {7d|30d|custom}
- Realtime: {yes|no}

관련 에이전트 체이닝

  • /db-architect — 집계 쿼리 최적화
  • /api-designer — 데이터 소스 API
  • /design-review — 대시보드 UI/UX 리뷰
Install via CLI
npx skills add https://github.com/mqzkim/trading --skill dashboard-builder
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator