core-principles
SKILL.md
Core Principles for React 19 SPA Development
Production-ready best practices for building modern React applications with TypeScript, Vite, and TanStack ecosystem.
Stack Overview
- React 19 with React Compiler (auto-memoization)
- TypeScript (strict mode)
- Vite (bundler)
- Biome (formatting + linting)
- TanStack Query (server state)
- TanStack Router (file-based routing)
- Vitest (testing with jsdom)
- Apidog MCP (API spec source of truth)
Project Structure
/src
/app/ # App shell, providers, global styles
/routes/ # TanStack Router file-based routes
/components/ # Reusable, pure UI components (no data-fetch)
/features/ # Feature folders (UI + hooks local to a feature)
/api/ # Generated API types & client (from OpenAPI)
/lib/ # Utilities (zod schemas, date, formatting, etc.)
/test/ # Test utilities
Key Principles:
- One responsibility per file
- UI components don't fetch server data
- Put queries/mutations in feature hooks
- Co-locate tests next to files
Agent Execution Rules
Always do this when you add or modify code:
-
API Spec: Fetch latest via Apidog MCP and regenerate
/src/apitypes if changed -
Data Access: Wire only through feature hooks that wrap TanStack Query. Never fetch inside UI components.
-
New Routes:
- Create file under
/src/routes/**(file-based routing) - If needs data at navigation, add loader that prefetches with Query
- Create file under
-
Server Mutations:
- Use React 19 Actions OR TanStack Query
useMutation(choose one per feature) - Use optimistic UI via
useOptimistic(Actions) or Query's optimistic updates - Invalidate/selectively update cache on success
- Use React 19 Actions OR TanStack Query
-
Compiler-Friendly:
- Keep code pure (pure components, minimal effects)
- If compiler flags something, fix it or add
"use no memo"temporarily
-
Tests:
- Add Vitest tests for new logic
- Component tests use RTL
- Stub network with msw
-
Before Committing:
- Run
biome check --write - Ensure Vite build passes
- Run
"Done" Checklist per PR
- Route file added/updated; loader prefetch (if needed) present
- Query keys are stable (
as const),staleTime/gcTimetuned - Component remains pure; no unnecessary effects; compiler ✨ visible
- API calls typed from
/src/api; inputs/outputs validated at boundaries - Tests cover new logic; Vitest jsdom setup passes
-
biome check --writeclean; Vite build ok
Authoritative Sources
-
React 19 & Compiler:
- React v19 overview
- React Compiler: overview + installation + verification
<form action>/ Actions API;useOptimistic;use- CRA deprecation & guidance
-
Vite:
- Getting started; env & modes; TypeScript targets
-
TypeScript:
moduleResolution: "bundler"(for bundlers like Vite)
-
Biome:
- Formatter/Linter configuration & CLI usage
-
TanStack Query:
- Caching & important defaults; v5 migration notes; devtools/persisting cache
-
TanStack Router:
- Install with Vite plugin; file-based routing; search params; devtools
-
Vitest:
- Getting started & config (jsdom)
-
Apidog + MCP:
- Apidog docs (import/export, OpenAPI); MCP server usage
Final Notes
- Favor compile-friendly React patterns
- Let the compiler and Query/Router handle perf and data orchestration
- Treat Apidog's OpenAPI (via MCP) as the single source of truth for network shapes
- Keep this doc as your "contract"—don't add heavy frameworks or configs beyond what's here unless explicitly requested
Related Skills
- tooling-setup - Vite, TypeScript, Biome configuration
- react-patterns - React 19 specific patterns (compiler, actions, forms)
- tanstack-router - Routing patterns
- tanstack-query - Server state management with Query v5
- router-query-integration - Integrating Router with Query
- api-integration - Apidog + MCP patterns
- performance-security - Performance, accessibility, security
Weekly Installs
1
Repository
madappgang/claude-codeGitHub Stars
245
First Seen
Jan 28, 2026
Security Audits
Installed on
cursor1
claude-code1
antigravity1
gemini-cli1