Skip to content
Merged

slim 18 #29099

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
e00bcbd
team slice
chrisnojima-zoom Mar 31, 2026
ef646e0
WIP
chrisnojima-zoom Mar 31, 2026
ada6b16
WIP
chrisnojima-zoom Mar 31, 2026
2ed3a0f
WIP
chrisnojima-zoom Mar 31, 2026
1d2c66a
WIP
chrisnojima-zoom Mar 31, 2026
d5ab6af
WIP
chrisnojima-zoom Mar 31, 2026
c43db2f
WIP
chrisnojima-zoom Mar 31, 2026
dec4ff4
WIP
chrisnojima-zoom Mar 31, 2026
1a58e44
WIP
chrisnojima-zoom Mar 31, 2026
ecfed48
WIP
chrisnojima-zoom Mar 31, 2026
6568a5f
WIP
chrisnojima-zoom Mar 31, 2026
d0b942f
WIP
chrisnojima-zoom Mar 31, 2026
f926f81
WIP
chrisnojima-zoom Mar 31, 2026
6e2d31d
WIP
chrisnojima-zoom Mar 31, 2026
10ad658
WIP
chrisnojima-zoom Mar 31, 2026
35e48ee
WIP
chrisnojima-zoom Mar 31, 2026
272801c
WIP
chrisnojima-zoom Mar 31, 2026
6976532
WIP
chrisnojima-zoom Mar 31, 2026
9f60885
WIP
chrisnojima-zoom Mar 31, 2026
b75c2f2
WIP
chrisnojima-zoom Apr 1, 2026
895b9fc
WIP
chrisnojima-zoom Apr 1, 2026
081c6d4
WIP
chrisnojima-zoom Apr 1, 2026
aac12f9
WIP
chrisnojima-zoom Apr 1, 2026
1ccad40
WIP
chrisnojima-zoom Apr 1, 2026
037ca67
WIP
chrisnojima-zoom Apr 1, 2026
68676b2
WIP
chrisnojima-zoom Apr 1, 2026
04e643f
WIP
chrisnojima-zoom Apr 1, 2026
b662b9f
WIP
chrisnojima-zoom Apr 1, 2026
9f4207c
WIP
chrisnojima-zoom Apr 1, 2026
5c2706c
WIP
chrisnojima-zoom Apr 1, 2026
b360369
WIP
chrisnojima-zoom Apr 1, 2026
5608269
WIP
chrisnojima-zoom Apr 1, 2026
5ac675d
WIP
chrisnojima-zoom Apr 1, 2026
6a17121
WIP
chrisnojima-zoom Apr 1, 2026
63c6d9f
WIP
chrisnojima-zoom Apr 1, 2026
37b9a4a
WIP
chrisnojima-zoom Apr 1, 2026
b23c55c
WIP
chrisnojima-zoom Apr 1, 2026
b7d88ca
WIP
chrisnojima-zoom Apr 1, 2026
32609a1
WIP
chrisnojima-zoom Apr 1, 2026
1ce6f94
WIP
chrisnojima-zoom Apr 1, 2026
763f43c
WIP
chrisnojima-zoom Apr 1, 2026
50e6515
WIP
chrisnojima-zoom Apr 1, 2026
007758b
WIP
chrisnojima-zoom Apr 1, 2026
ebd3a5b
WIP
chrisnojima-zoom Apr 1, 2026
01e7a3a
WIP
chrisnojima Apr 2, 2026
73cb2aa
fix lints
chrisnojima Apr 3, 2026
9308a57
WIP
chrisnojima Apr 3, 2026
39d66ed
WIP
chrisnojima Apr 3, 2026
f056d43
WIP
chrisnojima Apr 6, 2026
90cf339
WIP
chrisnojima-zoom Apr 6, 2026
8088f81
WIP
chrisnojima-zoom Apr 6, 2026
eedabaa
WIP
chrisnojima-zoom Apr 6, 2026
ef434d1
WIP
chrisnojima-zoom Apr 6, 2026
c3cfb39
WIP
chrisnojima-zoom Apr 6, 2026
f20f960
WIP
chrisnojima-zoom Apr 6, 2026
5d4b570
WIP
chrisnojima-zoom Apr 6, 2026
6b1ebaa
WIP
chrisnojima-zoom Apr 6, 2026
4529bf5
WIP
chrisnojima-zoom Apr 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3,750 changes: 3,750 additions & 0 deletions .agents/skills/vercel-react-best-practices/AGENTS.md

