#1

React Review Audit

Openreact-doctor[bot]opened 6mo ago

Score: 82/100 · 3 errors · 256 warnings

Copy as prompt
Fix the following React Review diagnostics in my codebase.

## Errors (3)

1. [error] no-nested-component-definition — src/App.tsx:46
   Component "ProtectedRoute" defined inside "App" — creates new instance every render, destroying state

2. [error] effect-needs-cleanup — src/components/FormBuilder.tsx:63
   useEffect schedules `setTimeout(...)` but never returns a cleanup — leaks the registration on every re-run and on unmount. Return a cleanup function that calls clearTimeout(...)

3. [error] require-reduced-motion — package.json:0
   Project uses a motion library but has no prefers-reduced-motion handling — required for accessibility (WCAG 2.3.3)

## Warnings (256)

4. [warning] use-lazy-motion — src/components/AuthForm.tsx:4
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

5. [warning] prefer-useReducer — src/components/AuthForm.tsx:10
   Component "AuthForm" has 5 useState calls — consider useReducer for related state

6. [warning] design-no-bold-heading — src/components/AuthForm.tsx:75
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

7. [warning] no-gradient-text — src/components/AuthForm.tsx:78
   Gradient text (bg-clip-text + bg-gradient) is decorative rather than meaningful — a common AI tell. Use solid colors for text

8. [warning] design-no-default-tailwind-palette — src/components/AuthForm.tsx:82
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

9. [warning] design-no-redundant-size-axes — src/components/AuthForm.tsx:104
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

10. [warning] design-no-default-tailwind-palette — src/components/AuthForm.tsx:104
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

11. [warning] design-no-redundant-size-axes — src/components/AuthForm.tsx:125
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

12. [warning] design-no-default-tailwind-palette — src/components/AuthForm.tsx:125
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

13. [warning] design-no-default-tailwind-palette — src/components/AuthForm.tsx:155
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

14. [warning] design-no-default-tailwind-palette — src/components/AuthForm.tsx:158
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

15. [warning] design-no-default-tailwind-palette — src/components/AuthForm.tsx:169
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

16. [warning] design-no-default-tailwind-palette — src/components/AuthForm.tsx:169
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

17. [warning] design-no-default-tailwind-palette — src/components/AuthForm.tsx:169
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

18. [warning] design-no-redundant-size-axes — src/components/AuthForm.tsx:171
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

19. [warning] rendering-svg-precision — src/components/AuthForm.tsx:172
   SVG transform attribute uses 4+ decimal precision — truncate to 1–2 decimals to shrink markup with no visible difference

20. [warning] use-lazy-motion — src/components/FormList.tsx:5
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

21. [warning] rerender-state-only-in-handlers — src/components/FormList.tsx:9
   useState "loading" is updated but never read in the component's return — use useRef so updates don't trigger re-renders

22. [warning] design-no-redundant-size-axes — src/components/FormList.tsx:69
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

23. [warning] design-no-bold-heading — src/components/FormList.tsx:94
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

24. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:94
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

25. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:95
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

26. [warning] design-no-redundant-size-axes — src/components/FormList.tsx:113
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

27. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:113
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

28. [warning] rendering-hydration-mismatch-time — src/components/FormList.tsx:165
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

29. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:132
   text-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

30. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:133
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

31. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:134
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

32. [warning] rendering-hydration-mismatch-time — src/components/FormList.tsx:165
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

33. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:153
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

34. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:159
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

35. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:163
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

36. [warning] design-no-redundant-size-axes — src/components/FormList.tsx:164
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

37. [warning] rendering-hydration-mismatch-time — src/components/FormList.tsx:165
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

38. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:171
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

39. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:171
   bg-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

40. [warning] design-no-default-tailwind-palette — src/components/FormList.tsx:171
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

41. [warning] use-lazy-motion — src/components/FormResponses.tsx:14
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

42. [warning] prefer-useReducer — src/components/FormResponses.tsx:31
   Component "FormResponses" has 7 useState calls — consider useReducer for related state

43. [warning] rerender-state-only-in-handlers — src/components/FormResponses.tsx:37
   useState "loading" is updated but never read in the component's return — use useRef so updates don't trigger re-renders

44. [warning] no-giant-component — src/components/FormResponses.tsx:31
   Component "FormResponses" is 404 lines — consider breaking it into smaller focused components

