---
name: perf-monitor
description: Performance audit when code may affect speed or bundle size. Triggers on "slow", "laggy", "optimize", "bundle size", or after perf-sensitive changes.
---

## When Invoked

1. Identify what changed (git diff)
2. Assess performance impact
3. Suggest optimizations if needed

## Quick Performance Checks

### Bundle Impact
```bash
# Check if new dependencies were added
git diff package.json | grep "+"
# Estimate impact
npx bundlephobia [new-package-name]
```

### Component Render Performance
- Is the component using `'use client'` when it could be a Server Component?
- Are there unnecessary re-renders? (objects/arrays in deps, missing memoization)
- Are lists virtualized if > 50 items?
- Are images using `next/image` with proper `sizes`?

### Data Fetching
- Is data fetched at the right level? (server vs client)
- Is there N+1 querying? (check `include`/`select` usage)
- Are queries paginated for large datasets?
- Is caching configured? (`revalidate`, TanStack Query `staleTime`)

### Asset Performance
- Images: WebP/AVIF format, proper dimensions, lazy loading
- Fonts: `font-display: swap`, preloaded, subset if possible
- CSS: No unused styles, animations use `transform`/`opacity` only
- JS: Code-split heavy components with `dynamic()` or `React.lazy()`

## Red Flags

| Pattern | Impact | Fix |
|---------|--------|-----|
| `'use client'` at page level | Disables SSR | Move to leaf components |
| `useEffect` + `fetch` | No SSR, loading flash | Server Component or prefetch |
| Inline objects in JSX | Re-renders children | `useMemo` or extract |
| Large `node_modules` import | Bundle bloat | Tree-shake or lazy load |
| Unoptimized images | Slow LCP | `next/image` with `sizes` |
| No pagination | Memory/network | Add cursor pagination |
| `SELECT *` | Over-fetching | Select specific fields |

## Output

```
## Performance Impact Assessment

### Changes Reviewed
- [file1.tsx] — [impact level: low/medium/high]
- [file2.tsx] — [impact level: low/medium/high]

### Issues Found
1. [Issue] → [Fix]

### Estimated Impact
- Bundle size: +/- XKB
- Render performance: [better/same/worse]
- Data efficiency: [better/same/worse]

### Verdict: NO CONCERNS / NEEDS OPTIMIZATION
```
