Skip to content

React Review Audit #1

Description

@react-doctor

Score: 64/100 · 0 errors · 999 warnings

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

## Warnings (999)

1. [warning] no-barrel-import — app/server/publishing/reshare/linkedin.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

2. [warning] click-events-have-key-events — app/routes/_dashboard/$workspaceSlug.tsx:71
   Enforce a clickable non-interactive element has at least one keyboard event listener.

3. [warning] no-static-element-interactions — app/routes/_dashboard/$workspaceSlug.tsx:71
   Static HTML elements with event handlers require a role.

4. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug.tsx:90
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

5. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug.tsx:120
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

6. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug.tsx:128
   bg-indigo-50 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

7. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug.tsx:128
   bg-indigo-950 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

8. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug.tsx:128
   text-indigo-900 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

9. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug.tsx:128
   text-indigo-200 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

10. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug.tsx:129
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

11. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/settings/replies.tsx:27
   Component "SavedRepliesPage" has 7 useState calls — consider useReducer for related state

12. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/replies.tsx:176
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

13. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/replies.tsx:179
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

14. [warning] no-barrel-import — app/server/publishing/reshare/facebook.ts:2
   Import from barrel/index file — import directly from the source module for better tree-shaking

15. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/settings/notifications.tsx:48
   Component "NotificationsSettings" has 5 useState calls — consider useReducer for related state

16. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/notifications.tsx:118
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

17. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/notifications.tsx:137
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

18. [warning] async-await-in-loop — app/server/approvalPortal.server.ts:132
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

19. [warning] js-index-maps — app/server/approvalPortal.server.ts:141
   array.find() in a loop is O(n*m) — build a Map for O(1) lookups

20. [warning] no-barrel-import — app/server/publishing/reshare/bluesky.ts:5
   Import from barrel/index file — import directly from the source module for better tree-shaking

21. [warning] click-events-have-key-events — app/routes/_dashboard/$workspaceSlug/settings/index.tsx:186
   Enforce a clickable non-interactive element has at least one keyboard event listener.

22. [warning] no-static-element-interactions — app/routes/_dashboard/$workspaceSlug/settings/index.tsx:186
   Static HTML elements with event handlers require a role.

23. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/settings/index.tsx:50
   Component "GeneralSettings" has 5 useState calls — consider useReducer for related state

24. [warning] tanstack-start-no-navigate-in-render — app/routes/_dashboard/$workspaceSlug/settings/index.tsx:80
   navigate() called during render — use redirect() in beforeLoad/loader for route-level redirects

25. [warning] tanstack-start-no-navigate-in-render — app/routes/_dashboard/$workspaceSlug/settings/index.tsx:95
   navigate() called during render — use redirect() in beforeLoad/loader for route-level redirects

26. [warning] no-barrel-import — app/server/publishing/original/youtube.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

27. [warning] no-secrets-in-client-code — app/server/publishing/original/youtube.ts:7
   Possible hardcoded secret in "TOKEN_ENDPOINT" — use environment variables instead

28. [warning] async-await-in-loop — app/server/publishing/original/youtube.ts:143
   await inside a while-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

29. [warning] js-flatmap-filter — app/server/publishing/original/youtube.ts:181
   .map().filter(Boolean) iterates twice — use .flatMap() to transform and filter in a single pass

30. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:20
   Component "BioSettingsPage" has 11 useState calls — consider useReducer for related state

31. [warning] rerender-functional-setstate — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:72
   setLinks([...links, ...]) — use functional update `setLinks(prev => [...prev, ...])` to avoid stale closures

32. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:145
   accent-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

33. [warning] no-array-index-as-key — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:159
   Array index "i" used as key — causes bugs when list is reordered or filtered

34. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:173
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

35. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:178
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

36. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:190
   accent-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

37. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:212
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

38. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:212
   text-indigo-400 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

39. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/bio.tsx:214
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

40. [warning] no-barrel-import — app/server/publishing/original/x.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

