React Component Development Guidelines
Purpose
Establish consistency and best practices for React components in Gemini-Subtitle-Pro using React 19, TypeScript 5.8, and TailwindCSS 4.
When to Use This Skill
Automatically activates when working on:
- Creating or modifying React components
- Building pages, modals, dialogs, forms
- Styling with TailwindCSS
- Working with React hooks
- Implementing state management
- Performance optimization
Quick Start
New Component Checklist
Component Architecture
File Organization
src/components/
āāā common/ # Shared components (Button, Modal, etc.)
āāā layout/ # Layout components (Header, Sidebar, etc.)
āāā subtitle/ # Subtitle-related components
āāā settings/ # Settings components
āāā workspace/ # Workspace components
āāā [feature]/ # Feature-specific components
Naming Conventions
- Components:
PascalCase - SubtitleEditor.tsx
- Hooks:
camelCase with use prefix - useSubtitleParser.ts
- Utils:
camelCase - formatTimestamp.ts
Core Principles
1. Always Use Path Aliases
// ā NEVER: Relative paths
import { Button } from '../../components/common/Button';
// ā
ALWAYS: Path aliases
import { Button } from '@components/common/Button';
import { useWorkspace } from '@hooks/useWorkspace';
import { SubtitleEntry } from '@types/subtitle';
2. Define Props Interface
// ā
ALWAYS: Clear prop types
interface SubtitleEditorProps {
entries: SubtitleEntry[];
onUpdate: (index: number, entry: SubtitleEntry) => void;
isReadOnly?: boolean;
}
export function SubtitleEditor({ entries, onUpdate, isReadOnly = false }: SubtitleEditorProps) {
// ...
}
3. Use TailwindCSS with clsx
import { clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';
// ā
Conditional classes
<div className={twMerge(clsx(
'rounded-lg p-4',
isActive && 'bg-blue-500 text-white',
isDisabled && 'opacity-50 cursor-not-allowed'
))}>
4. Use i18n for All Text
import { useTranslation } from 'react-i18next';
export function SettingsPanel() {
const { t } = useTranslation();
return (
<h1>{t('settings.title')}</h1>
);
}
Resource Files
For detailed guidelines, see the resources directory: