Claude-skill-registry component-naming
Enforce consistent React component naming conventions using domain + role patterns. Use when creating, reviewing, or refactoring components.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/component-naming" ~/.claude/skills/majiayu000-claude-skill-registry-component-naming && rm -rf "$T"
manifest:
skills/data/component-naming/SKILL.mdsource content
Component Naming Conventions Skill
This skill helps you enforce consistent React component naming conventions across the codebase.
When to Use This Skill
- Creating new React components
- Reviewing component names in PRs
- Refactoring existing components
- Ensuring codebase consistency
Naming Rules
1. PascalCase
All React components use PascalCase:
// ✅ Good export const TrendChart = () => {}; export const HeroPost = () => {}; // ❌ Bad export const trendChart = () => {}; export const trend_chart = () => {};
2. Domain + Role Pattern
Combine domain context with component role for clarity:
// ✅ Good - Clear domain and role export const TrendChart = () => {}; // Trend (domain) + Chart (role) export const HeroPost = () => {}; // Hero (domain) + Post (role) export const MetricCard = () => {}; // Metric (domain) + Card (role) export const LatestCoePremium = () => {}; // LatestCoe (domain) + Premium (role) // ❌ Bad - Too generic or unclear export const Chart = () => {}; // No domain context export const Data = () => {}; // Meaningless export const Item = () => {}; // No specificity
3. Compound Components for Subparts
Use dot notation for related subcomponents:
// ✅ Good - Compound component pattern export const HeroPost = () => {}; HeroPost.Image = () => {}; HeroPost.Title = () => {}; HeroPost.Meta = () => {}; // Usage <HeroPost> <HeroPost.Image src={...} /> <HeroPost.Title>...</HeroPost.Title> <HeroPost.Meta date={...} /> </HeroPost> // ❌ Bad - Flat naming for related components export const HeroPostImage = () => {}; export const HeroPostTitle = () => {}; export const HeroPostMeta = () => {};
4. Avoid Problematic Suffixes
Never use these suffixes:
// ❌ Avoid these suffixes export const MetricCardContainer = () => {}; // -Container export const ChartWrapper = () => {}; // -Wrapper export const DataComponent = () => {}; // -Component export const ListElement = () => {}; // -Element // ✅ Use clear domain + role instead export const MetricCard = () => {}; export const TrendChart = () => {}; export const RegistrationList = () => {};
5. Avoid Layout/Styling Descriptions
Names should describe purpose, not appearance:
// ❌ Bad - Describes layout/styling export const LeftSidebar = () => {}; export const BigHeader = () => {}; export const RedButton = () => {}; export const TwoColumnLayout = () => {}; // ✅ Good - Describes purpose export const NavigationSidebar = () => {}; export const PageHeader = () => {}; export const DangerButton = () => {}; export const ComparisonLayout = () => {};
File Naming Convention
Files use kebab-case matching the component name:
| Component | File Name |
|---|---|
| |
| |
| |
| |
Validation Checklist
When reviewing component names:
- Uses PascalCase
- Has clear domain context (not just "Card", "List", "Item")
- Has clear role (Chart, Card, List, Banner, etc.)
- No -Container, -Wrapper, -Component suffixes
- No layout/styling descriptions (Left, Big, Red, TwoColumn)
- File name matches component in kebab-case
- Related subcomponents use compound pattern
Examples from Codebase
Good patterns found:
- Trends domain + Area Chart roleTrendAreaChart
- Market Share domain + Donut roleMarketShareDonut
- Top Makes domain + Chart roleTopMakesChart
- Premium domain + Banner rolePremiumBanner
- Metric domain + Card roleMetricCard
- Latest COE domain + Premium roleLatestCoePremium
Anti-patterns to avoid:
- Generic names:
,Chart
,Card
,ListData - Layout names:
,LeftPanel
,MainContentTopSection - Suffix pollution:
,CardContainer
,ListWrapperItemComponent
Related Files
- Web app component conventionsapps/web/CLAUDE.md
- Web app componentsapps/web/src/components/
- Admin interface componentsapps/web/src/app/admin/components/