41. [warning] async-await-in-loop — app/server/publishing/original/x.ts:123
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

42. [warning] async-await-in-loop — app/server/publishing/original/x.ts:137
   await inside a while-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

43. [warning] async-await-in-loop — app/server/publishing/original/x.ts:163
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

44. [warning] js-combine-iterations — app/server/publishing/original/x.ts:220
   .map().filter() iterates the array twice — combine into a single loop with .reduce() or for...of

45. [warning] async-await-in-loop — app/server/publishing/original/x.ts:242
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

46. [warning] js-combine-iterations — app/server/publishing/original/x.ts:239
   .map().filter() iterates the array twice — combine into a single loop with .reduce() or for...of

47. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/settings/billing.tsx:101
   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

48. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/settings/billing.tsx:101
   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

49. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/youtube.ts:37
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

50. [warning] no-barrel-import — app/server/publishing/original/tumblr.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

51. [warning] async-await-in-loop — app/server/publishing/original/tumblr.ts:89
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

52. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:45
   Component "ApiSettings" has 9 useState calls — consider useReducer for related state

53. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:150
   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 — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:150
   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 — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:150
   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] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:153
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

57. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:169
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

58. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:173
   border-indigo-200 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

59. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:173
   bg-indigo-50 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

60. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:173
   bg-indigo-950 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

61. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:174
   text-indigo-800 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

62. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:186
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

63. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:214
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

64. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:257
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

65. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:262
   border-indigo-200 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

66. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:262
   bg-indigo-50 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

67. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:262
   bg-indigo-950 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

68. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:263
   text-indigo-800 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

69. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:277
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

70. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:280
   text-indigo-700 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

71. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/api.tsx:280
   text-indigo-300 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

72. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/x.ts:50
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

73. [warning] no-barrel-import — app/server/publishing/original/tiktok.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

74. [warning] no-secrets-in-client-code — app/server/publishing/original/tiktok.ts:5
   Possible hardcoded secret in "TOKEN_ENDPOINT" — use environment variables instead

75. [warning] async-await-in-loop — app/server/publishing/original/tiktok.ts:178
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

76. [warning] async-await-in-loop — app/server/publishing/original/tiktok.ts:200
   await inside a while-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

77. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:96
   Component "ProviderCard" has 5 useState calls — consider useReducer for related state

78. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:163
   bg-indigo-100 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

79. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:163
   bg-indigo-900 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

80. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:163
   text-indigo-700 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

81. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:163
   text-indigo-300 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

82. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:164
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

83. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:192
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

84. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:240
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

85. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:240
   text-indigo-400 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

86. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/settings/ai.tsx:248
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

87. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/tumblr.ts:29
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

88. [warning] no-barrel-import — app/server/publishing/original/threads.ts:2
   Import from barrel/index file — import directly from the source module for better tree-shaking

89. [warning] async-await-in-loop — app/server/publishing/original/threads.ts:67
   await inside a while-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

90. [warning] async-await-in-loop — app/lib/shortener/providers/local.ts:38
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

91. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/tiktok.ts:40
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

92. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:70
   Component "PostsPage" has 14 useState calls — consider useReducer for related state

93. [warning] no-giant-component — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:70
   Component "PostsPage" is 339 lines — consider breaking it into smaller focused components

94. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:212
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

95. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:255
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

96. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:344
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

97. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:444
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

98. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:444
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

99. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:446
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

100. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:446
   text-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

101. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:546
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

102. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:560
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

103. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:577
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

104. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:589
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

105. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:669
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

106. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/index.tsx:679
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

107. [warning] no-barrel-import — app/server/publishing/original/reddit.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

108. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/threads.ts:65
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

109. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/campaigns/$campaignId.tsx:63
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

110. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/posts/campaigns/$campaignId.tsx:80
   bg-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

111. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/campaigns/$campaignId.tsx:283
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

112. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/campaigns/$campaignId.tsx:301
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

113. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/campaigns/$campaignId.tsx:306
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

114. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/posts/campaigns/$campaignId.tsx:332
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

115. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/posts/campaigns/$campaignId.tsx:332
   bg-indigo-50 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

116. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/posts/campaigns/$campaignId.tsx:334
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

117. [warning] no-barrel-import — app/server/publishing/original/pinterest.ts:2
   Import from barrel/index file — import directly from the source module for better tree-shaking

118. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/reddit.ts:35
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

119. [warning] tanstack-start-no-navigate-in-render — app/routes/_dashboard/$workspaceSlug/notifications.tsx:38
   navigate() called during render — use redirect() in beforeLoad/loader for route-level redirects

120. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/notifications.tsx:76
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

121. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/notifications.tsx:106
   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

122. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/notifications.tsx:106
   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

123. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/notifications.tsx:110
   w-2 h-2 → use the shorthand size-2 (Tailwind v3.4+)

124. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/notifications.tsx:110
   bg-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

125. [warning] no-barrel-import — app/server/publishing/original/mastodon.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

126. [warning] async-await-in-loop — app/server/publishing/original/mastodon.ts:84
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

127. [warning] async-await-in-loop — app/server/publishing/original/mastodon.ts:120
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

128. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/pinterest.ts:42
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

129. [warning] js-cache-property-access — app/server/analyticsAdapters/platforms/pinterest.ts:39
   url.searchParams.set is read 3 times inside this loop — hoist into a const at the top of the loop body

130. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/monitors.tsx:34
   Component "MonitorsPage" has 7 useState calls — consider useReducer for related state

131. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/monitors.tsx:135
   w-5 h-5 → use the shorthand size-5 (Tailwind v3.4+)

132. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/monitors.tsx:135
   text-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

133. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/monitors.tsx:160
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

134. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/monitors.tsx:198
   px-1 py-1 → use the shorthand p-1

135. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/monitors.tsx:212
   bg-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

136. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/monitors.tsx:224
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

137. [warning] no-gray-on-colored-background — app/routes/_dashboard/$workspaceSlug/monitors.tsx:226
   Gray text (text-neutral-400) on colored background (bg-red-100) looks washed out — use a darker shade of the background color or white

138. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/monitors.tsx:233
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

139. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/monitors.tsx:252
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

140. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/monitors.tsx:300
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

141. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/monitors.tsx:302
   w-6 h-6 → use the shorthand size-6 (Tailwind v3.4+)

142. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/monitors.tsx:318
   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

143. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/monitors.tsx:336
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

144. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/monitors.tsx:336
   text-indigo-400 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

145. [warning] no-barrel-import — app/server/publishing/original/linkedin.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

146. [warning] async-await-in-loop — app/server/publishing/original/linkedin.ts:182
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

147. [warning] async-await-in-loop — app/server/publishing/original/linkedin.ts:333
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

148. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/media.tsx:49
   Component "MediaPage" has 13 useState calls — consider useReducer for related state

149. [warning] no-giant-component — app/routes/_dashboard/$workspaceSlug/media.tsx:49
   Component "MediaPage" is 323 lines — consider breaking it into smaller focused components

150. [warning] async-await-in-loop — app/routes/_dashboard/$workspaceSlug/media.tsx:116
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

151. [warning] no-cascading-set-state — app/routes/_dashboard/$workspaceSlug/media.tsx:131
   3 setState calls in a single useEffect — consider using useReducer or deriving state

152. [warning] no-usememo-simple-expression — app/routes/_dashboard/$workspaceSlug/media.tsx:195
   useMemo wrapping a trivially cheap expression — memo overhead exceeds the computation

153. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/media.tsx:227
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

154. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/media.tsx:260
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

155. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/media.tsx:281
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

156. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/media.tsx:284
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

157. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/media.tsx:290
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

158. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/media.tsx:314
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

159. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/media.tsx:328
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

160. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/media.tsx:356
   bg-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

161. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/media.tsx:357
   border-indigo-400 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

162. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/media.tsx:358
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

163. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/media.tsx:358
   text-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

164. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/media.tsx:359
   text-indigo-700 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

165. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/media.tsx:359
   text-indigo-300 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

166. [warning] no-barrel-import — app/server/publishing/original/instagram.ts:2
   Import from barrel/index file — import directly from the source module for better tree-shaking

167. [warning] async-await-in-loop — app/server/publishing/original/instagram.ts:137
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

168. [warning] async-await-in-loop — app/server/publishing/original/instagram.ts:205
   await inside a while-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

169. [warning] async-await-in-loop — app/server/publishing/original/instagram.ts:266
   await inside a while-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

170. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/mastodon.ts:34
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

171. [warning] no-barrel-import — app/server/publishing/original/facebook.ts:3
   Import from barrel/index file — import directly from the source module for better tree-shaking

172. [warning] async-await-in-loop — app/server/publishing/original/facebook.ts:127
   await inside a while-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

173. [warning] async-await-in-loop — app/server/publishing/original/facebook.ts:186
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

174. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/linkedin.ts:84
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

175. [warning] tanstack-start-no-navigate-in-render — app/routes/_dashboard/$workspaceSlug/inbox.tsx:53
   navigate() called during render — use redirect() in beforeLoad/loader for route-level redirects

176. [warning] tanstack-start-no-navigate-in-render — app/routes/_dashboard/$workspaceSlug/inbox.tsx:69
   navigate() called during render — use redirect() in beforeLoad/loader for route-level redirects

177. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/inbox.tsx:131
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

178. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/inbox.tsx:201
   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

179. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/inbox.tsx:201
   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

180. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/inbox.tsx:178
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

181. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/inbox.tsx:181
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

182. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/inbox.tsx:201
   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

183. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/inbox.tsx:206
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

184. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/inbox.tsx:206
   text-indigo-400 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

185. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/inbox.tsx:208
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

186. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/inbox.tsx:215
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

187. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/inbox.tsx:215
   text-indigo-400 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

188. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/inbox.tsx:217
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

189. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/inbox.tsx:227
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

190. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/inbox.tsx:235
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

191. [warning] no-barrel-import — app/server/publishing/original/bluesky.ts:6
   Import from barrel/index file — import directly from the source module for better tree-shaking

192. [warning] async-await-in-loop — app/server/publishing/original/bluesky.ts:129
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

193. [warning] js-hoist-intl — app/server/publishing/original/bluesky.ts:285
   new Intl.Segmenter() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call

194. [warning] async-await-in-loop — app/server/publishing/original/bluesky.ts:424
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

195. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/instagram.ts:82
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

196. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/facebook.ts:83
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

197. [warning] click-events-have-key-events — app/routes/_dashboard/$workspaceSlug/calendar.tsx:389
   Enforce a clickable non-interactive element has at least one keyboard event listener.

198. [warning] click-events-have-key-events — app/routes/_dashboard/$workspaceSlug/calendar.tsx:425
   Enforce a clickable non-interactive element has at least one keyboard event listener.

199. [warning] click-events-have-key-events — app/routes/_dashboard/$workspaceSlug/calendar.tsx:559
   Enforce a clickable non-interactive element has at least one keyboard event listener.

200. [warning] click-events-have-key-events — app/routes/_dashboard/$workspaceSlug/calendar.tsx:586
   Enforce a clickable non-interactive element has at least one keyboard event listener.

201. [warning] click-events-have-key-events — app/routes/_dashboard/$workspaceSlug/calendar.tsx:685
   Enforce a clickable non-interactive element has at least one keyboard event listener.

202. [warning] no-static-element-interactions — app/routes/_dashboard/$workspaceSlug/calendar.tsx:389
   Static HTML elements with event handlers require a role.

203. [warning] no-static-element-interactions — app/routes/_dashboard/$workspaceSlug/calendar.tsx:425
   Static HTML elements with event handlers require a role.

204. [warning] no-static-element-interactions — app/routes/_dashboard/$workspaceSlug/calendar.tsx:559
   Static HTML elements with event handlers require a role.

