К основному содержанию
скилл CX Codex

admin-dashboard — скилл для Claude Code: админка и внутренние

Помогает расширять админ-панель, портал разработчика и консоль операций: новые вкладки, метрики, мониторинг, управление пользователями.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add curiositech/some_claude_skills --skill admin-dashboard -a claude-code
Открыть на GitHub

Что делает admin-dashboard

Скилл описывает структуру админки и подсказывает, как добавить в неё новую вкладку. Внутри — разбор существующих вкладок (Overview, Funnel, Page Views, Users, Access Requests, Allowed Emails, Email Templates), их источников данных и заготовки для запланированных: Production Health, Error Tracking, External Services, AI Analytics, Audit Logs.

Работает по шагам: создать компонент вкладки, добавить её в список tabs, прописать рендер в renderTabContent. Для API есть шаблон эндпоинта с проверкой requireAdmin(), ограничением частоты запросов и записью действия в аудит. Отдельно показан компонент StatCard и обновление данных через SWR.

Скилл заточен под конкретный проект: пути вроде src/app/admin/page.tsx, таблицы adminUsers, auditLog, pageViews и модули @/db/secure-db, @/lib/hipaa/audit. Если у вас другая структура, шаблоны придётся переписывать под себя. Ещё в примерах есть требование не показывать в ошибках идентификаторы пользователей и данные с PHI — это стоит проверить, прежде чем копировать код в свой проект.

Какие задачи решает

  • добавить новую вкладку в существующую админ-панель
  • собрать эндпоинт со статистикой и ограничением частоты запросов
  • вывести метрики API и состояние внешних сервисов
  • настроить аудит действий администратора
  • показать агрегированные ошибки без данных пользователей

Примеры запросов агенту

  • Добавь в админку вкладку Production Health с метриками задержки и аптайма
  • Сделай эндпоинт /api/admin/metrics с проверкой админа и записью в аудит
  • Выведи список ошибок по типам и путям, без идентификаторов пользователей

Как установить admin-dashboard

1Через Skills CLI (Vercel)

npx skills add curiositech/some_claude_skills --skill admin-dashboard -a claude-code

2Вручную: положить файлы

~/.claude/skills/admin-dashboard/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/admin-dashboard/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о admin-dashboard

Как установить admin-dashboard в Claude?

Выполните npx skills add curiositech/some_claude_skills --skill admin-dashboard -a claude-code. Файл скилла окажется по пути ~/.claude/skills/admin-dashboard/SKILL.md.

Что делает admin-dashboard?

Помогает расширять админ-панель и внутренние инструменты: добавлять вкладки, метрики, мониторинг и управление пользователями по уже сложившимся в проекте шаблонам.

Под какую структуру проекта написан скилл?

Под конкретный проект с путями src/app/admin/page.tsx, таблицами adminUsers, auditLog, pageViews и модулями @/db/secure-db, @/lib/hipaa/audit. В другом проекте примеры нужно адаптировать.

Исходный текст

SKILL.md · MIT
---
name: admin-dashboard
description: Extend and modify the admin dashboard, developer portal, and operations console. Use when adding new admin tabs, metrics, monitoring features, or internal tools. Activates for dashboard development,
  analytics, user management, and internal tooling.
allowed-tools: Read,Write,Edit,Bash(npm:*,npx:*)
metadata:
  category: Productivity & Meta
  tags:
  - dashboard
  - admin
  - internal-tools
  pairs-with:
  - skill: reactive-dashboard-performance
    reason: Performance optimization patterns keep admin dashboards responsive under heavy data loads
  - skill: supabase-admin
    reason: Admin dashboards typically display and manage Supabase-backed data and user records
  - skill: logging-observability
    reason: Admin consoles surface the metrics and logs that observability systems collect
---

# Admin & Developer Suite Development

This skill helps you extend the admin dashboard and build internal tools following the established patterns.

## Architecture Overview

```
/admin     - Admin Dashboard (user metrics, access control, audit)
/dev       - Developer Portal (docs, code browser, feature map) [PLANNED]
/ops       - Operations Console (infrastructure, logs, incidents) [PLANNED]
```

See `docs/ADMIN-DEVELOPER-SUITE.md` for the full design specification.

## Current Admin Dashboard Structure

Location: `src/app/admin/page.tsx`

### Existing Tabs

| Tab | Purpose | Data Source |
|-----|---------|-------------|
| Overview | Quick stats (users, check-ins, messages) | `/api/admin/stats` |
| Funnel | User engagement waterfall | `/api/admin/stats` |
| Page Views | Analytics by page path | `/api/admin/stats` |
| Users | User roster with activity | `/api/admin/stats` |
| Access Requests | Pending/approved/denied requests | `/api/admin/access-requests` |
| Allowed Emails | Email whitelist management | `/api/admin/allowed-emails` |
| Email Templates | Preview system emails | Local data |