45. [warning] no-effect-event-handler — src/components/FormResponses.tsx:42
   useEffect simulating an event handler — move logic to an actual event handler instead

46. [warning] js-tosorted-immutable — src/components/FormResponses.tsx:120
   [...array].sort() — use array.toSorted() for immutable sorting (ES2023)

47. [warning] design-no-redundant-size-axes — src/components/FormResponses.tsx:177
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

48. [warning] design-no-bold-heading — src/components/FormResponses.tsx:211
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

49. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:211
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

50. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:213
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

51. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:276
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

52. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:278
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

53. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:280
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

54. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:297
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

55. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:299
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

56. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:323
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

57. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:417
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

58. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:237
   text-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

59. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:238
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

60. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:239
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

61. [warning] design-no-redundant-size-axes — src/components/FormResponses.tsx:257
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

62. [warning] design-no-redundant-size-axes — src/components/FormResponses.tsx:269
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

63. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:276
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

64. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:278
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

65. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:280
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

66. [warning] design-no-redundant-size-axes — src/components/FormResponses.tsx:290
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

67. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:297
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

68. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:299
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

69. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:323
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

70. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:321
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

71. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:322
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

72. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:323
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

73. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:346
   border-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

74. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:347
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

75. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:348
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

76. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:366
   divide-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

77. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:367
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

78. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:370
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

79. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:370
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

80. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:381
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

81. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:381
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

82. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:394
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

83. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:394
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

84. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:407
   divide-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

85. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:417
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

86. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:411
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

87. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:413
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

88. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:416
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

89. [warning] rendering-hydration-mismatch-time — src/components/FormResponses.tsx:417
   new Date() reachable from JSX renders differently on server vs client — wrap in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional

90. [warning] design-no-default-tailwind-palette — src/components/FormResponses.tsx:420
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

91. [warning] use-lazy-motion — src/App.tsx:11
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

92. [warning] rerender-state-only-in-handlers — src/App.tsx:15
   useState "loading" is updated but never read in the component's return — use useRef so updates don't trigger re-renders

93. [warning] design-no-redundant-size-axes — src/App.tsx:50
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

94. [warning] design-no-default-tailwind-palette — src/App.tsx:62
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

95. [warning] design-no-default-tailwind-palette — src/App.tsx:86
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

96. [warning] label-has-associated-control — src/components/FormBuilder.tsx:404
   A form label must be associated with a control.

97. [warning] label-has-associated-control — src/components/FormBuilder.tsx:461
   A form label must be associated with a control.

98. [warning] label-has-associated-control — src/components/FormBuilder.tsx:531
   A form label must be associated with a control.

99. [warning] use-lazy-motion — src/components/FormBuilder.tsx:16
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

100. [warning] prefer-useReducer — src/components/FormBuilder.tsx:30
   Component "FormBuilder" has 9 useState calls — consider useReducer for related state

101. [warning] rerender-state-only-in-handlers — src/components/FormBuilder.tsx:38
   useState "loading" is updated but never read in the component's return — use useRef so updates don't trigger re-renders

102. [warning] no-giant-component — src/components/FormBuilder.tsx:30
   Component "FormBuilder" is 643 lines — consider breaking it into smaller focused components

103. [warning] no-cascading-set-state — src/components/FormBuilder.tsx:44
   3 setState calls in a single useEffect — consider using useReducer or deriving state

104. [warning] rerender-functional-setstate — src/components/FormBuilder.tsx:128
   setQuestions([...questions, ...]) — use functional update `setQuestions(prev => [...prev, ...])` to avoid stale closures

105. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:248
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

106. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:261
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

107. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:274
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

108. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:301
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

109. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:312
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

110. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:326
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

111. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:341
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

112. [warning] design-no-space-on-flex-children — src/components/FormBuilder.tsx:342
   space-x-4 on a flex/grid parent — use gap-x-4 instead. Per-sibling margins phantom-gap on conditional render and don't mirror in RTL

113. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:349
   w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)

114. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:360
   w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)

115. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:388
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

116. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:399
   border-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

117. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:466
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

118. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:466
   border-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

119. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:469
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

120. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:469
   border-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

121. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:472
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

122. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:483
   border-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

123. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:494
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

124. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:531
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

125. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:538
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

126. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:548
   border-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

127. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:549
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

128. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:552
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

129. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:553
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

130. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:562
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

131. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:562
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

132. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:570
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

133. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:570
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

