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/api types 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
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
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
"Done" Checklist per PR
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