dashboard-create-screen
Create a new screen in the Multi-site Dashboard with automatic route registration
Install
mkdir -p .claude/skills/dashboard-create-screen && curl -L -o skill.zip "https://mcp.directory/api/skills/download/8133" && unzip -o skill.zip -d .claude/skills/dashboard-create-screen && rm skill.zipInstalls to .claude/skills/dashboard-create-screen
About this skill
Dashboard Create Screen Skill
Creates new screens in client/dashboard with automatic route discovery and registration.
Step 1: Discover Available Routes
First, find all router files and extract available routes.
Find Router Files
Use Glob to discover router files:
client/dashboard/app/router/*.tsx
client/dashboard/app/router/*.ts
Extract Routes from Each File
For each router file, use Grep to extract route information.
Find exported route constants:
export\s+const\s+(\w+Route)\s*=\s*createRoute
Extract parent relationships:
getParentRoute:\s*\(\)\s*=>\s*(\w+Route)
Extract path segments:
path:\s*['"]([^'"]+)['"]
Extract component import paths:
import\(\s*['"]([^'"]+)['"]\s*\)
Build Route Information
For each discovered route, record:
- Route variable name (e.g.,
siteBackupsRoute) - Parent route name (e.g.,
siteRoute) - Path segment (e.g.,
'backups') - Source file path
- Component directory (derived from import path)
Step 2: Discover Navigation Menus (After Route Selection)
Menu discovery happens after the user selects a parent route. Find menus relative to the route's location.
Determine Menu Search Path
Based on the selected parent route's import path, determine where to search for menus:
-
Extract the component directory from the parent route's lazy import
- Example:
import('../../sites/backups')→ search inclient/dashboard/sites/ - Example:
import('../../me/profile')→ search inclient/dashboard/me/
- Example:
-
Use Glob to find menu files in that area:
client/dashboard/{area}/**/*-menu/index.tsx -
Also check the app-level menu for top-level routes:
client/dashboard/app/*-menu/index.tsx
Extract Menu Information
For each discovered menu file, use Grep to find:
Existing menu items pattern:
<ResponsiveMenu\.Item\s+to=
Route references in menu:
to=\{?\s*[`'"/]([^`'"}\s]+)
This helps understand the menu's structure and where to add new items.
Menu Item Pattern
Menu items use ResponsiveMenu.Item:
<ResponsiveMenu.Item to="/path/to/screen">
{ __( 'Menu Label' ) }
</ResponsiveMenu.Item>
Conditional menu items check feature support:
{ siteTypeSupports.featureName && (
<ResponsiveMenu.Item to={ `/sites/${ siteSlug }/feature` }>
{ __( 'Feature' ) }
</ResponsiveMenu.Item>
) }
Step 3: Gather User Input
Ask the user for the following using AskUserQuestion:
- Parent Route: Present discovered routes grouped by source file
- Screen Name: lowercase-with-dashes (e.g.,
custom-settings) - Route Path: URL path segment (e.g.,
custom-settings) - Page Title: Human-readable title (e.g.,
Custom settings) - Page Description (optional): Description shown below title
- Add to Navigation Menu?: Yes or No
Step 4: Determine File Locations
Based on the selected parent route's import path, determine where to create the component.
Pattern: If parent imports from ../../sites/backups, new screen goes in client/dashboard/sites/{screen-name}/
For sites area: client/dashboard/sites/{screen-name}/index.tsx
For me area: client/dashboard/me/{screen-name}/index.tsx
For other areas: Follow the same pattern from parent's import path
Step 5: Create Component File
Generate a basic component with the standard layout.
Screen Template
import { __ } from '@wordpress/i18n';
import { PageHeader } from '../../components/page-header';
import PageLayout from '../../components/page-layout';
export default function {ComponentName}() {
return (
<PageLayout
header={
<PageHeader
title={ __( '{PageTitle}' ) }
description={ __( '{PageDescription}' ) }
/>
}
>
{/* Content goes here */}
</PageLayout>
);
}
Step 6: Register the Route
Add the route definition to the same router file as the parent route.
Route Definition Pattern
Add after other route exports in the file:
export const {routeName}Route = createRoute( {
head: () => ( {
meta: [
{
title: __( '{PageTitle}' ),
},
],
} ),
getParentRoute: () => {parentRoute},
path: '{routePath}',
} ).lazy( () =>
import( '{componentImportPath}' ).then( ( d ) =>
createLazyRoute( '{routeId}' )( {
component: d.default,
} )
)
);
Wire into Route Tree
Find where the parent route is used in the create*Routes() function and add the new route.
For standalone routes (direct child of main area route):
// Find the routes array (e.g., siteRoutes, meRoutes)
// Add the new route to the array
siteRoutes.push( newScreenRoute );
For nested routes (child of a feature route):
// Find where parent uses .addChildren()
// Add the new route to the children array
parentRoute.addChildren( [ existingRoute, newScreenRoute ] )
Step 7: Add Navigation Menu Entry (Optional)
If the user requested a navigation menu entry, add it to the discovered menu file.
Locate Target Menu File
Use the menu discovered in Step 2 based on the route's area:
- From the parent route's import path, extract the area (e.g.,
sites,me,plugins) - Glob for
client/dashboard/{area}/**/*-menu/index.tsx - If multiple menus found, present them to the user for selection
- If no area-specific menu found, fall back to
client/dashboard/app/primary-menu/index.tsx
Add Menu Item
Read the target menu file and find an appropriate location (typically before the closing </ResponsiveMenu> tag).
Build the route path from parent route's path + new screen path:
- If parent path is
/sites/$siteSlugand screen path isanalytics→/sites/${ siteSlug }/analytics - If parent path is
/meand screen path isapi-keys→/me/api-keys
Insert menu item:
<ResponsiveMenu.Item to={ `{fullRoutePath}` }>
{ __( '{PageTitle}' ) }
</ResponsiveMenu.Item>
Match Existing Patterns
Analyze the existing menu items to match the pattern:
- If menu uses template literals with
siteSlug, use the same pattern - If menu uses simple strings, use simple strings
- If menu items have conditional wrappers, ask user if one is needed
Conditional Menu Items
If the screen requires feature gating (check if similar items in the menu use conditions):
{ siteTypeSupports.{featureName} && (
<ResponsiveMenu.Item to={ `/sites/${ siteSlug }/{routePath}` }>
{ __( '{PageTitle}' ) }
</ResponsiveMenu.Item>
) }
Coding Standards
Follow the coding standards documented in client/dashboard/docs/.
More by Automattic
View all skills by Automattic →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversVizro creates and validates data-visualization dashboards from natural language, auto-generating chart code and interact
Unlock powerful Excel automation: read/write Excel files, create sheets, and automate workflows with seamless integratio
Enhance software testing with Playwright MCP: Fast, reliable browser automation, an innovative alternative to Selenium s
Connect Blender to Claude AI for seamless 3D modeling. Use AI 3D model generator tools for faster, intuitive, interactiv
Chrome extension-based MCP server that exposes browser functionality to AI assistants. Control tabs, capture screenshots
MCP server for full computer use on Windows. Control mouse, keyboard, take screenshots, manage windows, and automate des
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.