Large diffs are not rendered by default.

123 changes: 123 additions & 0 deletions .agents/skills/vercel-react-best-practices/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# React Best Practices

A structured repository for creating and maintaining React Best Practices optimized for agents and LLMs.

## Structure

- `rules/` - Individual rule files (one per rule)
- `_sections.md` - Section metadata (titles, impacts, descriptions)
- `_template.md` - Template for creating new rules
- `area-description.md` - Individual rule files
- `src/` - Build scripts and utilities
- `metadata.json` - Document metadata (version, organization, abstract)
- __`AGENTS.md`__ - Compiled output (generated)
- __`test-cases.json`__ - Test cases for LLM evaluation (generated)

## Getting Started

1. Install dependencies:
```bash
pnpm install
```

2. Build AGENTS.md from rules:
```bash
pnpm build
```

3. Validate rule files:
```bash
pnpm validate
```

4. Extract test cases:
```bash
pnpm extract-tests
```

## Creating a New Rule

1. Copy `rules/_template.md` to `rules/area-description.md`
2. Choose the appropriate area prefix:
- `async-` for Eliminating Waterfalls (Section 1)
- `bundle-` for Bundle Size Optimization (Section 2)
- `server-` for Server-Side Performance (Section 3)
- `client-` for Client-Side Data Fetching (Section 4)
- `rerender-` for Re-render Optimization (Section 5)
- `rendering-` for Rendering Performance (Section 6)
- `js-` for JavaScript Performance (Section 7)
- `advanced-` for Advanced Patterns (Section 8)
3. Fill in the frontmatter and content
4. Ensure you have clear examples with explanations
5. Run `pnpm build` to regenerate AGENTS.md and test-cases.json

## Rule File Structure

Each rule file should follow this structure:

```markdown
---
title: Rule Title Here
impact: MEDIUM
impactDescription: Optional description
tags: tag1, tag2, tag3
---

## Rule Title Here

Brief explanation of the rule and why it matters.

**Incorrect (description of what's wrong):**

```typescript
// Bad code example
```

**Correct (description of what's right):**

```typescript
// Good code example
```

Optional explanatory text after examples.

Reference: [Link](https://example.com)

## File Naming Convention

- Files starting with `_` are special (excluded from build)
- Rule files: `area-description.md` (e.g., `async-parallel.md`)
- Section is automatically inferred from filename prefix
- Rules are sorted alphabetically by title within each section
- IDs (e.g., 1.1, 1.2) are auto-generated during build

## Impact Levels

- `CRITICAL` - Highest priority, major performance gains
- `HIGH` - Significant performance improvements
- `MEDIUM-HIGH` - Moderate-high gains
- `MEDIUM` - Moderate performance improvements
- `LOW-MEDIUM` - Low-medium gains
- `LOW` - Incremental improvements

## Scripts

- `pnpm build` - Compile rules into AGENTS.md
- `pnpm validate` - Validate all rule files
- `pnpm extract-tests` - Extract test cases for LLM evaluation
- `pnpm dev` - Build and validate

## Contributing

When adding or modifying rules:

1. Use the correct filename prefix for your section
2. Follow the `_template.md` structure
3. Include clear bad/good examples with explanations
4. Add appropriate tags
5. Run `pnpm build` to regenerate AGENTS.md and test-cases.json
6. Rules are automatically sorted by title - no need to manage numbers!

## Acknowledgments

Originally created by [@shuding](https://x.com/shuding) at [Vercel](https://vercel.com).
148 changes: 148 additions & 0 deletions .agents/skills/vercel-react-best-practices/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
---
name: vercel-react-best-practices
description: React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
license: MIT
metadata:
author: vercel
version: "1.0.0"
---

# Vercel React Best Practices

Comprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. Contains 69 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.

## When to Apply

Reference these guidelines when:
- Writing new React components or Next.js pages
- Implementing data fetching (client or server-side)
- Reviewing code for performance issues
- Refactoring existing React/Next.js code
- Optimizing bundle size or load times

## Rule Categories by Priority

| 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-` |

