agentsclimarketplace

Scaffold component

Skill ea-toolkit/architecture-catalog/.claude/skills/scaffold-component

Git-native architecture catalog — Markdown registry, schema-driven UI, AI-ready

Install
npx -y skills add ea-toolkit/architecture-catalog --skill scaffold-component

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Scaffold a new React component with test file for the catalog UI.

SKILL.md

3.0 KB, as published. Nobody here has run it

Scaffold Component

Scaffold a new React component in catalog-ui/src/components/ with a co-located test file.

Arguments

$ARGUMENTS should be a PascalCase component name (e.g., CapabilityHeatmap, DomainSummaryCard).

If no argument is provided, ask the user for a component name.

Workflow

  1. Parse component name from $ARGUMENTS. Ensure PascalCase.

  2. Determine target directory based on component purpose:

    • Graph/visualization component → catalog-ui/src/components/graphs/
    • Diagram viewer → catalog-ui/src/components/
    • Layout/navigation → catalog-ui/src/components/ (or subdirectory if pattern exists)
    • General → catalog-ui/src/components/
    • Ask the user if unclear.
  3. Read existing context:

    • Read models/registry-mapping.yaml if the component will render registry data.
    • Read an existing similar component in the target directory for pattern reference.
    • Read catalog-ui/src/lib/types.ts for TypeScript interfaces.
  4. Create component file (ComponentName.tsx):

    • Export Props interface: export interface ComponentNameProps { ... }
    • Named export (not default): export const ComponentName: React.FC<ComponentNameProps> = ...
    • CSS via --ec-* variables (never inline styles)
    • Semantic HTML (nav, main, section, article — not div for everything)
    • Accessible: aria labels on interactive elements
    • If rendering registry data: drive all behavior from schema properties (graph_rank, layer, icon), never from type name strings
  5. Create test file (ComponentName.test.tsx in same directory or __tests__/):

    • At minimum: one render/smoke test + one behavioral test
    • Use Vitest (import { describe, it, expect } from 'vitest')
    • Mock external dependencies (ReactFlow, data loaders) if needed
  6. Verify types: cd catalog-ui && npx tsc --noEmit

Template Pattern

// ComponentName.tsx
import type React from 'react';

export interface ComponentNameProps {
  // Define props here
}

export const ComponentName: React.FC<ComponentNameProps> = (props) => {
  return (
    <section aria-label="Component description">
      {/* Component content */}
    </section>
  );
};
// ComponentName.test.tsx
import { describe, it, expect } from 'vitest';

describe('ComponentName', () => {
  it('should render without crashing', () => {
    // Render test
  });

  it('should handle user interaction', () => {
    // Behavioral test
  });
});

Rules

  • Follow the vocab-agnostic principle for core registry rendering (no type-name conditionals).
  • Map views (event, heatmap) are intentionally type-aware — that's fine.
  • No hardcoded display data — all data from props, config files, or data imports.
  • No !important in CSS unless overriding third-party styles.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.