원클릭으로
ts-react
TypeScript/React/Next.js development patterns, performance rules, composition patterns, and App Router conventions
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
TypeScript/React/Next.js development patterns, performance rules, composition patterns, and App Router conventions
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Thin slash-command wrapper around the i18n-nfc-auditor agent — audits Korean/CJK string handling for NFC/NFD Unicode normalization mismatches across filenames, URLs, attachments, and DB paths. Use when "한글 파일 깨짐", "Supabase 첨부 안 됨", "한글 파일명 문제", or after Supabase/Vercel deploy.
Thin slash-command wrapper around the migration-reviewer agent — audits SQL/Prisma/Supabase/sqlx/Drizzle migration files for data loss, lock contention, missing indexes, and rollback safety. Use before db push, before Supabase deploy, or "마이그레이션 리뷰", "DB 스키마 검토".
Audit and curate the per-project memory system at ~/.claude/projects/<encoded-cwd>/memory/ — finds duplicates, stale entries, missing-pointer files, oversized MEMORY.md, and entries that violate the user/feedback/project/reference taxonomy. Use when memory feels noisy, before /clear of a long-running project, or when memories stop influencing behavior.
Traces all references to a feature flag/gate across the codebase and produces a removal PR draft. Use when ramping up a flag, removing a kill switch, or "feature flag 정리", "플래그 제거", "킬스위치 제거". Auto-detects flag system (GrowthBook, LaunchDarkly, env vars, custom dictionary). Read-only — produces a draft markdown file, never runs gh pr create.
Performance triage entry point — bundle analysis, build profiling, Lighthouse CI, Next.js Cache Components inspection. Use when asked "why is X slow", "perf 분석", "번들 사이즈 확인", "Lighthouse 점수", "빌드 시간 측정". Delegates deep root-cause analysis to perf-researcher agent.
Scaffolds a Claude Code plugin with .claude-plugin/marketplace.json + plugin.json + a starter skill/agent/hook + GitHub Actions validator — codifies the vibesubin maintenance pattern. Use when creating a new plugin, publishing to a marketplace, or "플러그인 만들어줘", "claude code plugin scaffold", "마켓플레이스 플러그인".
| name | ts-react |
| description | TypeScript/React/Next.js development patterns, performance rules, composition patterns, and App Router conventions |
| author | subinium |
"strict": true in tsconfig)interface for object shapes, type for unions/intersectionsany — use unknown and narrow with type guardsas const for literal types// Prefer
interface ButtonProps {
variant: 'primary' | 'secondary';
size?: 'sm' | 'md' | 'lg';
onClick: () => void;
children: React.ReactNode;
}
// Avoid
type ButtonProps = {
variant: string;
size?: string;
onClick: Function;
children: any;
};
const Component = () => {}// 1. Imports
// 2. Types/Interfaces
// 3. Constants
// 4. Component
// 5. Helper functions (if needed)
import { useState } from 'react';
interface Props {
title: string;
}
const MAX_LENGTH = 100;
export const MyComponent = ({ title }: Props) => {
const [value, setValue] = useState('');
if (!title) return null; // early return
return <div>{title}</div>;
};
use'use client' only when neededgenerateMetadata)(group) for layout organizationloading.tsx and error.tsxapp/
├── (auth)/
│ ├── login/page.tsx
│ └── register/page.tsx
├── (dashboard)/
│ ├── layout.tsx
│ └── page.tsx
├── api/
│ └── [...route]/route.ts
├── layout.tsx
├── page.tsx
└── globals.css
components/
├── ui/ # Reusable primitives (Button, Input, Modal)
├── layout/ # Header, Footer, Sidebar, Nav
└── features/ # Feature-specific components
lib/ # Utilities, API clients, constants
hooks/ # Custom React hooks
types/ # Shared TypeScript types
cn() utility (clsx + tailwind-merge) for conditional classescva (class-variance-authority) or manual patternsm:, md:, lg:)dark: variantimport { cn } from '@/lib/utils';
export const Button = ({ className, variant, ...props }: ButtonProps) => {
return (
<button
className={cn(
'rounded-lg px-4 py-2 font-medium transition-colors',
variant === 'primary' && 'bg-blue-600 text-white hover:bg-blue-700',
variant === 'secondary' && 'bg-gray-100 text-gray-900 hover:bg-gray-200',
className
)}
{...props}
/>
);
};
// BAD: Sequential fetches (waterfall)
const user = await getUser(id);
const posts = await getPosts(id);
const comments = await getComments(id);
// GOOD: Parallel fetches
const [user, posts, comments] = await Promise.all([
getUser(id),
getPosts(id),
getComments(id),
]);
Promise.all() for independent data fetches<Suspense> with fallbackloading.tsx for route-level streamingawait latenext/dynamic for heavy components (charts, editors, maps)<Script strategy="lazyOnload" />@next/bundle-analyzer'use client' when neededReact.cache() to deduplicate identical fetches in a render passafter() (Next.js 15+) for non-blocking post-response work (analytics, logging)<Suspense> boundariesReact.memo() only after profiling confirms re-render issueuseCallback for functions passed to memoized childrenuseMemo for expensive computations, not for every derived value@tanstack/react-virtual or react-window// BAD: Boolean explosion
<Modal isOpen isDismissable hasCloseButton isFullScreen />
// GOOD: Explicit variants
<Modal variant="fullscreen" dismissable closeButton />
// Good: Flexible composition
<Card>
<Card.Header>Title</Card.Header>
<Card.Body>Content</Card.Body>
<Card.Footer>
<Button>Action</Button>
</Card.Footer>
</Card>
// Structure context as {state, actions, meta}
interface AuthContext {
state: { user: User | null; isLoading: boolean };
actions: { login: (creds: Credentials) => Promise<void>; logout: () => void };
meta: { lastLoginAt: Date | null };
}
AnimatePresence for exit animationsprefers-reduced-motion