### Planned Tabs (from design)

| Tab | Purpose | Status |
|-----|---------|--------|
| Production Health | API latency, Core Web Vitals | Pending |
| Error Tracking | HIPAA-safe error aggregation | Pending |
| External Services | Anthropic, DB, Push status | Pending |
| AI Analytics | Conversation metrics, tokens | Pending |
| Audit Logs | HIPAA compliance viewer | Pending |

## Adding a New Admin Tab

### 1. Create the Tab Content Component

```typescript
// In src/app/admin/page.tsx, add a new tab component

function ProductionHealthTab() {
  const [metrics, setMetrics] = useState<APIMetrics | null>(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    async function fetchMetrics() {
      const res = await fetch('/api/admin/metrics');
      const data = await res.json();
      setMetrics(data);
      setLoading(false);
    }
    fetchMetrics();
  }, []);

  if (loading) return <div>Loading...</div>;

  return (
    <div className="space-y-6">
      <div className="grid grid-cols-4 gap-4">
        <StatCard label="Uptime" value={metrics.uptime} />
        <StatCard label="Avg Latency" value={`${metrics.avgLatency}ms`} />
        <StatCard label="Errors (24h)" value={metrics.errorCount} />
        <StatCard label="Active Users" value={metrics.activeUsers} />
      </div>
      {/* More content */}
    </div>
  );
}
```

### 2. Add the Tab to the Tab List

```typescript
const tabs = [
  { id: 'overview', label: 'Overview' },
  { id: 'health', label: 'Production Health' }, // NEW
  { id: 'funnel', label: 'Funnel' },
  // ...
];
```

### 3. Add the Tab Content Renderer

```typescript
function renderTabContent(tabId: string) {
  switch (tabId) {
    case 'overview':
      return <OverviewTab stats={stats} />;
    case 'health':
      return <ProductionHealthTab />; // NEW
    // ...
  }
}
```

## Creating Admin API Endpoints

### Pattern: Admin Stats Endpoint

```typescript
// src/app/api/admin/metrics/route.ts
import { requireAdmin } from '@/db/secure-db';
import { createRateLimiter } from '@/lib/rate-limit';
import { logAdminAction } from '@/lib/hipaa/audit';

const rateLimiter = createRateLimiter({
  windowMs: 60000,
  maxRequests: 60,
  keyPrefix: 'admin:metrics'
});

export async function GET(request: Request) {
  // 1. Check admin access
  const admin = await requireAdmin();
  if (!admin) {
    return Response.json({ error: 'Forbidden' }, { status: 403 });
  }

  // 2. Apply rate limiting
  const rateLimitResult = await rateLimiter.check(admin.id);
  if (!rateLimitResult.allowed) {
    return Response.json(
      { error: 'Rate limit exceeded' },
      { status: 429, headers: rateLimitResult.headers }
    );
  }

  // 3. Log admin action
  await logAdminAction(
    admin.id,
    AuditAction.ADMIN_STATS_VIEW,
    'metrics',
    null
  );

  // 4. Fetch and return data
  const metrics = await getAPIMetrics();
  return Response.json(metrics);
}
```

## Key Patterns

### StatCard Component

```typescript
function StatCard({
  label,
  value,
  trend,
  status
}: {
  label: string;
  value: string | number;
  trend?: 'up' | 'down' | 'neutral';
  status?: 'good' | 'warning' | 'error';
}) {
  return (
    <div className="rounded-lg border bg-card p-4">
      <div className="text-sm text-muted-foreground">{label}</div>
      <div className="text-2xl font-bold">{value}</div>
      {trend && <TrendIndicator direction={trend} />}
      {status && <StatusBadge status={status} />}
    </div>
  );
}
```

### Data Fetching Pattern

```typescript
// Use SWR or React Query for real-time updates
import useSWR from 'swr';

function useAdminMetrics() {
  const { data, error, isLoading } = useSWR(
    '/api/admin/metrics',
    fetcher,
    { refreshInterval: 30000 } // Refresh every 30s
  );

  return { metrics: data, error, isLoading };
}
```

### HIPAA-Safe Error Display

```typescript
// Never show user-specific error details
function ErrorList({ errors }: { errors: AggregatedError[] }) {
  return (
    <div>
      {errors.map(error => (
        <div key={error.hash}>
          <span className="font-mono">{error.type}</span>
          <span>{error.path}</span>
          <span>{error.count} occurrences</span>
          <span>{error.affectedUsers} users</span>
          {/* NO user IDs, NO error messages with PHI */}
        </div>
      ))}
    </div>
  );
}
```

## Database Tables for Admin Features