205. [warning] no-static-element-interactions — app/routes/_dashboard/$workspaceSlug/calendar.tsx:586
   Static HTML elements with event handlers require a role.

206. [warning] no-static-element-interactions — app/routes/_dashboard/$workspaceSlug/calendar.tsx:685
   Static HTML elements with event handlers require a role.

207. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/calendar.tsx:58
   Component "CalendarPage" has 5 useState calls — consider useReducer for related state

208. [warning] tanstack-start-no-navigate-in-render — app/routes/_dashboard/$workspaceSlug/calendar.tsx:214
   navigate() called during render — use redirect() in beforeLoad/loader for route-level redirects

209. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/calendar.tsx:249
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

210. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/calendar.tsx:255
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

211. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/calendar.tsx:515
   px-1 py-1 → use the shorthand p-1

212. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/calendar.tsx:719
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

213. [warning] design-no-em-dash-in-jsx-text — app/routes/_dashboard/$workspaceSlug/calendar.tsx:721
   Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses

214. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/calendar.tsx:728
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

215. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/calendar.tsx:745
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

216. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/calendar.tsx:752
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

217. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/calendar.tsx:805
   bg-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

218. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/calendar.tsx:813
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

219. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/calendar.tsx:813
   bg-indigo-50 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

220. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/calendar.tsx:813
   text-indigo-400 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

221. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/calendar.tsx:813
   bg-indigo-950 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

222. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/calendar.tsx:819
   px-3 py-3 → use the shorthand p-3

223. [warning] js-set-map-lookups — app/server/publishing/original/bluesky-facets.ts:65
   array.includes() in a loop is O(n) per call — convert to a Set for O(1) lookups

224. [warning] async-await-in-loop — app/server/publishing/original/bluesky-facets.ts:114
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

225. [warning] no-react19-deprecated-apis — app/lib/i18n/index.tsx:1
   useContext is superseded by `use()` on React 19+ — `use()` reads context conditionally inside hooks, branches, and loops; switch to `import { use } from 'react'`

226. [warning] async-await-in-loop — app/server/analyticsAdapters/platforms/bluesky.ts:61
   await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

227. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/approvals.tsx:53
   Component "ApprovalsPage" has 6 useState calls — consider useReducer for related state

228. [warning] async-await-in-loop — app/routes/_dashboard/$workspaceSlug/approvals.tsx:107
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

229. [warning] async-await-in-loop — app/routes/_dashboard/$workspaceSlug/approvals.tsx:128
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

230. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/approvals.tsx:163
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

231. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/approvals.tsx:174
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

232. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/approvals.tsx:177
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

233. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/approvals.tsx:245
   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

234. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/approvals.tsx:189
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

235. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/approvals.tsx:189
   text-indigo-400 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

236. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/approvals.tsx:245
   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

237. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/approvals.tsx:245
   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

238. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/approvals.tsx:272
   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

239. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/approvals.tsx:272
   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

240. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/approvals.tsx:272
   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

241. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/approvals.tsx:280
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

242. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/approvals.tsx:325
   Component "InviteReviewerBody" has 7 useState calls — consider useReducer for related state

243. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/approvals.tsx:376
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

244. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/approvals.tsx:418
   w-3.5 h-3.5 → use the shorthand size-3.5 (Tailwind v3.4+)

245. [warning] prefer-dynamic-import — app/routes/_dashboard/$workspaceSlug/analytics.tsx:4
   "recharts" is a heavy library — use React.lazy() or next/dynamic for code splitting

246. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:119
   w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)

247. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/analytics.tsx:125
   Component "AnalyticsPage" has 7 useState calls — consider useReducer for related state

248. [warning] design-no-em-dash-in-jsx-text — app/routes/_dashboard/$workspaceSlug/analytics.tsx:401
   Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses

249. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:411
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

250. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:411
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

251. [warning] no-array-index-as-key — app/routes/_dashboard/$workspaceSlug/analytics.tsx:515
   Array index "i" used as key — causes bugs when list is reordered or filtered

252. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:594
   px-2 py-2 → use the shorthand p-2

253. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:600
   px-2 py-2 → use the shorthand p-2

254. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:601
   px-2 py-2 → use the shorthand p-2

255. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:602
   px-2 py-2 → use the shorthand p-2

256. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:603
   px-2 py-2 → use the shorthand p-2

257. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:604
   px-2 py-2 → use the shorthand p-2

258. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:605
   px-2 py-2 → use the shorthand p-2

259. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:606
   px-2 py-2 → use the shorthand p-2

260. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:607
   px-2 py-2 → use the shorthand p-2

261. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:608
   px-2 py-2 → use the shorthand p-2

262. [warning] design-no-redundant-padding-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:609
   px-2 py-2 → use the shorthand p-2

263. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:625
   w-10 h-10 → use the shorthand size-10 (Tailwind v3.4+)

264. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/analytics.tsx:644
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

265. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/analytics.tsx:646
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

266. [warning] no-barrel-import — app/server/publishing/helpers.ts:5
   Import from barrel/index file — import directly from the source module for better tree-shaking

267. [warning] async-await-in-loop — app/server/analyticsAdapters/persist.ts:88
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

268. [warning] prefer-useReducer — app/routes/_dashboard/$workspaceSlug/activity.tsx:47
   Component "ActivityPage" has 5 useState calls — consider useReducer for related state

269. [warning] no-cascading-set-state — app/routes/_dashboard/$workspaceSlug/activity.tsx:60
   3 setState calls in a single useEffect — consider using useReducer or deriving state

270. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/activity.tsx:143
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

271. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/activity.tsx:146
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

272. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/activity.tsx:189
   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

273. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/activity.tsx:189
   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

274. [warning] design-no-default-tailwind-palette — app/routes/_dashboard/$workspaceSlug/activity.tsx:171
   text-indigo-600 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

275. [warning] design-no-em-dash-in-jsx-text — app/routes/_dashboard/$workspaceSlug/activity.tsx:177
   Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses

276. [warning] rendering-hydration-mismatch-time — app/routes/_dashboard/$workspaceSlug/activity.tsx:189
   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

277. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/accounts.tsx:73
   w-8 h-8 → use the shorthand size-8 (Tailwind v3.4+)

278. [warning] js-combine-iterations — app/routes/_dashboard/$workspaceSlug/accounts.tsx:82
   .filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of

279. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/accounts.tsx:184
   w-9 h-9 → use the shorthand size-9 (Tailwind v3.4+)

280. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/accounts.tsx:186
   w-9 h-9 → use the shorthand size-9 (Tailwind v3.4+)

281. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/accounts.tsx:213
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

282. [warning] design-no-redundant-size-axes — app/routes/_dashboard/$workspaceSlug/accounts.tsx:253
   w-3 h-3 → use the shorthand size-3 (Tailwind v3.4+)

283. [warning] no-danger — app/routes/__root.tsx:107
   Do not use `dangerouslySetInnerHTML` prop

284. [warning] no-danger — app/routes/__root.tsx:112
   Do not use `dangerouslySetInnerHTML` prop

285. [warning] server-sequential-independent-await — app/server/analytics.server.ts:161
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

286. [warning] async-parallel — app/server/analytics.server.ts:140
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

287. [warning] async-await-in-loop — app/server/analytics.server.ts:363
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

288. [warning] js-cache-property-access — app/server/analytics.server.ts:383
   schema.posts.id is read 3 times inside this loop — hoist into a const at the top of the loop body

289. [warning] js-combine-iterations — app/server/analytics.server.ts:463
   .map().filter() iterates the array twice — combine into a single loop with .reduce() or for...of

290. [warning] js-set-map-lookups — app/server/analytics.server.ts:501
   array.includes() in a loop is O(n) per call — convert to a Set for O(1) lookups

291. [warning] js-tosorted-immutable — app/server/analytics.server.ts:528
   [...array].sort() — use array.toSorted() for immutable sorting (ES2023)