134. [warning] no-array-index-as-key — src/components/FormBuilder.tsx:580
   Array index "i" used as key — causes bugs when list is reordered or filtered

135. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:581
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

136. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:581
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

137. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:582
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

138. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:582
   bg-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

139. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:584
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

140. [warning] no-array-index-as-key — src/components/FormBuilder.tsx:594
   Array index "i" used as key — causes bugs when list is reordered or filtered

141. [warning] design-no-redundant-size-axes — src/components/FormBuilder.tsx:599
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

142. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:599
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

143. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:601
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

144. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:610
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

145. [warning] design-no-default-tailwind-palette — src/components/FormBuilder.tsx:610
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

146. [warning] no-array-index-as-key — src/components/FormBuilder.tsx:617
   Array index "i" used as key — causes bugs when list is reordered or filtered

147. [warning] use-lazy-motion — src/components/FormPreview.tsx:6
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

148. [warning] prefer-useReducer — src/components/FormPreview.tsx:24
   Component "FormPreview" has 11 useState calls — consider useReducer for related state

149. [warning] rerender-state-only-in-handlers — src/components/FormPreview.tsx:30
   useState "loading" is updated but never read in the component's return — use useRef so updates don't trigger re-renders

150. [warning] rerender-state-only-in-handlers — src/components/FormPreview.tsx:32
   useState "submitted" is updated but never read in the component's return — use useRef so updates don't trigger re-renders

151. [warning] no-giant-component — src/components/FormPreview.tsx:24
   Component "FormPreview" is 522 lines — consider breaking it into smaller focused components

152. [warning] no-effect-event-handler — src/components/FormPreview.tsx:43
   useEffect simulating an event handler — move logic to an actual event handler instead

153. [warning] rerender-functional-setstate — src/components/FormPreview.tsx:128
   setAnswers({ ...answers, ... }) — use functional update `setAnswers(prev => ({ ...prev, ... }))` to avoid stale closures

154. [warning] rerender-functional-setstate — src/components/FormPreview.tsx:155
   setAnswers({ ...answers, ... }) — use functional update `setAnswers(prev => ({ ...prev, ... }))` to avoid stale closures

155. [warning] rerender-functional-setstate — src/components/FormPreview.tsx:201
   setErrors({ ...errors, ... }) — use functional update `setErrors(prev => ({ ...prev, ... }))` to avoid stale closures

156. [warning] rerender-functional-setstate — src/components/FormPreview.tsx:208
   setErrors({ ...errors, ... }) — use functional update `setErrors(prev => ({ ...prev, ... }))` to avoid stale closures

157. [warning] rerender-functional-setstate — src/components/FormPreview.tsx:222
   setCurrentStep(currentStep + ...) — use functional update to avoid stale closures

158. [warning] rerender-functional-setstate — src/components/FormPreview.tsx:231
   setCurrentStep(currentStep - ...) — use functional update to avoid stale closures

159. [warning] design-no-redundant-size-axes — src/components/FormPreview.tsx:288
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

160. [warning] design-no-redundant-size-axes — src/components/FormPreview.tsx:304
   w-16 h-16 → use the shorthand size-16 (Tailwind v3.4+)

161. [warning] design-no-bold-heading — src/components/FormPreview.tsx:307
   font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

162. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:307
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

163. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:308
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

164. [warning] design-no-redundant-size-axes — src/components/FormPreview.tsx:334
   w-16 h-16 → use the shorthand size-16 (Tailwind v3.4+)

165. [warning] design-no-bold-heading — src/components/FormPreview.tsx:337
   font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

166. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:337
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

167. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:338
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

168. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:364
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

169. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:370
   bg-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

170. [warning] design-no-bold-heading — src/components/FormPreview.tsx:382
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

171. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:382
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

172. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:384
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

173. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:415
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

174. [warning] no-array-index-as-key — src/components/FormPreview.tsx:452
   Array index "i" used as key — causes bugs when list is reordered or filtered

175. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:454
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

176. [warning] design-no-redundant-size-axes — src/components/FormPreview.tsx:456
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

177. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:458
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

178. [warning] no-array-index-as-key — src/components/FormPreview.tsx:469
   Array index "i" used as key — causes bugs when list is reordered or filtered

179. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:469
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

180. [warning] design-no-redundant-size-axes — src/components/FormPreview.tsx:475
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

181. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:475
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

182. [warning] design-no-default-tailwind-palette — src/components/FormPreview.tsx:477
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

183. [warning] no-array-index-as-key — src/components/FormPreview.tsx:494
   Array index "i" used as key — causes bugs when list is reordered or filtered

184. [warning] anchor-is-valid — src/pages/HomePage.tsx:396
   Use of incorrect `href` for the 'a' element.

185. [warning] anchor-is-valid — src/pages/HomePage.tsx:402
   Use of incorrect `href` for the 'a' element.

186. [warning] anchor-is-valid — src/pages/HomePage.tsx:408
   Use of incorrect `href` for the 'a' element.

187. [warning] use-lazy-motion — src/pages/HomePage.tsx:12
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

188. [warning] no-giant-component — src/pages/HomePage.tsx:18
   Component "HomePage" is 402 lines — consider breaking it into smaller focused components

189. [warning] design-no-bold-heading — src/pages/HomePage.tsx:46
   font-bold on <h1> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

190. [warning] no-gradient-text — src/pages/HomePage.tsx:48
   Gradient text (bg-clip-text + bg-gradient) is decorative rather than meaningful — a common AI tell. Use solid colors for text

191. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:52
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

192. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:89
   border-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

193. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:89
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

194. [warning] design-no-bold-heading — src/pages/HomePage.tsx:125
   font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

195. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:125
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

196. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:128
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

197. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:146
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

198. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:149
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

199. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:152
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

200. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:163
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

201. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:166
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

202. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:169
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

203. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:180
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

204. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:183
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

205. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:186
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

206. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:197
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

207. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:200
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

208. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:203
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

209. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:213
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

210. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:216
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

211. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:219
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

212. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:230
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

213. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:233
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

214. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:236
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

215. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:247
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

216. [warning] design-no-bold-heading — src/pages/HomePage.tsx:255
   font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

217. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:255
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

218. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:269
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

219. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:275
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

220. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:278
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

221. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:283
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

222. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:292
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

223. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:298
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

224. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:301
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

225. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:306
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

226. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:315
   w-12 h-12 → use the shorthand size-12 (Tailwind v3.4+)

227. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:321
   text-gray-900 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

228. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:324
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

229. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:329
   text-gray-600 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

230. [warning] design-no-bold-heading — src/pages/HomePage.tsx:349
   font-extrabold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)

231. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:373
   bg-gray-50 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

232. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:384
   bg-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

233. [warning] design-no-redundant-size-axes — src/pages/HomePage.tsx:387
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

234. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:392
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

235. [warning] design-no-space-on-flex-children — src/pages/HomePage.tsx:395
   space-x-6 on a flex/grid parent — use gap-x-6 instead. Per-sibling margins phantom-gap on conditional render and don't mirror in RTL

236. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:398
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

237. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:398
   text-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

238. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:404
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

239. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:404
   text-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

240. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:410
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

241. [warning] design-no-default-tailwind-palette — src/pages/HomePage.tsx:410
   text-gray-300 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

242. [warning] use-lazy-motion — src/components/Navbar.tsx:5
   Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size

243. [warning] design-no-redundant-size-axes — src/components/Navbar.tsx:39
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

244. [warning] no-gradient-text — src/components/Navbar.tsx:41
   Gradient text (bg-clip-text + bg-gradient) is decorative rather than meaningful — a common AI tell. Use solid colors for text

245. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:63
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

246. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:70
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

247. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:83
   text-gray-700 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

248. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:91
   text-gray-400 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

249. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:91
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

250. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:91
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

251. [warning] design-no-redundant-size-axes — src/components/Navbar.tsx:94
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

252. [warning] design-no-redundant-size-axes — src/components/Navbar.tsx:96
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

253. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:128
   border-gray-200 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

254. [warning] design-no-redundant-size-axes — src/components/Navbar.tsx:131
   w-10 h-10 → use the shorthand size-10 (Tailwind v3.4+)

255. [warning] design-no-redundant-size-axes — src/components/Navbar.tsx:132
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

256. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:136
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

257. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:144
   text-gray-500 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

258. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:144
   text-gray-800 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

259. [warning] design-no-default-tailwind-palette — src/components/Navbar.tsx:144
   bg-gray-100 reads as the Tailwind template default — use zinc (true neutral), neutral (warmer), or stone (warmest)

❌ Errors (3)

no-nested-component-definition

