Skip to main content
Back to the field guide

A field guide to the /prism-dashboard skill

AI Internal Admin Dashboard Builder

Internal tools deserve UI even when the team uses SQL. /prism-dashboard builds dense data tables with sort, filter, pagination, detail drawers, and CRUD forms.

Prism · Frontend/DX9 min readMarch 8, 2026

Most engineering teams have a tier of internal tools that exists only as raw SQL queries pasted into Slack messages. Customer support needs to see a user's recent invoices: somebody on the team writes the query, runs it, copies the result, pastes it. Operations needs to refund an order: somebody writes the SQL, gets the engineer to run it, hopes nothing was typed wrong. Engineering needs to mark a feature flag enabled for a single account: more SQL, more risk, more time spent on tasks the team should be able to do without involving a database administrator. The cost is paid in the engineer hours that go into running these queries by hand and in the bugs that come from typos in production SQL run by people who would rather be doing other work.

An internal dashboard fixes the problem by giving the team a UI to do these tasks safely. The dashboard is not a marketing site; it does not need a hero gradient or a typography system. It needs dense data tables, fast filtering, working pagination, detail views, CRUD forms with validation, and search. It needs to be reliable for the team's daily work and easy to extend when the next data type arrives. Building one well used to take a frontend engineer a week. The /prism-dashboard skill produces the same artifact in hours, calibrated to the team's existing data and component patterns, so the SQL-in-Slack tier can be replaced with a tool people actually want to use.

Why generalist AI builds bad internal tools

Ask Cursor or ChatGPT for an admin panel. You get something that looks like a marketing site: cards with hero images, padding everywhere, a navigation bar that takes 80px of vertical space. Internal tools have different visual priorities. Density matters because the user is scanning many rows. Latency matters because the user is doing many small actions and waiting for each one is painful. Keyboard navigation matters because power users are not going to mouse over every button. The marketing-shaped output looks polished and is operationally bad.

The other failure mode is the missing functionality. A generalist tool builds a list view; it does not build the filter that scopes the list to the user's actual question. It builds a detail view; it does not build the edit form that lets the user fix the bad data they just found. It builds a CRUD form; it does not build the validation that prevents the bad data from being saved in the first place. Each of these is small to add individually and tedious in aggregate. The dashboard that ships from a generalist tool is the dashboard the team uses for a week and abandons because the missing features turned out to be the ones that mattered.

What a useful internal dashboard requires

Internal tools have five core needs. Data tables that support sorting on every column, filtering by the obvious dimensions (date range, status, search), and pagination that does not break when the table is large. Detail views that show all the relevant fields and links to related records. CRUD forms with validation that catches the bad data before it hits the database. Search that finds records by any meaningful field. Bulk actions for the cases where the user needs to update many rows at once. The discipline is to build all of these together, calibrated to the actual data shape, rather than build them piecemeal as feature requests arrive.

The visual layer is also different from marketing UI. Tables are dense (12-row default rather than 6). Padding is tight. Forms are inline rather than modal where possible. Keyboard shortcuts for common actions (Cmd+K for search, J/K for navigation). The styling does not need to be ugly; it needs to prioritize information density and operational speed over visual flourish. /prism-dashboard is calibrated to that priority set.

How /prism-dashboard works

Step one: read the data model

When invoked, /prism-dashboard reads the project's data model (database schema, ORM models, or API spec) to identify the entities and their relationships. The entity list becomes the navigation. The fields per entity become the columns and form inputs. The relationships become the links between detail views (clicking a customer_id on an invoice opens that customer's detail page). Reading the model is what makes the dashboard match the actual data rather than imagined data.

Step two: build the table primitive

The data table is the dashboard's most-used component. The skill builds it with sorting (clickable column headers), filtering (a filter bar with type-aware inputs: date range for timestamps, multi-select for enums, search for free-text), and pagination (cursor-based by default to handle large tables without performance degradation). Bulk selection is supported with row checkboxes and a bulk action menu when rows are selected. Keyboard navigation moves selection up/down with J/K and opens the detail view with Enter.

Step three: detail views and CRUD forms

Each entity gets a detail view (drawer or full page based on the data density) showing all fields with links to related entities. The form for creating or editing an entity has validation that matches the database constraints: required fields are required, enums are constrained, format validation runs on email/URL/etc. The form posts to the existing API rather than directly to the database, so existing business logic and audit logging is preserved.

Step four: search, shortcuts, and access control

Global search finds records across entities by any meaningful field. Keyboard shortcuts cover the common actions. Access control is integrated with the project's existing auth so the dashboard respects the team's role boundaries (a support agent sees the customer view but not the billing edit). The skill scaffolds the access checks at the route level rather than only in the UI, so a sufficiently determined user cannot bypass the role check by hitting the API directly.

Internal tools live or die by keyboard shortcuts. A dashboard where every action requires three clicks gets used reluctantly; a dashboard where Cmd+K opens search and J/K navigate rows gets used as the default tool. /prism-dashboard ships these by default.

Tonone's /prism-dashboard skill builds internal admin tools with dense data tables, detail drawers, CRUD forms, search, and keyboard shortcuts calibrated to operational use rather than marketing aesthetics.

When to use /prism-dashboard, and when not to

/prism-dashboard is the right call when engineers or operations teams need a UI for data they currently access only via SQL or the API, when building an admin panel or back-office interface, or when an existing internal tool is incomplete (list view exists, but no edit form, or pagination breaks at scale).

Skip the skill for customer-facing UI (use /prism-ui for full-screen production-grade implementation). For component-level work, /prism-component produces reusable primitives. For chart and dashboard data visualization, /lens-dashboard is calibrated to analytics use cases rather than CRUD operations.

CapabilityTononeGeneralist chatbotCursor / Copilot
Data table with sort/filter/paginateYes, cursor pagination, type-aware filtersBasic table, often without filtersNot applicable
Detail views with related-entity linksYes, navigation between related recordsStatic detail pageNot in scope
CRUD forms with constraint-matching validationYes, validation derived from schemaGeneric formNot in scope
Keyboard shortcuts and searchYes, Cmd+K, J/K, common actions boundMouse-only interactionNot in scope
Density appropriate for operational useYes, dense tables, tight paddingMarketing-style spacingNot in scope

A worked example: support dashboard

Suppose the brief is: build a support dashboard so customer service can look up users, view their invoices, and adjust subscriptions. Run /prism-dashboard against the existing data model.

tsx
// app/admin/users/page.tsx (excerpt)
'use client';

import { DataTable } from '@/components/admin/DataTable';
import { useUsers } from '@/hooks/admin/users';

export default function UsersPage() {
  return (
    <DataTable
      title="Users"
      query={useUsers}
      columns={[
        { key: 'email', label: 'Email', sortable: true, search: true },
        { key: 'name', label: 'Name', sortable: true, search: true },
        { key: 'plan', label: 'Plan', filter: 'enum', options: PLANS },
        { key: 'created_at', label: 'Joined', sortable: true, filter: 'dateRange' },
        { key: 'last_active_at', label: 'Last active', sortable: true, filter: 'dateRange' },
      ]}
      rowAction={(user) => `/admin/users/${user.id}`}
      bulkActions={[
        { label: 'Send password reset', handler: bulkPasswordReset },
        { label: 'Export to CSV', handler: bulkExport },
      ]}
      shortcuts={{ search: 'cmd+k', new: 'n' }}
    />
  );
}

// Detail view (drawer) opens on row click:
// - Profile fields
// - Recent invoices (linked table)
// - Active subscription with adjust action
// - Audit log (last 50 entries)
//
// Edit form: validates email format, plan enum,
// dispatches PUT /api/admin/users/:id with the existing
// admin route guard and audit logging.

The team's customer service uses the dashboard for the daily lookups instead of asking engineering to run SQL. The data model determines the table shape, the validation matches the database constraints, the access control respects the existing role boundaries. The SQL-in-Slack tier disappears, and engineering reclaims the hours that used to go into being a manual database client.

/prism-dashboard builds admin tools. For customer-facing screens, /prism-ui is the right call. For reusable component primitives, /prism-component covers individual components. For analytics-style dashboards (charts, KPIs), /lens-dashboard is calibrated to that use case.

Install

/prism-dashboard ships with the Prism agent in the Tonone for Claude Code package. Install Tonone, invoke /prism-dashboard from any Claude Code session, and the skill produces an internal dashboard calibrated to the project's data model and access control.

1. Add to marketplace

$ claude plugin marketplace add tonone-ai/tonone

2. Install Prism

$ claude plugin install prism@tonone-ai

Internal tools that the team actually wants to use are the ones built for operational density rather than marketing polish. The skill is built for that priority.

Frequently asked questions

What does /prism-dashboard do?
It builds internal admin tools with data tables (sort, filter, paginate), detail views, CRUD forms, search, keyboard shortcuts, and bulk actions. The output is calibrated to the project's data model and access control.
How is /prism-dashboard different from /prism-ui?
/prism-ui builds customer-facing screens with marketing-grade polish. /prism-dashboard builds internal tools calibrated to operational density and speed.
When should I use /prism-dashboard?
When engineers or operations need a UI for data currently accessed via SQL, when building an admin panel, or when an existing internal tool is missing critical features.
Does /prism-dashboard generate code or use a hosted tool?
It generates code in the project's codebase, so the dashboard ships with the application and respects existing auth, audit logging, and business logic.
Does /prism-dashboard support keyboard shortcuts?
Yes. Cmd+K for search, J/K for row navigation, and common actions bound to single-key shortcuts. Internal tools depend on keyboard speed, so this is the default rather than optional.
How do I install /prism-dashboard?
Install Tonone for Claude Code via the get-started guide at tonone.ai/get-started. /prism-dashboard ships with the Prism agent and is invoked as a slash command in any Claude Code session. Tonone is free and MIT-licensed.
Is /prism-dashboard free?
Yes. The skill is part of Tonone, which is MIT-licensed. The only cost is Claude Code token usage during the work.
Can /prism-dashboard handle complex data relationships?
Yes. The skill reads the data model and produces detail views with linked navigation between related entities, so users can move from a customer to their invoices to a specific invoice without leaving the dashboard.

Pairs well with