292. [warning] server-sequential-independent-await — app/server/posts.server.ts:127
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

293. [warning] server-sequential-independent-await — app/server/posts.server.ts:149
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

294. [warning] async-parallel — app/server/posts.server.ts:122
   4 sequential await statements that appear independent — use Promise.all() for parallel execution

295. [warning] server-sequential-independent-await — app/server/posts.server.ts:354
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

296. [warning] server-sequential-independent-await — app/server/posts.server.ts:375
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

297. [warning] async-parallel — app/server/posts.server.ts:349
   4 sequential await statements that appear independent — use Promise.all() for parallel execution

298. [warning] js-flatmap-filter — app/server/posts.server.ts:463
   .map().filter(Boolean) iterates twice — use .flatMap() to transform and filter in a single pass

299. [warning] js-combine-iterations — app/server/posts.server.ts:484
   .filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of

300. [warning] server-sequential-independent-await — app/server/posts.server.ts:525
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

301. [warning] async-await-in-loop — app/server/posts.server.ts:544
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

302. [warning] async-await-in-loop — app/server/posts.server.ts:563
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

303. [warning] async-await-in-loop — app/server/posts.server.ts:572
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

304. [warning] async-parallel — app/server/posts.server.ts:612
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

305. [warning] server-sequential-independent-await — app/server/posts.server.ts:683
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

306. [warning] js-flatmap-filter — app/server/posts.server.ts:875
   .map().filter(Boolean) iterates twice — use .flatMap() to transform and filter in a single pass

307. [warning] server-sequential-independent-await — app/server/posts.server.ts:917
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

308. [warning] server-sequential-independent-await — app/server/posts.server.ts:934
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

309. [warning] server-sequential-independent-await — app/server/posts.server.ts:965
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

310. [warning] async-await-in-loop — app/server/posts.server.ts:982
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

311. [warning] async-await-in-loop — app/server/posts.server.ts:1009
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

312. [warning] js-combine-iterations — app/server/posts.server.ts:1040
   .filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of

313. [warning] js-combine-iterations — app/server/posts.server.ts:1107
   .filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of

314. [warning] js-combine-iterations — app/server/ai.server.ts:247
   .map().filter() iterates the array twice — combine into a single loop with .reduce() or for...of

315. [warning] tanstack-start-get-mutation — app/server/optimalTime.ts:19
   GET server function has side effects (engByPP.set()) — use createServerFn({ method: 'POST' }) for mutations

316. [warning] design-no-redundant-size-axes — app/components/calendar/PostPill.tsx:54
   w-2.5 h-2.5 → use the shorthand size-2.5 (Tailwind v3.4+)

317. [warning] design-no-default-tailwind-palette — app/components/calendar/PostPill.tsx:54
   text-indigo-500 reads as the Tailwind template default — use your project's brand color or zinc/neutral/stone

318. [warning] design-no-redundant-size-axes — app/components/calendar/PostPill.tsx:56
   w-2.5 h-2.5 → use the shorthand size-2.5 (Tailwind v3.4+)

319. [warning] async-await-in-loop — app/server/admin.server.ts:190
   await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently

320. [warning] async-parallel — app/server/admin.server.ts:213
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

321. [warning] server-sequential-independent-await — app/server/admin.server.ts:236
   Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling

322. [warning] async-parallel — app/server/admin.server.ts:377
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

323. [warning] async-parallel — app/server/admin.server.ts:419
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

324. [warning] async-parallel — app/server/admin.server.ts:441
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

325. [warning] async-parallel — app/server/admin.server.ts:457
   5 sequential await statements that appear independent — use Promise.all() for parallel execution

326. [warning] async-parallel — app/server/admin.server.ts:469
   3 sequential await statements that appear independent — use Promise.all() for parallel execution

327. [warning] js-combine-iterations — app/server/admin.server.ts:542
   .map().filter() iterates the array twice — combine in

---

_Issue body truncated. See the full report at [react.review/dashboard](https://react.review/dashboard)._

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions