.agents/skills/react-best-practices/SKILL.md
React and Next.js performance optimization guidelines from Vercel Engineering. 64 rules across 8 categories. Use when writing, reviewing, or refactoring React/Next.js components.
npx skillsauth add sdn0303/terrasight react-best-practicesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Comprehensive performance optimization guide for React and Next.js applications. Contains 64 rules across 8 categories, prioritized by impact.
| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | Eliminating Waterfalls | CRITICAL | async- |
| 2 | Bundle Size Optimization | CRITICAL | bundle- |
| 3 | Server-Side Performance | HIGH | server- |
| 4 | Client-Side Data Fetching | MEDIUM-HIGH | client- |
| 5 | Re-render Optimization | MEDIUM | rerender- |
| 6 | Rendering Performance | MEDIUM | rendering- |
| 7 | JavaScript Performance | LOW-MEDIUM | js- |
| 8 | Advanced Patterns | LOW | advanced- |
async-defer-await — Move await into branches where actually usedasync-parallel — Use Promise.all() for independent operationsasync-dependencies — Use better-all for partial dependenciesasync-api-routes — Start promises early, await late in API routesasync-suspense-boundaries — Use Suspense to stream contentbundle-barrel-imports — Import directly, avoid barrel filesbundle-dynamic-imports — Use next/dynamic for heavy componentsbundle-defer-third-party — Load analytics/logging after hydrationbundle-conditional — Load modules only when feature is activatedbundle-preload — Preload on hover/focus for perceived speedserver-auth-actions — Authenticate server actions like API routesserver-cache-react — Use React.cache() for per-request deduplicationserver-cache-lru — Use LRU cache for cross-request cachingserver-dedup-props — Avoid duplicate serialization in RSC propsserver-hoist-static-io — Hoist static I/O (fonts, logos) to module levelserver-serialization — Minimize data passed to client componentsserver-parallel-fetching — Restructure components to parallelize fetchesserver-after-nonblocking — Use after() for non-blocking operationsclient-swr-dedup — Use SWR/TanStack Query for automatic request deduplicationclient-event-listeners — Deduplicate global event listenersclient-passive-event-listeners — Use passive listeners for scrollclient-localstorage-schema — Version and minimize localStorage datarerender-defer-reads — Don't subscribe to state only used in callbacksrerender-memo — Extract expensive work into memoized componentsrerender-memo-with-default-value — Hoist default non-primitive propsrerender-dependencies — Use primitive dependencies in effectsrerender-derived-state — Subscribe to derived booleans, not raw valuesrerender-derived-state-no-effect — Derive state during render, not effectsrerender-functional-setstate — Use functional setState for stable callbacksrerender-lazy-state-init — Pass function to useState for expensive valuesrerender-simple-expression-in-memo — Avoid memo for simple primitivesrerender-split-combined-hooks — Split hooks with independent dependenciesrerender-move-effect-to-event — Put interaction logic in event handlersrerender-transitions — Use startTransition for non-urgent updatesrerender-use-deferred-value — Defer expensive renders to keep input responsivererender-use-ref-transient-values — Use refs for transient frequent valuesrerender-no-inline-components — Don't define components inside componentsrendering-animate-svg-wrapper — Animate div wrapper, not SVG elementrendering-content-visibility — Use content-visibility for long listsrendering-hoist-jsx — Extract static JSX outside componentsrendering-svg-precision — Reduce SVG coordinate precisionrendering-hydration-no-flicker — Use inline script for client-only datarendering-activity — Use Activity component for show/hiderendering-conditional-render — Use ternary, not && for conditionalsrendering-usetransition-loading — Prefer useTransition for loading staterendering-resource-hints — Use React DOM resource hints for preloadingjs-batch-dom-css — Group CSS changes via classes or cssTextjs-index-maps — Build Map for repeated lookupsjs-cache-property-access — Cache object properties in loopsjs-combine-iterations — Combine multiple filter/map into one loopjs-length-check-first — Check array length before expensive comparisonjs-early-exit — Return early from functionsjs-set-map-lookups — Use Set/Map for O(1) lookupsjs-flatmap-filter — Use flatMap to map and filter in one passadvanced-event-handler-refs — Store event handlers in refsadvanced-init-once — Initialize app once per app loadadvanced-use-latest — useLatest for stable callback refsdevelopment
Rust coding rules for Axum/Tokio/SQLx backends in services/backend. 179 rules split into 14 category files covering ownership, error handling, async, API design, and more. Use when writing, reviewing, or refactoring Rust code, designing error types, async flows, or public APIs.
content-media
PostgreSQL and PostGIS patterns for schema design, spatial queries, query optimization, indexing, and zero-downtime migrations. Use when writing SQL, creating tables, optimizing queries, or writing migration files.
development
Mapbox GL JS v3 development patterns for real estate data visualization. Use when working with Mapbox maps, Standard Style configuration, layer slots, 3D lighting, expressions, react-map-gl/mapbox integration, or migrating from MapLibre GL JS.
development
MapLibre GL JS + PostGIS integration patterns for real estate data visualization. Use when working on map layers, spatial queries, GeoJSON data pipelines, or 3D extrusion effects.