## Quick Reference

### 1. Eliminating Waterfalls (CRITICAL)

- `async-cheap-condition-before-await` - Check cheap sync conditions before awaiting flags or remote values
- `async-defer-await` - Move await into branches where actually used
- `async-parallel` - Use Promise.all() for independent operations
- `async-dependencies` - Use better-all for partial dependencies
- `async-api-routes` - Start promises early, await late in API routes
- `async-suspense-boundaries` - Use Suspense to stream content

### 2. Bundle Size Optimization (CRITICAL)

- `bundle-barrel-imports` - Import directly, avoid barrel files
- `bundle-dynamic-imports` - Use next/dynamic for heavy components
- `bundle-defer-third-party` - Load analytics/logging after hydration
- `bundle-conditional` - Load modules only when feature is activated
- `bundle-preload` - Preload on hover/focus for perceived speed

### 3. Server-Side Performance (HIGH)

- `server-auth-actions` - Authenticate server actions like API routes
- `server-cache-react` - Use React.cache() for per-request deduplication
- `server-cache-lru` - Use LRU cache for cross-request caching
- `server-dedup-props` - Avoid duplicate serialization in RSC props
- `server-hoist-static-io` - Hoist static I/O (fonts, logos) to module level
- `server-no-shared-module-state` - Avoid module-level mutable request state in RSC/SSR
- `server-serialization` - Minimize data passed to client components
- `server-parallel-fetching` - Restructure components to parallelize fetches
- `server-parallel-nested-fetching` - Chain nested fetches per item in Promise.all
- `server-after-nonblocking` - Use after() for non-blocking operations

### 4. Client-Side Data Fetching (MEDIUM-HIGH)

- `client-swr-dedup` - Use SWR for automatic request deduplication
- `client-event-listeners` - Deduplicate global event listeners
- `client-passive-event-listeners` - Use passive listeners for scroll
- `client-localstorage-schema` - Version and minimize localStorage data

### 5. Re-render Optimization (MEDIUM)

- `rerender-defer-reads` - Don't subscribe to state only used in callbacks
- `rerender-memo` - Extract expensive work into memoized components
- `rerender-memo-with-default-value` - Hoist default non-primitive props
- `rerender-dependencies` - Use primitive dependencies in effects
- `rerender-derived-state` - Subscribe to derived booleans, not raw values
- `rerender-derived-state-no-effect` - Derive state during render, not effects
- `rerender-functional-setstate` - Use functional setState for stable callbacks
- `rerender-lazy-state-init` - Pass function to useState for expensive values
- `rerender-simple-expression-in-memo` - Avoid memo for simple primitives
- `rerender-split-combined-hooks` - Split hooks with independent dependencies
- `rerender-move-effect-to-event` - Put interaction logic in event handlers
- `rerender-transitions` - Use startTransition for non-urgent updates
- `rerender-use-deferred-value` - Defer expensive renders to keep input responsive
- `rerender-use-ref-transient-values` - Use refs for transient frequent values
- `rerender-no-inline-components` - Don't define components inside components

### 6. Rendering Performance (MEDIUM)

- `rendering-animate-svg-wrapper` - Animate div wrapper, not SVG element
- `rendering-content-visibility` - Use content-visibility for long lists
- `rendering-hoist-jsx` - Extract static JSX outside components
- `rendering-svg-precision` - Reduce SVG coordinate precision
- `rendering-hydration-no-flicker` - Use inline script for client-only data
- `rendering-hydration-suppress-warning` - Suppress expected mismatches
- `rendering-activity` - Use Activity component for show/hide
- `rendering-conditional-render` - Use ternary, not && for conditionals
- `rendering-usetransition-loading` - Prefer useTransition for loading state
- `rendering-resource-hints` - Use React DOM resource hints for preloading
- `rendering-script-defer-async` - Use defer or async on script tags

### 7. JavaScript Performance (LOW-MEDIUM)

- `js-batch-dom-css` - Group CSS changes via classes or cssText
- `js-index-maps` - Build Map for repeated lookups
- `js-cache-property-access` - Cache object properties in loops
- `js-cache-function-results` - Cache function results in module-level Map
- `js-cache-storage` - Cache localStorage/sessionStorage reads
- `js-combine-iterations` - Combine multiple filter/map into one loop
- `js-length-check-first` - Check array length before expensive comparison
- `js-early-exit` - Return early from functions
- `js-hoist-regexp` - Hoist RegExp creation outside loops
- `js-min-max-loop` - Use loop for min/max instead of sort
- `js-set-map-lookups` - Use Set/Map for O(1) lookups
- `js-tosorted-immutable` - Use toSorted() for immutability
- `js-flatmap-filter` - Use flatMap to map and filter in one pass
- `js-request-idle-callback` - Defer non-critical work to browser idle time

### 8. Advanced Patterns (LOW)

- `advanced-effect-event-deps` - Don't put `useEffectEvent` results in effect deps
- `advanced-event-handler-refs` - Store event handlers in refs
- `advanced-init-once` - Initialize app once per app load
- `advanced-use-latest` - useLatest for stable callback refs

## How to Use

Read individual rule files for detailed explanations and code examples:

```
rules/async-parallel.md
rules/bundle-barrel-imports.md
```

Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and references

## Full Compiled Document

For the complete guide with all rules expanded: `AGENTS.md`
46 changes: 46 additions & 0 deletions .agents/skills/vercel-react-best-practices/rules/_sections.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Sections

This file defines all sections, their ordering, impact levels, and descriptions.
The section ID (in parentheses) is the filename prefix used to group rules.

---

## 1. Eliminating Waterfalls (async)

**Impact:** CRITICAL
**Description:** Waterfalls are the #1 performance killer. Each sequential await adds full network latency. Eliminating them yields the largest gains.

## 2. Bundle Size Optimization (bundle)

**Impact:** CRITICAL
**Description:** Reducing initial bundle size improves Time to Interactive and Largest Contentful Paint.

## 3. Server-Side Performance (server)

**Impact:** HIGH
**Description:** Optimizing server-side rendering and data fetching eliminates server-side waterfalls and reduces response times.

## 4. Client-Side Data Fetching (client)

**Impact:** MEDIUM-HIGH
**Description:** Automatic deduplication and efficient data fetching patterns reduce redundant network requests.

## 5. Re-render Optimization (rerender)

**Impact:** MEDIUM
**Description:** Reducing unnecessary re-renders minimizes wasted computation and improves UI responsiveness.

## 6. Rendering Performance (rendering)

**Impact:** MEDIUM
**Description:** Optimizing the rendering process reduces the work the browser needs to do.

## 7. JavaScript Performance (js)

**Impact:** LOW-MEDIUM
**Description:** Micro-optimizations for hot paths can add up to meaningful improvements.

## 8. Advanced Patterns (advanced)

**Impact:** LOW
**Description:** Advanced patterns for specific cases that require careful implementation.
28 changes: 28 additions & 0 deletions .agents/skills/vercel-react-best-practices/rules/_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
title: Rule Title Here
impact: MEDIUM
impactDescription: Optional description of impact (e.g., "20-50% improvement")
tags: tag1, tag2
---

## Rule Title Here

**Impact: MEDIUM (optional impact description)**

Brief explanation of the rule and why it matters. This should be clear and concise, explaining the performance implications.

**Incorrect (description of what's wrong):**

```typescript
// Bad code example here
const bad = example()
```

**Correct (description of what's right):**

```typescript
// Good code example here
const good = example()
```

Reference: [Link to documentation or resource](https://example.com)
Loading