Score: 87/100 · 1 error · 107 warnings
Copy as prompt
Fix the following React Review diagnostics in my codebase.
## Errors (1)
1. [error] nextjs-no-side-effect-in-get-handler — app/api/stripe/route.ts:10
GET handler has side effects (.create()) — use POST to prevent CSRF and unintended prefetch triggers
## Warnings (107)
2. [warning] design-no-redundant-size-axes — components/bot-avatar.tsx:5
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
3. [warning] rerender-state-only-in-handlers — components/modal-provider.tsx:8
useState "isMounted" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
4. [warning] rendering-hydration-no-flicker — components/modal-provider.tsx:10
useEffect(setState, []) on mount causes a flash — consider useSyncExternalStore or suppressHydrationWarning
5. [warning] no-react19-deprecated-apis — components/ui/select.tsx:15
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
6. [warning] design-no-redundant-size-axes — components/ui/select.tsx:29
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
7. [warning] no-react19-deprecated-apis — components/ui/select.tsx:35
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
8. [warning] no-react19-deprecated-apis — components/ui/select.tsx:65
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
9. [warning] no-react19-deprecated-apis — components/ui/select.tsx:77
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
10. [warning] design-no-redundant-size-axes — components/ui/select.tsx:89
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
11. [warning] design-no-redundant-size-axes — components/ui/select.tsx:91
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
12. [warning] no-react19-deprecated-apis — components/ui/select.tsx:100
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
13. [warning] rerender-state-only-in-handlers — components/mobile-sidebar.tsx:17
useState "isMounted" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
14. [warning] rendering-hydration-no-flicker — components/mobile-sidebar.tsx:19
useEffect(setState, []) on mount causes a flash — consider useSyncExternalStore or suppressHydrationWarning
15. [warning] no-react19-deprecated-apis — components/ui/progress.tsx:8
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
16. [warning] design-no-redundant-size-axes — components/loader.tsx:6
w-10 h-10 → use the shorthand size-10 (Tailwind v3.4+)
17. [warning] nextjs-image-missing-sizes — components/loader.tsx:7
next/image with fill but no sizes — the browser downloads the largest image. Add a sizes attribute for responsive behavior
18. [warning] design-no-three-period-ellipsis — components/loader.tsx:9
Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or `…`)
19. [warning] no-react19-deprecated-apis — components/ui/label.tsx:13
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
20. [warning] design-no-redundant-size-axes — components/landing-navbar.tsx:19
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
21. [warning] nextjs-image-missing-sizes — components/landing-navbar.tsx:20
next/image with fill but no sizes — the browser downloads the largest image. Add a sizes attribute for responsive behavior
22. [warning] no-react19-deprecated-apis — components/ui/input.tsx:8
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
23. [warning] no-gradient-text — components/landing-hero.tsx:16
Gradient text (bg-clip-text + bg-gradient) is decorative rather than meaningful — a common AI tell. Use solid colors for text
24. [warning] no-react19-deprecated-apis — components/ui/form.tsx:43
useContext is superseded by `use()` on React 19+ — `use()` reads context conditionally inside hooks, branches, and loops; switch to `import { use } from 'react'`
25. [warning] no-react19-deprecated-apis — components/ui/form.tsx:44
useContext is superseded by `use()` on React 19+ — `use()` reads context conditionally inside hooks, branches, and loops; switch to `import { use } from 'react'`
26. [warning] no-react19-deprecated-apis — components/ui/form.tsx:73
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
27. [warning] no-react19-deprecated-apis — components/ui/form.tsx:87
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
28. [warning] no-react19-deprecated-apis — components/ui/form.tsx:104
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
29. [warning] no-react19-deprecated-apis — components/ui/form.tsx:126
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
30. [warning] no-react19-deprecated-apis — components/ui/form.tsx:143
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
31. [warning] react-compiler-destructure-method — app/(dashboard)/(routes)/conversation/page.tsx:56
Destructure for clarity: `const { refresh } = useRouter()` then call `refresh(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
32. [warning] design-no-bold-heading — components/landing-content.tsx:21
font-extrabold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)
33. [warning] design-no-redundant-size-axes — components/ui/empty.tsx:13
w-72 h-72 → use the shorthand size-72 (Tailwind v3.4+)
34. [warning] nextjs-image-missing-sizes — components/ui/empty.tsx:14
next/image with fill but no sizes — the browser downloads the largest image. Add a sizes attribute for responsive behavior
35. [warning] design-no-bold-heading — components/heading.tsx:27
font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)
36. [warning] no-react19-deprecated-apis — components/ui/dropdown-menu.tsx:21
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
37. [warning] design-no-redundant-size-axes — components/ui/dropdown-menu.tsx:37
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
38. [warning] no-react19-deprecated-apis — components/ui/dropdown-menu.tsx:43
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
39. [warning] no-react19-deprecated-apis — components/ui/dropdown-menu.tsx:59
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
40. [warning] no-react19-deprecated-apis — components/ui/dropdown-menu.tsx:77
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
41. [warning] no-react19-deprecated-apis — components/ui/dropdown-menu.tsx:95
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
42. [warning] design-no-redundant-size-axes — components/ui/dropdown-menu.tsx:108
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
43. [warning] design-no-redundant-size-axes — components/ui/dropdown-menu.tsx:110
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
44. [warning] no-react19-deprecated-apis — components/ui/dropdown-menu.tsx:119
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
45. [warning] design-no-redundant-size-axes — components/ui/dropdown-menu.tsx:131
w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)
46. [warning] design-no-redundant-size-axes — components/ui/dropdown-menu.tsx:133
w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)
47. [warning] no-react19-deprecated-apis — components/ui/dropdown-menu.tsx:141
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
48. [warning] no-react19-deprecated-apis — components/ui/dropdown-menu.tsx:159
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
49. [warning] react-compiler-destructure-method — app/(dashboard)/(routes)/code/page.tsx:60
Destructure for clarity: `const { refresh } = useRouter()` then call `refresh(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
50. [warning] rerender-state-only-in-handlers — components/free-counter.tsx:17
useState "mounted" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
51. [warning] rendering-hydration-no-flicker — components/free-counter.tsx:20
useEffect(setState, []) on mount causes a flash — consider useSyncExternalStore or suppressHydrationWarning
52. [warning] design-no-redundant-size-axes — components/free-counter.tsx:45
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
53. [warning] no-react19-deprecated-apis — components/ui/dialog.tsx:21
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
54. [warning] no-react19-deprecated-apis — components/ui/dialog.tsx:36
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
55. [warning] design-no-redundant-size-axes — components/ui/dialog.tsx:52
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
56. [warning] no-react19-deprecated-apis — components/ui/dialog.tsx:88
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
57. [warning] no-react19-deprecated-apis — components/ui/dialog.tsx:103
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
58. [warning] no-unknown-property — components/ui/command.tsx:44
Unknown property found
59. [warning] no-react19-deprecated-apis — components/ui/command.tsx:11
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
60. [warning] no-react19-deprecated-apis — components/ui/command.tsx:40
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
61. [warning] design-no-redundant-size-axes — components/ui/command.tsx:45
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
62. [warning] no-react19-deprecated-apis — components/ui/command.tsx:59
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
63. [warning] no-react19-deprecated-apis — components/ui/command.tsx:72
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
64. [warning] no-react19-deprecated-apis — components/ui/command.tsx:85
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
65. [warning] no-react19-deprecated-apis — components/ui/command.tsx:101
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
66. [warning] no-react19-deprecated-apis — components/ui/command.tsx:113
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
67. [warning] react-compiler-destructure-method — app/(dashboard)/(routes)/arabe/page.tsx:62
Destructure for clarity: `const { refresh } = useRouter()` then call `refresh(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
68. [warning] heading-has-content — components/ui/card.tsx:36
Headings must have content and the content must be accessible by a screen reader.
69. [warning] no-react19-deprecated-apis — components/ui/card.tsx:5
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
70. [warning] no-react19-deprecated-apis — components/ui/card.tsx:20
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
71. [warning] no-react19-deprecated-apis — components/ui/card.tsx:32
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
72. [warning] no-react19-deprecated-apis — components/ui/card.tsx:47
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
73. [warning] no-react19-deprecated-apis — components/ui/card.tsx:59
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
74. [warning] no-react19-deprecated-apis — components/ui/card.tsx:67
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
75. [warning] nextjs-missing-metadata — app/(landing)/page.tsx:1
Page without metadata or generateMetadata export — hurts SEO
76. [warning] no-react19-deprecated-apis — components/ui/button.tsx:43
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
77. [warning] react-compiler-destructure-method — app/(dashboard)/(routes)/music/page.tsx:52
Destructure for clarity: `const { refresh } = useRouter()` then call `refresh(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
78. [warning] no-react19-deprecated-apis — components/ui/avatar.tsx:8
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
79. [warning] no-react19-deprecated-apis — components/ui/avatar.tsx:23
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
80. [warning] no-react19-deprecated-apis — components/ui/avatar.tsx:35
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
81. [warning] server-sequential-independent-await — app/(dashboard)/layout.tsx:12
Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling
82. [warning] design-no-default-tailwind-palette — app/(dashboard)/layout.tsx:16
bg-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)
83. [warning] react-compiler-destructure-method — components/tool-card.tsx:33
Destructure for clarity: `const { push } = useRouter()` then call `push(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
84. [warning] design-no-redundant-size-axes — components/tool-card.tsx:40
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
85. [warning] nextjs-image-missing-sizes — components/tool-card.tsx:41
next/image with fill but no sizes — the browser downloads the largest image. Add a sizes attribute for responsive behavior
86. [warning] react-compiler-destructure-method — app/(dashboard)/(routes)/image/page.tsx:57
Destructure for clarity: `const { refresh } = useRouter()` then call `refresh(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
87. [warning] nextjs-image-missing-sizes — app/(dashboard)/(routes)/image/page.tsx:179
next/image with fill but no sizes — the browser downloads the largest image. Add a sizes attribute for responsive behavior
88. [warning] design-no-redundant-size-axes — app/(dashboard)/(routes)/image/page.tsx:187
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
89. [warning] react-compiler-destructure-method — app/(dashboard)/(routes)/video/page.tsx:51
Destructure for clarity: `const { refresh } = useRouter()` then call `refresh(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
90. [warning] no-pure-black-background — app/(dashboard)/(routes)/video/page.tsx:103
Pure black background (bg-black) looks harsh — use a near-black tinted toward your brand hue (e.g. bg-gray-950)
91. [warning] design-no-bold-heading — app/(dashboard)/(routes)/dashboard/page.tsx:17
font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)
92. [warning] react-compiler-destructure-method — app/(dashboard)/(routes)/dashboard/page.tsx:26
Destructure for clarity: `const { push } = useRouter()` then call `push(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
93. [warning] design-no-redundant-size-axes — app/(dashboard)/(routes)/dashboard/page.tsx:35
w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)
94. [warning] design-no-redundant-size-axes — components/subscription-button.tsx:34
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
95. [warning] react-compiler-destructure-method — app/(dashboard)/(routes)/translate/page.tsx:63
Destructure for clarity: `const { refresh } = useRouter()` then call `refresh(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
96. [warning] design-no-space-on-flex-children — components/sidebar.tsx:92
space-y-4 on a flex/grid parent — use gap-y-4 instead. Per-sibling margins phantom-gap on conditional render and don't mirror in RTL
97. [warning] design-no-redundant-size-axes — components/sidebar.tsx:95
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
98. [warning] nextjs-image-missing-sizes — components/sidebar.tsx:96
next/image with fill but no sizes — the browser downloads the largest image. Add a sizes attribute for responsive behavior
99. [warning] design-no-redundant-size-axes — components/user-avatar.tsx:9
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
100. [warning] design-no-redundant-size-axes — components/pro-modal.tsx:64
w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)
101. [warning] design-no-redundant-size-axes — components/pro-modal.tsx:78
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
102. [warning] no-react19-deprecated-apis — components/ui/sheet.tsx:24
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
103. [warning] no-react19-deprecated-apis — components/ui/sheet.tsx:62
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
104. [warning] design-no-redundant-size-axes — components/ui/sheet.tsx:75
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
105. [warning] no-react19-deprecated-apis — components/ui/sheet.tsx:111
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
106. [warning] no-react19-deprecated-apis — components/ui/sheet.tsx:123
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
107. [warning] server-sequential-independent-await — components/navbar.tsx:9
Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling
108. [warning] no-react19-deprecated-apis — components/ui/separator.tsx:8
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly❌ Errors (1)
nextjs-no-side-effect-in-get-handler
GET handler has side effects (.create()) — use POST to prevent CSRF and unintended prefetch triggers
Move the side effect to a POST handler and use a <form> or fetch with method POST — GET requests can be triggered by prefetching and are vulnerable to CSRF
⚠️ Warnings (107)
no-react19-deprecated-apis
forwardRef is no longer needed on React 19+ — refs are regular props on function components; remove forwardRef and pass ref directly
Pass
refas a regular prop on function components —forwardRefis no longer needed in React 19+. ReplaceuseContext(X)withuse(X)for branch-aware context reads. Only enabled on projects detected as React 19+.
components/ui/select.tsx:15
components/ui/select.tsx:35
components/ui/select.tsx:65
components/ui/select.tsx:77
components/ui/select.tsx:100
components/ui/progress.tsx:8
components/ui/label.tsx:13
components/ui/input.tsx:8
components/ui/form.tsx:43
components/ui/form.tsx:44
components/ui/form.tsx:73
components/ui/form.tsx:87
components/ui/form.tsx:104
components/ui/form.tsx:126
components/ui/form.tsx:143
components/ui/dropdown-menu.tsx:21
components/ui/dropdown-menu.tsx:43
components/ui/dropdown-menu.tsx:59
components/ui/dropdown-menu.tsx:77
components/ui/dropdown-menu.tsx:95
components/ui/dropdown-menu.tsx:119
components/ui/dropdown-menu.tsx:141
components/ui/dropdown-menu.tsx:159
components/ui/dialog.tsx:21
components/ui/dialog.tsx:36
components/ui/dialog.tsx:88
components/ui/dialog.tsx:103
components/ui/command.tsx:11
components/ui/command.tsx:40
components/ui/command.tsx:59
components/ui/command.tsx:72
components/ui/command.tsx:85
components/ui/command.tsx:101
components/ui/command.tsx:113
components/ui/card.tsx:5
components/ui/card.tsx:20
components/ui/card.tsx:32
components/ui/card.tsx:47
components/ui/card.tsx:59
components/ui/card.tsx:67
components/ui/button.tsx:43
components/ui/avatar.tsx:8
components/ui/avatar.tsx:23
components/ui/avatar.tsx:35
components/ui/sheet.tsx:24
components/ui/sheet.tsx:62
components/ui/sheet.tsx:111
components/ui/sheet.tsx:123
components/ui/separator.tsx:8
design-no-redundant-size-axes
w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)
Collapse
w-N h-Ntosize-N(Tailwind v3.4+) when both axes match
components/bot-avatar.tsx:5
components/ui/select.tsx:29
components/ui/select.tsx:89
components/ui/select.tsx:91
components/loader.tsx:6
components/landing-navbar.tsx:19
components/ui/empty.tsx:13
components/ui/dropdown-menu.tsx:37
components/ui/dropdown-menu.tsx:108
components/ui/dropdown-menu.tsx:110
components/ui/dropdown-menu.tsx:131
components/ui/dropdown-menu.tsx:133
components/free-counter.tsx:45
components/ui/dialog.tsx:52
components/ui/command.tsx:45
components/tool-card.tsx:40
app/(dashboard)/(routes)/image/page.tsx:187
app/(dashboard)/(routes)/dashboard/page.tsx:35
components/subscription-button.tsx:34
components/sidebar.tsx:95
components/user-avatar.tsx:9
components/pro-modal.tsx:64
components/pro-modal.tsx:78
components/ui/sheet.tsx:75
react-compiler-destructure-method
Destructure for clarity: const { refresh } = useRouter() then call refresh(...) directly — easier for React Compiler to memoize and clearer about which methods this component depends on
Destructure the method up front:
const { push } = useRouter()then callpush(...)directly — clearer dependency graph and easier for React Compiler to memoize
app/(dashboard)/(routes)/conversation/page.tsx:56
app/(dashboard)/(routes)/code/page.tsx:60
app/(dashboard)/(routes)/arabe/page.tsx:62
app/(dashboard)/(routes)/music/page.tsx:52
components/tool-card.tsx:33
app/(dashboard)/(routes)/image/page.tsx:57
app/(dashboard)/(routes)/video/page.tsx:51
app/(dashboard)/(routes)/dashboard/page.tsx:26
app/(dashboard)/(routes)/translate/page.tsx:63
nextjs-image-missing-sizes
next/image with fill but no sizes — the browser downloads the largest image. Add a sizes attribute for responsive behavior
Add sizes for responsive behavior:
sizes="(max-width: 768px) 100vw, 50vw"matching your layout breakpoints
components/loader.tsx:7
components/landing-navbar.tsx:20
components/ui/empty.tsx:14
components/tool-card.tsx:41
app/(dashboard)/(routes)/image/page.tsx:179
components/sidebar.tsx:96
rerender-state-only-in-handlers
useState "isMounted" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
Replace useState with useRef when the value is only mutated and never read in render —
ref.current = ...updates without re-rendering the component
components/modal-provider.tsx:8
components/mobile-sidebar.tsx:17
components/free-counter.tsx:17
rendering-hydration-no-flicker
useEffect(setState, []) on mount causes a flash — consider useSyncExternalStore or suppressHydrationWarning
Use
useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)or addsuppressHydrationWarningto the element
components/modal-provider.tsx:10
components/mobile-sidebar.tsx:19
components/free-counter.tsx:20
design-no-bold-heading
font-extrabold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)
Use
font-semibold(600) orfont-medium(500) on headings — 700+ crushes letter counter shapes at display sizes
components/landing-content.tsx:21
components/heading.tsx:27
app/(dashboard)/(routes)/dashboard/page.tsx:17
server-sequential-independent-await
Sequential await without a data dependency on the previous result — wrap the independent calls in Promise.all([...]) so they race instead of waterfalling
Wrap independent awaits in
Promise.all([...])so they race instead of waterfalling — second call doesn't depend on the first
app/(dashboard)/layout.tsx:12
components/navbar.tsx:9
design-no-three-period-ellipsis
Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or …)
Use the typographic ellipsis "…" (or
…) instead of three periods — pairs with action-with-followup labels ("Rename…", "Loading…")
no-gradient-text
Gradient text (bg-clip-text + bg-gradient) is decorative rather than meaningful — a common AI tell. Use solid colors for text
Use solid text colors for readability. If you need emphasis, use font weight, size, or a distinct color instead of gradients
components/landing-hero.tsx:16
no-unknown-property
Unknown property found
Remove unknown property
heading-has-content
Headings must have content and the content must be accessible by a screen reader.
Provide screen reader accessible content when using heading elements.
nextjs-missing-metadata
Page without metadata or generateMetadata export — hurts SEO
Add
export const metadata = { title: '...', description: '...' }orexport async function generateMetadata()
design-no-default-tailwind-palette
bg-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)
Replace
indigo-*/gray-*/slate-*with project tokens, your brand color, or a less-default neutral (zinc,neutral,stone)
no-pure-black-background
Pure black background (bg-black) looks harsh — use a near-black tinted toward your brand hue (e.g. bg-gray-950)
Tint the background slightly toward your brand hue — e.g.
#0a0a0for Tailwind'sbg-gray-950. Pure black looks harsh on modern displays
app/(dashboard)/(routes)/video/page.tsx:103
design-no-space-on-flex-children
space-y-4 on a flex/grid parent — use gap-y-4 instead. Per-sibling margins phantom-gap on conditional render and don't mirror in RTL
Use
gap-*on the flex/grid parent.space-x-*/space-y-*produce phantom gaps when a sibling is conditionally rendered, lose vertical spacing on wrapped lines, and don't mirror in RTL
Last scored May 14, 2026 at 7:35 AM UTC. Maintained by React Review.
Activity
0No activity yet.