Existing tables:
- `adminUsers` - Admin role assignments
- `allowedEmails` - Email whitelist
- `accessRequests` - Access request queue
- `auditLog` - HIPAA audit trail
- `pageViews` - Navigation analytics

Planned tables (from design):
- `api_metrics` - API timing data
- `app_errors` - Aggregated errors
- `service_health` - External service status
- `conversation_analytics` - AI chat metadata
- `incidents` - Incident tracking

## Access Control

```typescript
// Always use requireAdmin() for admin routes
import { requireAdmin } from '@/db/secure-db';

// For super-admin only features
const admin = await requireAdmin();
if (admin.role !== 'super_admin') {
  return Response.json({ error: 'Super admin required' }, { status: 403 });
}
```

## Testing Admin Features

```typescript
// Mock admin authentication for tests
vi.mock('@/db/secure-db', () => ({
  requireAdmin: vi.fn().mockResolvedValue({
    id: 'test-admin',
    role: 'admin'
  })
}));

describe('Admin Metrics Endpoint', () => {
  it('returns metrics for authenticated admin', async () => {
    const response = await GET(mockRequest);
    expect(response.status).toBe(200);
  });

  it('returns 403 for non-admin', async () => {
    vi.mocked(requireAdmin).mockResolvedValueOnce(null);
    const response = await GET(mockRequest);
    expect(response.status).toBe(403);
  });
});
```

## Design Resources

- Full design spec: `docs/ADMIN-DEVELOPER-SUITE.md`
- Design system: Use existing components from `src/components/ui/`
- Colors: Follow therapeutic palette (navy, teal, coral, cream)

© curiositech · MIT · curiositech/some_claude_skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
building-admin-dashboard-customizations medusajs Скилл обучает агента настраивать интерфейс панели Medusa: собирать виджеты, кастомные страницы и таблицы. Пригодится при расширении админки магазина. CX Codex +1 4 400установок metrics-dashboard phuryn Скилл помогает спроектировать дашборд метрик продукта с North Star Metric, input-метриками, health-метриками и бизнес-метриками. Нужен, когда вы определяете KPI, настраиваете product analytics или строите план мониторинга данных. CX Codex +1 3 000установок measure-dashboard-requirements product-on-purpose Помогает составить требования к дашборду: фиксирует бизнес-вопросы, формулы метрик, срезы и источники данных. Пригодится при постановке задач аналитикам. CX Codex +1 756установок kpi-dashboard-design aj-geddes Помогает выбрать метрики и собрать дашборд, который показывает выполнение целей. Пригодится, когда нужен отчёт для руководства или мониторинг процессов. CX Codex +1 520установок firecrawl-dashboard-reporting firecrawl Считывает метрики с публичных и авторизованных дашбордов через Firecrawl и собирает их в отчёт, сводку или таблицу за период. CX Codex +1 31 600установок qa-dashboard kindlmann Собирает дашборды и отчёты по тестам: Allure, Grafana, ReportPortal. Пригодится, когда результаты прогонов нужно показать команде или руководству. CX Codex +1 1 100установок

Из того же набора20

indie-monetization-strategist Скилл помогает инди-разработчикам выбирать модели монетизации для пет-проектов, настраивать тарифы SaaS и запускать спонсорство. Пригодится перед релизом продукта. CX Codex +1 387установок adhd-daily-planner Скилл для планирования дня с поправкой на СДВГ: реалистичные оценки времени, буферы между задачами и система «3 вещей». CX Codex +1 378установок voice-audio-engineer Скилл для работы с речью через ElevenLabs: озвучка текста, клонирование голоса, подкасты, транскрипция и голосовые интерфейсы. CX Codex +1 367установок sound-engineer Помогает агенту проектировать пространственный звук, процедурные эффекты и звук интерфейса в играх и приложениях. CX Codex +1 348установок photo-content-recognition-curation-expert Скилл для распознавания содержимого фотографий: кластеризация лиц, поиск дублей, отбор кадров из серии и отсев скриншотов. Пригодится, когда надо разобрать большую библиотеку снимков. CX Codex +1 330установок design-archivist Собирает визуальную базу из 500–1000 реальных примеров: палитры, шрифты, сетки, интеракции. Нужен, когда решаете, как выглядеть на фоне конкурентов. CX Codex +1 321установок data-viz-2025 Скилл для React, Next.js и TypeScript: помогает строить интерактивные графики, дашборды и визуализации на Tailwind CSS. CX Codex +1 304установок dark-mode-design-expert Скилл по тёмной теме интерфейсов: атмосферные палитры, требования WCAG и токены для светлой и тёмной схемы. Пригодится, когда нужно переключать тему без потери читаемости. CX Codex +1 304установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой