Created
May 15, 2026 23:17
-
-
Save kulterryan/6fe378b4d8bfdf54f68a65b77bfccf04 to your computer and use it in GitHub Desktop.
React Doctor audit — apps/web verbose (issue #2568)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 `…`) | |
| → Use the typographic ellipsis "…" (or `…`) 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