Component "ProtectedRoute" defined inside "App" — creates new instance every render, destroying state

Move to a separate file or to module scope above the parent component

src/App.tsx:46

effect-needs-cleanup

useEffect schedules setTimeout(...) but never returns a cleanup — leaks the registration on every re-run and on unmount. Return a cleanup function that calls clearTimeout(...)

Return a cleanup function that releases the subscription / timer: return () =&gt; target.removeEventListener(name, handler) for listeners, return () =&gt; clearInterval(id) / clearTimeout(id) for timers, or return unsubscribe if the subscribe call already returned one

src/components/FormBuilder.tsx:63

require-reduced-motion

Project uses a motion library but has no prefers-reduced-motion handling — required for accessibility (WCAG 2.3.3)

Add useReducedMotion() from your animation library, or a @media (prefers-reduced-motion: reduce) CSS query

package.json:0


⚠️ Warnings (256)

design-no-default-tailwind-palette

text-gray-600 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)

src/components/AuthForm.tsx:82
src/components/AuthForm.tsx:104
src/components/AuthForm.tsx:125
src/components/AuthForm.tsx:155
src/components/AuthForm.tsx:158
src/components/AuthForm.tsx:169
src/components/AuthForm.tsx:169
src/components/AuthForm.tsx:169
src/components/FormList.tsx:94
src/components/FormList.tsx:95
src/components/FormList.tsx:113
src/components/FormList.tsx:132
src/components/FormList.tsx:133
src/components/FormList.tsx:134
src/components/FormList.tsx:153
src/components/FormList.tsx:159
src/components/FormList.tsx:163
src/components/FormList.tsx:171
src/components/FormList.tsx:171
src/components/FormList.tsx:171
src/components/FormResponses.tsx:211
src/components/FormResponses.tsx:213
src/components/FormResponses.tsx:237
src/components/FormResponses.tsx:238
src/components/FormResponses.tsx:239
src/components/FormResponses.tsx:321
src/components/FormResponses.tsx:322
src/components/FormResponses.tsx:346
src/components/FormResponses.tsx:347
src/components/FormResponses.tsx:348
src/components/FormResponses.tsx:366
src/components/FormResponses.tsx:367
src/components/FormResponses.tsx:370
src/components/FormResponses.tsx:370
src/components/FormResponses.tsx:381
src/components/FormResponses.tsx:381
src/components/FormResponses.tsx:394
src/components/FormResponses.tsx:394
src/components/FormResponses.tsx:407
src/components/FormResponses.tsx:411
src/components/FormResponses.tsx:413
src/components/FormResponses.tsx:416
src/components/FormResponses.tsx:420
src/App.tsx:62
src/App.tsx:86
src/components/FormBuilder.tsx:261
src/components/FormBuilder.tsx:301
src/components/FormBuilder.tsx:312
src/components/FormBuilder.tsx:326
src/components/FormBuilder.tsx:341
src/components/FormBuilder.tsx:388
src/components/FormBuilder.tsx:399
src/components/FormBuilder.tsx:466
src/components/FormBuilder.tsx:469
src/components/FormBuilder.tsx:472
src/components/FormBuilder.tsx:483
src/components/FormBuilder.tsx:494
src/components/FormBuilder.tsx:531
src/components/FormBuilder.tsx:538
src/components/FormBuilder.tsx:548
src/components/FormBuilder.tsx:549
src/components/FormBuilder.tsx:552
src/components/FormBuilder.tsx:553
src/components/FormBuilder.tsx:562
src/components/FormBuilder.tsx:562
src/components/FormBuilder.tsx:570
src/components/FormBuilder.tsx:570
src/components/FormBuilder.tsx:581
src/components/FormBuilder.tsx:582
src/components/FormBuilder.tsx:584
src/components/FormBuilder.tsx:599
src/components/FormBuilder.tsx:601
src/components/FormBuilder.tsx:610
src/components/FormBuilder.tsx:610
src/components/FormPreview.tsx:307
src/components/FormPreview.tsx:308
src/components/FormPreview.tsx:337
src/components/FormPreview.tsx:338
src/components/FormPreview.tsx:364
src/components/FormPreview.tsx:370
src/components/FormPreview.tsx:382
src/components/FormPreview.tsx:384
src/components/FormPreview.tsx:415
[`src/components/FormP


Issue body truncated. See the full report at react.review/dashboard.

Activity

0

No activity yet.