React Rules
Components
- •Use named exports, not default exports:
export function AgentCard() {} - •One component per file for route-level components
- •Co-locate small helper components in the same file
- •Use
classNamewith Tailwind — no CSS modules or styled-components
Data Fetching
- •Use TanStack Query (
useQuery,useSuspenseQuery) for all data fetching - •Server Functions for mutations via
useMutation - •Never use
useEffectfor data fetching - •Prefetch on the server with
queryClient.prefetchQueryin route loaders
State
- •URL state first (search params via TanStack Router)
- •Server state via TanStack Query (no Redux, no Zustand)
- •Local UI state only with
useState— keep it minimal - •Form state with controlled components or
useForm
Patterns
- •Suspense boundaries at route level, not per-component
- •Error boundaries for slice-level error handling
- •Compose with props, not render props or HOCs
- •Use shadcn/ui components — don't build custom UI primitives
File Naming
- •Route files:
route.tsx(TanStack Router file-based routing) - •UI components:
PascalCase.tsxor grouped inui.tsxwithin a slice - •Hooks:
use-kebab-case.ts