Skip to content

Instantly share code, notes, and snippets.

@kulterryan
Created May 15, 2026 23:17
Show Gist options
  • Select an option

  • Save kulterryan/6fe378b4d8bfdf54f68a65b77bfccf04 to your computer and use it in GitHub Desktop.

Select an option

Save kulterryan/6fe378b4d8bfdf54f68a65b77bfccf04 to your computer and use it in GitHub Desktop.
React Doctor audit — apps/web verbose (issue #2568)
react-doctor v0.1.6
✔ Select projects to scan › web
Scanning /Users/kulterryan/work/10xlms-platform/apps/web...
- Detecting framework. Found Next.js.
✔ Detecting framework. Found Next.js.
- Detecting React version. Found React 19.2.4.
✔ Detecting React version. Found React 19.2.4.
- Detecting language. Found TypeScript.
✔ Detecting language. Found TypeScript.
- Detecting React Compiler. Not found.
✔ Detecting React Compiler. Not found.
- Found 478 source files.
✔ Found 478 source files.
- Running lint checks...
- Detecting dead code.
✔ Detecting dead code.
- Running lint checks...
✔ Running lint checks.
✗ react-doctor/server-auth-actions ×69
Server action "fetchCertificate" — add auth check (auth(), getSession(), etc.) at the top
→ Add `const session = await auth()` at the top and throw/redirect if unauthorized before any data access
actions/frontend/certificate/getcertificate.ts:5
actions/frontend/notification/registerUser.ts:6
actions/frontend/userAccess/getUserAccessInfo.ts:33
actions/frontend/emailAuth/signIn.ts:6
actions/frontend/otp/sendOtp.ts:5
actions/frontend/otp/checkOtp.ts:5
actions/frontend/progressTracking/markTopicDone.ts:16
actions/frontend/liveSession/getPaginatedSessions.ts:58
actions/frontend/mailOtp/sendOtp.ts:5
actions/frontend/progressTracking/createTopicProgress.ts:6
actions/frontend/mailOtp/checkOtp.ts:6
actions/frontend/showcasePost/deleteComment.ts:5
actions/frontend/showcasePost/deleteMyPost.ts:5
actions/frontend/showcasePost/getShowcasePost.ts:5
actions/frontend/showcasePost/createShowcasePost.ts:9
actions/frontend/showcasePost/getShowcasePostByIdForViewer.ts:13
actions/frontend/chat/chat.ts:9
actions/frontend/chat/chat.ts:67
actions/frontend/chat/chat.ts:87
actions/frontend/chat/chat.ts:102
actions/frontend/chat/chat.ts:136
actions/frontend/chat/chat.ts:165
actions/frontend/chat/chat.ts:181
actions/frontend/showcasePost/getShowcasePosts.ts:11
actions/frontend/showcasePost/getMyProfilePosts.ts:11
actions/frontend/showcasePost/getPostComments.ts:5
actions/frontend/doubt/createDoubt.ts:19
actions/frontend/profile/updateProfile.ts:7
actions/frontend/whatsappVerify/sendOtp.ts:6
actions/frontend/doubt/getDoubtById.ts:32
actions/frontend/profile/createProfile.ts:7
actions/frontend/whatsappVerify/checkOtp.ts:6
actions/frontend/doubt/updateDoubt.ts:6
actions/frontend/doubt/updateDoubt.ts:58
actions/frontend/search/checkIfAssigned.ts:14
actions/frontend/l1/rescheduleWorkshop.ts:19
actions/frontend/interactiveImageMap/deleteInteractiveImageMap.ts:21
app/api/upload/route.ts:9
actions/frontend/search/action.ts:38
actions/frontend/assignment-sub/submit.ts:6
actions/frontend/interactiveImageMap/getInteractiveImageMap.ts:18
actions/frontend/topic/getVideoPlayData.ts:4
actions/frontend/tinybird/ingest/addLmsVisit.ts:5
actions/frontend/interactiveImageMap/createInteractiveImageMap.ts:20
actions/frontend/topic/getVideoChapters.ts:4
actions/frontend/job/createJobApplication.ts:16
actions/frontend/interactiveImageMap/updateInteractiveImageMap.ts:21
actions/frontend/logout/logout.ts:5
actions/frontend/mobileAuth/signinMobile.ts:6
actions/frontend/quiz/retryQuiz.ts:9
actions/frontend/review/submit.ts:6
actions/frontend/quiz/getResults.ts:15
actions/frontend/quiz/updateAttempt.ts:8
actions/frontend/customer/updateBouncedEmail.ts:7
actions/frontend/quiz/getLastAttempt.ts:8
actions/frontend/customer/updateJobPortal.ts:8
actions/frontend/resume/uploadResume.ts:7
actions/frontend/customer/createCustomer.ts:12
actions/frontend/resume/deleteResume.ts:7
actions/frontend/customer/requestDeleteAccount.ts:6
actions/frontend/resume/switchActiveResume.ts:7
actions/frontend/calendar/getCalendarEvents.ts:94
actions/frontend/customer/updateCustomer.ts:13
actions/frontend/resume/listResumes.ts:6
lib/frontend/fetchSession.ts:4
actions/frontend/showcasePost/fetchLinkMetadata.ts:89
actions/frontend/showcasePost/toggleLike.ts:5
actions/frontend/showcasePost/createComment.ts:5
actions/frontend/showcasePost/editShowcasePost.ts:9
✗ react-hooks/rules-of-hooks ×48
React Hook "useState" is called conditionally. React Hooks must be called in the exact same order in every component render.
→ Move the Hook call before the condition, or call it unconditionally and branch inside the Hook/effect instead.
components/frontend/quiz/quizHolder.tsx:36
components/frontend/quiz/quizHolder.tsx:37
components/frontend/quiz/quizHolder.tsx:38
components/frontend/quiz/quizHolder.tsx:39
components/frontend/quiz/quizHolder.tsx:45
components/frontend/quiz/quizHolder.tsx:46
components/frontend/quiz/quizHolder.tsx:47
components/frontend/quiz/quizHolder.tsx:50
components/frontend/quiz/quizHolder.tsx:129
components/frontend/quiz/quizHolder.tsx:173
components/frontend/quiz/quizHolder.tsx:279
components/frontend/quiz/quizHolder.tsx:284
components/breadcrumb/AutoBreadcrumbs.tsx:30
components/breadcrumb/AutoBreadcrumbs.tsx:39
components/breadcrumb/AutoBreadcrumbs.tsx:48
components/breadcrumb/BreadCrumbs.tsx:39
components/breadcrumb/BreadCrumbs.tsx:43
components/breadcrumb/BreadCrumbs.tsx:53
components/breadcrumb/BreadCrumbs.tsx:82
components/breadcrumb/BreadCrumbs.tsx:83
components/breadcrumb/BreadCrumbs.tsx:87
components/breadcrumb/BreadCrumbs.tsx:92
components/breadcrumb/BreadCrumbs.tsx:98
components/breadcrumb/BreadCrumbs.tsx:142
components/breadcrumb/BreadCrumbs.tsx:147
components/breadcrumb/BreadCrumbs.tsx:152
components/breadcrumb/BreadCrumbs.tsx:157
components/breadcrumb/BreadCrumbs.tsx:163
components/breadcrumb/BreadCrumbs.tsx:173
components/breadcrumb/BreadCrumbs.tsx:342
components/breadcrumb/BreadCrumbs.tsx:354
components/breadcrumb/BreadCrumbs.tsx:367
components/breadcrumb/BreadCrumbs.tsx:383
components/breadcrumb/BreadCrumbs.tsx:388
components/breadcrumb/BreadCrumbs.tsx:405
components/breadcrumb/BreadCrumbs.tsx:423
components/breadcrumb/BreadCrumbs.tsx:441
components/breadcrumb/BreadCrumbs.tsx:445
components/breadcrumb/BreadCrumbs.tsx:449
components/breadcrumb/BreadCrumbs.tsx:454
components/breadcrumb/BreadCrumbs.tsx:458
components/breadcrumb/BreadCrumbs.tsx:463
components/breadcrumb/BreadCrumbs.tsx:488
components/breadcrumb/BreadCrumbs.tsx:493
components/breadcrumb/BreadCrumbs.tsx:515
components/breadcrumb/BreadCrumbs.tsx:522
components/breadcrumb/BreadCrumbs.tsx:551
app/[domain]/interactive-images-tool/components/EditorButtons.tsx:94
✗ react-doctor/server-no-mutable-module-state ×3
Module-scoped const "AVAILABLE_COLORS = []" in a "use server" file — the container itself is shared across requests; move per-request data into the action body
→ Move per-request data into the action body, headers/cookies, or a request-scope (React.cache, AsyncLocalStorage). Module-scope `let`/`var` is shared across requests.
actions/frontend/calendar/getCalendarEvents.ts:32
actions/frontend/calendar/getCalendarEvents.ts:53
actions/frontend/calendar/getCalendarEvents.ts:54
✗ react-doctor/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 () => target.removeEventListener(name, handler)` for listeners, `return () => clearInterval(id)` / `clearTimeout(id)` for timers, or `return unsubscribe` if the subscribe call already returned one
components/frontend/chat/chat-component.tsx:533
✗ react-doctor/nextjs-no-side-effect-in-get-handler
GET handler on "/logout" route — use POST to prevent CSRF and unintended prefetch triggers
→ Move the side effect to a POST handler and use a <form> or fetch with method POST — GET requests can be triggered by prefetching and are vulnerable to CSRF
app/api/logout/route.ts:4
⚠ react-doctor/design-no-default-tailwind-palette ×624
text-gray-200 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`)
components/frontend/forms/review/reviewForm.tsx:227
components/frontend/chat/ModelSwitcher.tsx:52
components/frontend/chat/ModelSwitcher.tsx:52
components/frontend/chat/ModelSwitcher.tsx:52
components/frontend/chat/ModelSwitcher.tsx:52
components/frontend/chat/ModelSwitcher.tsx:79
components/frontend/chat/ModelSwitcher.tsx:79
components/frontend/assignment/assignmentInfo.tsx:180
components/frontend/assignment/assignmentInfo.tsx:269
components/frontend/assignment/assignmentInfo.tsx:283
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1060
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1063
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1063
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1064
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1068
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1072
components/frontend/PlayerLayout.tsx:510
components/frontend/PlayerLayout.tsx:510
components/frontend/PlayerLayout.tsx:510
components/frontend/PlayerLayout.tsx:510
components/frontend/PlayerLayout.tsx:713
components/frontend/PlayerLayout.tsx:716
components/frontend/knowledgebase/AllKbCategory.tsx:49
components/frontend/chat/TextContent.tsx:18
components/frontend/chat/TextContent.tsx:18
components/frontend/chat/TextContent.tsx:65
components/frontend/chat/TextContent.tsx:84
components/frontend/chat/TextContent.tsx:91
components/frontend/chat/TextContent.tsx:98
components/frontend/chat/TextContent.tsx:98
components/frontend/chat/TextContent.tsx:103
components/frontend/chat/TextContent.tsx:103
components/frontend/chat/TextContent.tsx:103
components/frontend/chat/TextContent.tsx:110
components/frontend/chat/TextContent.tsx:110
components/frontend/quiz/quizHolder.tsx:348
components/frontend/quiz/quizHolder.tsx:348
components/frontend/quiz/quizHolder.tsx:348
components/frontend/quiz/quizHolder.tsx:348
components/frontend/quiz/quizHolder.tsx:377
components/frontend/quiz/quizHolder.tsx:377
components/frontend/quiz/quizHolder.tsx:377
components/frontend/quiz/quizHolder.tsx:377
components/frontend/quiz/quizHolder.tsx:377
components/frontend/quiz/quizHolder.tsx:415
components/frontend/quiz/quizHolder.tsx:415
components/frontend/showcasePost/CustomMediaCarousel.tsx:234
components/frontend/showcasePost/CustomMediaCarousel.tsx:234
components/frontend/showcasePost/CustomMediaCarousel.tsx:276
components/frontend/forms/assignment/gdriveForm.tsx:110
components/frontend/knowledgebase/kb-navigation.tsx:22
components/frontend/knowledgebase/kb-navigation.tsx:22
components/frontend/chat/MessageBubble.tsx:121
components/frontend/chat/MessageBubble.tsx:144
components/frontend/chat/MessageBubble.tsx:144
components/frontend/chat/MessageBubble.tsx:149
components/frontend/chat/MessageBubble.tsx:152
components/frontend/chat/MessageBubble.tsx:156
components/frontend/chat/MessageBubble.tsx:156
components/frontend/chat/MessageBubble.tsx:156
components/frontend/chat/MessageBubble.tsx:202
components/frontend/chat/MessageBubble.tsx:226
components/frontend/chat/MessageBubble.tsx:226
components/frontend/chat/MessageBubble.tsx:238
components/frontend/chat/MessageBubble.tsx:241
components/frontend/chat/MessageBubble.tsx:246
components/frontend/chat/MessageBubble.tsx:246
components/frontend/chat/MessageBubble.tsx:246
components/frontend/chat/MessageBubble.tsx:335
components/frontend/chat/MessageBubble.tsx:360
components/frontend/chat/MessageBubble.tsx:361
components/frontend/showcasePost/CommentSection.tsx:196
components/frontend/showcasePost/CommentSection.tsx:198
components/frontend/showcasePost/CommentSection.tsx:199
components/frontend/chat/chat-component.tsx:729
components/frontend/chat/chat-component.tsx:731
components/frontend/chat/chat-component.tsx:746
components/frontend/chat/chat-component.tsx:767
components/frontend/chat/chat-component.tsx:787
components/frontend/chat/chat-component.tsx:801
components/frontend/chat/chat-component.tsx:813
components/frontend/chat/chat-component.tsx:813
components/frontend/chat/chat-component.tsx:826
components/frontend/chat/chat-component.tsx:826
components/frontend/chat/chat-component.tsx:826
components/frontend/chat/chat-component.tsx:839
components/frontend/chat/chat-component.tsx:839
components/frontend/chat/chat-component.tsx:868
components/frontend/chat/chat-component.tsx:874
components/frontend/chat/chat-component.tsx:874
components/frontend/chat/chat-component.tsx:886
components/frontend/showcasePost/LinkPreview.tsx:45
components/frontend/recording/recordingDetails.tsx:150
components/frontend/footer/theme-aware-logo.tsx:28
components/frontend/footer/theme-aware-logo.tsx:40
components/frontend/footer/theme-aware-logo.tsx:40
components/frontend/footer/theme-aware-logo.tsx:41
components/frontend/footer/theme-aware-logo.tsx:41
components/frontend/showcasePost/showGridSkeleton.tsx:8
components/frontend/showcasePost/showGridSkeleton.tsx:11
components/frontend/showcasePost/showGridSkeleton.tsx:13
components/frontend/showcasePost/showGridSkeleton.tsx:14
components/frontend/showcasePost/showGridSkeleton.tsx:18
components/frontend/showcasePost/showGridSkeleton.tsx:19
components/frontend/showcasePost/showGridSkeleton.tsx:22
components/frontend/showcasePost/showGridSkeleton.tsx:23
components/frontend/offers/AvailableOffers.tsx:360
components/frontend/offers/AvailableOffers.tsx:360
components/frontend/offers/AvailableOffers.tsx:361
components/frontend/offers/AvailableOffers.tsx:363
components/frontend/offers/AvailableOffers.tsx:366
components/frontend/offers/AvailableOffers.tsx:366
components/frontend/offers/AvailableOffers.tsx:392
components/frontend/offers/AvailableOffers.tsx:392
components/frontend/offers/AvailableOffers.tsx:418
components/frontend/offers/AvailableOffers.tsx:427
components/frontend/offers/AvailableOffers.tsx:427
components/frontend/offers/AvailableOffers.tsx:440
components/frontend/offers/AvailableOffers.tsx:495
components/frontend/offers/AvailableOffers.tsx:495
components/frontend/offers/AvailableOffers.tsx:539
components/frontend/offers/AvailableOffers.tsx:539
components/frontend/offers/AvailableOffers.tsx:562
components/frontend/offers/AvailableOffers.tsx:562
components/frontend/offers/AvailableOffers.tsx:562
components/frontend/offers/AvailableOffers.tsx:562
components/frontend/offers/AvailableOffers.tsx:566
components/frontend/knowledgebase/kbSearch.tsx:165
components/frontend/knowledgebase/kbSearch.tsx:165
components/frontend/knowledgebase/kbSearch.tsx:165
components/frontend/knowledgebase/kbSearch.tsx:165
components/frontend/chat/LayoutWrapper.tsx:66
components/frontend/offers/HouseOfGenAIProducts.tsx:145
components/frontend/offers/HouseOfGenAIProducts.tsx:145
components/frontend/offers/HouseOfGenAIProducts.tsx:146
components/frontend/offers/HouseOfGenAIProducts.tsx:148
components/frontend/offers/HouseOfGenAIProducts.tsx:151
components/frontend/offers/HouseOfGenAIProducts.tsx:151
components/frontend/offers/HouseOfGenAIProducts.tsx:177
components/frontend/offers/HouseOfGenAIProducts.tsx:177
components/frontend/offers/HouseOfGenAIProducts.tsx:192
components/frontend/offers/HouseOfGenAIProducts.tsx:192
components/frontend/offers/HouseOfGenAIProducts.tsx:202
components/frontend/offers/HouseOfGenAIProducts.tsx:202
components/frontend/offers/HouseOfGenAIProducts.tsx:203
components/frontend/offers/HouseOfGenAIProducts.tsx:203
components/frontend/offers/HouseOfGenAIProducts.tsx:209
components/frontend/offers/HouseOfGenAIProducts.tsx:223
components/frontend/offers/HouseOfGenAIProducts.tsx:270
components/frontend/offers/HouseOfGenAIProducts.tsx:270
components/frontend/offers/HouseOfGenAIProducts.tsx:280
components/frontend/offers/HouseOfGenAIProducts.tsx:280
components/frontend/offers/HouseOfGenAIProducts.tsx:281
components/frontend/offers/HouseOfGenAIProducts.tsx:281
components/frontend/offers/HouseOfGenAIProducts.tsx:297
components/frontend/offers/HouseOfGenAIProducts.tsx:297
components/frontend/offers/HouseOfGenAIProducts.tsx:297
components/frontend/offers/HouseOfGenAIProducts.tsx:297
components/frontend/offers/HouseOfGenAIProducts.tsx:301
components/frontend/knowledgebase/kb-content.tsx:64
components/frontend/certificate/ext-certificate.tsx:61
components/frontend/certificate/ext-certificate.tsx:62
components/frontend/certificate/ext-certificate.tsx:62
components/frontend/certificate/ext-certificate.tsx:62
components/frontend/certificate/ext-certificate.tsx:81
components/frontend/certificate/ext-certificate.tsx:88
components/frontend/certificate/ext-certificate.tsx:88
components/frontend/certificate/ext-certificate.tsx:107
components/frontend/certificate/ext-certificate.tsx:123
components/frontend/certificate/ext-certificate.tsx:125
components/frontend/certificate/ext-certificate.tsx:125
components/frontend/certificate/ext-certificate.tsx:125
components/frontend/certificate/ext-certificate.tsx:143
components/frontend/certificate/ext-certificate.tsx:146
components/frontend/certificate/ext-certificate.tsx:146
components/frontend/certificate/ext-certificate.tsx:149
components/frontend/certificate/ext-certificate.tsx:149
components/frontend/certificate/ext-certificate.tsx:163
components/frontend/certificate/ext-certificate.tsx:163
components/frontend/certificate/ext-certificate.tsx:168
components/frontend/certificate/ext-certificate.tsx:168
components/frontend/certificate/ext-certificate.tsx:173
components/frontend/certificate/ext-certificate.tsx:173
components/frontend/certificate/ext-certificate.tsx:196
components/frontend/certificate/ext-certificate.tsx:207
components/frontend/certificate/ext-certificate.tsx:207
components/frontend/certificate/ext-certificate.tsx:210
components/frontend/certificate/ext-certificate.tsx:210
components/frontend/certificate/ext-certificate.tsx:216
components/frontend/certificate/ext-certificate.tsx:219
components/frontend/certificate/ext-certificate.tsx:219
components/frontend/certificate/ext-certificate.tsx:236
components/frontend/certificate/ext-certificate.tsx:236
components/frontend/certificate/ext-certificate.tsx:238
components/frontend/certificate/ext-certificate.tsx:251
components/frontend/certificate/ext-certificate.tsx:254
components/frontend/certificate/ext-certificate.tsx:254
components/frontend/certificate/ext-certificate.tsx:265
components/frontend/certificate/ext-certificate.tsx:265
components/frontend/certificate/ext-certificate.tsx:268
components/frontend/certificate/ext-certificate.tsx:271
components/frontend/certificate/ext-certificate.tsx:271
components/frontend/showcasePost/CommentDialog.tsx:334
components/frontend/offers/ClaimedCoupons.tsx:225
components/frontend/offers/ClaimedCoupons.tsx:225
components/frontend/offers/ClaimedCoupons.tsx:226
components/frontend/offers/ClaimedCoupons.tsx:228
components/frontend/offers/ClaimedCoupons.tsx:231
components/frontend/offers/ClaimedCoupons.tsx:231
components/frontend/offers/ClaimedCoupons.tsx:267
components/frontend/offers/ClaimedCoupons.tsx:267
components/frontend/offers/ClaimedCoupons.tsx:277
components/frontend/offers/ClaimedCoupons.tsx:277
components/frontend/offers/ClaimedCoupons.tsx:290
components/frontend/offers/ClaimedCoupons.tsx:308
components/frontend/offers/ClaimedCoupons.tsx:308
components/frontend/offers/ClaimedCoupons.tsx:311
components/frontend/offers/ClaimedCoupons.tsx:311
components/frontend/offers/ClaimedCoupons.tsx:351
components/frontend/offers/ClaimedCoupons.tsx:405
components/frontend/offers/ClaimedCoupons.tsx:405
components/frontend/offers/ClaimedCoupons.tsx:428
components/frontend/offers/ClaimedCoupons.tsx:428
components/frontend/offers/ClaimedCoupons.tsx:428
components/frontend/offers/ClaimedCoupons.tsx:428
components/frontend/offers/ClaimedCoupons.tsx:429
components/frontend/offers/ClaimedCoupons.tsx:435
components/frontend/offers/ClaimedCoupons.tsx:435
components/frontend/offers/ClaimedCoupons.tsx:436
components/frontend/offers/ClaimedCoupons.tsx:436
components/frontend/offers/ClaimedCoupons.tsx:439
components/frontend/offers/ClaimedCoupons.tsx:439
components/frontend/search/Search.tsx:259
components/frontend/search/Search.tsx:260
components/frontend/search/Search.tsx:268
components/frontend/search/Search.tsx:324
components/frontend/search/Search.tsx:324
components/frontend/search/Search.tsx:324
components/frontend/search/Search.tsx:324
components/frontend/search/Search.tsx:343
components/frontend/search/Search.tsx:346
components/frontend/search/Search.tsx:366
components/frontend/navigation/MobileNavbar.tsx:104
components/frontend/navigation/MobileNavbar.tsx:104
components/frontend/navigation/MobileNavbar.tsx:120
components/frontend/navigation/MobileNavbar.tsx:125
components/frontend/navigation/MobileNavbar.tsx:134
components/frontend/navigation/MobileNavbar.tsx:152
components/frontend/navigation/MobileNavbar.tsx:170
components/frontend/navigation/MobileNavbar.tsx:204
components/frontend/navigation/MobileNavbar.tsx:224
components/frontend/navigation/MobileNavbar.tsx:304
components/frontend/navigation/MobileNavbar.tsx:317
components/frontend/navigation/MobileNavbar.tsx:325
components/frontend/showcasePost/ShowcaseFiltersSkeleton.tsx:26
app/[domain]/(loggedin)/previousdoubts/page.tsx:64
components/frontend/showcasePost/MyPostsContent.tsx:57
components/frontend/showcasePost/MyPostsContent.tsx:82
app/[domain]/(loggedin)/offers/claimed/page.tsx:108
app/[domain]/(loggedin)/offers/claimed/page.tsx:111
app/[domain]/(loggedin)/offers/claimed/page.tsx:111
app/[domain]/(loggedin)/offers/claimed/page.tsx:130
app/[domain]/(loggedin)/offers/claimed/page.tsx:133
app/[domain]/(loggedin)/offers/claimed/page.tsx:133
app/[domain]/(loggedin)/offers/house-of-genai/page.tsx:26
app/[domain]/(loggedin)/offers/house-of-genai/page.tsx:29
app/[domain]/(loggedin)/offers/house-of-genai/page.tsx:29
components/frontend/authentication/loginModals/mobileLogin.tsx:288
components/frontend/authentication/loginModals/mobileLogin.tsx:288
app/[domain]/(loggedin)/session/page.tsx:51
components/frontend/showcasePost/CommentForm.tsx:230
components/frontend/showcasePost/CommentForm.tsx:233
components/frontend/showcasePost/CommentForm.tsx:233
components/frontend/showcasePost/CommentForm.tsx:234
components/frontend/showcasePost/CommentForm.tsx:238
components/frontend/showcasePost/CommentForm.tsx:242
app/[domain]/(loggedin)/offers/available/page.tsx:98
app/[domain]/(loggedin)/offers/available/page.tsx:101
app/[domain]/(loggedin)/offers/available/page.tsx:101
app/[domain]/(loggedin)/offers/available/page.tsx:120
app/[domain]/(loggedin)/offers/available/page.tsx:123
app/[domain]/(loggedin)/offers/available/page.tsx:123
components/frontend/authentication/loginModals/modalWithPic.tsx:40
components/frontend/authentication/loginModals/modalWithPic.tsx:43
components/frontend/authentication/loginModals/modalWithPic.tsx:43
components/frontend/authentication/loginModals/modalWithPic.tsx:49
components/frontend/authentication/loginModals/modalWithPic.tsx:49
components/frontend/authentication/loginModals/modalWithPic.tsx:55
components/frontend/authentication/loginModals/modalWithPic.tsx:64
components/frontend/authentication/loginModals/modalWithPic.tsx:85
components/frontend/authentication/loginModals/modalWithPic.tsx:103
components/frontend/authentication/loginModals/modalWithPic.tsx:103
components/frontend/showcasePost/CommentItem.tsx:158
components/frontend/course/PaymentOptionsDialog.tsx:191
components/frontend/course/PaymentOptionsDialog.tsx:196
components/frontend/course/PaymentOptionsDialog.tsx:197
components/frontend/course/PaymentOptionsDialog.tsx:201
components/frontend/course/PaymentOptionsDialog.tsx:221
components/frontend/course/PaymentOptionsDialog.tsx:222
components/frontend/course/PaymentOptionsDialog.tsx:232
components/frontend/course/PaymentOptionsDialog.tsx:232
components/frontend/course/PaymentOptionsDialog.tsx:232
components/frontend/course/PaymentOptionsDialog.tsx:232
components/frontend/course/PaymentOptionsDialog.tsx:259
components/frontend/course/PaymentOptionsDialog.tsx:268
components/frontend/course/PaymentOptionsDialog.tsx:270
components/frontend/course/PaymentOptionsDialog.tsx:270
components/frontend/course/PaymentOptionsDialog.tsx:284
components/frontend/authentication/loginModals/emailVerification.tsx:265
components/frontend/authentication/loginModals/emailVerification.tsx:265
components/frontend/certificate/redirect-component.tsx:41
components/frontend/certificate/redirect-component.tsx:47
components/frontend/course/CourseLockOverlay.tsx:40
app/[domain]/(loggedin)/help/page.tsx:53
components/frontend/showcasePost/PostCard.tsx:775
components/frontend/showcasePost/PostCard.tsx:820
components/frontend/showcasePost/PostCard.tsx:834
components/frontend/course/courseDetails.tsx:619
components/frontend/course/courseDetails.tsx:626
components/frontend/navigation/SidebarSearchTrigger.tsx:268
components/frontend/navigation/SidebarSearchTrigger.tsx:269
components/frontend/navigation/SidebarSearchTrigger.tsx:277
components/frontend/navigation/SidebarSearchTrigger.tsx:363
components/frontend/navigation/SidebarSearchTrigger.tsx:383
components/frontend/lesson/lessoncontent.tsx:244
app/[domain]/(loggedin)/support/page.tsx:128
app/[domain]/(loggedin)/support/page.tsx:131
app/[domain]/(loggedin)/support/page.tsx:131
app/[domain]/(loggedin)/support/page.tsx:176
app/[domain]/(loggedin)/support/page.tsx:176
app/[domain]/(loggedin)/support/page.tsx:176
app/[domain]/(loggedin)/support/page.tsx:176
app/[domain]/(loggedin)/support/page.tsx:177
app/[domain]/(loggedin)/support/page.tsx:177
app/[domain]/(loggedin)/support/page.tsx:178
app/[domain]/(loggedin)/support/page.tsx:178
app/[domain]/(loggedin)/support/page.tsx:180
app/[domain]/(loggedin)/support/page.tsx:183
app/[domain]/(loggedin)/support/page.tsx:183
components/frontend/jobportal/job-portal-form.tsx:1110
components/frontend/jobportal/job-portal-form.tsx:1113
components/frontend/jobportal/job-portal-form.tsx:1145
components/frontend/jobportal/job-portal-form.tsx:1230
components/frontend/jobportal/job-portal-form.tsx:1233
components/frontend/jobportal/job-portal-form.tsx:1310
app/[domain]/(loggedin)/achievers/page.tsx:39
app/[domain]/(loggedin)/completed-courses/page.tsx:74
components/frontend/jobportal/AdditionalQuestionsForm.tsx:65
app/[domain]/interactive-images-tool/page.tsx:28
app/[domain]/interactive-images-tool/page.tsx:54
app/[domain]/(loggedin)/courses/page.tsx:92
app/[domain]/(loggedin)/courses/page.tsx:92
components/frontend/notifications/description.tsx:24
components/frontend/notifications/description.tsx:24
app/[domain]/(loggedin)/courses/certifications/page.tsx:80
app/[domain]/(loggedin)/courses/certifications/page.tsx:80
components/frontend/roadmap/CourseCard.tsx:46
components/frontend/roadmap/CourseCard.tsx:49
components/frontend/doubt/TypewriterText.tsx:43
components/frontend/doubt/TypewriterText.tsx:43
components/frontend/doubt/TypewriterText.tsx:43
components/frontend/showcasePost/ShowcaseFilters.tsx:130
components/frontend/showcasePost/ShowcaseFilters.tsx:142
components/frontend/showcasePost/ShowcaseFilters.tsx:273
components/frontend/showcasePost/ShowcaseFilters.tsx:273
components/frontend/jobportal/JobListings.tsx:972
components/frontend/jobportal/JobListings.tsx:1052
components/frontend/jobportal/JobListings.tsx:1057
components/frontend/jobportal/JobListings.tsx:1094
components/frontend/jobportal/JobListings.tsx:1143
components/frontend/jobportal/JobListings.tsx:1143
components/frontend/jobportal/JobListings.tsx:1144
components/frontend/jobportal/JobListings.tsx:1170
components/frontend/jobportal/JobListings.tsx:1175
components/frontend/jobportal/JobListings.tsx:1253
components/frontend/doubt/LiveSessionDoubtSection.tsx:188
components/frontend/doubt/LiveSessionDoubtSection.tsx:188
components/frontend/doubt/LiveSessionDoubtSection.tsx:188
components/frontend/doubt/LiveSessionDoubtSection.tsx:191
components/frontend/doubt/LiveSessionDoubtSection.tsx:268
components/frontend/doubt/LiveSessionDoubtSection.tsx:268
components/frontend/doubt/LiveSessionDoubtSection.tsx:268
components/frontend/doubt/LiveSessionDoubtSection.tsx:268
components/frontend/chat/home-component.tsx:324
components/frontend/chat/home-component.tsx:324
components/frontend/chat/home-component.tsx:345
components/frontend/chat/home-component.tsx:345
components/frontend/chat/home-component.tsx:365
components/frontend/chat/home-component.tsx:365
components/frontend/chat/home-component.tsx:379
components/frontend/chat/home-component.tsx:408
components/frontend/chat/home-component.tsx:408
components/frontend/chat/home-component.tsx:408
components/frontend/chat/home-component.tsx:408
components/frontend/chat/home-component.tsx:408
components/frontend/chat/home-component.tsx:408
app/[domain]/(loggedin)/joblisting/page.tsx:107
app/[domain]/(loggedin)/joblisting/page.tsx:112
app/[domain]/(loggedin)/joblisting/page.tsx:112
app/[domain]/(loggedin)/joblisting/page.tsx:122
app/[domain]/(loggedin)/joblisting/page.tsx:125
app/[domain]/(loggedin)/joblisting/page.tsx:125
app/[domain]/(loggedin)/joblisting/page.tsx:135
app/[domain]/(loggedin)/joblisting/page.tsx:138
app/[domain]/(loggedin)/joblisting/page.tsx:138
app/[domain]/(loggedin)/joblisting/page.tsx:148
app/[domain]/(loggedin)/joblisting/page.tsx:148
app/[domain]/(loggedin)/joblisting/page.tsx:187
components/frontend/doubt/doubtchatsheet.tsx:42
components/frontend/doubt/doubtchatsheet.tsx:42
components/frontend/doubt/doubtchatsheet.tsx:42
components/frontend/doubt/doubtchatsheet.tsx:42
components/frontend/doubt/doubtchatsheet.tsx:42
components/frontend/doubt/doubtchatsheet.tsx:42
components/frontend/doubt/doubtchatsheet.tsx:233
components/frontend/doubt/doubtchatsheet.tsx:335
components/frontend/doubt/doubtchatsheet.tsx:335
components/frontend/doubt/doubtchatsheet.tsx:335
components/frontend/doubt/doubtchatsheet.tsx:341
components/frontend/doubt/doubtchatsheet.tsx:341
components/frontend/doubt/doubtchatsheet.tsx:355
components/frontend/doubt/doubtchatsheet.tsx:355
components/frontend/doubt/doubtchatsheet.tsx:355
components/frontend/doubt/doubtchatsheet.tsx:358
components/frontend/doubt/doubtchatsheet.tsx:358
components/frontend/doubt/doubtchatsheet.tsx:376
components/frontend/doubt/doubtchatsheet.tsx:376
components/frontend/doubt/doubtchatsheet.tsx:388
components/frontend/doubt/doubtchatsheet.tsx:388
components/frontend/liveSession/newSessionCard.tsx:143
components/frontend/liveSession/newSessionCard.tsx:143
components/frontend/liveSession/newSessionCard.tsx:145
components/frontend/liveSession/newSessionCard.tsx:145
components/frontend/liveSession/newSessionCard.tsx:159
components/frontend/liveSession/newSessionCard.tsx:167
components/frontend/liveSession/newSessionCard.tsx:167
components/frontend/liveSession/newSessionCard.tsx:168
components/frontend/liveSession/newSessionCard.tsx:168
components/frontend/liveSession/newSessionCard.tsx:229
components/frontend/liveSession/newSessionCard.tsx:229
components/frontend/liveSession/newSessionCard.tsx:229
components/frontend/liveSession/newSessionCard.tsx:229
app/[domain]/(loggedin)/courses/projects/page.tsx:96
app/[domain]/(loggedin)/courses/projects/page.tsx:96
app/[domain]/sharepost/[nanoid]/page.tsx:31
components/frontend/doubt/previous-doubts.tsx:92
components/frontend/doubt/previous-doubts.tsx:106
components/frontend/doubt/previous-doubts.tsx:110
components/frontend/doubt/previous-doubts.tsx:114
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:146
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:146
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:146
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:149
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:151
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:152
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:152
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:159
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:159
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:159
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:159
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:159
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:159
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:190
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:190
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:190
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:213
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:218
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:218
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:218
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:218
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:225
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:225
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:238
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:238
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:250
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:250
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:254
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:254
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:265
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:265
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:265
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:265
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:265
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:265
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:275
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:275
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:275
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:275
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:275
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:275
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:286
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:286
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:286
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:286
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:286
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:337
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:337
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:339
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:339
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:339
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:368
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:371
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:371
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:379
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:379
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:379
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:393
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:393
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:394
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:397
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:397
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:402
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:402
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:402
components/frontend/showcasePost/MyPostsSinglePostView.tsx:56
app/[domain]/(loggedin)/courses/category/[category_slug]/page.tsx:104
app/[domain]/(loggedin)/courses/category/[category_slug]/page.tsx:104
app/[domain]/(loggedin)/courses/category/[category_slug]/page.tsx:109
app/[domain]/(loggedin)/courses/category/[category_slug]/page.tsx:109
components/frontend/doubt/WebDoubtInfo.tsx:40
components/frontend/doubt/WebDoubtInfo.tsx:40
components/frontend/doubt/WebDoubtInfo.tsx:43
components/frontend/doubt/WebDoubtInfo.tsx:43
components/frontend/doubt/WebDoubtInfo.tsx:43
components/frontend/doubt/WebDoubtInfo.tsx:45
components/frontend/doubt/WebDoubtInfo.tsx:45
components/frontend/doubt/WebDoubtInfo.tsx:47
components/frontend/doubt/WebDoubtInfo.tsx:47
components/frontend/doubt/WebDoubtInfo.tsx:52
components/frontend/doubt/WebDoubtInfo.tsx:52
components/frontend/doubt/WebDoubtInfo.tsx:52
components/frontend/doubt/WebDoubtInfo.tsx:52
components/frontend/doubt/WebDoubtInfo.tsx:57
components/frontend/doubt/WebDoubtInfo.tsx:62
components/frontend/doubt/WebDoubtInfo.tsx:68
components/frontend/doubt/WebDoubtInfo.tsx:68
components/frontend/doubt/WebDoubtInfo.tsx:86
components/frontend/doubt/WebDoubtInfo.tsx:86
components/frontend/doubt/WebDoubtInfo.tsx:89
components/frontend/doubt/WebDoubtInfo.tsx:89
components/frontend/doubt/WebDoubtInfo.tsx:95
components/frontend/doubt/WebDoubtInfo.tsx:95
components/frontend/doubt/WebDoubtInfo.tsx:98
components/frontend/doubt/WebDoubtInfo.tsx:98
components/frontend/doubt/WebDoubtInfo.tsx:103
components/frontend/doubt/WebDoubtInfo.tsx:103
components/frontend/doubt/WebDoubtInfo.tsx:106
components/frontend/doubt/WebDoubtInfo.tsx:106
app/[domain]/interactive-images-tool/components/EditorOverlays.tsx:143
app/[domain]/interactive-images-tool/components/EditorOverlays.tsx:143
app/[domain]/interactive-images-tool/components/EditorOverlays.tsx:147
app/[domain]/interactive-images-tool/components/EditorOverlays.tsx:150
app/[domain]/interactive-images-tool/components/EditorOverlays.tsx:150
app/[domain]/interactive-images-tool/[mapId]/page.tsx:635
app/[domain]/interactive-images-tool/[mapId]/page.tsx:635
app/[domain]/interactive-images-tool/[mapId]/page.tsx:635
app/[domain]/(loggedin)/live-session/[livecategoryslug]/page.tsx:135
app/[domain]/(loggedin)/live-session/[livecategoryslug]/page.tsx:135
app/[domain]/(loggedin)/live-session/[livecategoryslug]/page.tsx:139
app/[domain]/(loggedin)/live-session/[livecategoryslug]/page.tsx:139
app/[domain]/(loggedin)/showcase/page.tsx:50
components/frontend/support/support-contact-card.tsx:63
components/frontend/support/support-contact-card.tsx:63
components/frontend/support/support-contact-card.tsx:63
components/frontend/support/support-contact-card.tsx:74
components/frontend/support/support-contact-card.tsx:77
components/frontend/support/support-contact-card.tsx:77
app/[domain]/(loggedin)/welcome/page.tsx:63
app/[domain]/(loggedin)/welcome/page.tsx:66
app/[domain]/(loggedin)/welcome/page.tsx:66
app/[domain]/(loggedin)/welcome/page.tsx:91
app/[domain]/(loggedin)/welcome/page.tsx:94
app/[domain]/(loggedin)/welcome/page.tsx:94
app/[domain]/(loggedin)/welcome/page.tsx:99
app/[domain]/(loggedin)/welcome/page.tsx:99
app/[domain]/(loggedin)/applications/page.tsx:81
app/[domain]/(loggedin)/voice-agent/page.tsx:67
app/[domain]/(loggedin)/voice-agent/page.tsx:67
app/[domain]/(loggedin)/voice-agent/page.tsx:72
app/[domain]/(loggedin)/voice-agent/page.tsx:75
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:120
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:120
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:120
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:164
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:165
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:210
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:211
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:211
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:212
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:217
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:218
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:345
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:346
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:346
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:352
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:355
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:362
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:362
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:394
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:398
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:413
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:413
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:435
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:439
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:606
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:606
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:611
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:614
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:625
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:625
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:628
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:628
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:629
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:632
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:643
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:643
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:646
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:646
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:647
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:650
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:685
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:686
app/[domain]/(loggedin)/bonuses/page.tsx:77
components/frontend/home/CourseProgressCard.tsx:97
⚠ react-doctor/design-no-redundant-size-axes ×471
w-4 h-4 → use the shorthand size-4 (Tailwind v3.4+)
→ Collapse `w-N h-N` to `size-N` (Tailwind v3.4+) when both axes match
components/frontend/showcasePost/SinglePostHeader.tsx:18
components/frontend/liveSession/pastSessionCard.tsx:45
components/frontend/gratitude/ShareGratitudeButton.tsx:72
components/frontend/gratitude/ShareGratitudeButton.tsx:88
components/frontend/chat/ModelSwitcher.tsx:58
components/frontend/chat/ModelSwitcher.tsx:64
components/frontend/chat/ModelSwitcher.tsx:82
components/frontend/chat/ModelSwitcher.tsx:102
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:747
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:748
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:763
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:827
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:868
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:899
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:908
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:909
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1072
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1176
components/frontend/forms/review/reviewFormSkeleton.tsx:22
components/frontend/knowledgebase/AllKbCategory.tsx:45
components/frontend/showcasePost/CustomMediaCarousel.tsx:309
components/frontend/showcasePost/CustomMediaCarousel.tsx:319
components/frontend/showcasePost/CustomMediaCarousel.tsx:370
components/frontend/showcasePost/CustomMediaCarousel.tsx:380
components/frontend/showcasePost/CustomMediaCarousel.tsx:387
components/frontend/page/pagecompo.tsx:61
components/frontend/knowledgebase/kb-navigation.tsx:25
components/frontend/chat/MessageBubble.tsx:121
components/frontend/chat/MessageBubble.tsx:202
components/frontend/showcasePost/CommentSection.tsx:158
components/frontend/showcasePost/CommentSection.tsx:159
components/frontend/showcasePost/CommentSection.tsx:174
components/frontend/recording/AllRecording.tsx:61
components/frontend/recording/AllRecording.tsx:69
components/frontend/recording/AllRecording.tsx:73
components/frontend/footer/footer.tsx:129
components/frontend/footer/footer.tsx:139
components/frontend/footer/footer.tsx:162
components/frontend/knowledgebase/kbHeader.tsx:21
components/frontend/chat/chat-component.tsx:732
components/frontend/chat/chat-component.tsx:767
components/frontend/chat/chat-component.tsx:772
components/frontend/chat/chat-component.tsx:782
components/frontend/chat/chat-component.tsx:805
components/frontend/chat/chat-component.tsx:834
components/frontend/chat/chat-component.tsx:869
components/frontend/chat/chat-component.tsx:879
components/frontend/quiz/resultDisplay.tsx:96
components/frontend/showcasePost/LinkPreview.tsx:67
components/frontend/showcasePost/LinkPreview.tsx:98
components/frontend/footer/theme-aware-logo.tsx:28
components/frontend/footer/theme-aware-logo.tsx:40
components/frontend/knowledgebase/KbMobileNavbar.tsx:46
components/frontend/knowledgebase/KbMobileNavbar.tsx:51
components/frontend/knowledgebase/KbMobileNavbar.tsx:66
components/frontend/showcasePost/showGridSkeleton.tsx:11
components/frontend/offers/AvailableOffers.tsx:360
components/frontend/offers/AvailableOffers.tsx:361
components/frontend/offers/AvailableOffers.tsx:393
components/frontend/offers/AvailableOffers.tsx:419
components/frontend/offers/AvailableOffers.tsx:427
components/frontend/offers/AvailableOffers.tsx:446
components/frontend/offers/AvailableOffers.tsx:472
components/frontend/offers/AvailableOffers.tsx:506
components/frontend/offers/AvailableOffers.tsx:508
components/frontend/offers/AvailableOffers.tsx:518
components/frontend/offers/AvailableOffers.tsx:539
components/frontend/offers/AvailableOffers.tsx:553
components/frontend/offers/AvailableOffers.tsx:593
components/frontend/chat/LayoutWrapper.tsx:73
components/frontend/offers/HouseOfGenAIProducts.tsx:145
components/frontend/offers/HouseOfGenAIProducts.tsx:146
components/frontend/offers/HouseOfGenAIProducts.tsx:178
components/frontend/offers/HouseOfGenAIProducts.tsx:192
components/frontend/offers/HouseOfGenAIProducts.tsx:202
components/frontend/offers/HouseOfGenAIProducts.tsx:203
components/frontend/offers/HouseOfGenAIProducts.tsx:215
components/frontend/offers/HouseOfGenAIProducts.tsx:224
components/frontend/offers/HouseOfGenAIProducts.tsx:270
components/frontend/offers/HouseOfGenAIProducts.tsx:280
components/frontend/offers/HouseOfGenAIProducts.tsx:281
components/frontend/offers/HouseOfGenAIProducts.tsx:288
components/frontend/certificate/ext-certificate.tsx:65
components/frontend/certificate/ext-certificate.tsx:67
components/frontend/certificate/ext-certificate.tsx:91
components/frontend/certificate/ext-certificate.tsx:93
components/frontend/certificate/ext-certificate.tsx:128
components/frontend/certificate/ext-certificate.tsx:130
components/frontend/certificate/ext-certificate.tsx:172
components/frontend/certificate/ext-certificate.tsx:181
components/frontend/certificate/ext-certificate.tsx:183
components/frontend/certificate/ext-certificate.tsx:209
components/frontend/certificate/ext-certificate.tsx:236
components/frontend/certificate/ext-certificate.tsx:238
components/frontend/showcasePost/CommentDialog.tsx:238
components/frontend/showcasePost/CommentDialog.tsx:338
components/frontend/offers/ClaimedCoupons.tsx:225
components/frontend/offers/ClaimedCoupons.tsx:226
components/frontend/offers/ClaimedCoupons.tsx:268
components/frontend/offers/ClaimedCoupons.tsx:277
components/frontend/offers/ClaimedCoupons.tsx:298
components/frontend/offers/ClaimedCoupons.tsx:326
components/frontend/offers/ClaimedCoupons.tsx:328
components/frontend/offers/ClaimedCoupons.tsx:341
components/frontend/offers/ClaimedCoupons.tsx:343
components/frontend/offers/ClaimedCoupons.tsx:352
components/frontend/offers/ClaimedCoupons.tsx:367
components/frontend/offers/ClaimedCoupons.tsx:382
components/frontend/offers/ClaimedCoupons.tsx:405
components/frontend/offers/ClaimedCoupons.tsx:419
components/frontend/offers/ClaimedCoupons.tsx:451
components/frontend/offers/ClaimedCoupons.tsx:453
components/frontend/offers/ClaimedCoupons.tsx:463
components/frontend/offers/ClaimedCoupons.tsx:465
components/frontend/offers/ClaimedCoupons.tsx:480
components/frontend/search/Search.tsx:259
components/frontend/search/Search.tsx:321
components/frontend/search/Search.tsx:366
components/frontend/certificate/Mycertificate.tsx:68
components/frontend/showcasePost/CommentForm.tsx:214
components/frontend/showcasePost/CommentForm.tsx:242
components/frontend/showcasePost/CommentForm.tsx:279
components/frontend/course/CourseListView.tsx:79
components/frontend/course/CourseListView.tsx:84
components/frontend/authentication/loginModals/modalWithPic.tsx:58
components/frontend/authentication/loginModals/modalWithPic.tsx:69
components/frontend/authentication/loginModals/modalWithPic.tsx:112
components/frontend/authentication/loginModals/modalWithPic.tsx:123
components/frontend/showcasePost/CommentItem.tsx:148
components/frontend/showcasePost/CommentItem.tsx:153
components/frontend/showcasePost/CommentItem.tsx:162
components/frontend/showcasePost/CommentItem.tsx:178
components/frontend/course/PaymentOptionsDialog.tsx:244
components/frontend/course/PaymentOptionsDialog.tsx:253
components/frontend/course/PaymentOptionsDialog.tsx:277
components/frontend/authentication/loginModals/emailVerification.tsx:270
components/frontend/authentication/loginModals/emailVerification.tsx:280
components/frontend/authentication/loginModals/emailVerification.tsx:284
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:300
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:304
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:324
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:336
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:356
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:367
components/frontend/showcasePost/ShowcaseHeader.tsx:53
components/frontend/showcasePost/ShowcaseHeader.tsx:55
app/[domain]/(loggedin)/avatar-support/AvatarSupportClient.tsx:25
app/[domain]/(loggedin)/avatar-support/AvatarSupportClient.tsx:27
app/[domain]/(loggedin)/avatar-support/AvatarSupportClient.tsx:59
components/spinner.tsx:6
components/frontend/authentication/loginModals/updateProfileHolder.tsx:242
components/frontend/authentication/loginModals/updateProfileHolder.tsx:261
components/frontend/authentication/loginModals/updateProfileHolder.tsx:288
components/frontend/authentication/loginModals/updateProfileHolder.tsx:332
components/frontend/authentication/loginModals/updateProfileHolder.tsx:349
components/frontend/authentication/loginModals/updateProfileHolder.tsx:359
components/frontend/authentication/loginModals/updateProfileHolder.tsx:462
components/frontend/navigation/homeSidebar.tsx:108
components/frontend/navigation/homeSidebar.tsx:134
components/frontend/navigation/homeSidebar.tsx:562
components/frontend/navigation/homeSidebar.tsx:903
components/frontend/course/CourseLockOverlay.tsx:39
components/frontend/course/CourseLockOverlay.tsx:40
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:379
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:395
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:409
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:426
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:434
components/frontend/assignment/status.tsx:33
components/frontend/showcasePost/PostCard.tsx:439
components/frontend/showcasePost/PostCard.tsx:568
components/frontend/showcasePost/PostCard.tsx:574
components/frontend/showcasePost/PostCard.tsx:582
components/frontend/showcasePost/PostCard.tsx:588
components/frontend/showcasePost/PostCard.tsx:602
components/frontend/showcasePost/PostCard.tsx:674
components/frontend/showcasePost/PostCard.tsx:802
components/frontend/showcasePost/PostCard.tsx:824
components/frontend/showcasePost/PostCard.tsx:838
components/frontend/course/courseDetails.tsx:406
components/frontend/course/courseDetails.tsx:431
components/frontend/course/courseDetails.tsx:465
components/frontend/course/courseDetails.tsx:470
components/frontend/course/courseDetails.tsx:471
components/frontend/course/courseDetails.tsx:472
components/frontend/course/courseDetails.tsx:517
components/frontend/course/courseDetails.tsx:627
components/frontend/course/courseDetails.tsx:776
components/frontend/course/courseDetails.tsx:784
components/frontend/course/courseDetails.tsx:1000
components/frontend/course/courseDetails.tsx:1204
components/frontend/course/courseDetails.tsx:1212
components/frontend/course/courseDetails.tsx:1408
components/frontend/navigation/SidebarSearchTrigger.tsx:268
components/frontend/navigation/SidebarSearchTrigger.tsx:330
components/frontend/navigation/SidebarSearchTrigger.tsx:355
components/frontend/navigation/SidebarSearchTrigger.tsx:383
components/frontend/course/AllCourse.tsx:118
components/frontend/course/AllCourse.tsx:129
components/frontend/course/AllCourse.tsx:136
components/frontend/lesson/topicSidebar.tsx:38
components/frontend/lesson/topicSidebar.tsx:39
components/frontend/lesson/topicSidebar.tsx:48
components/frontend/lesson/topicSidebar.tsx:95
components/frontend/lesson/topicSidebar.tsx:97
components/frontend/lesson/topicSidebar.tsx:123
components/frontend/course/CompletedCourse.tsx:93
components/shared/sortfilter.tsx:79
components/shared/sortfilter.tsx:90
components/shared/sortfilter.tsx:92
components/shared/sortfilter.tsx:102
components/shared/sortfilter.tsx:104
components/shared/sortfilter.tsx:114
components/shared/sortfilter.tsx:116
components/shared/sortfilter.tsx:126
components/shared/sortfilter.tsx:128
components/text-expander.tsx:80
app/[domain]/(loggedin)/support/page.tsx:125
app/[domain]/(loggedin)/support/page.tsx:177
app/[domain]/(loggedin)/support/page.tsx:178
components/frontend/jobportal/job-portal-form.tsx:561
components/frontend/jobportal/job-portal-form.tsx:1047
components/frontend/jobportal/job-portal-form.tsx:1098
components/frontend/jobportal/job-portal-form.tsx:1131
components/frontend/jobportal/job-portal-form.tsx:1145
components/frontend/jobportal/job-portal-form.tsx:1149
components/frontend/jobportal/job-portal-form.tsx:1159
components/frontend/jobportal/job-portal-form.tsx:1172
components/frontend/jobportal/job-portal-form.tsx:1201
components/frontend/jobportal/job-portal-form.tsx:1207
components/frontend/jobportal/job-portal-form.tsx:1218
components/frontend/jobportal/job-portal-form.tsx:1240
components/frontend/jobportal/job-portal-form.tsx:1249
components/frontend/jobportal/job-portal-form.tsx:1252
components/frontend/jobportal/job-portal-form.tsx:1256
components/frontend/jobportal/job-portal-form.tsx:1764
components/frontend/course/CourseLockBanner.tsx:59
components/frontend/course/CourseLockBanner.tsx:62
components/frontend/ProgressTab.tsx:57
components/frontend/ProgressTab.tsx:58
components/frontend/roadmap/SessionList.tsx:221
components/frontend/roadmap/SessionList.tsx:225
components/frontend/roadmap/SessionList.tsx:229
components/frontend/showcasePost/ShowcasePostDetail.tsx:59
components/frontend/showcasePost/ShowcasePostDetail.tsx:67
components/frontend/roadmap/RoadmapTimeline.tsx:28
components/frontend/roadmap/RoadmapTimeline.tsx:35
components/frontend/jobportal/AdditionalQuestionsForm.tsx:79
components/frontend/notifications/NotificationSheet.tsx:469
components/frontend/notifications/NotificationSheet.tsx:480
components/frontend/notifications/NotificationSheet.tsx:490
components/frontend/notifications/NotificationSheet.tsx:501
components/frontend/notifications/NotificationSheet.tsx:524
components/frontend/notifications/NotificationSheet.tsx:578
components/frontend/notifications/NotificationSheet.tsx:587
components/frontend/notifications/NotificationSheet.tsx:589
components/frontend/OverallCourseProgress.tsx:75
components/frontend/OverallCourseProgress.tsx:87
components/frontend/OverallCourseProgress.tsx:95
components/frontend/OverallCourseProgress.tsx:103
components/frontend/OverallCourseProgress.tsx:139
components/frontend/OverallCourseProgress.tsx:151
components/frontend/OverallCourseProgress.tsx:159
components/frontend/OverallCourseProgress.tsx:167
components/frontend/OverallCourseProgress.tsx:176
components/frontend/OverallCourseProgress.tsx:202
components/frontend/OverallCourseProgress.tsx:214
components/frontend/OverallCourseProgress.tsx:222
components/frontend/OverallCourseProgress.tsx:230
components/frontend/roadmap/SessionListSkeleton.tsx:15
components/frontend/jobportal/JobDescriptionLink.tsx:16
components/frontend/notifications/description.tsx:36
components/frontend/notifications/description.tsx:49
components/frontend/chat/CodeBlock.tsx:32
components/frontend/chat/CodeBlock.tsx:38
components/frontend/chat/CodeBlock.tsx:40
components/frontend/showcasePost/ShareProjectButton.tsx:53
components/frontend/showcasePost/ShareProjectButton.tsx:68
components/frontend/roadmap/CourseCard.tsx:46
components/frontend/roadmap/CourseCard.tsx:49
components/frontend/jobportal/appliedjobs.tsx:379
components/frontend/jobportal/appliedjobs.tsx:386
components/frontend/jobportal/appliedjobs.tsx:426
components/frontend/chat/chat-sidebar.tsx:130
components/frontend/chat/chat-sidebar.tsx:140
components/frontend/chat/chat-sidebar.tsx:153
components/frontend/chat/chat-sidebar.tsx:173
components/frontend/chat/chat-sidebar.tsx:179
components/frontend/chat/chat-sidebar.tsx:180
components/frontend/chat/chat-sidebar.tsx:192
components/frontend/chat/chat-sidebar.tsx:211
components/frontend/chat/chat-sidebar.tsx:224
components/frontend/chat/chat-sidebar.tsx:236
components/frontend/chat/chat-sidebar.tsx:261
components/frontend/course/CourseDisplay.tsx:126
components/frontend/course/CourseDisplay.tsx:137
components/frontend/course/CourseDisplay.tsx:144
components/frontend/jobportal/JobListings.tsx:723
components/frontend/jobportal/JobListings.tsx:735
components/frontend/jobportal/JobListings.tsx:888
components/frontend/jobportal/JobListings.tsx:1040
components/frontend/jobportal/JobListings.tsx:1079
components/frontend/jobportal/JobListings.tsx:1094
components/frontend/jobportal/JobListings.tsx:1098
components/frontend/jobportal/JobListings.tsx:1109
components/frontend/jobportal/JobListings.tsx:1122
components/frontend/jobportal/JobListings.tsx:1158
components/frontend/jobportal/JobListings.tsx:1187
components/frontend/jobportal/JobListings.tsx:1196
components/frontend/jobportal/JobListings.tsx:1200
components/frontend/jobportal/JobListings.tsx:1203
components/frontend/jobportal/JobListings.tsx:1271
components/frontend/jobportal/JobListings.tsx:1277
components/frontend/doubt/LiveSessionDoubtSection.tsx:212
components/frontend/doubt/LiveSessionDoubtSection.tsx:217
components/frontend/doubt/LiveSessionDoubtSection.tsx:230
components/frontend/doubt/LiveSessionDoubtSection.tsx:294
components/frontend/chat/home-component.tsx:270
components/frontend/chat/home-component.tsx:276
components/frontend/chat/home-component.tsx:282
components/frontend/chat/home-component.tsx:345
components/frontend/chat/home-component.tsx:350
components/frontend/chat/home-component.tsx:355
components/frontend/chat/home-component.tsx:360
components/frontend/chat/home-component.tsx:383
components/frontend/chat/home-component.tsx:415
components/frontend/chat/home-component.tsx:438
components/frontend/chat/home-component.tsx:443
components/frontend/chat/home-component.tsx:445
components/frontend/showcasePost/MyPostsFeatureCards.tsx:67
components/frontend/showcasePost/MyPostsFeatureCards.tsx:113
components/frontend/showcasePost/MyPostsFeatureCards.tsx:159
components/frontend/course/UpgradeButton.tsx:43
app/[domain]/(loggedin)/joblisting/page.tsx:104
app/[domain]/(loggedin)/joblisting/page.tsx:120
app/[domain]/(loggedin)/joblisting/page.tsx:133
components/frontend/featureLocking/LockedSidebarItem.tsx:63
components/frontend/featureLocking/LockedSidebarItem.tsx:68
components/frontend/doubt/doubtchatsheet.tsx:43
components/frontend/doubt/doubtchatsheet.tsx:295
components/frontend/doubt/doubtchatsheet.tsx:376
components/frontend/showcasePost/ShareDialog.tsx:51
components/frontend/showcasePost/ShareDialog.tsx:75
components/frontend/showcasePost/ShareDialog.tsx:80
components/frontend/showcasePost/ShareDialog.tsx:90
components/frontend/showcasePost/CreatePostFAB.tsx:43
components/frontend/showcasePost/CreatePostFAB.tsx:55
components/frontend/showcasePost/CreatePostFAB.tsx:57
components/frontend/liveSession/newSessionCard.tsx:143
components/frontend/liveSession/newSessionCard.tsx:167
components/frontend/liveSession/newSessionCard.tsx:174
components/frontend/liveSession/newSessionCard.tsx:175
components/frontend/liveSession/newSessionCard.tsx:231
components/frontend/doubt/previous-doubts.tsx:115
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:150
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:176
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:200
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:208
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:221
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:228
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:251
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:255
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:268
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:278
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:288
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:381
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:393
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:404
components/frontend/showcasePost/ShowcaseGrid.tsx:223
components/frontend/showcasePost/ShowcaseGrid.tsx:224
components/frontend/showcasePost/ShowcaseGrid.tsx:250
components/frontend/showcasePost/ShowcaseGrid.tsx:251
components/frontend/showcasePost/ShowcaseGrid.tsx:286
components/frontend/doubt/WebDoubtInfo.tsx:57
components/frontend/doubt/WebDoubtInfo.tsx:62
components/frontend/home/ProgressDashboard.tsx:327
components/frontend/home/ProgressDashboard.tsx:328
components/frontend/home/ProgressDashboard.tsx:376
components/frontend/home/ProgressDashboard.tsx:430
components/frontend/home/ProgressDashboard.tsx:437
components/frontend/home/ProgressDashboard.tsx:441
components/frontend/home/ProgressDashboard.tsx:448
components/frontend/home/ProgressDashboard.tsx:514
components/frontend/home/ProgressDashboard.tsx:530
components/frontend/home/ProgressDashboard.tsx:551
components/frontend/home/ProgressDashboard.tsx:592
components/frontend/home/ProgressDashboard.tsx:704
components/frontend/home/ProgressDashboard.tsx:868
components/frontend/home/ProgressDashboard.tsx:945
components/frontend/home/ProgressDashboard.tsx:949
components/frontend/home/ProgressDashboard.tsx:979
components/frontend/home/ProgressDashboard.tsx:999
components/frontend/home/ProgressDashboard.tsx:1049
components/frontend/home/ProgressDashboard.tsx:1050
components/frontend/home/ProgressDashboard.tsx:1059
components/frontend/showcasePost/ShowcaseModal.tsx:1110
components/frontend/showcasePost/ShowcaseModal.tsx:1137
components/frontend/showcasePost/ShowcaseModal.tsx:1327
components/frontend/showcasePost/ShowcaseModal.tsx:1329
components/frontend/showcasePost/ShowcaseModal.tsx:1390
components/frontend/showcasePost/ShowcaseModal.tsx:1392
components/frontend/showcasePost/ShowcaseModal.tsx:1435
components/frontend/showcasePost/ShowcaseModal.tsx:1466
components/frontend/showcasePost/ShowcaseModal.tsx:1527
components/frontend/doubt/DoubtSheetContent.tsx:104
components/frontend/liveSession/liveSessionSection.tsx:408
components/frontend/liveSession/liveSessionSection.tsx:417
components/frontend/liveSession/liveSessionSection.tsx:456
components/frontend/home/LiveSessionCard.tsx:38
components/frontend/home/LiveSessionCard.tsx:60
components/frontend/home/LiveSessionCard.tsx:66
components/frontend/gratitude/GratitudeCard.tsx:350
components/frontend/gratitude/GratitudeCard.tsx:389
components/frontend/gratitude/GratitudeCard.tsx:398
components/frontend/gratitude/GratitudeCard.tsx:482
components/frontend/gratitude/GratitudeCard.tsx:502
components/frontend/showcasePost/DeletePostDialog.tsx:45
components/frontend/showcasePost/DeletePostDialog.tsx:46
components/frontend/showcasePost/DeletePostDialog.tsx:88
components/frontend/gratitude/GratitudeGrid.tsx:190
components/frontend/gratitude/GratitudeGrid.tsx:191
components/frontend/gratitude/GratitudeGrid.tsx:223
components/frontend/gratitude/GratitudeGrid.tsx:250
components/frontend/gratitude/GratitudeErrorBoundary.tsx:50
components/frontend/gratitude/GratitudeErrorBoundary.tsx:68
app/[domain]/(loggedin)/voice-agent/page.tsx:69
app/[domain]/(loggedin)/voice-agent/page.tsx:70
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:187
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:189
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:193
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:198
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:211
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:212
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:346
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:347
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:369
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:374
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:388
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:389
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:404
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:417
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:429
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:430
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:444
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:608
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:609
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:628
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:629
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:646
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:647
components/frontend/home/L1PreWorkshopHome.tsx:739
components/frontend/home/L1PreWorkshopHome.tsx:821
components/frontend/home/L1PreWorkshopHome.tsx:825
components/frontend/home/CourseProgressCard.tsx:34
components/frontend/home/CourseProgressCard.tsx:52
components/frontend/home/CourseProgressCard.tsx:70
components/frontend/home/CourseProgressCard.tsx:88
components/frontend/fullcalendar/fullcalendar-header.tsx:55
components/frontend/fullcalendar/fullcalendar-header.tsx:67
components/frontend/fullcalendar/fullcalendar-header.tsx:78
components/frontend/fullcalendar/skeleton/month-view-skeleton.tsx:17
components/frontend/fullcalendar/today-button.tsx:24
components/frontend/fullcalendar/data-navigation.tsx:108
components/frontend/fullcalendar/data-navigation.tsx:115
components/frontend/fullcalendar/data-navigation.tsx:123
components/frontend/fullcalendar/data-navigation.tsx:149
components/frontend/fullcalendar/skeleton/fullcalendar-header-skeleton.tsx:7
components/frontend/fullcalendar/skeleton/fullcalendar-header-skeleton.tsx:14
components/frontend/fullcalendar/skeleton/fullcalendar-header-skeleton.tsx:15
components/frontend/fullcalendar/skeleton/fullcalendar-header-skeleton.tsx:16
components/frontend/fullcalendar/skeleton/fullcalendar-header-skeleton.tsx:19
⚠ react-doctor/rendering-svg-precision ×390
SVG d attribute uses 4+ decimal precision — truncate to 1–2 decimals to shrink markup with no visible difference
→ Truncate path/points/transform decimals to 1–2 digits — sub-pixel precision adds bytes with no visible difference
components/frontend/showcasePost/MyPostsFeatureCards.tsx:49
components/frontend/showcasePost/MyPostsFeatureCards.tsx:95
components/frontend/showcasePost/MyPostsFeatureCards.tsx:141
app/[domain]/(loggedin)/completed/page.tsx:105
app/[domain]/(loggedin)/completed/page.tsx:109
app/[domain]/(loggedin)/completed/page.tsx:113
app/[domain]/(loggedin)/completed/page.tsx:117
app/[domain]/(loggedin)/completed/page.tsx:121
app/[domain]/(loggedin)/completed/page.tsx:125
app/[domain]/(loggedin)/completed/page.tsx:129
app/[domain]/(loggedin)/completed/page.tsx:133
app/[domain]/(loggedin)/completed/page.tsx:137
app/[domain]/(loggedin)/completed/page.tsx:141
app/[domain]/(loggedin)/completed/page.tsx:145
app/[domain]/(loggedin)/completed/page.tsx:149
app/[domain]/(loggedin)/completed/page.tsx:153
app/[domain]/(loggedin)/completed/page.tsx:157
app/[domain]/(loggedin)/completed/page.tsx:161
app/[domain]/(loggedin)/completed/page.tsx:165
app/[domain]/(loggedin)/completed/page.tsx:169
app/[domain]/(loggedin)/completed/page.tsx:173
app/[domain]/(loggedin)/completed/page.tsx:177
app/[domain]/(loggedin)/completed/page.tsx:181
app/[domain]/(loggedin)/completed/page.tsx:185
app/[domain]/(loggedin)/completed/page.tsx:189
app/[domain]/(loggedin)/completed/page.tsx:193
app/[domain]/(loggedin)/completed/page.tsx:197
app/[domain]/(loggedin)/completed/page.tsx:201
app/[domain]/(loggedin)/completed/page.tsx:205
app/[domain]/(loggedin)/completed/page.tsx:235
app/[domain]/(loggedin)/completed/page.tsx:239
app/[domain]/(loggedin)/completed/page.tsx:243
app/[domain]/(loggedin)/completed/page.tsx:247
app/[domain]/(loggedin)/completed/page.tsx:251
app/[domain]/(loggedin)/completed/page.tsx:255
app/[domain]/(loggedin)/completed/page.tsx:259
app/[domain]/(loggedin)/completed/page.tsx:263
app/[domain]/(loggedin)/completed/page.tsx:267
app/[domain]/(loggedin)/completed/page.tsx:271
app/[domain]/(loggedin)/completed/page.tsx:275
app/[domain]/(loggedin)/completed/page.tsx:279
app/[domain]/(loggedin)/completed/page.tsx:283
app/[domain]/(loggedin)/completed/page.tsx:287
app/[domain]/(loggedin)/completed/page.tsx:291
app/[domain]/(loggedin)/completed/page.tsx:321
app/[domain]/(loggedin)/completed/page.tsx:325
app/[domain]/(loggedin)/completed/page.tsx:329
app/[domain]/(loggedin)/completed/page.tsx:333
app/[domain]/(loggedin)/completed/page.tsx:337
app/[domain]/(loggedin)/completed/page.tsx:341
app/[domain]/(loggedin)/completed/page.tsx:345
app/[domain]/(loggedin)/completed/page.tsx:349
app/[domain]/(loggedin)/completed/page.tsx:353
app/[domain]/(loggedin)/completed/page.tsx:357
app/[domain]/(loggedin)/completed/page.tsx:361
app/[domain]/(loggedin)/completed/page.tsx:379
app/[domain]/(loggedin)/completed/page.tsx:397
app/[domain]/(loggedin)/completed/page.tsx:415
app/[domain]/(loggedin)/completed/page.tsx:433
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:33
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:37
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:41
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:45
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:49
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:53
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:57
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:61
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:65
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:69
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:73
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:77
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:81
app/[domain]/(loggedin)/completed/ClassNotesCard.tsx:85
assets/icons/index.tsx:72
assets/icons/index.tsx:76
assets/icons/index.tsx:80
assets/icons/index.tsx:84
assets/icons/index.tsx:88
assets/icons/index.tsx:92
assets/icons/index.tsx:96
assets/icons/index.tsx:100
assets/icons/index.tsx:104
assets/icons/index.tsx:108
assets/icons/index.tsx:112
assets/icons/index.tsx:116
assets/icons/index.tsx:120
assets/icons/index.tsx:124
assets/icons/index.tsx:128
assets/icons/index.tsx:132
assets/icons/index.tsx:136
assets/icons/index.tsx:152
assets/icons/index.tsx:156
assets/icons/index.tsx:164
assets/icons/index.tsx:168
assets/icons/index.tsx:172
assets/icons/index.tsx:176
assets/icons/index.tsx:180
assets/icons/index.tsx:184
assets/icons/index.tsx:188
assets/icons/index.tsx:192
assets/icons/index.tsx:322
assets/icons/index.tsx:326
assets/icons/index.tsx:330
assets/icons/index.tsx:334
assets/icons/index.tsx:338
assets/icons/index.tsx:342
assets/icons/index.tsx:346
assets/icons/index.tsx:350
assets/icons/index.tsx:354
assets/icons/index.tsx:358
assets/icons/index.tsx:362
assets/icons/index.tsx:366
assets/icons/index.tsx:370
assets/icons/index.tsx:374
assets/icons/index.tsx:378
assets/icons/index.tsx:382
assets/icons/index.tsx:386
assets/icons/index.tsx:402
assets/icons/index.tsx:406
assets/icons/index.tsx:414
assets/icons/index.tsx:418
assets/icons/index.tsx:422
assets/icons/index.tsx:426
assets/icons/index.tsx:430
assets/icons/index.tsx:434
assets/icons/index.tsx:438
assets/icons/index.tsx:442
assets/icons/index.tsx:515
assets/icons/index.tsx:521
assets/icons/index.tsx:541
assets/icons/index.tsx:547
assets/icons/index.tsx:554
assets/icons/index.tsx:561
assets/icons/index.tsx:574
assets/icons/index.tsx:630
assets/icons/index.tsx:636
assets/icons/index.tsx:643
assets/icons/index.tsx:650
assets/icons/index.tsx:663
assets/icons/index.tsx:911
assets/icons/index.tsx:917
assets/icons/index.tsx:948
assets/icons/index.tsx:954
components/frontend/home/L1FloatingNavigation.tsx:23
components/frontend/home/L1FloatingNavigation.tsx:27
components/frontend/home/L1FloatingNavigation.tsx:31
components/frontend/home/L1FloatingNavigation.tsx:35
components/frontend/home/L1FloatingNavigation.tsx:39
components/frontend/home/L1FloatingNavigation.tsx:43
components/frontend/home/L1FloatingNavigation.tsx:47
components/frontend/home/L1FloatingNavigation.tsx:51
components/frontend/home/L1FloatingNavigation.tsx:55
components/frontend/home/L1FloatingNavigation.tsx:59
components/frontend/home/L1FloatingNavigation.tsx:63
components/frontend/home/L1FloatingNavigation.tsx:67
components/frontend/home/L1FloatingNavigation.tsx:71
components/frontend/home/L1FloatingNavigation.tsx:75
components/frontend/home/L1FloatingNavigation.tsx:79
components/frontend/home/L1FloatingNavigation.tsx:83
components/frontend/home/L1FloatingNavigation.tsx:87
components/frontend/home/L1FloatingNavigation.tsx:91
components/frontend/home/L1FloatingNavigation.tsx:108
components/frontend/home/L1FloatingNavigation.tsx:112
components/frontend/home/L1FloatingNavigation.tsx:116
components/frontend/home/L1FloatingNavigation.tsx:120
components/frontend/home/L1FloatingNavigation.tsx:124
components/frontend/home/L1FloatingNavigation.tsx:128
components/frontend/home/L1FloatingNavigation.tsx:132
components/frontend/home/L1FloatingNavigation.tsx:136
components/frontend/home/L1FloatingNavigation.tsx:140
components/frontend/home/L1FloatingNavigation.tsx:144
components/frontend/home/L1FloatingNavigation.tsx:148
components/frontend/home/L1FloatingNavigation.tsx:152
components/frontend/home/L1FloatingNavigation.tsx:156
components/frontend/home/L1FloatingNavigation.tsx:160
components/frontend/home/L1FloatingNavigation.tsx:164
components/frontend/home/L1FloatingNavigation.tsx:168
components/frontend/home/L1FloatingNavigation.tsx:172
components/frontend/home/L1FloatingNavigation.tsx:176
components/frontend/home/L1FloatingNavigation.tsx:180
components/frontend/home/L1FloatingNavigation.tsx:184
components/frontend/home/L1FloatingNavigation.tsx:188
components/frontend/home/L1FloatingNavigation.tsx:192
components/frontend/home/L1FloatingNavigation.tsx:196
components/frontend/home/L1FloatingNavigation.tsx:200
components/frontend/home/L1FloatingNavigation.tsx:204
components/frontend/home/L1FloatingNavigation.tsx:208
components/frontend/home/L1FloatingNavigation.tsx:212
components/frontend/home/L1FloatingNavigation.tsx:216
components/frontend/home/L1FloatingNavigation.tsx:220
components/frontend/home/L1FloatingNavigation.tsx:224
components/frontend/home/L1FloatingNavigation.tsx:228
components/frontend/home/L1FloatingNavigation.tsx:232
components/frontend/home/L1FloatingNavigation.tsx:236
components/frontend/home/L1FloatingNavigation.tsx:253
components/frontend/home/L1FloatingNavigation.tsx:257
components/frontend/home/L1FloatingNavigation.tsx:261
components/frontend/home/L1FloatingNavigation.tsx:265
components/frontend/home/L1FloatingNavigation.tsx:269
components/frontend/home/L1FloatingNavigation.tsx:273
components/frontend/home/L1FloatingNavigation.tsx:277
components/frontend/home/L1FloatingNavigation.tsx:281
components/frontend/home/L1FloatingNavigation.tsx:285
components/frontend/home/L1FloatingNavigation.tsx:289
components/frontend/home/L1FloatingNavigation.tsx:293
components/frontend/home/L1FloatingNavigation.tsx:297
components/frontend/home/L1FloatingNavigation.tsx:301
components/frontend/home/L1FloatingNavigation.tsx:305
components/frontend/home/L1FloatingNavigation.tsx:309
components/frontend/home/L1FloatingNavigation.tsx:313
components/frontend/home/L1FloatingNavigation.tsx:317
components/frontend/home/L1FloatingNavigation.tsx:321
components/frontend/home/L1FloatingNavigation.tsx:325
components/frontend/home/L1FloatingNavigation.tsx:329
components/frontend/home/L1FloatingNavigation.tsx:333
components/frontend/home/L1FloatingNavigation.tsx:337
components/frontend/home/L1FloatingNavigation.tsx:341
components/frontend/home/L1FloatingNavigation.tsx:358
components/frontend/home/L1FloatingNavigation.tsx:362
components/frontend/home/L1FloatingNavigation.tsx:366
components/frontend/home/L1FloatingNavigation.tsx:370
components/frontend/home/L1FloatingNavigation.tsx:374
components/frontend/home/L1FloatingNavigation.tsx:378
components/frontend/home/L1FloatingNavigation.tsx:382
components/frontend/home/L1FloatingNavigation.tsx:386
components/frontend/home/L1FloatingNavigation.tsx:390
components/frontend/home/L1FloatingNavigation.tsx:394
components/frontend/home/L1FloatingNavigation.tsx:398
components/frontend/home/L1FloatingNavigation.tsx:402
components/frontend/home/L1FloatingNavigation.tsx:406
components/frontend/home/L1FloatingNavigation.tsx:410
components/frontend/home/L1FloatingNavigation.tsx:414
components/frontend/home/L1FloatingNavigation.tsx:418
components/frontend/home/L1FloatingNavigation.tsx:422
components/frontend/home/L1FloatingNavigation.tsx:426
components/frontend/home/L1FloatingNavigation.tsx:430
components/frontend/home/L1FloatingNavigation.tsx:434
components/frontend/home/L1FloatingNavigation.tsx:438
components/frontend/home/L1FloatingNavigation.tsx:442
components/frontend/home/L1FloatingNavigation.tsx:446
components/frontend/home/L1FloatingNavigation.tsx:450
components/frontend/home/L1FloatingNavigation.tsx:454
components/frontend/home/L1FloatingNavigation.tsx:458
components/frontend/home/L1FloatingNavigation.tsx:462
components/frontend/home/L1FloatingNavigation.tsx:466
components/frontend/home/L1FloatingNavigation.tsx:470
components/frontend/home/L1FloatingNavigation.tsx:474
components/frontend/home/L1FloatingNavigation.tsx:478
components/frontend/home/L1FloatingNavigation.tsx:482
app/[domain]/(loggedin)/payment-completed/page.tsx:34
app/[domain]/(loggedin)/payment-completed/page.tsx:38
app/[domain]/(loggedin)/payment-completed/page.tsx:42
app/[domain]/(loggedin)/payment-completed/page.tsx:46
app/[domain]/(loggedin)/payment-completed/page.tsx:50
app/[domain]/(loggedin)/payment-completed/page.tsx:54
app/[domain]/(loggedin)/payment-completed/page.tsx:58
app/[domain]/(loggedin)/payment-completed/page.tsx:62
app/[domain]/(loggedin)/payment-completed/page.tsx:66
app/[domain]/(loggedin)/payment-completed/page.tsx:70
app/[domain]/(loggedin)/payment-completed/page.tsx:74
app/[domain]/(loggedin)/payment-completed/page.tsx:78
app/[domain]/(loggedin)/payment-completed/page.tsx:82
app/[domain]/(loggedin)/payment-completed/page.tsx:86
app/[domain]/(loggedin)/payment-completed/page.tsx:118
app/[domain]/(loggedin)/payment-completed/page.tsx:122
app/[domain]/(loggedin)/payment-completed/page.tsx:126
app/[domain]/(loggedin)/payment-completed/page.tsx:130
app/[domain]/(loggedin)/payment-completed/page.tsx:134
app/[domain]/(loggedin)/payment-completed/page.tsx:138
app/[domain]/(loggedin)/payment-completed/page.tsx:142
app/[domain]/(loggedin)/payment-completed/page.tsx:146
app/[domain]/(loggedin)/payment-completed/page.tsx:150
app/[domain]/(loggedin)/payment-completed/page.tsx:154
app/[domain]/(loggedin)/payment-completed/page.tsx:158
app/[domain]/(loggedin)/payment-completed/page.tsx:162
app/[domain]/(loggedin)/payment-completed/page.tsx:166
app/[domain]/(loggedin)/payment-completed/page.tsx:170
app/[domain]/(loggedin)/payment-completed/page.tsx:174
app/[domain]/(loggedin)/payment-completed/page.tsx:178
app/[domain]/(loggedin)/payment-completed/page.tsx:182
app/[domain]/(loggedin)/payment-completed/page.tsx:186
app/[domain]/(loggedin)/payment-completed/page.tsx:190
app/[domain]/(loggedin)/payment-completed/page.tsx:194
app/[domain]/(loggedin)/payment-completed/page.tsx:198
app/[domain]/(loggedin)/payment-completed/page.tsx:202
app/[domain]/(loggedin)/payment-completed/page.tsx:206
app/[domain]/(loggedin)/payment-completed/page.tsx:210
app/[domain]/(loggedin)/payment-completed/page.tsx:214
app/[domain]/(loggedin)/payment-completed/page.tsx:218
app/[domain]/(loggedin)/payment-completed/page.tsx:250
app/[domain]/(loggedin)/payment-completed/page.tsx:254
app/[domain]/(loggedin)/payment-completed/page.tsx:258
app/[domain]/(loggedin)/payment-completed/page.tsx:262
app/[domain]/(loggedin)/payment-completed/page.tsx:266
app/[domain]/(loggedin)/payment-completed/page.tsx:270
app/[domain]/(loggedin)/payment-completed/page.tsx:274
app/[domain]/(loggedin)/payment-completed/page.tsx:278
app/[domain]/(loggedin)/payment-completed/page.tsx:282
app/[domain]/(loggedin)/payment-completed/page.tsx:286
app/[domain]/(loggedin)/payment-completed/page.tsx:290
app/[domain]/(loggedin)/payment-completed/page.tsx:294
app/[domain]/(loggedin)/payment-completed/page.tsx:298
app/[domain]/(loggedin)/payment-completed/page.tsx:302
app/[domain]/(loggedin)/payment-completed/page.tsx:306
app/[domain]/(loggedin)/payment-completed/page.tsx:338
app/[domain]/(loggedin)/payment-completed/page.tsx:342
app/[domain]/(loggedin)/payment-completed/page.tsx:346
app/[domain]/(loggedin)/payment-completed/page.tsx:350
app/[domain]/(loggedin)/payment-completed/page.tsx:354
app/[domain]/(loggedin)/payment-completed/page.tsx:358
app/[domain]/(loggedin)/payment-completed/page.tsx:362
app/[domain]/(loggedin)/payment-completed/page.tsx:366
app/[domain]/(loggedin)/payment-completed/page.tsx:370
app/[domain]/(loggedin)/payment-completed/page.tsx:374
app/[domain]/(loggedin)/payment-completed/page.tsx:378
app/[domain]/(loggedin)/payment-completed/page.tsx:382
app/[domain]/(loggedin)/payment-completed/page.tsx:386
app/[domain]/(loggedin)/payment-completed/page.tsx:390
app/[domain]/(loggedin)/payment-completed/page.tsx:394
app/[domain]/(loggedin)/payment-completed/page.tsx:398
app/[domain]/(loggedin)/payment-completed/page.tsx:402
app/[domain]/(loggedin)/payment-completed/page.tsx:406
app/[domain]/(loggedin)/payment-completed/page.tsx:410
app/[domain]/(loggedin)/payment-completed/page.tsx:414
app/[domain]/(loggedin)/payment-completed/page.tsx:418
app/[domain]/(loggedin)/payment-completed/page.tsx:422
components/frontend/home/L1PreWorkshopHome.tsx:121
components/frontend/home/L1PreWorkshopHome.tsx:147
components/frontend/home/L1PreWorkshopHome.tsx:929
components/frontend/home/L1PreWorkshopHome.tsx:943
components/frontend/home/L1PreWorkshopHome.tsx:957
components/frontend/home/L1PreWorkshopHome.tsx:971
components/frontend/home/L1PreWorkshopHome.tsx:985
components/frontend/home/L1PreWorkshopHome.tsx:999
components/frontend/home/L1PreWorkshopHome.tsx:1014
components/frontend/home/L1PreWorkshopHome.tsx:1039
components/frontend/home/L1PreWorkshopHome.tsx:1054
components/frontend/home/L1PreWorkshopHome.tsx:1080
components/frontend/home/L1PreWorkshopHome.tsx:1147
components/frontend/home/L1PreWorkshopHome.tsx:1148
components/frontend/home/L1PreWorkshopHome.tsx:1149
components/frontend/home/L1PreWorkshopHome.tsx:1150
components/frontend/home/L1PreWorkshopHome.tsx:1151
components/frontend/home/L1PreWorkshopHome.tsx:1152
components/frontend/home/L1PreWorkshopHome.tsx:1153
components/frontend/home/L1PreWorkshopHome.tsx:1154
components/frontend/home/L1PreWorkshopHome.tsx:1155
components/frontend/home/L1PreWorkshopHome.tsx:1156
components/frontend/home/L1PreWorkshopHome.tsx:1157
components/frontend/home/L1PreWorkshopHome.tsx:1158
components/frontend/home/L1PreWorkshopHome.tsx:1159
components/frontend/home/L1PreWorkshopHome.tsx:1160
components/frontend/home/L1PreWorkshopHome.tsx:1176
components/frontend/home/L1PreWorkshopHome.tsx:1177
components/frontend/home/L1PreWorkshopHome.tsx:1178
components/frontend/home/L1PreWorkshopHome.tsx:1179
components/frontend/home/L1PreWorkshopHome.tsx:1180
components/frontend/home/L1PreWorkshopHome.tsx:1181
components/frontend/home/L1PreWorkshopHome.tsx:1182
components/frontend/home/L1PreWorkshopHome.tsx:1183
components/frontend/home/L1PreWorkshopHome.tsx:1184
components/frontend/home/L1PreWorkshopHome.tsx:1185
components/frontend/home/L1PreWorkshopHome.tsx:1186
components/frontend/home/L1PreWorkshopHome.tsx:1187
components/frontend/home/L1PreWorkshopHome.tsx:1188
components/frontend/home/L1PreWorkshopHome.tsx:1189
components/frontend/home/L1PreWorkshopHome.tsx:1190
components/frontend/home/L1PreWorkshopHome.tsx:1206
components/frontend/home/L1PreWorkshopHome.tsx:1207
components/frontend/home/L1PreWorkshopHome.tsx:1208
components/frontend/home/L1PreWorkshopHome.tsx:1209
components/frontend/home/L1PreWorkshopHome.tsx:1210
components/frontend/home/L1PreWorkshopHome.tsx:1211
components/frontend/home/L1PreWorkshopHome.tsx:1212
components/frontend/home/L1PreWorkshopHome.tsx:1213
components/frontend/home/L1PreWorkshopHome.tsx:1214
components/frontend/home/L1PreWorkshopHome.tsx:1215
components/frontend/home/L1PreWorkshopHome.tsx:1216
components/frontend/home/L1PreWorkshopHome.tsx:1217
components/frontend/home/L1PreWorkshopHome.tsx:1218
components/frontend/home/L1PreWorkshopHome.tsx:1219
components/frontend/home/L1PreWorkshopHome.tsx:1220
components/frontend/home/L1PreWorkshopHome.tsx:1221
components/frontend/home/L1PreWorkshopHome.tsx:1222
components/frontend/home/L1PreWorkshopHome.tsx:1223
components/frontend/home/L1PreWorkshopHome.tsx:1224
components/frontend/home/L1PreWorkshopHome.tsx:1225
components/frontend/home/L1PreWorkshopHome.tsx:1226
components/frontend/home/L1PreWorkshopHome.tsx:1227
components/frontend/home/L1PreWorkshopHome.tsx:1228
⚠ knip/exports ×90
Unused export: getLMSStaticDataStrict
lib/frontend/getLMSStaticData.ts
components/frontend/BrainfishWidget.tsx
components/frontend/featureLocking/index.ts
lib/analytics/GAContext.tsx
lib/frontend/fetcher.ts
lib/utils.ts
lib/frontend/interactiveImageMapApi.ts
lib/frontend/ai/chat-utils.ts
lib/R2.ts
styles/fonts.ts
actions/frontend/chat/chat.ts
components/frontend/OverallCourseProgress.tsx
lib/domains.ts
components/breadcrumb/autoBreadcrumbUtils.ts
components/frontend/featureLocking/UserAccessContext.tsx
lib/frontend/getNotiReq.ts
lib/analytics/gtag.ts
types/roadmap.ts
components/ai-elements/prompt-input.tsx
lib/frontend/ai/upload-config.ts
types/jobPortal.enum.ts
components/frontend/showcasePost/useShowcaseFilterParams.ts
components/agents-ui/agent-audio-visualizer-bar.tsx
hooks/useSessionCompletion.ts
lib/frontend/featureLocking.ts
hooks/useRoadmap.ts
components/frontend/fullcalendar/fullcalendar-header.tsx
components/ai-elements/message.tsx
components/ai-elements/reasoning.tsx
lib/frontend/fullcalendar/helper.ts
lib/frontend/fullcalendar/hooks.ts
components/frontend/fullcalendar/animations.ts
components/frontend/showcasePost/CommentSection.tsx
hooks/useLiveSessions.ts
components/frontend/fullcalendar/full-calendar-badge.tsx
⚠ react-doctor/react-compiler-destructure-method ×87
Destructure for clarity: `const { push } = useRouter()` then call `push(...)` directly — easier for React Compiler to memoize and clearer about which methods this component depends on
→ Destructure the method up front: `const { push } = useRouter()` then call `push(...)` directly — clearer dependency graph and easier for React Compiler to memoize
components/frontend/showcasePost/SinglePostHeader.tsx:14
components/frontend/ProfileLayout.tsx:86
components/frontend/ProfileLayout.tsx:89
components/frontend/ProfileLayout.tsx:92
components/frontend/ProfileLayout.tsx:95
components/frontend/ProfileLayout.tsx:98
components/frontend/gratitude/ShareGratitudeButton.tsx:50
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:694
components/frontend/PlayerLayout.tsx:194
components/frontend/quiz/quizHolder.tsx:25
components/frontend/forms/assignment/gdriveForm.tsx:86
components/frontend/quiz/overview.tsx:124
components/frontend/chat/chat-component.tsx:469
components/frontend/chat/chat-component.tsx:562
components/frontend/chat/chat-component.tsx:565
components/frontend/chat/chat-component.tsx:568
components/frontend/chat/chat-component.tsx:675
components/frontend/quiz/resultDisplay.tsx:41
components/frontend/quiz/resultDisplay.tsx:227
components/frontend/authentication/loginModals/updateProfile.tsx:50
components/frontend/authentication/loginModals/updateProfile.tsx:92
components/frontend/authentication/loginModals/updateProfile.tsx:120
components/frontend/authentication/loginModals/createProfile.tsx:95
components/frontend/authentication/loginModals/createProfile.tsx:146
components/frontend/offers/HouseOfGenAIProducts.tsx:92
components/frontend/offers/HouseOfGenAIProducts.tsx:311
components/frontend/authentication/loginModals/addEmailComp.tsx:108
components/frontend/navigation/DesktopNavbar.tsx:72
components/frontend/authentication/loginModals/resetPassword.tsx:58
components/frontend/authentication/loginModals/resetPassword.tsx:83
components/frontend/authentication/loginModals/resetPassword.tsx:187
components/frontend/navigation/MobileNavbar.tsx:76
components/frontend/authentication/loginModals/emailVerification.tsx:80
components/frontend/authentication/loginModals/emailVerification.tsx:167
components/frontend/certificate/redirect-component.tsx:23
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:77
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:142
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:143
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:333
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:364
components/frontend/showcasePost/ShowcaseHeader.tsx:26
components/frontend/authentication/loginModals/updateProfileHolder.tsx:76
components/frontend/navigation/homeSidebar.tsx:1008
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:100
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:134
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:155
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:178
components/frontend/assignment/status.tsx:23
components/frontend/navigation/NavigationDropdown.tsx:30
components/frontend/showcasePost/PostCard.tsx:364
components/frontend/assignment/submissionBlock.tsx:126
components/frontend/lesson/lessoncontent.tsx:137
components/ClientRedirect.tsx:10
components/frontend/course/CourseLockBanner.tsx:40
components/frontend/roadmap/SessionList.tsx:319
components/frontend/roadmap/RoadmapTimeline.tsx:57
components/frontend/roadmap/RoadmapTimeline.tsx:99
components/frontend/chat/chat-sidebar.tsx:66
components/frontend/chat/chat-sidebar.tsx:72
components/frontend/chat/chat-sidebar.tsx:109
components/frontend/doubt/LiveSessionDoubtSection.tsx:79
components/frontend/chat/home-component.tsx:185
components/frontend/chat/home-component.tsx:265
components/frontend/chat/home-component.tsx:302
components/frontend/liveSession/newSessionCard.tsx:90
components/frontend/liveSession/newSessionCard.tsx:105
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:97
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:306
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:323
components/frontend/showcasePost/MyPostsSinglePostView.tsx:36
components/frontend/showcasePost/MyPostsSinglePostView.tsx:43
components/frontend/showcasePost/ShowcaseModal.tsx:912
app/[domain]/(loggedin)/live-session/feedback-farewell/feedback-farewell-client.tsx:33
app/[domain]/(loggedin)/live-session/feedback-farewell/feedback-farewell-client.tsx:43
components/frontend/liveSession/liveSessionSection.tsx:61
app/[domain]/interactive-images-tool/[mapId]/page.tsx:56
app/[domain]/interactive-images-tool/[mapId]/page.tsx:538
app/[domain]/interactive-images-tool/[mapId]/page.tsx:546
app/[domain]/interactive-images-tool/[mapId]/page.tsx:547
app/[domain]/interactive-images-tool/[mapId]/page.tsx:561
components/frontend/home/L1TransitionWatcher.tsx:84
components/frontend/home/homeSessionComponent.tsx:137
components/frontend/home/homeSessionComponent.tsx:205
components/frontend/home/homeSessionComponent.tsx:237
components/frontend/home/homeSessionComponent.tsx:248
components/frontend/home/homeSessionComponent.tsx:270
components/frontend/home/L1ProfileMenu.tsx:30
⚠ react-doctor/design-no-bold-heading ×65
font-bold on <h2> crushes counter shapes at display sizes — use font-semibold (600) or font-medium (500)
→ Use `font-semibold` (600) or `font-medium` (500) on headings — 700+ crushes letter counter shapes at display sizes
components/frontend/PlayerLayout.tsx:299
components/frontend/PlayerLayout.tsx:338
components/frontend/PlayerLayout.tsx:354
components/frontend/PlayerLayout.tsx:420
components/frontend/chat/TextContent.tsx:55
components/frontend/chat/TextContent.tsx:58
components/frontend/chat/TextContent.tsx:61
components/frontend/page/pagecompo.tsx:54
components/frontend/quiz/overview.tsx:149
components/frontend/quiz/resultDisplay.tsx:252
components/frontend/quiz/resultDisplay.tsx:255
components/frontend/knowledgebase/kb-content.tsx:52
components/frontend/certificate/ext-certificate.tsx:81
components/frontend/certificate/ext-certificate.tsx:143
app/error.tsx:70
app/[domain]/(loggedin)/payment-support/page.tsx:107
app/[domain]/(loggedin)/payment-support/page.tsx:118
app/[domain]/(loggedin)/payment-support/page.tsx:140
components/frontend/showcasePost/MyPostsContent.tsx:64
app/[domain]/(loggedin)/offers/claimed/page.tsx:73
app/[domain]/(loggedin)/offers/claimed/page.tsx:108
app/[domain]/(loggedin)/offers/claimed/page.tsx:130
app/[domain]/(loggedin)/offers/house-of-genai/page.tsx:26
app/[domain]/(loggedin)/offers/available/page.tsx:65
app/[domain]/(loggedin)/offers/available/page.tsx:98
app/[domain]/(loggedin)/offers/available/page.tsx:120
components/frontend/authentication/loginModals/modalWithPic.tsx:40
components/frontend/showcasePost/ShowcaseHeader.tsx:33
components/frontend/showcasePost/PostCard.tsx:650
components/frontend/course/courseDetails.tsx:482
components/frontend/course/AllCourse.tsx:110
components/frontend/course/CompletedCourse.tsx:44
app/[domain]/(loggedin)/gratitude/page.tsx:82
app/[domain]/(loggedin)/support/page.tsx:128
components/frontend/showcasePost/ShowcasePostDetail.tsx:51
components/frontend/jobportal/AdditionalQuestionsForm.tsx:42
components/frontend/jobportal/appliedjobs.tsx:307
components/frontend/jobportal/JobListings.tsx:698
components/frontend/jobportal/JobListings.tsx:1010
components/frontend/doubt/LiveSessionDoubtSection.tsx:183
components/frontend/chat/home-component.tsx:310
components/frontend/showcasePost/MyPostsFeatureCards.tsx:56
components/frontend/showcasePost/MyPostsFeatureCards.tsx:102
components/frontend/showcasePost/MyPostsFeatureCards.tsx:148
app/[domain]/(loggedin)/completed/page.tsx:738
app/[domain]/(loggedin)/completed/page.tsx:817
app/[domain]/(loggedin)/completed/page.tsx:923
app/[domain]/(loggedin)/completed/page.tsx:993
components/frontend/liveSession/newSessionCard.tsx:214
components/frontend/doubt/previous-doubts.tsx:58
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:368
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:394
app/[domain]/(loggedin)/success-stories/page.tsx:291
app/[domain]/(loggedin)/success-stories/page.tsx:418
app/[domain]/(loggedin)/welcome/page.tsx:63
app/[domain]/(loggedin)/payment-completed/page.tsx:593
app/[domain]/(loggedin)/bonuses/page.tsx:97
components/frontend/home/L1PreWorkshopHome.tsx:510
components/frontend/home/L1PreWorkshopHome.tsx:537
components/frontend/home/L1PreWorkshopHome.tsx:660
components/frontend/home/L1PreWorkshopHome.tsx:745
components/frontend/home/L1PreWorkshopHome.tsx:829
components/frontend/home/homeSessionComponent.tsx:265
components/frontend/home/homeSessionComponent.tsx:288
components/frontend/home/homeSessionComponent.tsx:323
⚠ react-doctor/rendering-hydration-mismatch-time ×52
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
→ Wrap dynamic time/random values in useEffect+useState (client-only) or add suppressHydrationWarning to the parent if intentional
components/frontend/footer/footer.tsx:155
components/frontend/knowledgebase/kb-content.tsx:57
components/frontend/knowledgebase/kb-content.tsx:121
components/frontend/certificate/ext-certificate.tsx:151
components/agents-ui/agent-chat-transcript.tsx:59
components/frontend/showcasePost/CommentItem.tsx:237
components/frontend/showcasePost/CommentItem.tsx:238
components/frontend/showcasePost/CommentItem.tsx:237
components/frontend/showcasePost/CommentItem.tsx:238
components/frontend/jobportal/job-portal-form.tsx:1118
components/frontend/jobportal/job-portal-form.tsx:1118
components/frontend/jobportal/job-portal-form.tsx:1118
components/frontend/jobportal/job-portal-form.tsx:1118
components/frontend/jobportal/job-portal-form.tsx:1118
components/frontend/roadmap/SessionList.tsx:171
components/frontend/roadmap/SessionList.tsx:172
components/frontend/roadmap/SessionList.tsx:173
components/frontend/roadmap/SessionList.tsx:174
components/frontend/roadmap/SessionList.tsx:188
components/frontend/notifications/NotificationSheet.tsx:570
components/frontend/notifications/NotificationSheet.tsx:570
components/frontend/jobportal/JobListings.tsx:1064
components/frontend/jobportal/JobListings.tsx:1064
components/frontend/jobportal/JobListings.tsx:1064
components/frontend/jobportal/JobListings.tsx:1064
components/frontend/doubt/LiveSessionDoubtSection.tsx:255
components/frontend/doubt/LiveSessionDoubtSection.tsx:255
components/frontend/doubt/LiveSessionDoubtSection.tsx:290
components/frontend/doubt/LiveSessionDoubtSection.tsx:255
components/frontend/doubt/LiveSessionDoubtSection.tsx:255
components/frontend/doubt/LiveSessionDoubtSection.tsx:290
components/frontend/doubt/LiveSessionDoubtSection.tsx:290
components/frontend/doubt/LiveSessionDoubtSection.tsx:290
components/frontend/doubt/doubtchatsheet.tsx:343
components/frontend/doubt/doubtchatsheet.tsx:343
components/frontend/doubt/previous-doubts.tsx:74
components/frontend/doubt/previous-doubts.tsx:74
components/frontend/doubt/previous-doubts.tsx:107
components/frontend/doubt/previous-doubts.tsx:107
components/frontend/doubt/previous-doubts.tsx:107
components/frontend/fullcalendar/week-and-day-view/fullcalendar-week-view.tsx:93
components/frontend/fullcalendar/week-and-day-view/fullcalendar-week-view.tsx:93
components/frontend/fullcalendar/week-and-day-view/fullcalendar-week-view.tsx:93
components/frontend/fullcalendar/week-and-day-view/fullcalendar-day-view.tsx:217
components/frontend/fullcalendar/week-and-day-view/fullcalendar-day-view.tsx:217
components/frontend/fullcalendar/week-and-day-view/fullcalendar-day-view.tsx:217
components/frontend/fullcalendar/week-and-day-view/fullcalendar-day-view.tsx:262
components/frontend/fullcalendar/week-and-day-view/fullcalendar-day-view.tsx:305
components/frontend/fullcalendar/week-and-day-view/fullcalendar-day-view.tsx:305
components/frontend/fullcalendar/week-and-day-view/fullcalendar-day-view.tsx:305
components/frontend/fullcalendar/skeleton/month-view-skeleton.tsx:19
components/frontend/fullcalendar/skeleton/month-view-skeleton.tsx:19
⚠ react-doctor/design-no-space-on-flex-children ×41
space-x-2 on a flex/grid parent — use gap-x-2 instead. Per-sibling margins phantom-gap on conditional render and don't mirror in RTL
→ Use `gap-*` on the flex/grid parent. `space-x-*` / `space-y-*` produce phantom gaps when a sibling is conditionally rendered, lose vertical spacing on wrapped lines, and don't mirror in RTL
components/frontend/assignment/assignmentInfo.tsx:212
components/frontend/assignment/assignmentInfo.tsx:247
components/frontend/assignment/assignmentInfo.tsx:250
components/frontend/PlayerLayout.tsx:369
components/frontend/PlayerLayout.tsx:389
components/frontend/showcasePost/CustomMediaCarousel.tsx:325
components/frontend/showcasePost/showGridSkeleton.tsx:10
components/frontend/authentication/loginModals/modalWithPic.tsx:81
components/frontend/course/courseDetails.tsx:476
components/frontend/course/courseDetails.tsx:552
components/frontend/course/courseDetails.tsx:612
components/frontend/course/courseDetails.tsx:1604
components/frontend/jobportal/job-portal-form.tsx:403
components/frontend/jobportal/job-portal-form.tsx:434
components/frontend/jobportal/job-portal-form.tsx:1528
components/frontend/jobportal/job-portal-form.tsx:1532
components/frontend/jobportal/job-portal-form.tsx:1539
components/frontend/jobportal/job-portal-form.tsx:1548
components/frontend/jobportal/job-portal-form.tsx:1646
components/frontend/jobportal/job-portal-form.tsx:1650
components/frontend/jobportal/job-portal-form.tsx:1657
components/frontend/jobportal/job-portal-form.tsx:1664
components/frontend/ProgressTab.tsx:56
components/frontend/showcasePost/ShowcasePostDetail.tsx:58
components/frontend/showcasePost/ShowcasePostDetail.tsx:66
components/frontend/jobportal/appliedjobs.tsx:306
components/frontend/jobportal/appliedjobs.tsx:318
components/frontend/jobportal/appliedjobs.tsx:325
components/frontend/jobportal/appliedjobs.tsx:328
components/frontend/jobportal/appliedjobs.tsx:360
components/frontend/jobportal/JobListings.tsx:697
components/frontend/jobportal/JobListings.tsx:721
components/frontend/jobportal/JobListings.tsx:734
components/frontend/jobportal/JobListings.tsx:761
app/[domain]/(loggedin)/joblisting/page.tsx:119
app/[domain]/(loggedin)/joblisting/page.tsx:132
components/frontend/showcasePost/ShowcaseGrid.tsx:285
components/frontend/home/ProgressDashboard.tsx:943
components/frontend/home/LiveSessionCard.tsx:58
components/frontend/gratitude/GratitudeGrid.tsx:249
components/frontend/home/L1PreWorkshopHome.tsx:614
⚠ react-doctor/no-array-index-as-key ×40
Array index "i" used as key — causes bugs when list is reordered or filtered
→ Use a stable unique identifier: `key={item.id}` or `key={item.slug}` — index keys break on reorder/filter
components/frontend/navigation/resolvedSidebarGroups.tsx:264
components/frontend/quiz/quizHolder.tsx:362
components/frontend/chat/MessageBubble.tsx:103
components/frontend/chat/MessageBubble.tsx:142
components/frontend/chat/MessageBubble.tsx:181
components/frontend/chat/MessageBubble.tsx:225
components/frontend/chat/MessageBubble.tsx:270
components/frontend/chat/MessageBubble.tsx:280
components/frontend/quiz/overview.tsx:157
components/frontend/quiz/overview.tsx:175
components/frontend/showcasePost/CommentSection.tsx:195
components/frontend/chat/chat-component.tsx:722
components/frontend/quiz/resultDisplay.tsx:117
components/frontend/quiz/resultDisplay.tsx:249
components/frontend/chat/MessageContent.tsx:159
components/frontend/showcasePost/TextWithLinks.tsx:80
components/frontend/authentication/loginModals/emailVerification.tsx:194
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:222
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:304
components/frontend/showcasePost/PostCard.tsx:510
components/frontend/showcasePost/PostCard.tsx:522
components/frontend/showcasePost/PostCard.tsx:541
components/frontend/showcasePost/PostCard.tsx:553
components/breadcrumb/AutoBreadcrumbs.tsx:85
components/frontend/course/AllCourse.tsx:159
components/agents-ui/agent-audio-visualizer-bar.tsx:207
components/agents-ui/agent-audio-visualizer-bar.tsx:216
components/frontend/jobportal/job-portal-form.tsx:503
components/frontend/jobportal/appliedjobs.tsx:266
components/frontend/chat/chat-sidebar.tsx:150
components/frontend/course/CourseDisplay.tsx:155
components/frontend/jobportal/JobListings.tsx:656
components/frontend/chat/home-component.tsx:457
components/frontend/fullcalendar/month-view/fullcalendar-month-view.tsx:53
components/frontend/home/ProgressDashboard.tsx:904
components/frontend/home/ProgressDashboard.tsx:1008
components/frontend/home/ProgressDashboard.tsx:1017
app/[domain]/interactive-images-tool/components/EditorOverlays.tsx:50
components/frontend/liveSession/liveSessionSection.tsx:333
components/frontend/fullcalendar/week-and-day-view/fullcalendar-week-view.tsx:63
⚠ react-doctor/design-no-three-period-ellipsis ×36
Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or `&hellip;`)
→ Use the typographic ellipsis "…" (or `&hellip;`) instead of three periods — pairs with action-with-followup labels ("Rename…", "Loading…")
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:828
components/frontend/forms/assignment/gdriveForm.tsx:110
components/frontend/chat/chat-component.tsx:733
components/frontend/certificate/ext-certificate.tsx:173
components/frontend/certificate/ext-certificate.tsx:210
components/frontend/search/Search.tsx:260
components/frontend/search/Search.tsx:268
components/ai-elements/reasoning.tsx:135
components/frontend/certificate/redirect-component.tsx:52
app/[domain]/(loggedin)/avatar-support/AvatarSupportClient.tsx:60
components/frontend/certificate/certificate.tsx:68
components/frontend/certificate/certificate.tsx:74
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:409
components/frontend/assignment/status.tsx:58
components/frontend/navigation/SidebarSearchTrigger.tsx:269
components/frontend/navigation/SidebarSearchTrigger.tsx:277
components/frontend/jobportal/job-portal-form.tsx:568
components/frontend/jobportal/job-portal-form.tsx:1047
components/frontend/notifications/NotificationSheet.tsx:525
components/frontend/chat/chat-sidebar.tsx:211
components/frontend/jobportal/JobListings.tsx:1002
components/frontend/doubt/LiveSessionDoubtSection.tsx:212
components/frontend/doubt/LiveSessionDoubtSection.tsx:230
components/frontend/showcasePost/ShowcaseGrid.tsx:287
components/frontend/showcasePost/ShowcaseModal.tsx:1138
components/frontend/doubt/DoubtSheetContent.tsx:105
app/[domain]/(loggedin)/live-session/feedback-farewell/feedback-farewell-client.tsx:114
components/frontend/liveSession/liveSessionSection.tsx:457
app/[domain]/interactive-images-tool/[mapId]/page.tsx:625
components/frontend/showcasePost/DeletePostDialog.tsx:88
components/frontend/gratitude/GratitudeGrid.tsx:251
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:217
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:369
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:632
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:650
components/frontend/fullcalendar/dialogs/event-list-dialog.tsx:40
⚠ react-doctor/no-giant-component ×34
Component "CreateShowcasePost" is 1138 lines — consider breaking it into smaller focused components
→ Extract logical sections into focused components: `<UserHeader />`, `<UserActions />`, etc.
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:99
components/frontend/PlayerLayout.tsx:151
components/frontend/quiz/quizHolder.tsx:11
components/frontend/showcasePost/CustomMediaCarousel.tsx:26
components/frontend/chat/MessageBubble.tsx:19
components/frontend/chat/chat-component.tsx:53
components/frontend/offers/AvailableOffers.tsx:89
components/frontend/showcasePost/CommentDialog.tsx:46
components/frontend/offers/ClaimedCoupons.tsx:70
components/frontend/search/Search.tsx:57
components/simple-theme-provider.tsx:29
components/frontend/authentication/loginModals/mobileLogin.tsx:20
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:23
components/frontend/authentication/loginModals/updateProfileHolder.tsx:49
components/frontend/navigation/homeSidebar.tsx:207
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:17
components/frontend/showcasePost/PostCard.tsx:49
components/frontend/course/courseDetails.tsx:79
components/frontend/navigation/SidebarSearchTrigger.tsx:65
components/frontend/jobportal/job-portal-form.tsx:657
app/api/chat/route.ts:102
components/frontend/notifications/NotificationSheet.tsx:53
components/frontend/jobportal/appliedjobs.tsx:97
components/frontend/jobportal/JobListings.tsx:153
components/frontend/chat/home-component.tsx:41
components/frontend/doubt/doubtchatsheet.tsx:50
components/frontend/showcasePost/ShowcaseGrid.tsx:11
components/frontend/home/ProgressDashboard.tsx:148
components/frontend/showcasePost/ShowcaseModal.tsx:158
components/frontend/liveSession/liveSessionSection.tsx:43
components/frontend/gratitude/GratitudeCard.tsx:42
app/[domain]/interactive-images-tool/[mapId]/page.tsx:29
components/frontend/home/L1PreWorkshopHome.tsx:292
components/frontend/home/homeSessionComponent.tsx:21
⚠ react-doctor/server-sequential-independent-await ×32
Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling
→ Wrap independent awaits in `Promise.all([...])` so they race instead of waterfalling — second call doesn't depend on the first
components/frontend/navigation/nav.tsx:37
app/[domain]/(loggedin)/assignment/[assignmentid]/page.tsx:59
app/[domain]/(loggedin)/recordings/[rid]/page.tsx:61
app/[domain]/(loggedin)/previousdoubts/page.tsx:42
app/[domain]/(loggedin)/offers/claimed/page.tsx:54
app/[domain]/(loggedin)/offers/house-of-genai/page.tsx:11
app/[domain]/(loggedin)/offers/available/page.tsx:46
app/[domain]/(loggedin)/quiz/[quizid]/page.tsx:57
app/[domain]/(loggedin)/avatar-support/page.tsx:18
app/[domain]/(loggedin)/quiz/[quizid]/result/page.tsx:14
app/[domain]/(loggedin)/quiz/[quizid]/result/page.tsx:49
app/[domain]/chat/[chatid]/page.tsx:14
app/[domain]/(loggedin)/help/[categoryid]/layout.tsx:25
app/[domain]/(loggedin)/help/[categoryid]/[kbid]/page.tsx:66
app/[domain]/(auth)/login/page.tsx:11
app/[domain]/(loggedin)/gratitude/page.tsx:19
app/[domain]/(loggedin)/achievers/page.tsx:23
app/[domain]/interactive-images-tool/page.tsx:11
app/[domain]/(loggedin)/pages/[pageslug]/page.tsx:17
app/[domain]/(loggedin)/courses/[courseid]/page.tsx:69
app/[domain]/(loggedin)/courses/[courseid]/page.tsx:136
app/[domain]/(loggedin)/joblisting/page.tsx:33
app/[domain]/(loggedin)/verify-email/page.tsx:12
app/[domain]/(loggedin)/live-session/[livecategoryslug]/page.tsx:25
app/[domain]/(loggedin)/showcase/page.tsx:30
app/[domain]/(loggedin)/lesson/[lessonid]/topic/[topicid]/page.tsx:78
app/[domain]/(loggedin)/live-session/course/[courseid]/page.tsx:21
app/[domain]/(loggedin)/live-session/course/[courseid]/page.tsx:54
app/[domain]/(loggedin)/live-session/previous/[sessionId]/page.tsx:43
app/[domain]/(loggedin)/my-certificates/[certgenid]/page.tsx:50
app/[domain]/(loggedin)/applications/page.tsx:19
app/[domain]/(loggedin)/voice-agent/page.tsx:18
⚠ react-doctor/nextjs-missing-metadata ×32
Page without metadata or generateMetadata export — hurts SEO
→ Add `export const metadata = { title: '...', description: '...' }` or `export async function generateMetadata()`
app/[domain]/(loggedin)/mastery/page.tsx:1
app/[domain]/(loggedin)/payment-support/page.tsx:1
app/[domain]/(loggedin)/offers/claimed/page.tsx:1
app/[domain]/(loggedin)/offers/house-of-genai/page.tsx:1
app/[domain]/(loggedin)/offers/available/page.tsx:1
app/[domain]/(loggedin)/calendar/page.tsx:1
app/[domain]/(loggedin)/avatar-support/page.tsx:1
app/[domain]/(loggedin)/topics/[topicid]/page.tsx:68
app/[domain]/chat/page.tsx:1
app/[domain]/chat/[chatid]/page.tsx:1
app/[domain]/(loggedin)/support/[supportid]/page.tsx:55
app/[domain]/(loggedin)/gratitude/page.tsx:1
app/[domain]/(loggedin)/achievers/page.tsx:1
app/[domain]/interactive-images-tool/page.tsx:1
app/[domain]/(loggedin)/pages/[pageslug]/page.tsx:1
app/[domain]/(loggedin)/joblisting/page.tsx:1
app/[domain]/(loggedin)/completed/page.tsx:1
app/[domain]/(loggedin)/live-session/feedback-farewell/page.tsx:1
app/[domain]/sharepost/[nanoid]/page.tsx:1
app/[domain]/(loggedin)/courses/category/[category_slug]/page.tsx:1
app/[domain]/(loggedin)/home/page.tsx:1
app/[domain]/(loggedin)/verify-email/page.tsx:1
app/[domain]/interactive-images-tool/[mapId]/page.tsx:1
app/[domain]/(loggedin)/success-stories/page.tsx:1
app/[domain]/(loggedin)/live-session/[livecategoryslug]/page.tsx:1
app/[domain]/(loggedin)/showcase/page.tsx:1
app/[domain]/(loggedin)/welcome/page.tsx:1
app/[domain]/(loggedin)/applications/page.tsx:1
app/[domain]/certificate/[shareurl]/page.tsx:1
app/[domain]/(loggedin)/payment-completed/page.tsx:1
app/[domain]/(loggedin)/voice-agent/page.tsx:1
app/[domain]/(loggedin)/bonuses/page.tsx:1
⚠ react-doctor/prefer-useReducer ×28
Component "CreateShowcasePost" has 9 useState calls — consider useReducer for related state
→ Group related state: `const [state, dispatch] = useReducer(reducer, { field1, field2, ... })`
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:110
components/frontend/quiz/quizHolder.tsx:18
components/frontend/showcasePost/CustomMediaCarousel.tsx:32
components/frontend/chat/chat-component.tsx:57
components/frontend/quiz/resultDisplay.tsx:23
components/frontend/certificate/ext-certificate.tsx:28
utils/providers/fullCalendarProvider.tsx:63
components/frontend/search/Search.tsx:67
components/frontend/authentication/loginModals/mobileLogin.tsx:34
app/[domain]/(loggedin)/verify-whatsapp/WhatsAppVerificationClient.tsx:27
components/frontend/authentication/loginModals/updateProfileHolder.tsx:63
components/frontend/certificate/certificate.tsx:21
components/frontend/navigation/homeSidebar.tsx:231
components/frontend/showcasePost/PostCard.tsx:78
components/frontend/navigation/SidebarSearchTrigger.tsx:70
components/frontend/course/CoursesContext.tsx:54
components/frontend/jobportal/job-portal-form.tsx:663
components/frontend/jobportal/JobListings.tsx:162
components/frontend/doubt/LiveSessionDoubtSection.tsx:65
components/frontend/doubt/doubtchatsheet.tsx:66
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:29
components/frontend/home/ProgressDashboard.tsx:152
components/frontend/showcasePost/ShowcaseModal.tsx:170
components/frontend/liveSession/liveSessionSection.tsx:57
components/frontend/gratitude/GratitudeCard.tsx:51
app/[domain]/interactive-images-tool/[mapId]/page.tsx:29
components/frontend/gratitude/GratitudeGrid.tsx:32
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:457
⚠ react-doctor/rerender-state-only-in-handlers ×28
useState "_showCommentForm" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
→ Replace useState with useRef when the value is only mutated and never read in render — `ref.current = ...` updates without re-rendering the component
components/frontend/showcasePost/CommentSection.tsx:68
components/frontend/showcasePost/CommentSection.tsx:69
components/frontend/chat/chat-component.tsx:66
components/frontend/chat/chat-component.tsx:67
components/frontend/chat/chat-component.tsx:558
components/ai-elements/code-block.tsx:116
components/frontend/recording/recordingDetails.tsx:35
components/frontend/footer/theme-aware-logo.tsx:19
components/frontend/search/Search.tsx:69
components/simple-theme-provider.tsx:34
components/simple-theme-provider.tsx:35
components/simple-theme-provider.tsx:36
components/simple-theme-provider.tsx:40
components/frontend/navigation/sidebarLayout.tsx:78
components/agents-ui/agent-track-toggle.tsx:129
components/frontend/authentication/loginModals/mobileLoginVerification.tsx:53
components/frontend/navigation/SidebarSearchTrigger.tsx:72
components/frontend/lesson/lessoncontent.tsx:51
components/frontend/jobportal/appliedjobs.tsx:107
components/frontend/jobportal/JobListings.tsx:167
app/[domain]/interactive-images-tool/components/EditorInstructions.tsx:17
components/frontend/home/ProgressDashboard.tsx:154
components/frontend/doubt/DoubtSheetContent.tsx:41
app/[domain]/(loggedin)/live-session/feedback-farewell/feedback-farewell-client.tsx:17
app/[domain]/interactive-images-tool/[mapId]/page.tsx:82
components/frontend/logo.tsx:9
app/[domain]/(loggedin)/success-stories/InlineAchieverVideoCard.tsx:64
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:458
⚠ react-doctor/no-cascading-set-state ×27
4 setState calls in a single useEffect — consider using useReducer or deriving state
→ Combine into useReducer: `const [state, dispatch] = useReducer(reducer, initialState)`
components/frontend/ProfileLayout.tsx:67
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:193
components/frontend/showcasePost/CommentSection.tsx:73
components/frontend/chat/chat-component.tsx:560
components/frontend/chat/LayoutWrapper.tsx:32
hooks/useRealtimeSessionStatus.ts:137
components/frontend/certificate/ext-certificate.tsx:38
utils/providers/fullCalendarProvider.tsx:103
hooks/useCanvasCloudSync.ts:335
hooks/useCanvasCloudSync.ts:402
components/ai-elements/reasoning.tsx:65
components/ai-elements/reasoning.tsx:77
components/simple-theme-provider.tsx:316
hooks/agents-ui/use-agent-audio-visualizer-bar.ts:29
components/frontend/certificate/certificate.tsx:31
components/text-expander.tsx:34
components/frontend/BrainfishWidget.tsx:123
components/frontend/doubt/TypewriterText.tsx:20
components/frontend/jobportal/JobListings.tsx:295
components/frontend/doubt/doubtchatsheet.tsx:111
components/frontend/showcasePost/ShowcaseModal.tsx:415
app/[domain]/(loggedin)/live-session/feedback-farewell/feedback-farewell-client.tsx:36
app/[domain]/(loggedin)/live-session/feedback-farewell/feedback-farewell-client.tsx:51
components/frontend/home/SetReminderButton.tsx:30
components/frontend/home/L1TransitionWatcher.tsx:75
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:469
components/frontend/home/L1PreWorkshopHome.tsx:448
⚠ react-doctor/no-render-in-render ×25
Inline render function "renderContent()" — extract to a separate component for proper reconciliation
→ Extract to a named component: `const ListItem = ({ item }) => <div>{item.name}</div>`
components/frontend/chat/MessageBubble.tsx:356
components/frontend/search/Search.tsx:370
components/frontend/course/courseDetails.tsx:834
components/frontend/course/courseDetails.tsx:973
components/frontend/course/courseDetails.tsx:1065
components/frontend/course/courseDetails.tsx:1258
components/frontend/course/courseDetails.tsx:1382
components/frontend/course/courseDetails.tsx:1472
components/frontend/course/courseDetails.tsx:1540
components/frontend/course/courseDetails.tsx:1582
components/frontend/navigation/SidebarSearchTrigger.tsx:387
components/frontend/jobportal/appliedjobs.tsx:521
components/frontend/jobportal/JobListings.tsx:917
components/frontend/liveSession/liveSessionSection.tsx:514
app/[domain]/(loggedin)/success-stories/page.tsx:434
app/[domain]/(loggedin)/success-stories/page.tsx:450
app/[domain]/(loggedin)/success-stories/page.tsx:469
app/[domain]/(loggedin)/success-stories/page.tsx:482
app/[domain]/(loggedin)/success-stories/page.tsx:495
app/[domain]/(loggedin)/success-stories/page.tsx:505
app/[domain]/(loggedin)/success-stories/page.tsx:520
app/[domain]/(loggedin)/success-stories/page.tsx:536
app/[domain]/(loggedin)/success-stories/page.tsx:550
app/[domain]/(loggedin)/success-stories/page.tsx:551
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:687
⚠ react-doctor/nextjs-no-img-element ×22
Use next/image instead of <img> — provides automatic optimization, lazy loading, and responsive srcset
→ `import Image from 'next/image'` — provides automatic WebP/AVIF, lazy loading, and responsive srcset
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:855
components/ai-elements/image.tsx:16
components/frontend/showcasePost/CustomMediaCarousel.tsx:255
components/frontend/showcasePost/CustomMediaCarousel.tsx:392
components/frontend/chat/MessageBubble.tsx:108
components/frontend/chat/chat-component.tsx:758
components/frontend/showcasePost/LinkPreview.tsx:58
components/frontend/offers/AvailableOffers.tsx:428
components/frontend/offers/AvailableOffers.tsx:540
components/frontend/offers/HouseOfGenAIProducts.tsx:193
components/frontend/offers/HouseOfGenAIProducts.tsx:271
components/frontend/showcasePost/CommentDialog.tsx:248
components/frontend/offers/ClaimedCoupons.tsx:278
components/frontend/offers/ClaimedCoupons.tsx:406
components/frontend/showcasePost/CommentForm.tsx:178
components/frontend/authentication/loginModals/modalWithPic.tsx:31
components/frontend/authentication/loginModals/modalWithPic.tsx:86
components/frontend/showcasePost/CommentItem.tsx:120
components/frontend/chat/home-component.tsx:336
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:239
components/frontend/showcasePost/ShowcaseModal.tsx:1424
app/[domain]/(loggedin)/success-stories/InlineAchieverVideoCard.tsx:87
⚠ knip/files ×22
Unused file
→ This file is not imported by any other file in the project.
components/mdx.module.css
hooks/useRealtimeSessionStatus.ts
public/firebase-messaging-sw.js
components/agents-ui/agent-chat-indicator.tsx
components/agents-ui/agent-chat-transcript.tsx
components/agents-ui/agent-control-bar.tsx
components/agents-ui/agent-disconnect-button.tsx
components/agents-ui/agent-track-control.tsx
components/agents-ui/agent-track-toggle.tsx
components/frontend/logo.tsx
components/icons/loading-dots.module.css
hooks/agents-ui/use-agent-control-bar.ts
lib/frontend/certificatefetcher.ts
lib/frontend/isSessionEffectivelyCompleted.ts
lib/frontend/sidebarPagesData.ts
lib/frontend/uploadAudio.ts
components/frontend/authentication/verificationModal.tsx
components/frontend/course/UpgradeButton.tsx
components/frontend/gratitude/GratitudeErrorBoundary.tsx
components/frontend/navigation/MobileNavbar.tsx
components/frontend/showcasePost/CreatePostFAB.tsx
components/frontend/forms/review/reviewFormSkeleton.tsx
⚠ jsx-a11y/click-events-have-key-events ×17
Enforce a clickable non-interactive element has at least one keyboard event listener.
→ Visible, non-interactive elements with click handlers must have one of `keyup`, `keydown`, or `keypress` listener.
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1059
components/frontend/quiz/quizHolder.tsx:376
components/frontend/showcasePost/CustomMediaCarousel.tsx:238
components/frontend/showcasePost/CustomMediaCarousel.tsx:255
components/frontend/knowledgebase/KbMobileNavbar.tsx:31
components/frontend/authentication/loginModals/mobileLogin.tsx:267
components/frontend/authentication/loginModals/mobileLogin.tsx:314
components/frontend/showcasePost/CommentForm.tsx:229
components/frontend/showcasePost/PostCard.tsx:408
components/frontend/jobportal/job-portal-form.tsx:1061
app/[domain]/interactive-images-tool/components/EditorRightSidebar.tsx:68
app/[domain]/interactive-images-tool/components/EditorRightSidebar.tsx:239
components/frontend/jobportal/JobListings.tsx:1026
components/frontend/jobportal/JobListings.tsx:1154
app/[domain]/interactive-images-tool/components/EditorOverlays.tsx:49
components/frontend/liveSession/liveSessionSection.tsx:407
components/frontend/gratitude/GratitudeCard.tsx:319
⚠ react-doctor/rerender-memo-with-default-value ×16
Default prop value [] creates a new array reference every render — extract to a module-level constant
→ Move to module scope: `const EMPTY_ITEMS: Item[] = []` then use as the default value
components/frontend/showcasePost/CustomMediaCarousel.tsx:27
components/frontend/showcasePost/CustomMediaCarousel.tsx:28
components/frontend/showcasePost/CommentSection.tsx:55
components/frontend/recording/recordingDetails.tsx:22
components/frontend/recording/recordingDetails.tsx:24
components/frontend/navigation/DesktopNavbar.tsx:57
components/frontend/navigation/DesktopNavbar.tsx:58
components/frontend/navigation/MobileNavbar.tsx:55
components/agents-ui/agent-chat-transcript.tsx:50
components/frontend/navigation/homeSidebar.tsx:210
components/frontend/course/CourseLockOverlay.tsx:15
components/frontend/course/CompletedCourse.tsx:40
components/frontend/course/CourseLockBanner.tsx:17
components/frontend/jobportal/appliedjobs.tsx:98
components/frontend/jobportal/JobListings.tsx:154
components/frontend/home/homeSessionComponent.tsx:30
⚠ jsx-a11y/no-static-element-interactions ×15
Static HTML elements with event handlers require a role.
→ Add a role attribute to this element, or use a semantic HTML element instead.
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1059
components/frontend/showcasePost/CustomMediaCarousel.tsx:238
components/frontend/knowledgebase/KbMobileNavbar.tsx:31
components/frontend/authentication/loginModals/mobileLogin.tsx:267
components/frontend/authentication/loginModals/mobileLogin.tsx:314
components/frontend/showcasePost/CommentForm.tsx:229
components/frontend/showcasePost/PostCard.tsx:408
components/frontend/jobportal/job-portal-form.tsx:1061
app/[domain]/interactive-images-tool/components/EditorRightSidebar.tsx:68
app/[domain]/interactive-images-tool/components/EditorRightSidebar.tsx:239
components/frontend/jobportal/JobListings.tsx:1026
components/frontend/jobportal/JobListings.tsx:1154
app/[domain]/interactive-images-tool/components/EditorOverlays.tsx:49
components/frontend/liveSession/liveSessionSection.tsx:407
components/frontend/gratitude/GratitudeCard.tsx:319
⚠ react-doctor/no-derived-useState ×14
useState initialized from prop "currentTab" — if this value should stay in sync with the prop, derive it during render instead
→ Remove useState and compute the value inline: `const value = transform(propName)`
components/frontend/ProfileLayout.tsx:64
components/frontend/showcasePost/CommentSection.tsx:67
components/frontend/showcasePost/CommentDialog.tsx:59
utils/providers/fullCalendarProvider.tsx:99
utils/providers/fullCalendarProvider.tsx:100
components/agents-ui/agent-track-control.tsx:141
components/frontend/authentication/loginModals/updateProfileHolder.tsx:94
components/frontend/showcasePost/SinglePostView.tsx:22
components/agents-ui/agent-control-bar.tsx:257
components/frontend/course/AllCourse.tsx:39
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:33
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:37
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:301
components/frontend/liveSession/liveSessionSection.tsx:78
⚠ react-doctor/server-after-nonblocking ×14
console.log() in server action — wrap in `after(() => console.log(...))` so it doesn't delay the user-visible response
→ `import { after } from 'next/server'` then wrap: `after(() => analytics.track(...))` — response isn't blocked
actions/frontend/showcasePost/getShowcasePost.ts:11
actions/frontend/showcasePost/createShowcasePost.ts:18
actions/frontend/showcasePost/createShowcasePost.ts:36
actions/frontend/profile/createProfile.ts:49
actions/frontend/interactiveImageMap/getInteractiveImageMap.ts:29
actions/frontend/interactiveImageMap/getInteractiveImageMap.ts:67
actions/frontend/interactiveImageMap/getInteractiveImageMap.ts:72
actions/frontend/interactiveImageMap/getInteractiveImageMap.ts:82
actions/frontend/tinybird/ingest/addLmsVisit.ts:8
actions/frontend/showcasePost/fetchLinkMetadata.ts:178
actions/frontend/showcasePost/fetchLinkMetadata.ts:184
actions/frontend/showcasePost/toggleLike.ts:12
actions/frontend/showcasePost/toggleLike.ts:20
actions/frontend/showcasePost/editShowcasePost.ts:19
⚠ react-doctor/use-lazy-motion ×12
Import "m" with LazyMotion instead of "motion" — saves ~30kb in bundle size
→ Use `import { LazyMotion, m } from "framer-motion"` with `domAnimation` features — saves ~30kb
components/agents-ui/agent-chat-indicator.tsx:3
components/agents-ui/agent-control-bar.tsx:7
components/frontend/notifications/NotificationSheet.tsx:20
components/frontend/fullcalendar/month-view/fullcalendar-month-view.tsx:1
components/frontend/fullcalendar/month-view/event-bullet.tsx:3
components/frontend/home/ProgressDashboard.tsx:11
components/frontend/fullcalendar/month-view/day-cells.tsx:6
components/frontend/fullcalendar/week-and-day-view/fullcalendar-week-view.tsx:3
components/frontend/fullcalendar/fullcalendar-header.tsx:5
components/frontend/fullcalendar/today-button.tsx:3
components/frontend/fullcalendar/fullcalendar-body.tsx:4
components/frontend/fullcalendar/data-navigation.tsx:4
⚠ react-doctor/nextjs-no-use-search-params-without-suspense ×11
useSearchParams() requires a <Suspense> boundary — without one, the entire page bails out to client-side rendering
→ Wrap the component using useSearchParams: `<Suspense fallback={<Skeleton />}><SearchComponent /></Suspense>`
components/frontend/PlayerLayout.tsx:193
components/frontend/chat/chat-component.tsx:78
components/frontend/authentication/loginModals/updateProfile.tsx:48
hooks/useCanvasCloudSync.ts:74
components/frontend/authentication/loginModals/updateProfileHolder.tsx:75
components/breadcrumb/BreadCrumbs.tsx:28
components/frontend/roadmap/RoadmapTimeline.tsx:55
components/frontend/doubt/LiveSessionDoubtSection.tsx:78
components/frontend/chat/home-component.tsx:56
components/frontend/liveSession/liveSessionSection.tsx:58
app/[domain]/interactive-images-tool/[mapId]/page.tsx:31
⚠ react-doctor/no-effect-event-handler ×11
useEffect simulating an event handler — move logic to an actual event handler instead
→ Move the conditional logic into onClick, onChange, or onSubmit handlers directly
components/frontend/quiz/quizHolder.tsx:50
components/frontend/showcasePost/CustomMediaCarousel.tsx:192
components/frontend/quiz/resultDisplay.tsx:84
utils/providers/fullCalendarProvider.tsx:117
components/ai-elements/reasoning.tsx:65
utils/providers/analyticsProvider.tsx:93
components/frontend/course/PaymentOptionsDialog.tsx:83
components/frontend/assignment/status.tsx:22
components/frontend/course/AllCourse.tsx:102
components/frontend/liveSession/PreviousSessionWrapper.tsx:66
components/frontend/liveSession/PreviousSessionWrapper.tsx:73
⚠ react-doctor/no-pure-black-background ×11
Pure black background (bg-black) looks harsh — use a near-black tinted toward your brand hue (e.g. bg-gray-950)
→ Tint the background slightly toward your brand hue — e.g. `#0a0a0f` or Tailwind's `bg-gray-950`. Pure black looks harsh on modern displays
components/frontend/chat/chat-component.tsx:873
app/error.tsx:67
app/global-error.tsx:60
app/[domain]/interactive-images-tool/components/EditorRightSidebar.tsx:91
app/not-found/page.tsx:9
components/frontend/chat/home-component.tsx:437
components/frontend/liveSession/newSessionCard.tsx:229
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:346
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:356
app/[domain]/(loggedin)/success-stories/InlineAchieverVideoCard.tsx:71
app/[domain]/(loggedin)/success-stories/InlineAchieverVideoCard.tsx:81
⚠ react-doctor/js-combine-iterations ×10
.filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of
→ Combine `.map().filter()` (or similar chains) into a single pass with `.reduce()` or a `for...of` loop to avoid iterating the array twice
app/[domain]/(loggedin)/assignment/[assignmentid]/page.tsx:111
components/frontend/quiz/quizHolder.tsx:368
components/frontend/footer/footer.tsx:50
components/frontend/chat/MessageContent.tsx:35
components/frontend/navigation/MobileNavbar.tsx:260
lib/frontend/fullcalendar/helper.ts:324
app/api/chat/route.ts:48
app/[domain]/interactive-images-tool/[mapId]/page.tsx:104
app/[domain]/interactive-images-tool/[mapId]/page.tsx:530
actions/frontend/calendar/getCalendarEvents.ts:183
⚠ react-doctor/rendering-hydration-no-flicker ×10
useEffect(setState, []) on mount causes a flash — consider useSyncExternalStore or suppressHydrationWarning
→ Use `useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)` or add `suppressHydrationWarning` to the element
components/frontend/recording/recordingDetails.tsx:37
components/frontend/footer/theme-aware-logo.tsx:21
hooks/use-model-manager.ts:16
components/frontend/certificate/ShareButton.tsx:24
components/frontend/certificate/ExtShareButton.tsx:18
components/frontend/lesson/lessoncontent.tsx:73
components/frontend/jobportal/appliedjobs.tsx:209
components/frontend/jobportal/JobListings.tsx:291
components/frontend/logo.tsx:11
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:465
⚠ react/no-unknown-property ×10
Unknown property found
→ Remove unknown property
components/frontend/showcasePost/PostCard.tsx:412
app/[domain]/[slug]/opengraph-image.tsx:34
app/[domain]/[slug]/opengraph-image.tsx:36
app/[domain]/[slug]/opengraph-image.tsx:37
app/[domain]/[slug]/opengraph-image.tsx:38
app/[domain]/[slug]/opengraph-image.tsx:41
app/[domain]/[slug]/opengraph-image.tsx:43
components/frontend/gratitude/GratitudeCard.tsx:323
assets/icons/index.tsx:14
assets/icons/index.tsx:264
⚠ react-doctor/no-generic-handler-names ×9
Non-descriptive handler name "handleClick" — name should describe what it does, not when it runs
→ Rename to describe the action: e.g. `handleSubmit` → `saveUserProfile`, `handleClick` → `toggleSidebar`
components/ai-elements/suggestion.tsx:44
components/frontend/authentication/loginModals/mobileLogin.tsx:337
components/agents-ui/agent-disconnect-button.tsx:68
components/frontend/course/CourseLockOverlay.tsx:36
components/frontend/authentication/logout-to-starter-button.tsx:32
components/frontend/course/CourseLockBanner.tsx:76
components/frontend/course/UpgradeButton.tsx:38
components/frontend/home/SetReminderButton.tsx:121
components/frontend/fullcalendar/today-button.tsx:25
⚠ knip/types ×9
Unused type: CoursesData
components/frontend/course/CoursesContext.tsx
lib/frontend/edenFetcher.ts
lib/frontend/interactiveImageMapApi.ts
lib/frontend/ai/chat-utils.ts
actions/frontend/liveSession/getPaginatedSessions.ts
types/roadmap.ts
lib/frontend/ai/upload-config.ts
⚠ react-doctor/js-tosorted-immutable ×8
[...array].sort() — use array.toSorted() for immutable sorting (ES2023)
→ Use `array.toSorted()` (ES2023) instead of `[...array].sort()` for immutable sorting without the spread allocation
components/frontend/navigation/resolvedSidebarGroups.tsx:316
components/frontend/course/PaymentOptionsDialog.tsx:69
components/frontend/course/AllCourse.tsx:47
components/shared/sortfilter.tsx:34
components/frontend/jobportal/AdditionalQuestionsForm.tsx:33
components/frontend/course/CourseDisplay.tsx:45
components/frontend/doubt/LiveSessionDoubtSection.tsx:241
components/frontend/doubt/previous-doubts.tsx:62
⚠ react-doctor/no-react19-deprecated-apis ×8
useContext is superseded by `use()` on React 19+ — `use()` reads context conditionally inside hooks, branches, and loops; switch to `import { use } from 'react'`
→ Pass `ref` as a regular prop on function components — `forwardRef` is no longer needed in React 19+. Replace `useContext(X)` with `use(X)` for branch-aware context reads. Only enabled on projects detected as React 19+.
components/ai-elements/code-block.tsx:7
utils/providers/fullCalendarProvider.tsx:4
utils/providers/VideoManagerContextProvider.tsx:6
components/ai-elements/reasoning.tsx:12
components/frontend/course/CoursesContext.tsx:7
app/[domain]/interactive-images-tool/context/WebViewSettingsContext.tsx:3
components/frontend/featureLocking/UserAccessContext.tsx:3
lib/analytics/GAContext.tsx:3
⚠ react-doctor/nextjs-no-client-side-redirect ×7
router.push() in useEffect — use redirect() from next/navigation or handle navigation in an event handler
→ Avoid redirects inside useEffect. Use an event handler, middleware, or server-side redirect (App Router: redirect() from next/navigation; Pages Router: getServerSideProps redirect)
components/frontend/quiz/quizHolder.tsx:25
components/frontend/chat/chat-component.tsx:675
components/frontend/certificate/redirect-component.tsx:23
components/frontend/assignment/status.tsx:23
components/ClientRedirect.tsx:10
app/[domain]/(loggedin)/live-session/feedback-farewell/feedback-farewell-client.tsx:43
app/[domain]/interactive-images-tool/[mapId]/page.tsx:56
⚠ react-doctor/design-no-redundant-padding-axes ×7
px-0 py-0 → use the shorthand p-0
→ Collapse `px-N py-N` to `p-N` when both axes match. Keep them split only when one axis varies at a breakpoint (`py-2 md:py-3`)
components/frontend/course/CourseCardView.tsx:56
components/frontend/notifications/NotificationSheet.tsx:509
components/frontend/roadmap/CourseCard.tsx:39
components/frontend/chat/chat-sidebar.tsx:146
components/frontend/doubt/doubtchatsheet.tsx:271
components/frontend/liveSession/liveSessionSection.tsx:383
components/frontend/liveSession/liveSessionSection.tsx:389
⚠ react-doctor/rendering-usetransition-loading ×6
useState for "isLoading" — if this guards a state transition (not an async fetch), consider useTransition instead
→ Replace with `const [isPending, startTransition] = useTransition()` — avoids a re-render for the loading state
components/frontend/forms/review/reviewForm.tsx:61
components/frontend/forms/assignment/gdriveForm.tsx:40
components/frontend/authentication/logout-to-starter-button.tsx:7
components/frontend/lesson/lessoncontent.tsx:52
components/frontend/showcasePost/ShowcaseGrid.tsx:64
components/frontend/gratitude/GratitudeGrid.tsx:45
⚠ react-doctor/client-localstorage-no-version ×6
sessionStorage.setItem("status", JSON.stringify(...)) — bake a version into the key (e.g. "status:v1") so a future schema change can ignore old data instead of crashing on it
→ Bake a version into the storage key (e.g. "myKey:v1"); a future schema change can ignore old data instead of crashing on it
components/frontend/authentication/loginModals/emailVerification.tsx:165
components/frontend/notifications/NotificationSheet.tsx:140
components/frontend/notifications/NotificationSheet.tsx:215
components/frontend/notifications/NotificationSheet.tsx:242
components/frontend/notifications/NotificationSheet.tsx:274
components/frontend/notifications/NotificationSheet.tsx:437
⚠ jsx-a11y/no-autofocus ×5
The `autoFocus` attribute is found here, which can cause usability issues for sighted and non-sighted users.
→ Remove the `autoFocus` attribute.
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:802
components/frontend/chat/chat-component.tsx:838
components/agents-ui/agent-control-bar.tsx:114
app/[domain]/interactive-images-tool/components/EditorRightSidebar.tsx:92
app/[domain]/interactive-images-tool/components/InteractiveMapsList.tsx:191
⚠ react-doctor/no-side-tab-border ×5
Thick one-sided border (border-l-4) — the most recognizable tell of AI-generated UIs. Use a subtler accent or remove it
→ Use a subtler accent (box-shadow inset, background gradient, or border-bottom) instead of a thick one-sided border
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:1194
components/frontend/chat/TextContent.tsx:65
components/frontend/offers/AvailableOffers.tsx:440
components/frontend/offers/HouseOfGenAIProducts.tsx:209
components/frontend/offers/ClaimedCoupons.tsx:290
⚠ react-doctor/rerender-lazy-state-init ×5
useState(now()) calls initializer on every render — use useState(() => now()) for lazy initialization
→ Wrap in an arrow function so it only runs once: `useState(() => expensiveComputation())`
components/frontend/quiz/quizHolder.tsx:47
components/frontend/notifications/NotificationSheet.tsx:67
components/frontend/home/ProgressDashboard.tsx:164
components/frontend/home/ProgressDashboard.tsx:166
components/frontend/home/ProgressDashboard.tsx:173
⚠ react-doctor/no-effect-chain ×5
useEffect reacts to "input" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
→ Compute as much as possible during render (e.g. `const isGameOver = round > 5`) and write all related state inside the event handler that originally fires the chain. Each effect link adds an extra render and makes the code rigid as requirements evolve
components/frontend/chat/chat-component.tsx:684
components/frontend/lesson/lessoncontent.tsx:78
components/frontend/notifications/NotificationSheet.tsx:135
components/frontend/showcasePost/ShowcaseModal.tsx:394
components/frontend/showcasePost/ShowcaseModal.tsx:398
⚠ react-doctor/js-flatmap-filter ×4
.map().filter(Boolean) iterates twice — use .flatMap() to transform and filter in a single pass
→ Use `.flatMap(item => condition ? [value] : [])` — transforms and filters in a single pass instead of creating an intermediate array
components/frontend/chat/MessageBubble.tsx:89
hooks/useNavigation.ts:48
components/frontend/chat/MessageContent.tsx:45
components/breadcrumb/autoBreadcrumbUtils.ts:91
⚠ react-doctor/async-await-in-loop ×4
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
→ Collect the items and use `await Promise.all(items.map(...))` to run independent operations concurrently
components/frontend/chat/chat-component.tsx:119
hooks/useCanvasCloudSync.ts:202
actions/frontend/chat/chat.ts:47
components/frontend/chat/home-component.tsx:127
⚠ react-doctor/prefer-dynamic-import ×4
"recharts" is a heavy library — use React.lazy() or next/dynamic for code splitting
→ Use `const Component = dynamic(() => import('library'), { ssr: false })` from next/dynamic or React.lazy()
components/frontend/quiz/resultDisplay.tsx:8
components/frontend/home/ProgressDashboard.tsx:25
components/frontend/home/ProgressDashboard.tsx:26
components/frontend/home/LiveSessionCard.tsx:10
⚠ react-doctor/js-index-maps ×4
array.find() in a loop is O(n*m) — build a Map for O(1) lookups
→ Build an index `Map` once outside the loop instead of `array.find(...)` inside it
components/breadcrumb/BreadCrumbs.tsx:198
components/breadcrumb/BreadCrumbs.tsx:206
components/breadcrumb/BreadCrumbs.tsx:231
components/breadcrumb/BreadCrumbs.tsx:246
⚠ react-doctor/prefer-use-effect-event ×4
"fetchDoubt" is read only inside `setInterval` — wrap it with useEffectEvent and remove it from the dep array so the effect doesn't re-synchronize on every parent render
→ Wrap the callback with `useEffectEvent(callback)` (React 19+) and call the resulting binding from inside the sub-handler. The Effect Event captures the latest props/state without being a reactive dep, so the effect doesn't re-subscribe on every parent render. See https://react.dev/reference/react/useEffectEvent
components/frontend/doubt/DoubtSheetContent.tsx:90
components/frontend/liveSession/liveSessionSection.tsx:234
components/frontend/gratitude/GratitudeGrid.tsx:129
components/frontend/fullcalendar/week-and-day-view/fullcalendar-day-view.tsx:131
⚠ react-doctor/nextjs-image-missing-sizes ×3
next/image with fill but no sizes — the browser downloads the largest image. Add a sizes attribute for responsive behavior
→ Add sizes for responsive behavior: `sizes="(max-width: 768px) 100vw, 50vw"` matching your layout breakpoints
components/frontend/recording/RecordingListView.tsx:39
components/frontend/course/CompletedCourse.tsx:71
components/frontend/course/learning-card.tsx:71
⚠ react/no-danger ×3
Do not use `dangerouslySetInnerHTML` prop
→ `dangerouslySetInnerHTML` is a way to inject HTML into your React component. This is dangerous because it can easily lead to XSS vulnerabilities.
app/layout.tsx:57
components/frontend/fullcalendar/dialogs/event-details-dialog.tsx:138
components/frontend/fullcalendar/dialogs/event-details-dialog.tsx:171
⚠ react-doctor/nextjs-no-a-element ×3
Use next/link instead of <a> for internal links — enables client-side navigation and prefetching
→ `import Link from 'next/link'` — enables client-side navigation, prefetching, and preserves scroll position
components/frontend/offers/ClaimedCoupons.tsx:234
components/frontend/authentication/loginModals/updateProfileHolder.tsx:371
components/frontend/authentication/loginModals/updateProfileHolder.tsx:469
⚠ react-doctor/no-derived-state-effect ×3
Derived state in useEffect — compute during render instead
→ For derived state, compute inline: `const x = fn(dep)`. For state resets on prop change, use a key prop: `<Component key={prop} />`. See https://react.dev/learn/you-might-not-need-an-effect
components/frontend/showcasePost/MyPostsContent.tsx:37
components/frontend/course/PaymentOptionsDialog.tsx:79
lib/analytics/GAContext.tsx:20
⚠ react-doctor/no-many-boolean-props ×3
Component "SidebarLayout" takes 10 boolean-like props (isJobPortalEnabled, isPartnershipEnabled, hasPartnershipAccess…) — consider compound components or explicit variants instead of stacking flags
→ Split into compound components or named variants: `<Button.Primary />`, `<DialogConfirm />` instead of stacking `isPrimary`, `isConfirm` flags
components/frontend/navigation/sidebarLayout.tsx:51
components/frontend/navigation/homeSidebar.tsx:207
app/[domain]/interactive-images-tool/components/EditorTopBar.tsx:125
⚠ react-doctor/async-parallel ×2
3 sequential await statements that appear independent — use Promise.all() for parallel execution
→ Use `const [a, b] = await Promise.all([fetchA(), fetchB()])` to run independent operations concurrently
lib/frontend/ai/chat-utils.ts:214
app/[domain]/(loggedin)/quiz/[quizid]/page.tsx:56
⚠ react-doctor/no-prevent-default ×2
preventDefault() on <form> onSubmit — form won't work without JavaScript. Consider using a server action for progressive enhancement
→ Use `<form action={serverAction}>` (works without JS) or `<button>` instead of `<a>` with preventDefault
components/frontend/showcasePost/CreateShowcasePostFixed.tsx:778
components/frontend/showcasePost/ShowcaseModal.tsx:1012
⚠ react-doctor/no-gray-on-colored-background ×2
Gray text (text-gray-700) on colored background (bg-blue-50) looks washed out — use a darker shade of the background color or white
→ Use a darker shade of the background color for text, or white/near-white for contrast. Gray text on colored backgrounds looks washed out
components/frontend/chat/TextContent.tsx:65
components/frontend/doubt/doubtchatsheet.tsx:374
⚠ react-doctor/js-cache-property-access ×2
processedFile.file.type is read 3 times inside this loop — hoist into a const at the top of the loop body
→ Hoist the deep member access into a const at the top of the loop body: `const { x, y } = obj.deeply.nested`
components/frontend/chat/chat-component.tsx:341
components/frontend/chat/chat-component.tsx:342
⚠ react-doctor/rerender-functional-setstate ×2
setSettings({ ...settings, ... }) — use functional update `setSettings(prev => ({ ...prev, ... }))` to avoid stale closures
→ Use the callback form: `setState(prev => prev + 1)` to always read the latest value
utils/providers/fullCalendarProvider.tsx:129
components/frontend/certificate/redirect-component.tsx:29
⚠ react-doctor/no-gradient-text ×2
Gradient text (bg-clip-text + bg-gradient) is decorative rather than meaningful — a common AI tell. Use solid colors for text
→ Use solid text colors for readability. If you need emphasis, use font weight, size, or a distinct color instead of gradients
components/frontend/authentication/loginModals/modalWithPic.tsx:40
components/frontend/showcasePost/ShowcasePostDetail.tsx:51
⚠ react-doctor/no-prop-callback-in-effect ×2
useEffect calls prop callback "onDeviceListChange" with local state in deps — this is the "lift state via callback" anti-pattern; lift state into a shared Provider so both sides read the same source
→ Lift the shared state into a Provider so both sides read the same source — no useEffect-driven sync needed
components/agents-ui/agent-track-control.tsx:151
app/[domain]/(loggedin)/voice-agent/VoiceAgentClient.tsx:248
⚠ react-doctor/async-defer-await ×2
await blocks the function before an early-return that doesn't use the awaited value — move the await after the synchronous guard so the skip path stays fast
→ Move the `await` after the synchronous early-return guard so the skip path stays fast
app/[domain]/(loggedin)/joblisting/page.tsx:94
app/[domain]/(loggedin)/my-certificates/[certgenid]/page.tsx:80
⚠ react-doctor/js-hoist-intl ×2
new Intl.NumberFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call
→ Hoist `new Intl.NumberFormat(...)` to module scope or wrap in `useMemo` — Intl constructors allocate dozens of objects per locale lookup
app/[domain]/(loggedin)/completed/page.tsx:514
app/[domain]/(loggedin)/completed/page.tsx:531
⚠ react-doctor/no-inline-prop-on-memo-component ×2
JSX attribute values should not contain JSX created in the same scope — InfoField is wrapped in memo(), so new references cause unnecessary re-renders
→ Hoist the inline `() => ...` / `[]` / `{}` to a stable reference (useMemo, useCallback, or module scope) so the memoized child doesn't re-render every parent render
components/frontend/fullcalendar/dialogs/event-details-dialog.tsx:327
components/frontend/fullcalendar/dialogs/event-details-dialog.tsx:339
⚠ react-doctor/rerender-defer-reads-hook
usePathname() return is only read inside event handlers — defer the read into the handler (e.g. `new URL(window.location.href).searchParams`) so the component doesn't re-render on every URL change
→ Read the URL state inside the handler (e.g. `new URL(window.location.href).searchParams`) so the component doesn't subscribe and re-render on every URL change
components/frontend/gratitude/ShareGratitudeButton.tsx:39
⚠ react-doctor/advanced-event-handler-refs
useEffect re-subscribes a "handleKeyDown" listener every time the handler identity changes — store the handler in a ref and have the listener read `handlerRef.current()`, then drop it from the deps
→ Store the handler in a ref and have the listener read `handlerRef.current()` — the subscription stays put while the latest handler is always called
components/frontend/showcasePost/CustomMediaCarousel.tsx:192
⚠ react-doctor/design-no-vague-button-label
Vague button label "Submit" — name the action ("Save changes", "Send invite", "Delete account") so screen readers and hesitant users know what happens
→ Name the action: "Save changes" instead of "Continue", "Send invite" instead of "Submit", "Delete account" instead of "OK". The label IS the button's accessible name
components/frontend/forms/assignment/gdriveForm.tsx:140
⚠ react-doctor/js-batch-dom-css
Multiple sequential element.style assignments — batch with cssText or classList for fewer reflows
→ Batch DOM/CSS reads and writes — interleaving them inside a loop causes layout thrashing. Read first, then write
components/frontend/chat/chat-component.tsx:519
⚠ react-doctor/no-polymorphic-children
Polymorphic `typeof children === "string"` check — expose explicit subcomponents (e.g. `<Button.Text>`) instead of branching on what the consumer passed
→ Expose explicit subcomponents (`<Button.Text>`, `<Button.Icon>`) so consumers don't need to switch on `typeof children`
components/ai-elements/response.tsx:289
⚠ react-doctor/server-fetch-without-revalidate
fetch(url) in a Server Component / route handler defaults to forever-caching — pass { next: { revalidate: <seconds> } } / { next: { tags: [...] } } / { cache: "no-store" } so stale data doesn't quietly persist
→ Pass `{ next: { revalidate: <seconds> } }` (or `cache: "no-store"` / `next: { tags: [...] }`) so stale cached data doesn't silently persist
app/api/generate-image/route.ts:14
⚠ react-doctor/js-cache-storage
sessionStorage.getItem("readStatus") called multiple times — cache the result in a variable
→ Cache repeated `localStorage`/`sessionStorage` reads in a local variable — each access serializes/deserializes
components/frontend/notifications/NotificationSheet.tsx:187
⚠ jsx-a11y/label-has-associated-control
A form label must be associated with a control.
→ Either give the label a `htmlFor` attribute with the id of the associated control, or wrap the label around the control.
components/frontend/jobportal/JobListings.tsx:1021
⚠ react-doctor/no-scale-from-zero
scale: 0 makes elements appear from nowhere — use scale: 0.95 with opacity: 0 for natural entrance
→ Use `initial={{ scale: 0.95, opacity: 0 }}` — elements should deflate like a balloon, not vanish into a point
components/frontend/fullcalendar/month-view/event-bullet.tsx:46
⚠ react-doctor/nextjs-no-redirect-in-try-catch
redirect() inside try-catch — this throws a special error Next.js handles internally. Move it outside the try block or use unstable_rethrow() in the catch
→ Move the redirect/notFound call outside the try block, or add `unstable_rethrow(error)` in the catch
lib/frontend/jobPortalSettings.ts:47
⚠ react-doctor/design-no-em-dash-in-jsx-text
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
→ Replace em dashes in JSX text with commas, colons, semicolons, periods, or parentheses — em dashes read as model-output filler
components/frontend/home/L1PreWorkshopHome.tsx:541
⚠ react-doctor/no-usememo-simple-expression
useMemo wrapping a trivially cheap expression — memo overhead exceeds the computation
→ Remove useMemo — property access, math, and ternaries are already cheap without memoization
components/frontend/fullcalendar/calendar-client.tsx:90
⚠ knip/duplicates
Duplicate export: dataFetcher|frontendFetcher
lib/frontend/fetcher.ts
┌─────┐ 36 / 100 Critical
│ x x │ ██████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
│ ▽ │ React Doctor (www.react.doctor)
└─────┘
2567 issues across 355/478 files in 869ms
Full diagnostics written to /var/folders/d7/hlx5rgg91rl6s5rwbqm2s94w0000gn/T/react-doctor-9ef53d02-7255-4633-a302-c1bc9fdba2af
→ Share your results: https://www.react.doctor/share?p=web&s=36&e=122&w=2445&f=355
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment