All skills
am-will avatar

/vercel-react-best-practices

@198e289
by am.willam-will/codex-skills1k stars
60

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.

Use this Skill: https://skilld.dev/gh/am-will/codex-skills/vercel-react-best-practices

This session only. Nothing lands on disk.

rulesasync-suspense-boundaries.md

≈628 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Strategic Suspense Boundaries

Instead of awaiting data in async components before returning JSX, use Suspense boundaries to show the wrapper UI faster while data loads.

Incorrect (wrapper blocked by data fetching):

async function Page() {
  const data = await fetchData() // Blocks entire page
  
  return (
    <div>
      <div>Sidebar</div>
      <div>Header</div>
      <div>
        <DataDisplay data={data} />
      </div>
      <div>Footer</div>
    </div>
  )
}

The entire layout waits for data even though only the middle section needs it.

Correct (wrapper shows immediately, data streams in):

function Page() {
  return (
    <div>
      <div>Sidebar</div>
      <div>Header</div>
      <div>
        <Suspense fallback={<Skeleton />}>
          <DataDisplay />
        </Suspense>
      </div>
      <div>Footer</div>
    </div>
  )
}

async function DataDisplay() {
  const data = await fetchData() // Only blocks this component
  return <div>{data.content}</div>
}

Sidebar, Header, and Footer render immediately. Only DataDisplay waits for data.

Alternative (share promise across components):

function Page() {
  // Start fetch immediately, but don't await
  const dataPromise = fetchData()
  
  return (
    <div>
      <div>Sidebar</div>
      <div>Header</div>
      <Suspense fallback={<Skeleton />}>
        <DataDisplay dataPromise={dataPromise} />
        <DataSummary dataPromise={dataPromise} />
      </Suspense>
      <div>Footer</div>
    </div>
  )
}

function DataDisplay({ dataPromise }: { dataPromise: Promise<Data> }) {
  const data = use(dataPromise) // Unwraps the promise
  return <div>{data.content}</div>
}

function DataSummary({ dataPromise }: { dataPromise: Promise<Data> }) {
  const data = use(dataPromise) // Reuses the same promise
  return <div>{data.summary}</div>
}

Both components share the same promise, so only one fetch occurs. Layout renders immediately while both components wait together.

When NOT to use this pattern:

  • Critical data needed for layout decisions (affects positioning)
  • SEO-critical content above the fold
  • Small, fast queries where suspense overhead isn't worth it
  • When you want to avoid layout shift (loading → content jump)

Trade-off: Faster initial paint vs potential layout shift. Choose based on your UX priorities.

Source: SKILL.md on GitHub

1 warning17d5 checks · Risk SAFE
  • Gen Agent Trust Hub17d

    The skill provides comprehensive React and Next.js performance optimization guidelines. No malicious behavior was detected. It presents a low-severity risk for indirect prompt injection because it is designed to analyze and modify user-provided source code.

  • Socket17d

    No alerts

  • Snyk17d

    Risk: LOW · No issues

  • Runlayer7mo

    7/51 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 198e289. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Steadyupdated 9 months ago

README badge

README badge for am-will/codex-skills/vercel-react-best-practices

Provides 45 performance optimization rules for React and Next.js organized by priority, from eliminating waterfalls and bundle size to re-render and JavaScript optimization. Use this skill when writing, reviewing, or refactoring React/Next.js code to apply Vercel's engineering guidelines for faster load times and reduced bundle size.

Generated from the current SKILL.md.

Does this skill apply to both React and Next.js?
Yes. The skill covers React components and Next.js pages, including server-side and client-side data fetching patterns specific to Next.js.
What should I do if a rule conflicts with my project requirements?
The SKILL.md does not address exceptions or trade-offs. Rules are prioritized by impact (critical rules like eliminating waterfalls rank highest), so you should apply them in that order but evaluate each against your specific constraints.
Does this skill cover CSS or styling performance?
Minimally. It includes a few CSS-related rules (batch DOM changes, content-visibility) but focuses primarily on JavaScript, bundle size, and data fetching optimization.
Are code examples included in the skill?
Yes. Each rule has an incorrect code example with explanation and a correct code example. The full compiled guide is in AGENTS.md.

Generated from the current SKILL.md. These answers refresh after source changes.