Perf - Disable non-essential Homepage fetch#2563
Perf - Disable non-essential Homepage fetch#2563
Conversation
…tead of feed flag (#2549)
updates
* Implement guest course enrollment functionality and enhance user experience - Added utilities for managing guest user course enrollment, including functions to check enrollment status and enroll guests. - Updated components to utilize the new guest enrollment logic, ensuring proper logging and user feedback. - Enhanced the Syllabus, StatusHeader, and CourseFeedback components to handle guest access and enrollment scenarios. - Introduced integration tests to verify guest enrollment behavior and access control. - Updated Course type to include flag for better course management. * Add .disabledLink styles to Syllabus module for improved accessibility and user interaction - Introduced styles for .disabledLink to enhance visual feedback for disabled links. - Added hover and focus states to ensure better user experience and accessibility compliance. * Refactor course components for improved user feedback and error handling - Simplified the enrollment success handling in StatusHeader by removing unnecessary try-catch. - Updated Syllabus component to use .notEnrolledLink for better clarity on user status. - Enhanced CourseFeedback to redirect users to login without sanitizing the URL. - Streamlined LessonPage to improve enrollment checks and user notifications. - Adjusted integration tests to replace waitForTimeout with waitForURL for better reliability. * Rename .disabledLink to .notEnrolledLink in Syllabus module for improved clarity on user status * Refactor guest enrollment logic and improve component interactions - Replaced guest enrollment utilities with Redux-based hooks for better state management. - Updated components (StatusHeader, CourseFeedback, Syllabus) to utilize new hooks for checking enrollment status and enrolling guests. - Enhanced user feedback by logging user types during enrollment actions. - Removed deprecated guest enrollment utility functions to streamline codebase. - Introduced NotEnrolledNotice component for clearer user notifications regarding enrollment status. - Adjusted integration tests to reflect changes in guest enrollment handling. * Update Syllabus styles for improved link visibility and user interaction * Enhance guest enrollment hooks and improve NotEnrolledNotice component - Updated useEnrollGuest hook to specify return type for better type safety. - Simplified NotEnrolledNotice component by removing unnecessary refs and optimizing useEffect for clearer logic. - Adjusted integration tests to improve reliability and ensure proper URL handling for guest enrollment scenarios. * Refactor NotEnrolledNotice into LessonPage for improved clarity and functionality - Merged NotEnrolledNotice component logic directly into LessonPage to streamline user notifications regarding enrollment status. - Enhanced error handling by utilizing a toast notification for unenrolled users and improved navigation flow. - Removed the separate NotEnrolledNotice file to reduce complexity and improve maintainability. * Refactor authentication handling in CourseFeedback and CompleteButton components * Refactor user type handling in CourseFeedback and CompleteButton components * Refactor course components for improved user experience and code clarity - Updated user type handling in CourseFeedback, CompleteButton, and other components to streamline logic and enhance readability. - Simplified NotEnrolledNotice integration into LessonPage for better user notifications regarding enrollment status. - Introduced LessonContent component to encapsulate lesson display logic and improve maintainability. - Enhanced error handling and user feedback mechanisms across various components, ensuring a smoother user experience. * Add NotEnrolledNotice styles and remove deprecated lessons styles
* Update popup tab design for reflections * Remove header text from Reflection modal in BottomActionsModals component * Show ayah conditionally on the page only but no popup * Refactor ReflectionBodyContainer: Simplify icon usage, enhance reflection view logging, and clean up styles. Remove unnecessary TypeScript ignore comment and adjust tab item selection logic. * Remove unnecessary useCallback
…es (#2560) Update verse link regex and tests for triple-digit references
|
Warning Rate limit exceeded@zonetecde has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 14 minutes and 41 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (1)
WalkthroughThe changes introduce an optional Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/components/HomePage/ReadingSection/NewCard/index.tsx (1)
33-73: Pre-existing accessibility issue: nested interactive elements.The
Cardcomponent with alinkprop (line 38) renders as a clickable element, but it contains aLinkcomponent inside theTranstranslation (lines 53-60). Both navigate to the same destination, creating nested interactive elements that violate HTML semantics and accessibility guidelines:
- Invalid HTML: anchor elements cannot be nested
- Breaks keyboard navigation and focus management
- Confuses screen readers and assistive technologies
- Violates WCAG and the project's guidelines for semantic HTML
While different analytics events are tracked (
homepage_take_notesvshomepage_take_notes_link), accessibility must take precedence.Recommended refactor:
Either remove the
linkprop from the Card and style it as a non-clickable container, or remove the inner Link and handle the translated text differently. For example:// Option 1: Remove Card link prop, keep only inner Link <Card onClick={() => { logButtonClick('homepage_take_notes'); }} className={styles.firstTimeReadingCard} // Remove: link={getTakeNotesNavigationUrl()} // Remove: isNewTab shouldPrefetch={false} > {/* Card content with Link inside */} </Card>// Option 2: Remove inner Link, use Card's link only <Card onClick={() => { logButtonClick('homepage_take_notes'); // Combine analytics if needed }} className={styles.firstTimeReadingCard} link={getTakeNotesNavigationUrl()} isNewTab shouldPrefetch={false} > <div className={styles.cardOuterContainer}> {/* Render translated text without Link component */} <Trans i18nKey="home:take-notes" /> </div> </Card>Note: Verify if analytics tracking requirements allow consolidating to a single click event.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (9)
src/components/HomePage/Card/index.tsx(2 hunks)src/components/HomePage/ExploreTopicsSection/index.tsx(1 hunks)src/components/HomePage/QuickLinks/index.tsx(1 hunks)src/components/HomePage/QuranInYearSection/index.tsx(2 hunks)src/components/HomePage/ReadingSection/ChapterCard/index.tsx(3 hunks)src/components/HomePage/ReadingSection/NewCard/index.tsx(2 hunks)src/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsx(1 hunks)src/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsx(1 hunks)src/components/HomePage/ReadingSection/index.tsx(1 hunks)
🧰 Additional context used
📓 Path-based instructions (13)
**/*.*
📄 CodeRabbit inference engine (.cursor/rules/bug-handling-with-todo-comments.mdc)
If you encounter a bug in existing code, or the instructions lead to suboptimal or buggy code, add comments starting with "TODO:" outlining the problems.
**/*.*: Utilize Early Returns: Use early returns to avoid nested conditions and improve readability.
Conditional Classes: Prefer conditional classes over ternary operators for class attributes.
**/*.*: Use comments sparingly, and when you do, make them meaningful.
Don't comment on obvious things. Excessive or unclear comments can clutter the codebase and become outdated.
Use comments to convey the 'why' behind specific actions or explain unusual behavior and potential pitfalls.
Provide meaningful information about the function's behavior and explain unusual behavior and potential pitfalls.
**/*.*: Write short functions that only do one thing.
Follow the single responsibility principle (SRP), which means that a function should have one purpose and perform it effectively.
If a function becomes too long or complex, consider breaking it into smaller, more manageable functions.Order functions with those that are composing other functions appearing earlier in the file. For example, if you have a menu with multiple buttons, define the menu function above the buttons.
**/*.*: Always add helpful comments to the code explaining what you are doing.
Never delete old comments, unless they are no longer relevant because the code has been rewritten or deleted.
**/*.*: Choose names for variables, functions, and classes that reflect their purpose and behavior.
A name should tell you why it exists, what it does, and how it is used. If a name requires a comment, then the name does not reveal its intent.
Use specific names that provide a clearer understanding of what the variables represent and how they are used.
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/next-js-conventions.mdc)
**/*.{js,jsx,ts,tsx}: Rely on Next.js Pages Router for state changes.
Minimize 'use client' usage: Prefer server components and Next.js SSR features.
Minimize 'use client' usage: Use 'use client' only for Web API access in small components.
Minimize 'use client' usage: Avoid using 'use client' for data fetching or state management.
**/*.{js,jsx,ts,tsx}: Optimize Web Vitals (LCP, CLS, FID)
Use dynamic loading for non-critical components using @src/components/dls/Spinner/Spinner.tsx
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
src/components/**/*.tsx
📄 CodeRabbit inference engine (.cursor/rules/react-functional-components.mdc)
src/components/**/*.tsx: Always use React functional components with hooks.
Use React.FC for functional components with props.
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
**/*.{tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/react.mdc)
**/*.{tsx,jsx}: Use functional components over class components
Keep components small and focused
Extract reusable logic into custom hooks
Use composition over inheritance
Split large components into smaller, focused ones
Follow the Rules of Hooks
Use custom hooks for reusable logic
Use appropriate dependency arrays in useEffect
Implement cleanup in useEffect when needed
Avoid nested hooks
Use useState for local component state
Avoid prop drilling through proper state management
Implement proper memoization (useMemo, useCallback)
Use React.memo for expensive components
Avoid unnecessary re-renders
Implement proper lazy loading
Use proper key props in lists
Profile and optimize render performance
Show appropriate loading and error states
Handle async errors properly
Show user-friendly error messages
Implement proper fallback UI
Log errors appropriately
Handle edge cases gracefully
Use semantic HTML elements
Implement proper ARIA attributes
Ensure keyboard navigation
Handle focus management
Provide proper alt text for images
Use proper imports/exports
Document complex component logic
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
**/*.tsx
📄 CodeRabbit inference engine (.cursor/rules/react.mdc)
Implement proper prop types with TypeScript
**/*.tsx: Prefix interfaces for React props with 'Props' (e.g., ButtonProps)
Implement proper error boundariesReact: use functional components only; extract reusable logic into custom hooks; apply proper memoization (React.memo/useMemo/useCallback)
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/react.mdc)
Use xstate for complex state logic
**/*.{ts,tsx}: TypeScript: prefer interfaces over type aliases for object shapes; avoid any; add explicit return types for public functions
Error handling: define and use custom error types; use async/await correctly; show user-friendly error messages
Use Redux Toolkit for state management and XState for complex state machines
Implement i18n with next-translate in components and utilities
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/typescript.mdc)
**/*.{ts,tsx,d.ts}: Prefer interfaces over types for object definitions
Use type for unions, intersections, and mapped types
Avoid usingany, preferunknownfor unknown types
Leverage TypeScript's built-in utility types
Use generics for reusable type patterns
Use PascalCase for type names and interfaces
Use camelCase for variables and functions
Use UPPER_CASE for constants
Use descriptive names with auxiliary verbs (e.g., isLoading, hasError)
Use explicit return types for public functions
Use arrow functions for callbacks and methods
Implement proper error handling with custom error types
Use function overloads for complex type scenarios
Prefer async/await over Promises
Use readonly for immutable properties
Leverage discriminated unions for type safety
Use type guards for runtime type checking
Implement proper null checking
Avoid type assertions unless necessary
Create custom error types for domain-specific errors
Use Result types for operations that can fail
Use try-catch blocks with typed catch clauses
Handle Promise rejections properly
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
{src,types}/**/*.ts?(x)
📄 CodeRabbit inference engine (CLAUDE.md)
Use TypeScript throughout the codebase with strict configuration
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
src/**/*.tsx
📄 CodeRabbit inference engine (CLAUDE.md)
Prefer React functional components for UI implementation
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
{src,types}/**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
Use path aliases @/ for src and @/dls/* for design system imports
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
src/components/**/*.{ts,tsx}
📄 CodeRabbit inference engine (CLAUDE.md)
Organize React components by feature and place DLS components under src/components/dls
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx,js,jsx}: Order imports: React first, then external, then internal; alphabetize within groups with blank lines between groups
Naming: camelCase for variables/functions; PascalCase for types, interfaces, and React components; UPPER_CASE for constants
Functions should be <= 30 lines, prefer early returns, single responsibility, and descriptive names
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
**/*.{ts,tsx,js,jsx,scss}
📄 CodeRabbit inference engine (AGENTS.md)
Use Prettier formatting: single quotes, 2-space indentation, 100-character line width, and trailing commas
Files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
🧠 Learnings (20)
📓 Common learnings
Learnt from: Osama-Elshimy
Repo: quran/quran.com-frontend-next PR: 2500
File: src/components/DataFetcher/index.tsx:40-41
Timestamp: 2025-09-25T23:23:27.647Z
Learning: The DataFetcher component's showSpinnerOnRevalidate prop had a default value of true, not false. When it was renamed to shouldShowSpinnerOnRevalidate in a Next.js upgrade PR, the default value remained true, making it a behavior-neutral rename.
📚 Learning: 2025-10-09T11:21:33.919Z
Learnt from: zonetecde
Repo: quran/quran.com-frontend-next PR: 2523
File: src/components/QuranicCalendar/MyProgress/MonthCard.tsx:48-49
Timestamp: 2025-10-09T11:21:33.919Z
Learning: In the Quran in a Year calendar feature (src/components/QuranicCalendar/MyProgress/MonthCard.tsx), instant scrolling (window.scrollTo({ top: 0 }) without smooth behavior) is preferred over smooth scrolling when selecting a week. This is because instant scrolling provides immediate visual feedback of the verses and date changing, whereas smooth scrolling makes it look like nothing is changing during the animation.
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsx
📚 Learning: 2025-10-22T20:42:09.214Z
Learnt from: yousefdergham
Repo: quran/quran.com-frontend-next PR: 2547
File: src/pages/learning-plans/[slug]/lessons/[lessonSlugOrId]/index.tsx:35-59
Timestamp: 2025-10-22T20:42:09.214Z
Learning: Preference for quran.com-frontend-next: keep single-use, page-specific components inline. Example: NotEnrolledMessage in src/pages/learning-plans/[slug]/lessons/[lessonSlugOrId]/index.tsx should remain inline; extract only if reused elsewhere.
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsx
📚 Learning: 2025-10-22T20:33:55.176Z
Learnt from: yousefdergham
Repo: quran/quran.com-frontend-next PR: 2547
File: src/components/Course/CourseDetails/Tabs/Syllabus/index.tsx:44-49
Timestamp: 2025-10-22T20:33:55.176Z
Learning: Preference: In quran.com-frontend-next, keep concise “why” comments for analytics/UX decision points (e.g., guest vs enrolled click handlers) but avoid verbose JSDoc that repeats params/types. Convert multi-line JSDoc to brief inline rationale comments, especially in src/components/Course/CourseDetails/Tabs/Syllabus/index.tsx and similar analytics handlers.
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsx
📚 Learning: 2025-09-19T13:57:41.697Z
Learnt from: mohsinayoob
Repo: quran/quran.com-frontend-next PR: 2495
File: src/utils/auth/constants.ts:37-50
Timestamp: 2025-09-19T13:57:41.697Z
Learning: In the quran.com-frontend-next codebase, prefer TypeScript's readonly modifier over Object.freeze() for array immutability when compile-time protection is sufficient.
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsx
📚 Learning: 2025-10-26T10:22:52.381Z
Learnt from: afifvdin
Repo: quran/quran.com-frontend-next PR: 2540
File: src/components/QuranReader/TranslationView/TranslationText/TranslationAndReference.tsx:60-60
Timestamp: 2025-10-26T10:22:52.381Z
Learning: In src/components/QuranReader/TranslationView/TranslationText/TranslationAndReference.tsx, verse references displayed alongside chapter names should use English/Western numerals only, not localized numerals, as per design specifications.
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsx
📚 Learning: 2025-10-19T11:34:07.609Z
Learnt from: afifvdin
Repo: quran/quran.com-frontend-next PR: 2540
File: src/components/Verse/PlainVerseText/index.tsx:4-4
Timestamp: 2025-10-19T11:34:07.609Z
Learning: In src/components/Verse/PlainVerseText/index.tsx, the translation for verse titles should be wired directly to the component using next-translate rather than passed as props from parent components, as this ensures the wording from locales is centralized and only needs to be changed in one place.
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsx
📚 Learning: 2025-10-28T09:59:48.894Z
Learnt from: afifvdin
Repo: quran/quran.com-frontend-next PR: 2557
File: src/components/QuranReader/ReflectionView/ReflectionBodyContainer/ReflectionBody/index.tsx:88-0
Timestamp: 2025-10-28T09:59:48.894Z
Learning: In src/components/QuranReader/ReflectionView/ReflectionBodyContainer/ReflectionBody/index.tsx, the empty `<div className={styles.separatorContainer} />` rendered when `isModal` is true is required for maintaining consistent spacing in modal view and should not be removed.
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsx
📚 Learning: 2025-10-20T15:16:53.776Z
Learnt from: afifvdin
Repo: quran/quran.com-frontend-next PR: 2540
File: src/components/QuranReader/TranslationView/TranslationText/TranslationAndReference.tsx:14-23
Timestamp: 2025-10-20T15:16:53.776Z
Learning: In the quran.com-frontend-next codebase, the `direction` property should be typed as `string` rather than using union types like `'ltr' | 'rtl'` to maintain consistency with the established codebase pattern (e.g., LanguageData interface in src/utils/locale.ts).
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsx
📚 Learning: 2025-10-20T14:56:29.087Z
Learnt from: afifvdin
Repo: quran/quran.com-frontend-next PR: 2540
File: src/components/QuranReader/TranslationView/TranslationText/TranslationText.module.scss:56-63
Timestamp: 2025-10-20T14:56:29.087Z
Learning: In the quran.com-frontend-next repository, link styling (including the .referenceLink class) should follow the design specifications. If the design doesn't include underlines for links, don't suggest adding them even for accessibility considerations.
Applied to files:
src/components/HomePage/QuranInYearSection/index.tsxsrc/components/HomePage/ReadingSection/index.tsx
📚 Learning: 2025-09-25T23:23:27.647Z
Learnt from: Osama-Elshimy
Repo: quran/quran.com-frontend-next PR: 2500
File: src/components/DataFetcher/index.tsx:40-41
Timestamp: 2025-09-25T23:23:27.647Z
Learning: The DataFetcher component's showSpinnerOnRevalidate prop had a default value of true, not false. When it was renamed to shouldShowSpinnerOnRevalidate in a Next.js upgrade PR, the default value remained true, making it a behavior-neutral rename.
Applied to files:
src/components/HomePage/ReadingSection/index.tsxsrc/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/Card/index.tsxsrc/components/HomePage/QuickLinks/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
📚 Learning: 2025-10-19T10:49:21.536Z
Learnt from: afifvdin
Repo: quran/quran.com-frontend-next PR: 2539
File: src/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsx:50-54
Timestamp: 2025-10-19T10:49:21.536Z
Learning: In src/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsx, the component intentionally uses different analytics event names based on goal state: `homepage_reading_streak_card` when no goal exists and `homepage_reading_goal_card_arrow` when a goal exists. This is by design to track different user interaction contexts.
Applied to files:
src/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/ChapterCard/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsxsrc/components/HomePage/ReadingSection/NewCard/index.tsx
📚 Learning: 2025-10-26T03:27:28.728Z
Learnt from: afifvdin
Repo: quran/quran.com-frontend-next PR: 2545
File: src/pages/reading-goal/index.tsx:31-35
Timestamp: 2025-10-26T03:27:28.728Z
Learning: In src/pages/reading-goal/index.tsx, the initialExampleKey is intentionally computed only when isLoggedIn() is true. This is by design: guest users can interact with the page and select options manually, but the example URL parameter only pre-selects an option for logged-in users (typically after being redirected back from login). The example selection is preserved through the authentication redirect flow.
Applied to files:
src/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsxsrc/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsx
📚 Learning: 2025-08-01T08:51:28.930Z
Learnt from: CR
Repo: quran/quran.com-frontend-next PR: 0
File: .cursor/rules/typescript.mdc:0-0
Timestamp: 2025-08-01T08:51:28.930Z
Learning: Applies to **/*.tsx : Prefix interfaces for React props with 'Props' (e.g., ButtonProps)
Applied to files:
src/components/HomePage/ExploreTopicsSection/index.tsxsrc/components/HomePage/QuickLinks/index.tsx
📚 Learning: 2025-10-07T08:38:28.343Z
Learnt from: CR
Repo: quran/quran.com-frontend-next PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-10-07T08:38:28.343Z
Learning: Applies to **/*.tsx : React: use functional components only; extract reusable logic into custom hooks; apply proper memoization (React.memo/useMemo/useCallback)
Applied to files:
src/components/HomePage/QuickLinks/index.tsx
📚 Learning: 2025-08-01T08:50:54.518Z
Learnt from: CR
Repo: quran/quran.com-frontend-next PR: 0
File: .cursor/rules/react.mdc:0-0
Timestamp: 2025-08-01T08:50:54.518Z
Learning: Applies to **/*.{tsx,jsx} : Avoid unnecessary re-renders
Applied to files:
src/components/HomePage/QuickLinks/index.tsx
📚 Learning: 2025-10-07T08:37:58.213Z
Learnt from: CR
Repo: quran/quran.com-frontend-next PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-10-07T08:37:58.213Z
Learning: Applies to src/**/*.tsx : Prefer React functional components for UI implementation
Applied to files:
src/components/HomePage/QuickLinks/index.tsx
📚 Learning: 2025-08-01T08:50:54.518Z
Learnt from: CR
Repo: quran/quran.com-frontend-next PR: 0
File: .cursor/rules/react.mdc:0-0
Timestamp: 2025-08-01T08:50:54.518Z
Learning: Applies to **/*.{test,spec}.{tsx,jsx} : Test user interactions
Applied to files:
src/components/HomePage/QuickLinks/index.tsx
📚 Learning: 2025-08-01T08:50:54.518Z
Learnt from: CR
Repo: quran/quran.com-frontend-next PR: 0
File: .cursor/rules/react.mdc:0-0
Timestamp: 2025-08-01T08:50:54.518Z
Learning: Applies to **/*.{tsx,jsx} : Profile and optimize render performance
Applied to files:
src/components/HomePage/QuickLinks/index.tsx
📚 Learning: 2025-08-01T08:50:54.518Z
Learnt from: CR
Repo: quran/quran.com-frontend-next PR: 0
File: .cursor/rules/react.mdc:0-0
Timestamp: 2025-08-01T08:50:54.518Z
Learning: Applies to **/use*.{tsx,jsx} : Keep hooks focused and simple
Applied to files:
src/components/HomePage/QuickLinks/index.tsx
🔇 Additional comments (14)
src/components/HomePage/ExploreTopicsSection/index.tsx (1)
66-66: LGTM! Prefetch correctly disabled for external navigation.Disabling prefetch for these topic buttons is appropriate, especially since they open in new tabs (
isNewTab) where prefetching would waste bandwidth.src/components/HomePage/ReadingSection/ChapterCard/index.tsx (3)
46-46: Note: ExplicitshouldPrefetch={false}is redundant but acceptable.The Card component already defaults
shouldPrefetchtofalse(src/components/HomePage/Card/index.tsx:26), so explicitly passing it here is technically unnecessary. However, the explicit usage may be intentional for clarity and to make the prefetch behavior obvious to future maintainers.
62-67: LGTM! Continue reading link correctly disables prefetch.The Link properly disables prefetch for the "continue reading" navigation, preventing unnecessary background requests for chapter pages.
85-85: LGTM! Begin button correctly disables prefetch.The Button properly disables prefetch for the "begin" navigation.
src/components/HomePage/QuickLinks/index.tsx (1)
86-86: LGTM! Quick link prefetch correctly disabled.Disabling prefetch for quick link buttons is appropriate since users may not navigate to all (or any) of these optional targets. This prevents unnecessary prefetching of multiple chapter/verse pages.
src/components/HomePage/QuranInYearSection/index.tsx (2)
44-49: LGTM! Calendar link prefetch correctly disabled.Disabling prefetch for the calendar CTA link prevents unnecessary loading of the calendar page when users may not navigate to it.
74-74: LGTM! Calendar button prefetch correctly disabled.Disabling prefetch for the "Quran in Year" CTA button is appropriate for optional navigation.
src/components/HomePage/ReadingSection/index.tsx (1)
58-58: LGTM! My Quran link prefetch correctly disabled.Disabling prefetch for the profile/My Quran navigation link prevents unnecessary loading of the profile page from the homepage.
src/components/HomePage/Card/index.tsx (3)
16-16: LGTM! Card API correctly extended with shouldPrefetch prop.The optional
shouldPrefetchprop is properly typed and follows the project's naming convention (cf.shouldShowSpinnerOnRevalidatepattern).
26-26: LGTM! Appropriate default value for shouldPrefetch.Defaulting
shouldPrefetchtofalsealigns perfectly with the PR objective of preventing unnecessary prefetching on the homepage, making prefetching opt-in rather than opt-out.
30-36: LGTM! Prop correctly forwarded to Link component.The
shouldPrefetchprop is properly forwarded to the Link component when the Card renders as a navigable element.src/components/HomePage/ReadingSection/StreakOrGoalCard/index.tsx (1)
54-54: LGTM! Streak/goal card prefetch correctly disabled.Disabling prefetch for the streak or goal card navigation prevents unnecessary loading of the reading goal pages from the homepage. (Note: Explicit
shouldPrefetch={false}is technically redundant given Card's default, but maintains consistency with the pattern used throughout the PR.)src/components/HomePage/ReadingSection/NoGoalOrStreakCard/index.tsx (1)
23-23: LGTM! No goal card prefetch correctly disabled.Disabling prefetch for the "achieve Quran goals" card navigation prevents unnecessary loading of the reading goal setup page. (Note: Explicit
shouldPrefetch={false}is technically redundant given Card's default, but maintains consistency with the pattern used throughout the PR.)src/components/HomePage/ReadingSection/NewCard/index.tsx (1)
59-59: Prefetch optimization applied correctly.Explicitly disabling prefetch on the
Linkcomponent aligns with the PR's performance optimization goals and is appropriate for this usage.
* fix: input height inconsistency & password input focus issue * refactor(login): redesign sign-in/sign-up ui * feat: update social auth buttons to horizontal layout * fix(login): correct typo in unified registration text and add loading state * refactor: add small margin top utility class and apply to submit buttons * test: update tests & refactor code * fix: code comment * refactor: switch to logical properties for directional support --------- Co-authored-by: zonetecde <zonetecde@gmail.com>
style(auth): update or text color to medium gray
Replace justify-self: center with margin-inline: auto for cross-browser compatibility. justify-self only works in CSS Grid contexts, but Chrome has non-standard support for it in other layouts. Safari and Firefox follow the CSS spec strictly and require margin-inline: auto to center block elements with a max-width. Also fix pre-existing stylelint warnings (use logical CSS properties). Fixes: https://quranfoundation.atlassian.net/browse/QF-3926
…ew of the header (#2709) Refactor navbar visibility handling in Drawer component - Update SCSS variables for navbar height and margin adjustments. - Change visibility state management to lock/unlock navbar visibility when the drawer is opened or closed, improving scroll behavior.
* Add language names * Updates
* [QF-3666-hooks] add hooks and function related to updating user profile including avatar * [QF-3666-hooks] Refactor hooks * [QF-3666-hooks] remove base64 param handling and refactor how cache work * [QF-3666-hooks] change type to interface * [QF-3666-hooks] remove unused * [QF-3666-hooks] fix avatar handling error * [QF-3666-hooks] add logging and fix profile.json * [QF-3666-hooks] configure body parse limit * [QF-3666-hooks] custom error handler for avatar * [QF-3666] Update user profile * [QF-3666-hooks] fix image format conversion, api limit and refactor * [QF-3666-hooks] refactor * [QF-3666-hooks] put back translationsParams * [QF-3666] refactor * [QF-3666] refactor * [QF-3666] remove unnecessary * [QF-3666] refactor integration test * [QF-3675-hooks] add useUpdatePassword hook * [QF-3675] Update Password UI for Profile Page * [QF-3666] add test id utils * [QF-3675] add test * [QF-3675] reusable wait time in test * [QF-3675] fix code comments * [QF-3675] fix test * [QF-3675] fix password input * [QF-3675] fix test * [QF-3667-hooks] add hooks to update email preferences * [QF-3667] Profile Update - Email Notification Settings * [QF-3667] add tests * [QF-3667] fix code comments * [QF-3668] Edit User Profile - Delete Account * [QF-3668] fix code comments * [QF-3668] fix wording in popup * [QF-3668] fix error merge
attach userId to GA
attach userId to GA
* Add userId to logger * Fix VerseAndTranslation
attach userId to GA
* Sync UR locales * Add donation banner (#2693) --------- Co-authored-by: Mokhtar <rrrokhtar@gmail.com>
* fix: update AppEnv enum to change PRE_LIVE to PRELIVE for consistency (#2551) * Update QR integration (#2490) * Update QR integration * handle comments * QF-3350 (#2497) * [QF-3309]: SSO Login and logout support for QR (#2495) * feat: sso login and logout * fix: protected logout api call with signature * chore: env update * fixed SSO ENABLED check * Update .env.example Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: changes requested * update .envv * minor fixes * minor fixes * minor fixes * minor fixes * fix: lint and optimization * minor types adjustment * minor types adjustment * fix: enable sso login for email and password * Update src/pages/auth.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update src/pages/logout.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Fix room's url (#2516) fix room's url * QF-3354 ref: AuthorInfo component with image error handling and update next.config.js for additional image domains (#2521) * QF-3354 ref: AuthorInfo component with image error handling and update next.config.js for additional image domains * QF-3354 ref: AuthorInfo component to use centralized AUTHOR_DEFAULT_IMAGE and improve image URL handling with getImageSrc utility function. * QF-3354 ref: Enhance AuthorInfo component by utilizing useCallback for image error handling and updating getImageSrc utility to accept undefined URLs. * QF-3354 ref: Update next.config.js to add additional image domains for Facebook integration * QF-3354 ref: Remove Facebook image domains from next.config.js * QF-3354 chore: add comments explains the image domains for Google and Facebook OAuth user avatars in next.config.js * QF-3548 ch: update ayah reflection URL to use verifiedOnly filter instead of feed flag (#2549) * QDC->QR integration (#2555) updates * QF-3435: Fix ayah reference formatting for RTL locales (#2504) * remove outdated test * Fix tests * Fix full-surah reference when from and to is not 0 * Fix navigation to subdomain * Prod release (#2577) * fix: update AppEnv enum to change PRE_LIVE to PRELIVE for consistency (#2551) * Update QR integration (#2490) * Update QR integration * handle comments * QF-3350 (#2497) * [QF-3309]: SSO Login and logout support for QR (#2495) * feat: sso login and logout * fix: protected logout api call with signature * chore: env update * fixed SSO ENABLED check * Update .env.example Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: changes requested * update .envv * minor fixes * minor fixes * minor fixes * minor fixes * fix: lint and optimization * minor types adjustment * minor types adjustment * fix: enable sso login for email and password * Update src/pages/auth.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update src/pages/logout.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Fix room's url (#2516) fix room's url * QF-3354 ref: AuthorInfo component with image error handling and update next.config.js for additional image domains (#2521) * QF-3354 ref: AuthorInfo component with image error handling and update next.config.js for additional image domains * QF-3354 ref: AuthorInfo component to use centralized AUTHOR_DEFAULT_IMAGE and improve image URL handling with getImageSrc utility function. * QF-3354 ref: Enhance AuthorInfo component by utilizing useCallback for image error handling and updating getImageSrc utility to accept undefined URLs. * QF-3354 ref: Update next.config.js to add additional image domains for Facebook integration * QF-3354 ref: Remove Facebook image domains from next.config.js * QF-3354 chore: add comments explains the image domains for Google and Facebook OAuth user avatars in next.config.js * QF-3548 ch: update ayah reflection URL to use verifiedOnly filter instead of feed flag (#2549) * QDC->QR integration (#2555) updates * QF-3435: Fix ayah reference formatting for RTL locales (#2504) * remove outdated test * Fix tests * Fix full-surah reference when from and to is not 0 * Fix navigation to subdomain --------- Co-authored-by: Mokhtar <rrrokhtar@gmail.com> Co-authored-by: H Ayoob <41894237+mohsinayoob@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> * Localization POC * Fix: Prevent word audio playback on popover interactions (#2595) * feat(ui): add stopPropagation prop to Popover component Adds an optional boolean prop to the Popover component, allowing it to prevent event propagation on click and keydown events when enabled. This enhances control over event handling in nested components. * fix(ui): allow tab and escape keys to propagate in popover onkeydown Improve accessibility by allowing Tab and Escape keys to propagate in the Popover component's onKeyDown handler, while stopping propagation for other keys. This ensures keyboard navigation and dismissal work correctly. * [QF-3972] Add banner for (The Rescuer: Powerful lessons in Surah Al-Mulk) Learning plan at the end of surah Al-Mulk in urdu (#2606) * feat(QuranReader): Enhance LearningPlanBanner for multiple languages - Updated ChapterControls to display LearningPlanBanner for both English and Urdu languages. - Refactored LearningPlanBanner to support language-specific configurations, including dynamic URLs and images based on the selected language. - Removed the deprecated getLearningPlanBannerUrl function from navigation utilities. * fix(QuranReader): Add null check for language configuration in LearningPlanBanner - Implemented a null check for the language configuration in LearningPlanBanner to prevent rendering issues when an unsupported language is selected. This ensures that the component returns null if the configuration is not found, enhancing stability and user experience. * [QF-3972] Add banner for (The Rescuer: Powerful lessons in Surah Al-Mulk) Learning plan at the end of surah Al-Mulk in urdu (#2606) * feat(QuranReader): Enhance LearningPlanBanner for multiple languages - Updated ChapterControls to display LearningPlanBanner for both English and Urdu languages. - Refactored LearningPlanBanner to support language-specific configurations, including dynamic URLs and images based on the selected language. - Removed the deprecated getLearningPlanBannerUrl function from navigation utilities. * fix(QuranReader): Add null check for language configuration in LearningPlanBanner - Implemented a null check for the language configuration in LearningPlanBanner to prevent rendering issues when an unsupported language is selected. This ensures that the component returns null if the configuration is not found, enhancing stability and user experience. * Sync locales * Sync locales * Fixed typo on about us page * Fixed typo on about us page * Fix onboarding modal (Spanish & Kiswahili) (#2591) * fixed the Spanish onboarding modal that was causing the website to crash * fixed Kiswahili too (same problem) --------- Co-authored-by: Test User <test@example.com> Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Fix onboarding modal (Spanish & Kiswahili) (#2591) * fixed the Spanish onboarding modal that was causing the website to crash * fixed Kiswahili too (same problem) --------- Co-authored-by: Test User <test@example.com> Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * feat(notifications): Filter notification preferences by QDC tag (#2596) * feat(notifications): add QDC tag filtering for notification categories Filter notification preferences to include only those with the QDC tag, excluding marketing and QR-tagged workflows. Also fixed a typo in the comment. * feat(notifications): add QR tag support in category grouping Update the notification categories settings to include QR tag filtering, ensuring workflows with only marker tags (QDC/QR) are grouped under 'uncategorized'. This extends the existing QDC tag logic to handle QR tags consistently. * Prod release (#2613) * [QF-3542] Daily ayah pushed down o be above the community section and under explore topics (#2540) * Daily ayah pushed down o be above the community section and under explore topics. Add 'quran-in-year-verse-title' translations for multiple languages and enhance TranslationText component to display chapter references. Introduce useChapter hook for fetching chapter data. * Refactor TranslationText and VerseAndTranslation components for improved data handling and UI. Update useChapter hook to include loading state and enhance error handling. Adjust styles in VerseText module for better presentation. * Add shouldShowTitle prop to PlainVerseText component and conditionally render title * Enhance TranslationText component with Next.js Link for chapter references, improve error handling in VerseAndTranslation by using optional chaining, and update SCSS comments for clarity. Add JSDoc documentation to useChapter hook for better understanding of its functionality. * Refactor VerseAndTranslation component to improve error handling and add detailed JSDoc documentation. Enhance useChapter hook with loading state and revalidation capabilities. Update verse reference handling to use getVerseUrl for improved URL generation. * Update TranslationText component to use HTML entities for quotes, simplify mutate function in VerseAndTranslation, and enhance useChapter hook with TypeScript typing for mutate function. * Refactor TranslationText and VerseAndTranslation components to utilize getVerseUrl for chapter references, enhancing URL generation consistency. Remove redundant import of getVerseUrl in VerseAndTranslation. * Enhance TranslationText component to conditionally render text with click handling when chapter name and reference are not available, improving user interaction and display logic. * Remove 'quran-in-year-verse-title' translations from multiple language JSON files and enhance QuranInYearSection component to conditionally display title and reference, improving user experience and consistency across translations. * Refactor TranslationAndReference component to improve accessibility by separating click handling from the main div, enhancing user interaction while maintaining existing functionality. * Refactor TranslationAndReference by updating click handling logic and enhancing aria-label attributes for better screen reader support. * Refactor QuranInYearSection to use localized title text and introduce FootnoteAndSubFootnote component for improved footnote handling * Fix direction in the TranslationAndReference * Update surah name, chapter and verse number to use english * Use chaptersData from static props --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Sync locales --------- Co-authored-by: afifvdin <afifudin.fdn@gmail.com> * Prod release (#2613) * [QF-3542] Daily ayah pushed down o be above the community section and under explore topics (#2540) * Daily ayah pushed down o be above the community section and under explore topics. Add 'quran-in-year-verse-title' translations for multiple languages and enhance TranslationText component to display chapter references. Introduce useChapter hook for fetching chapter data. * Refactor TranslationText and VerseAndTranslation components for improved data handling and UI. Update useChapter hook to include loading state and enhance error handling. Adjust styles in VerseText module for better presentation. * Add shouldShowTitle prop to PlainVerseText component and conditionally render title * Enhance TranslationText component with Next.js Link for chapter references, improve error handling in VerseAndTranslation by using optional chaining, and update SCSS comments for clarity. Add JSDoc documentation to useChapter hook for better understanding of its functionality. * Refactor VerseAndTranslation component to improve error handling and add detailed JSDoc documentation. Enhance useChapter hook with loading state and revalidation capabilities. Update verse reference handling to use getVerseUrl for improved URL generation. * Update TranslationText component to use HTML entities for quotes, simplify mutate function in VerseAndTranslation, and enhance useChapter hook with TypeScript typing for mutate function. * Refactor TranslationText and VerseAndTranslation components to utilize getVerseUrl for chapter references, enhancing URL generation consistency. Remove redundant import of getVerseUrl in VerseAndTranslation. * Enhance TranslationText component to conditionally render text with click handling when chapter name and reference are not available, improving user interaction and display logic. * Remove 'quran-in-year-verse-title' translations from multiple language JSON files and enhance QuranInYearSection component to conditionally display title and reference, improving user experience and consistency across translations. * Refactor TranslationAndReference component to improve accessibility by separating click handling from the main div, enhancing user interaction while maintaining existing functionality. * Refactor TranslationAndReference by updating click handling logic and enhancing aria-label attributes for better screen reader support. * Refactor QuranInYearSection to use localized title text and introduce FootnoteAndSubFootnote component for improved footnote handling * Fix direction in the TranslationAndReference * Update surah name, chapter and verse number to use english * Use chaptersData from static props --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Sync locales --------- Co-authored-by: afifvdin <afifudin.fdn@gmail.com> * Made Collection's verses expanded by default (#2615) changed isOpen to true by default * Made Collection's verses expanded by default (#2615) changed isOpen to true by default * Production release (#2624) * QF-4026 - Change the LP view on the homepage (#2616) * Changed the style of the learning plans on the homepage to show only the image * fixed rtl view for "enrolled" badge * fixed rtl view for "enrolled" badge * applied copilot suggestions * added 'new' pill based on the 'enrolled' pill * added completed pill * Updated LP Card size on mobile (#2621) * updated card size on mobile * fixeda size * Qf 3200 explore topics section scrollable horizontally (#2528) * feat: ensure horizontal scrolling in ExploreTopicsSection * test: add Playwright test for horizontal scroll in ExploreTopicsSection * fix: improve error handling and RTL clarity in scroll test - Add explicit error handling for missing scrollable container - Rename scrollRightAndWait to scrollByAndWait for RTL clarity - Add JSDoc explaining RTL behavior and fallback strategy * refactor: improve scroll test helper and fix CSS formatting - Consolidate RTL fallback logic in scrollByAndWait helper - Encapsulate forward/reverse scroll attempts with identical polling - Simplify test to single scrollByAndWait call - Fix scrollbar CSS formatting inconsistencies - Remove deprecated -webkit-overflow-scrolling property --------- Co-authored-by: Rayane Staszewski <56195432+zonetecde@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> * Production release (#2624) * QF-4026 - Change the LP view on the homepage (#2616) * Changed the style of the learning plans on the homepage to show only the image * fixed rtl view for "enrolled" badge * fixed rtl view for "enrolled" badge * applied copilot suggestions * added 'new' pill based on the 'enrolled' pill * added completed pill * Updated LP Card size on mobile (#2621) * updated card size on mobile * fixeda size * Qf 3200 explore topics section scrollable horizontally (#2528) * feat: ensure horizontal scrolling in ExploreTopicsSection * test: add Playwright test for horizontal scroll in ExploreTopicsSection * fix: improve error handling and RTL clarity in scroll test - Add explicit error handling for missing scrollable container - Rename scrollRightAndWait to scrollByAndWait for RTL clarity - Add JSDoc explaining RTL behavior and fallback strategy * refactor: improve scroll test helper and fix CSS formatting - Consolidate RTL fallback logic in scrollByAndWait helper - Encapsulate forward/reverse scroll attempts with identical polling - Simplify test to single scrollByAndWait call - Fix scrollbar CSS formatting inconsistencies - Remove deprecated -webkit-overflow-scrolling property --------- Co-authored-by: Rayane Staszewski <56195432+zonetecde@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> * Enhance ExploreTopicsSection styling for better layout and scrolling … (#2541) Enhance ExploreTopicsSection styling for better layout and scrolling behavior * Enhance ExploreTopicsSection styling for better layout and scrolling … (#2541) Enhance ExploreTopicsSection styling for better layout and scrolling behavior * QF-3590: Update PopularButton and ChapterCard styles for improved responsivene and RTL support (#2558) * Update PopularButton and ChapterCard styles for improved responsiveness and RTL support * Update HeroButtons styles to enforce nowrap text wrapping for better layout consistency * Update PopularButton styles to set fixed widths for improved layout on different screen sizes * Remove extra newline in PopularButton styles * Remove unnecessary whitespace in PopularButton styles for cleaner code * Implement PopularDropdown component and integrate it into HomePageHero; refactor PopularButton to accept onClick prop for dropdown handling * Remove PopularButton styles as part of the component refactor; streamline codebase by eliminating unused SCSS file. * QF 3724 (#2580) * feat(pages): add Arabic version of What is Ramadan page Introduce Arabic localization for the What is Ramadan page, including a new React component (WhatIsRamadanArabic.tsx) and corresponding SCSS styles. Update the main index.tsx to conditionally render the Arabic content based on language selection. Also, enhance contentPage.module.scss to style the strong tag alongside b for better text formatting. * feat(pages): add Arabic version of About the Quran page - Add AboutTheQuranArabic component with Arabic content - Update index.tsx to conditionally render Arabic version based on language - Modify styles for better Arabic support in both About the Quran and What is Ramadan pages - Include call-to-action button in Arabic Ramadan page for consistency 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * [QF-3112] remove 3rd bullet from access-anywhere section (#2571) fix(notes): remove 3rd bullet from access-anywhere section * QF-4028 - Change order of the sections on QDC homepage for guest user in responsive view (#2622) * changed order of the sections on homepage for guest user in responsive view * changed a logic * QF-2082 - Hide the navigation drawer when not on Quran reading pages. (#2546) * Add apps-portal * Add MTF banner * Update developers page * Added mobile apps for qdc to Quran App Portal (#2654) * Added mobile apps for qdc * Optimize images * Add localization --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Added mobile apps for qdc to Quran App Portal (#2654) * Added mobile apps for qdc * Optimize images * Add localization --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Remove Quran Meet * Remove Quran Meet * Fix: Page number tracking in Reading and Translation modes (#2648) * fix(quran-reader): update page number tracking in translation view Refactor useSyncChapterPage hook to directly use initial verse data for immediate page and hizb updates on navigation, removing unnecessary props from TranslationPageVerse component. This ensures accurate page number display without relying on scrolling or external lookups. * fix: add null guard for verseKey in intersection observer callback Prevent runtime error when observed element lacks data-verse-key attribute. * fix: add missing pageNumber and hizbNumber props to ChapterHeader The ChapterHeader component requires pageNumber and hizbNumber props for data attributes used by the intersection observer. * feat(notifications): Filter notification preferences by QDC tag (#2596) * feat(notifications): add QDC tag filtering for notification categories Filter notification preferences to include only those with the QDC tag, excluding marketing and QR-tagged workflows. Also fixed a typo in the comment. * feat(notifications): add QR tag support in category grouping Update the notification categories settings to include QR tag filtering, ensuring workflows with only marker tags (QDC/QR) are grouped under 'uncategorized'. This extends the existing QDC tag logic to handle QR tags consistently. * Remove MTF banner (#2672) * QF-4028 - Change order of the sections on QDC homepage for guest user in responsive view (#2622) * changed order of the sections on homepage for guest user in responsive view * changed a logic * QF-3590: Update PopularButton and ChapterCard styles for improved responsivene and RTL support (#2558) * Update PopularButton and ChapterCard styles for improved responsiveness and RTL support * Update HeroButtons styles to enforce nowrap text wrapping for better layout consistency * Update PopularButton styles to set fixed widths for improved layout on different screen sizes * Remove extra newline in PopularButton styles * Remove unnecessary whitespace in PopularButton styles for cleaner code * Implement PopularDropdown component and integrate it into HomePageHero; refactor PopularButton to accept onClick prop for dropdown handling * Remove PopularButton styles as part of the component refactor; streamline codebase by eliminating unused SCSS file. * QF-2082 - Hide the navigation drawer when not on Quran reading pages. (#2546) Signed-off-by: Mohammed Mokhtar <rrrokhtar@gmail.com> * sentry: don't send hydration errors (#2655) * Revert "QF-2082 - Hide the navigation drawer when not on Quran reading pages. (#2546)" This reverts commit bab7d83. * Open Apps Portal in new tab from Developers page (#2682) - Open the Apps Portal link in a new browser tab to avoid navigating users away from the Developers page. - This improves the developer experience by keeping the current context intact while exploring available apps. navigating users away from the Developers page. This improves the developer experience by keeping the current context intact while exploring available apps. .tsx * Open Apps Portal in new tab from Developers page (#2682) - Open the Apps Portal link in a new browser tab to avoid navigating users away from the Developers page. - This improves the developer experience by keeping the current context intact while exploring available apps. navigating users away from the Developers page. This improves the developer experience by keeping the current context intact while exploring available apps. .tsx * Rukn production (#2688) * course.{MainDetails,LessonView}: add shouldUseMilkdown check (#2507) * course.{MainDetails,LessonView}: add shouldUseMilkdown check * course.{MainDetails,LessonView} shouldUseMilkdown check: add comment * Course.{LessonView,MainDetails}: add p + p margins (#2623) --------- Co-authored-by: mustafa0x <mustafa.0x@gmail.com> * Sync UR locales * Sync UR locales * Add donation banner (#2693) --------- Signed-off-by: Mohammed Mokhtar <rrrokhtar@gmail.com> Co-authored-by: Mokhtar <rrrokhtar@gmail.com> Co-authored-by: H Ayoob <41894237+mohsinayoob@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> Co-authored-by: Ahmed Hussein <ahmedhussein.developer@gmail.com> Co-authored-by: zonetecde <zonetecde@gmail.com> Co-authored-by: Rayane Staszewski <56195432+zonetecde@users.noreply.github.com> Co-authored-by: Test User <test@example.com> Co-authored-by: afifvdin <afifudin.fdn@gmail.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Al Imam <alimam01828@gmail.com> Co-authored-by: Basit Minhas <basit3407@gmail.com> Co-authored-by: mustafa0x <mustafa.0x@gmail.com>
* fix: update AppEnv enum to change PRE_LIVE to PRELIVE for consistency (#2551) * Update QR integration (#2490) * Update QR integration * handle comments * QF-3350 (#2497) * [QF-3309]: SSO Login and logout support for QR (#2495) * feat: sso login and logout * fix: protected logout api call with signature * chore: env update * fixed SSO ENABLED check * Update .env.example Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: changes requested * update .envv * minor fixes * minor fixes * minor fixes * minor fixes * fix: lint and optimization * minor types adjustment * minor types adjustment * fix: enable sso login for email and password * Update src/pages/auth.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update src/pages/logout.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Fix room's url (#2516) fix room's url * QF-3354 ref: AuthorInfo component with image error handling and update next.config.js for additional image domains (#2521) * QF-3354 ref: AuthorInfo component with image error handling and update next.config.js for additional image domains * QF-3354 ref: AuthorInfo component to use centralized AUTHOR_DEFAULT_IMAGE and improve image URL handling with getImageSrc utility function. * QF-3354 ref: Enhance AuthorInfo component by utilizing useCallback for image error handling and updating getImageSrc utility to accept undefined URLs. * QF-3354 ref: Update next.config.js to add additional image domains for Facebook integration * QF-3354 ref: Remove Facebook image domains from next.config.js * QF-3354 chore: add comments explains the image domains for Google and Facebook OAuth user avatars in next.config.js * QF-3548 ch: update ayah reflection URL to use verifiedOnly filter instead of feed flag (#2549) * QDC->QR integration (#2555) updates * QF-3435: Fix ayah reference formatting for RTL locales (#2504) * remove outdated test * Fix tests * Fix full-surah reference when from and to is not 0 * Fix navigation to subdomain * QF-3590: Update PopularButton and ChapterCard styles for improved responsivene and RTL support (#2558) * Update PopularButton and ChapterCard styles for improved responsiveness and RTL support * Update HeroButtons styles to enforce nowrap text wrapping for better layout consistency * Update PopularButton styles to set fixed widths for improved layout on different screen sizes * Remove extra newline in PopularButton styles * Remove unnecessary whitespace in PopularButton styles for cleaner code * Implement PopularDropdown component and integrate it into HomePageHero; refactor PopularButton to accept onClick prop for dropdown handling * Remove PopularButton styles as part of the component refactor; streamline codebase by eliminating unused SCSS file. * Prod release (#2577) * fix: update AppEnv enum to change PRE_LIVE to PRELIVE for consistency (#2551) * Update QR integration (#2490) * Update QR integration * handle comments * QF-3350 (#2497) * [QF-3309]: SSO Login and logout support for QR (#2495) * feat: sso login and logout * fix: protected logout api call with signature * chore: env update * fixed SSO ENABLED check * Update .env.example Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: changes requested * update .envv * minor fixes * minor fixes * minor fixes * minor fixes * fix: lint and optimization * minor types adjustment * minor types adjustment * fix: enable sso login for email and password * Update src/pages/auth.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update src/pages/logout.tsx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Fix room's url (#2516) fix room's url * QF-3354 ref: AuthorInfo component with image error handling and update next.config.js for additional image domains (#2521) * QF-3354 ref: AuthorInfo component with image error handling and update next.config.js for additional image domains * QF-3354 ref: AuthorInfo component to use centralized AUTHOR_DEFAULT_IMAGE and improve image URL handling with getImageSrc utility function. * QF-3354 ref: Enhance AuthorInfo component by utilizing useCallback for image error handling and updating getImageSrc utility to accept undefined URLs. * QF-3354 ref: Update next.config.js to add additional image domains for Facebook integration * QF-3354 ref: Remove Facebook image domains from next.config.js * QF-3354 chore: add comments explains the image domains for Google and Facebook OAuth user avatars in next.config.js * QF-3548 ch: update ayah reflection URL to use verifiedOnly filter instead of feed flag (#2549) * QDC->QR integration (#2555) updates * QF-3435: Fix ayah reference formatting for RTL locales (#2504) * remove outdated test * Fix tests * Fix full-surah reference when from and to is not 0 * Fix navigation to subdomain --------- Co-authored-by: Mokhtar <rrrokhtar@gmail.com> Co-authored-by: H Ayoob <41894237+mohsinayoob@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> * Localization POC * Fix: Prevent word audio playback on popover interactions (#2595) * feat(ui): add stopPropagation prop to Popover component Adds an optional boolean prop to the Popover component, allowing it to prevent event propagation on click and keydown events when enabled. This enhances control over event handling in nested components. * fix(ui): allow tab and escape keys to propagate in popover onkeydown Improve accessibility by allowing Tab and Escape keys to propagate in the Popover component's onKeyDown handler, while stopping propagation for other keys. This ensures keyboard navigation and dismissal work correctly. * [QF-3972] Add banner for (The Rescuer: Powerful lessons in Surah Al-Mulk) Learning plan at the end of surah Al-Mulk in urdu (#2606) * feat(QuranReader): Enhance LearningPlanBanner for multiple languages - Updated ChapterControls to display LearningPlanBanner for both English and Urdu languages. - Refactored LearningPlanBanner to support language-specific configurations, including dynamic URLs and images based on the selected language. - Removed the deprecated getLearningPlanBannerUrl function from navigation utilities. * fix(QuranReader): Add null check for language configuration in LearningPlanBanner - Implemented a null check for the language configuration in LearningPlanBanner to prevent rendering issues when an unsupported language is selected. This ensures that the component returns null if the configuration is not found, enhancing stability and user experience. * [QF-3972] Add banner for (The Rescuer: Powerful lessons in Surah Al-Mulk) Learning plan at the end of surah Al-Mulk in urdu (#2606) * feat(QuranReader): Enhance LearningPlanBanner for multiple languages - Updated ChapterControls to display LearningPlanBanner for both English and Urdu languages. - Refactored LearningPlanBanner to support language-specific configurations, including dynamic URLs and images based on the selected language. - Removed the deprecated getLearningPlanBannerUrl function from navigation utilities. * fix(QuranReader): Add null check for language configuration in LearningPlanBanner - Implemented a null check for the language configuration in LearningPlanBanner to prevent rendering issues when an unsupported language is selected. This ensures that the component returns null if the configuration is not found, enhancing stability and user experience. * [QF-3972] Add banner for (The Rescuer: Powerful lessons in Surah Al-Mulk) Learning plan at the end of surah Al-Mulk in urdu (#2606) * feat(QuranReader): Enhance LearningPlanBanner for multiple languages - Updated ChapterControls to display LearningPlanBanner for both English and Urdu languages. - Refactored LearningPlanBanner to support language-specific configurations, including dynamic URLs and images based on the selected language. - Removed the deprecated getLearningPlanBannerUrl function from navigation utilities. * fix(QuranReader): Add null check for language configuration in LearningPlanBanner - Implemented a null check for the language configuration in LearningPlanBanner to prevent rendering issues when an unsupported language is selected. This ensures that the component returns null if the configuration is not found, enhancing stability and user experience. * feat(notifications): Filter notification preferences by QDC tag (#2596) * feat(notifications): add QDC tag filtering for notification categories Filter notification preferences to include only those with the QDC tag, excluding marketing and QR-tagged workflows. Also fixed a typo in the comment. * feat(notifications): add QR tag support in category grouping Update the notification categories settings to include QR tag filtering, ensuring workflows with only marker tags (QDC/QR) are grouped under 'uncategorized'. This extends the existing QDC tag logic to handle QR tags consistently. * Sync locales * Sync locales * Sync locales * Fixed typo on about us page * Fixed typo on about us page * Fixed typo on about us page * Fix onboarding modal (Spanish & Kiswahili) (#2591) * fixed the Spanish onboarding modal that was causing the website to crash * fixed Kiswahili too (same problem) --------- Co-authored-by: Test User <test@example.com> Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Fix onboarding modal (Spanish & Kiswahili) (#2591) * fixed the Spanish onboarding modal that was causing the website to crash * fixed Kiswahili too (same problem) --------- Co-authored-by: Test User <test@example.com> Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Fix onboarding modal (Spanish & Kiswahili) (#2591) * fixed the Spanish onboarding modal that was causing the website to crash * fixed Kiswahili too (same problem) --------- Co-authored-by: Test User <test@example.com> Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * feat(notifications): Filter notification preferences by QDC tag (#2596) * feat(notifications): add QDC tag filtering for notification categories Filter notification preferences to include only those with the QDC tag, excluding marketing and QR-tagged workflows. Also fixed a typo in the comment. * feat(notifications): add QR tag support in category grouping Update the notification categories settings to include QR tag filtering, ensuring workflows with only marker tags (QDC/QR) are grouped under 'uncategorized'. This extends the existing QDC tag logic to handle QR tags consistently. * Prod release (#2613) * [QF-3542] Daily ayah pushed down o be above the community section and under explore topics (#2540) * Daily ayah pushed down o be above the community section and under explore topics. Add 'quran-in-year-verse-title' translations for multiple languages and enhance TranslationText component to display chapter references. Introduce useChapter hook for fetching chapter data. * Refactor TranslationText and VerseAndTranslation components for improved data handling and UI. Update useChapter hook to include loading state and enhance error handling. Adjust styles in VerseText module for better presentation. * Add shouldShowTitle prop to PlainVerseText component and conditionally render title * Enhance TranslationText component with Next.js Link for chapter references, improve error handling in VerseAndTranslation by using optional chaining, and update SCSS comments for clarity. Add JSDoc documentation to useChapter hook for better understanding of its functionality. * Refactor VerseAndTranslation component to improve error handling and add detailed JSDoc documentation. Enhance useChapter hook with loading state and revalidation capabilities. Update verse reference handling to use getVerseUrl for improved URL generation. * Update TranslationText component to use HTML entities for quotes, simplify mutate function in VerseAndTranslation, and enhance useChapter hook with TypeScript typing for mutate function. * Refactor TranslationText and VerseAndTranslation components to utilize getVerseUrl for chapter references, enhancing URL generation consistency. Remove redundant import of getVerseUrl in VerseAndTranslation. * Enhance TranslationText component to conditionally render text with click handling when chapter name and reference are not available, improving user interaction and display logic. * Remove 'quran-in-year-verse-title' translations from multiple language JSON files and enhance QuranInYearSection component to conditionally display title and reference, improving user experience and consistency across translations. * Refactor TranslationAndReference component to improve accessibility by separating click handling from the main div, enhancing user interaction while maintaining existing functionality. * Refactor TranslationAndReference by updating click handling logic and enhancing aria-label attributes for better screen reader support. * Refactor QuranInYearSection to use localized title text and introduce FootnoteAndSubFootnote component for improved footnote handling * Fix direction in the TranslationAndReference * Update surah name, chapter and verse number to use english * Use chaptersData from static props --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Sync locales --------- Co-authored-by: afifvdin <afifudin.fdn@gmail.com> * Prod release (#2613) * [QF-3542] Daily ayah pushed down o be above the community section and under explore topics (#2540) * Daily ayah pushed down o be above the community section and under explore topics. Add 'quran-in-year-verse-title' translations for multiple languages and enhance TranslationText component to display chapter references. Introduce useChapter hook for fetching chapter data. * Refactor TranslationText and VerseAndTranslation components for improved data handling and UI. Update useChapter hook to include loading state and enhance error handling. Adjust styles in VerseText module for better presentation. * Add shouldShowTitle prop to PlainVerseText component and conditionally render title * Enhance TranslationText component with Next.js Link for chapter references, improve error handling in VerseAndTranslation by using optional chaining, and update SCSS comments for clarity. Add JSDoc documentation to useChapter hook for better understanding of its functionality. * Refactor VerseAndTranslation component to improve error handling and add detailed JSDoc documentation. Enhance useChapter hook with loading state and revalidation capabilities. Update verse reference handling to use getVerseUrl for improved URL generation. * Update TranslationText component to use HTML entities for quotes, simplify mutate function in VerseAndTranslation, and enhance useChapter hook with TypeScript typing for mutate function. * Refactor TranslationText and VerseAndTranslation components to utilize getVerseUrl for chapter references, enhancing URL generation consistency. Remove redundant import of getVerseUrl in VerseAndTranslation. * Enhance TranslationText component to conditionally render text with click handling when chapter name and reference are not available, improving user interaction and display logic. * Remove 'quran-in-year-verse-title' translations from multiple language JSON files and enhance QuranInYearSection component to conditionally display title and reference, improving user experience and consistency across translations. * Refactor TranslationAndReference component to improve accessibility by separating click handling from the main div, enhancing user interaction while maintaining existing functionality. * Refactor TranslationAndReference by updating click handling logic and enhancing aria-label attributes for better screen reader support. * Refactor QuranInYearSection to use localized title text and introduce FootnoteAndSubFootnote component for improved footnote handling * Fix direction in the TranslationAndReference * Update surah name, chapter and verse number to use english * Use chaptersData from static props --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Sync locales --------- Co-authored-by: afifvdin <afifudin.fdn@gmail.com> * Prod release (#2613) * [QF-3542] Daily ayah pushed down o be above the community section and under explore topics (#2540) * Daily ayah pushed down o be above the community section and under explore topics. Add 'quran-in-year-verse-title' translations for multiple languages and enhance TranslationText component to display chapter references. Introduce useChapter hook for fetching chapter data. * Refactor TranslationText and VerseAndTranslation components for improved data handling and UI. Update useChapter hook to include loading state and enhance error handling. Adjust styles in VerseText module for better presentation. * Add shouldShowTitle prop to PlainVerseText component and conditionally render title * Enhance TranslationText component with Next.js Link for chapter references, improve error handling in VerseAndTranslation by using optional chaining, and update SCSS comments for clarity. Add JSDoc documentation to useChapter hook for better understanding of its functionality. * Refactor VerseAndTranslation component to improve error handling and add detailed JSDoc documentation. Enhance useChapter hook with loading state and revalidation capabilities. Update verse reference handling to use getVerseUrl for improved URL generation. * Update TranslationText component to use HTML entities for quotes, simplify mutate function in VerseAndTranslation, and enhance useChapter hook with TypeScript typing for mutate function. * Refactor TranslationText and VerseAndTranslation components to utilize getVerseUrl for chapter references, enhancing URL generation consistency. Remove redundant import of getVerseUrl in VerseAndTranslation. * Enhance TranslationText component to conditionally render text with click handling when chapter name and reference are not available, improving user interaction and display logic. * Remove 'quran-in-year-verse-title' translations from multiple language JSON files and enhance QuranInYearSection component to conditionally display title and reference, improving user experience and consistency across translations. * Refactor TranslationAndReference component to improve accessibility by separating click handling from the main div, enhancing user interaction while maintaining existing functionality. * Refactor TranslationAndReference by updating click handling logic and enhancing aria-label attributes for better screen reader support. * Refactor QuranInYearSection to use localized title text and introduce FootnoteAndSubFootnote component for improved footnote handling * Fix direction in the TranslationAndReference * Update surah name, chapter and verse number to use english * Use chaptersData from static props --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Sync locales --------- Co-authored-by: afifvdin <afifudin.fdn@gmail.com> * Made Collection's verses expanded by default (#2615) changed isOpen to true by default * Made Collection's verses expanded by default (#2615) changed isOpen to true by default * Made Collection's verses expanded by default (#2615) changed isOpen to true by default * Production release (#2624) * QF-4026 - Change the LP view on the homepage (#2616) * Changed the style of the learning plans on the homepage to show only the image * fixed rtl view for "enrolled" badge * fixed rtl view for "enrolled" badge * applied copilot suggestions * added 'new' pill based on the 'enrolled' pill * added completed pill * Updated LP Card size on mobile (#2621) * updated card size on mobile * fixeda size * Qf 3200 explore topics section scrollable horizontally (#2528) * feat: ensure horizontal scrolling in ExploreTopicsSection * test: add Playwright test for horizontal scroll in ExploreTopicsSection * fix: improve error handling and RTL clarity in scroll test - Add explicit error handling for missing scrollable container - Rename scrollRightAndWait to scrollByAndWait for RTL clarity - Add JSDoc explaining RTL behavior and fallback strategy * refactor: improve scroll test helper and fix CSS formatting - Consolidate RTL fallback logic in scrollByAndWait helper - Encapsulate forward/reverse scroll attempts with identical polling - Simplify test to single scrollByAndWait call - Fix scrollbar CSS formatting inconsistencies - Remove deprecated -webkit-overflow-scrolling property --------- Co-authored-by: Rayane Staszewski <56195432+zonetecde@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> * Production release (#2624) * QF-4026 - Change the LP view on the homepage (#2616) * Changed the style of the learning plans on the homepage to show only the image * fixed rtl view for "enrolled" badge * fixed rtl view for "enrolled" badge * applied copilot suggestions * added 'new' pill based on the 'enrolled' pill * added completed pill * Updated LP Card size on mobile (#2621) * updated card size on mobile * fixeda size * Qf 3200 explore topics section scrollable horizontally (#2528) * feat: ensure horizontal scrolling in ExploreTopicsSection * test: add Playwright test for horizontal scroll in ExploreTopicsSection * fix: improve error handling and RTL clarity in scroll test - Add explicit error handling for missing scrollable container - Rename scrollRightAndWait to scrollByAndWait for RTL clarity - Add JSDoc explaining RTL behavior and fallback strategy * refactor: improve scroll test helper and fix CSS formatting - Consolidate RTL fallback logic in scrollByAndWait helper - Encapsulate forward/reverse scroll attempts with identical polling - Simplify test to single scrollByAndWait call - Fix scrollbar CSS formatting inconsistencies - Remove deprecated -webkit-overflow-scrolling property --------- Co-authored-by: Rayane Staszewski <56195432+zonetecde@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> * Enhance ExploreTopicsSection styling for better layout and scrolling … (#2541) Enhance ExploreTopicsSection styling for better layout and scrolling behavior * Enhance ExploreTopicsSection styling for better layout and scrolling … (#2541) Enhance ExploreTopicsSection styling for better layout and scrolling behavior * QF-4026 - Change the LP view on the homepage (#2616) * Changed the style of the learning plans on the homepage to show only the image * fixed rtl view for "enrolled" badge * fixed rtl view for "enrolled" badge * applied copilot suggestions * added 'new' pill based on the 'enrolled' pill * added completed pill * Updated LP Card size on mobile (#2621) * updated card size on mobile * fixeda size * QF-3590: Update PopularButton and ChapterCard styles for improved responsivene and RTL support (#2558) * Update PopularButton and ChapterCard styles for improved responsiveness and RTL support * Update HeroButtons styles to enforce nowrap text wrapping for better layout consistency * Update PopularButton styles to set fixed widths for improved layout on different screen sizes * Remove extra newline in PopularButton styles * Remove unnecessary whitespace in PopularButton styles for cleaner code * Implement PopularDropdown component and integrate it into HomePageHero; refactor PopularButton to accept onClick prop for dropdown handling * Remove PopularButton styles as part of the component refactor; streamline codebase by eliminating unused SCSS file. * QF-2751: Show the settings/preferences icon on the surah header (#2554) * Refactor Navbar and ContextMenu to integrate SettingsButton and SettingsDrawer - Removed SettingsDrawer from NavbarBody and added SettingsButton to ContextMenu for better accessibility. - Introduced a new SettingsButton component to handle opening the SettingsDrawer. - Updated ContextMenu layout to accommodate the new SettingsButton while maintaining responsiveness. * Update ContextMenu styles for improved layout and responsiveness - Adjusted padding values for better alignment in the ContextMenu. - Added new styles for reading preferences and chapter navigation components. - Enhanced responsiveness for chapter navigation and settings display on mobile devices. * Add event logging and integration tests for SettingsButton functionality - Integrated event logging to track when the settings drawer is opened. - Created integration tests to verify the visibility and functionality of the settings drawer on both desktop and mobile views. * Update ContextMenu to clarify SettingsDrawer rendering - Changed comment to specify that the SettingsDrawer component is being rendered in the ContextMenu. * Refactor ContextMenu and SettingsButton for improved performance and clarity * Fix logic in ContextMenu for mobile view handling and update SettingsButton props interface * Update ContextMenu styles for improved responsiveness and layout adjustments * Add SettingsDrawer to NavbarBody and remove from ContextMenu for improved structure * [QF-3123] Update the reflections and lessons popup design (#2557) * Update popup tab design for reflections * Remove header text from Reflection modal in BottomActionsModals component * Show ayah conditionally on the page only but no popup * Refactor ReflectionBodyContainer: Simplify icon usage, enhance reflection view logging, and clean up styles. Remove unnecessary TypeScript ignore comment and adjust tab item selection logic. * Remove unnecessary useCallback * [QF-3112] remove 3rd bullet from access-anywhere section (#2571) fix(notes): remove 3rd bullet from access-anywhere section * QF 3724 (#2580) * feat(pages): add Arabic version of What is Ramadan page Introduce Arabic localization for the What is Ramadan page, including a new React component (WhatIsRamadanArabic.tsx) and corresponding SCSS styles. Update the main index.tsx to conditionally render the Arabic content based on language selection. Also, enhance contentPage.module.scss to style the strong tag alongside b for better text formatting. * feat(pages): add Arabic version of About the Quran page - Add AboutTheQuranArabic component with Arabic content - Update index.tsx to conditionally render Arabic version based on language - Modify styles for better Arabic support in both About the Quran and What is Ramadan pages - Include call-to-action button in Arabic Ramadan page for consistency 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * QF-4028 - Change order of the sections on QDC homepage for guest user in responsive view (#2622) * changed order of the sections on homepage for guest user in responsive view * changed a logic * QF-2082 - Hide the navigation drawer when not on Quran reading pages. (#2546) * QF 3724 (#2580) * feat(pages): add Arabic version of What is Ramadan page Introduce Arabic localization for the What is Ramadan page, including a new React component (WhatIsRamadanArabic.tsx) and corresponding SCSS styles. Update the main index.tsx to conditionally render the Arabic content based on language selection. Also, enhance contentPage.module.scss to style the strong tag alongside b for better text formatting. * feat(pages): add Arabic version of About the Quran page - Add AboutTheQuranArabic component with Arabic content - Update index.tsx to conditionally render Arabic version based on language - Modify styles for better Arabic support in both About the Quran and What is Ramadan pages - Include call-to-action button in Arabic Ramadan page for consistency 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * [QF-3112] remove 3rd bullet from access-anywhere section (#2571) fix(notes): remove 3rd bullet from access-anywhere section * QF-4028 - Change order of the sections on QDC homepage for guest user in responsive view (#2622) * changed order of the sections on homepage for guest user in responsive view * changed a logic * QF-2082 - Hide the navigation drawer when not on Quran reading pages. (#2546) * Fix: Page number tracking in Reading and Translation modes (#2648) * fix(quran-reader): update page number tracking in translation view Refactor useSyncChapterPage hook to directly use initial verse data for immediate page and hizb updates on navigation, removing unnecessary props from TranslationPageVerse component. This ensures accurate page number display without relying on scrolling or external lookups. * fix: add null guard for verseKey in intersection observer callback Prevent runtime error when observed element lacks data-verse-key attribute. * fix: add missing pageNumber and hizbNumber props to ChapterHeader The ChapterHeader component requires pageNumber and hizbNumber props for data attributes used by the intersection observer. * Add apps-portal * Add apps-portal * Add MTF banner * Update developers page * Add MTF banner * Update developers page * Added mobile apps for qdc to Quran App Portal (#2654) * Added mobile apps for qdc * Optimize images * Add localization --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Added mobile apps for qdc to Quran App Portal (#2654) * Added mobile apps for qdc * Optimize images * Add localization --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Added mobile apps for qdc to Quran App Portal (#2654) * Added mobile apps for qdc * Optimize images * Add localization --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com> * Remove Quran Meet * Remove Quran Meet * Remove Quran Meet * Fix: Page number tracking in Reading and Translation modes (#2648) * fix(quran-reader): update page number tracking in translation view Refactor useSyncChapterPage hook to directly use initial verse data for immediate page and hizb updates on navigation, removing unnecessary props from TranslationPageVerse component. This ensures accurate page number display without relying on scrolling or external lookups. * fix: add null guard for verseKey in intersection observer callback Prevent runtime error when observed element lacks data-verse-key attribute. * fix: add missing pageNumber and hizbNumber props to ChapterHeader The ChapterHeader component requires pageNumber and hizbNumber props for data attributes used by the intersection observer. * feat(notifications): Filter notification preferences by QDC tag (#2596) * feat(notifications): add QDC tag filtering for notification categories Filter notification preferences to include only those with the QDC tag, excluding marketing and QR-tagged workflows. Also fixed a typo in the comment. * feat(notifications): add QR tag support in category grouping Update the notification categories settings to include QR tag filtering, ensuring workflows with only marker tags (QDC/QR) are grouped under 'uncategorized'. This extends the existing QDC tag logic to handle QR tags consistently. * Remove MTF banner (#2672) * Remove MTF banner (#2672) * [QF-2775] - Show the data source provider of the translation on the translation list (#2594) * Add shortDescription field to AvailableTranslation interface * Update ShortDescription interface to allow nullable fields for description and languageName * Add HoverablePopover component to display translation short descriptions with tooltips - Integrated HoverablePopover in TranslationSelectionBody to show short descriptions for translations. - Updated Popover and Tooltip components to support new INFO type for better styling. - Enhanced Tooltip and Popover to conditionally apply styles based on the type prop. * Enhance styling for Popover, Tooltip, and SearchSelectionBody components - Added new .info class to Popover and Tooltip for consistent elevated background styling. - Introduced .containerInfo class to Popover for margin adjustments. - Updated SearchSelectionBody with .infoIcon class for improved icon styling and layout adjustments. * Add information-circle-outline icon and update imports in TranslationSelectionBody - Introduced a new SVG icon for information-circle-outline. - Updated the import path for the info icon in TranslationSelectionBody to use the new SVG. - Removed unused imports in TranslationSelectionBody for cleaner code. * Refactor imports and enhance Tooltip styling - Reintroduced necessary imports in TranslationSelectionBody for improved functionality. - Cleaned up Popover and Tooltip styles by removing unnecessary whitespace. - Enhanced the .info class in Tooltip with additional styling properties for better presentation. * Enhance Popover styling with additional properties - Added z-index, padding, font-size, line-height, and max-width to improve Popover appearance. - Ensured consistent styling for better integration with other components. * Refactor Popover and HoverablePopover components to use tooltipType prop - Updated Popover and HoverablePopover components to replace the type prop with tooltipType for better clarity and consistency. - Adjusted the TranslationSelectionBody to utilize the new tooltipType prop for the HoverablePopover. - Enhanced accessibility by adding aria-label to the info icon in TranslationSelectionBody. * Add translation-info key to common.json for Arabic and English locales - Introduced a new key translation-info in both Arabic and English locale files to provide users with information about translations. - Updated the sidebar navigation close message to maintain consistency in both language files. * Refactor Popover and Tooltip styles to utilize infoTooltipStyles mixin - Updated the .info class in both Popover and Tooltip components to use the new infoTooltipStyles mixin for consistent styling. - Removed redundant properties from the .info class to streamline the code and enhance maintainability. * Update ShortDescription interface to remove nullability from description and languageName fields * Fix spacing in Popover styles for better readability - Adjusted the SCSS selector for the span element within the Popover component to improve code clarity and maintainability. * Update tooltip styles to use a new shadow variable - Replaced the hardcoded box-shadow in the infoTooltipStyles mixin with a new CSS variable for tooltip shadow. - Added the --shadow-tooltip variable to dark, light, and sepia themes for consistent shadow styling across themes. * fix: show yellow lightbulb icon for clarification questions (#2659) * fix: show yellow lightbulb icon for clarification questions The API returns question type keys with incorrect casing (e.g., "cLARIFICATION" instead of "CLARIFICATION"). Added normalization to convert type keys to uppercase, allowing the yellow lightbulb icon to display correctly for verses with clarification questions. * fix: use local type definition in test to avoid import issues Avoid importing QuestionsData from api.ts which has complex dependencies that don't resolve in the Vitest test environment. * refactor: move normalizeQuestionsData to separate utility file Move the normalization function to src/utils/questions.ts to avoid test import issues with complex dependencies in api.ts. * [QF-3156] Add "Ask Question" Button to Quranic Calendar Hero (#2581) * feat(quranic-calendar): add ask question button for logged-in users - introduces a new button that allows logged-in users to ask questions - opens a Google Form for submitting questions * feat(quranic-calendar): enhance action buttons with responsive design - refactor action buttons to use useIsMobile hook for mobile detection - update button styles for better responsiveness and alignment - conditionally render ask question button based on user subscription status * feat(quranic-calendar): refactor action buttons layout style * feat(quranic-calendar): improve button text visibility and responsiveness for mobile devices * fix: use reactive useIsLoggedIn hook instead of isLoggedIn function * reactor: align code with project standards * chore: add comment * refactor: removed className and capitalize function * feat: enhance action buttons with accessibility improvements * refactor: use enum for social button names and improve className handling * QF-4028 - Change order of the sections on QDC homepage for guest user in responsive view (#2622) * changed order of the sections on homepage for guest user in responsive view * changed a logic * QF-3590: Update PopularButton and ChapterCard styles for improved responsivene and RTL support (#2558) * Update PopularButton and ChapterCard styles for improved responsiveness and RTL support * Update HeroButtons styles to enforce nowrap text wrapping for better layout consistency * Update PopularButton styles to set fixed widths for improved layout on different screen sizes * Remove extra newline in PopularButton styles * Remove unnecessary whitespace in PopularButton styles for cleaner code * Implement PopularDropdown component and integrate it into HomePageHero; refactor PopularButton to accept onClick prop for dropdown handling * Remove PopularButton styles as part of the component refactor; streamline codebase by eliminating unused SCSS file. * QF-2082 - Hide the navigation drawer when not on Quran reading pages. (#2546) Signed-off-by: Mohammed Mokhtar <rrrokhtar@gmail.com> * sentry: don't send hydration errors (#2655) * sentry: don't send hydration errors (#2655) * Revert "QF-2082 - Hide the navigation drawer when not on Quran reading pages. (#2546)" This reverts commit bab7d83. * Open Apps Portal in new tab from Developers page (#2682) - Open the Apps Portal link in a new browser tab to avoid navigating users away from the Developers page. - This improves the developer experience by keeping the current context intact while exploring available apps. navigating users away from the Developers page. This improves the developer experience by keeping the current context intact while exploring available apps. .tsx * Open Apps Portal in new tab from Developers page (#2682) - Open the Apps Portal link in a new browser tab to avoid navigating users away from the Developers page. - This improves the developer experience by keeping the current context intact while exploring available apps. navigating users away from the Developers page. This improves the developer experience by keeping the current context intact while exploring available apps. .tsx * Open Apps Portal in new tab from Developers page (#2682) - Open the Apps Portal link in a new browser tab to avoid navigating users away from the Developers page. - This improves the developer experience by keeping the current context intact while exploring available apps. navigating users away from the Developers page. This improves the developer experience by keeping the current context intact while exploring available apps. .tsx * Rukn production (#2688) * course.{MainDetails,LessonView}: add shouldUseMilkdown check (#2507) * course.{MainDetails,LessonView}: add shouldUseMilkdown check * course.{MainDetails,LessonView} shouldUseMilkdown check: add comment * Course.{LessonView,MainDetails}: add p + p margins (#2623) --------- Co-authored-by: mustafa0x <mustafa.0x@gmail.com> * Sync UR locales * Sync UR locales * Sync UR locales * Add donation banner (#2693) * [QF-4268] Update Ask Question Icon (#2681) fix: update ask question icon * Fix ChapterHeader centering in Safari and Firefox (#2657) Replace justify-self: center with margin-inline: auto for cross-browser compatibility. justify-self only works in CSS Grid contexts, but Chrome has non-standard support for it in other layouts. Safari and Firefox follow the CSS spec strictly and require margin-inline: auto to center block elements with a max-width. Also fix pre-existing stylelint warnings (use logical CSS properties). Fixes: https://quranfoundation.atlassian.net/browse/QF-3926 * QF-3656 - Update verse link regex and tests for triple-digit references (#2560) Update verse link regex and tests for triple-digit references * refactor(bookmarks): Comprehensive bookmarks system overhaul (#2639) * QF-3590: Update PopularButton and ChapterCard styles for improved responsivene and RTL support (#2558) * Update PopularButton and ChapterCard styles for improved responsiveness and RTL support * Update HeroButtons styles to enforce nowrap text wrapping for better layout consistency * Update PopularButton styles to set fixed widths for improved layout on different screen sizes * Remove extra newline in PopularButton styles * Remove unnecessary whitespace in PopularButton styles for cleaner code * Implement PopularDropdown component and integrate it into HomePageHero; refactor PopularButton to accept onClick prop for dropdown handling * Remove PopularButton styles as part of the component refactor; streamline codebase by eliminating unused SCSS file. * refactor(bookmarks): extract custom hooks and improve cache management Refactor bookmark and collection functionality by extracting business logic into reusable custom hooks and fixing SWR cache patterns. - `useVerseBookmark` - verse bookmark operations with optimistic updates - `usePageBookmark` - page bookmark operations with optimistic updates - `useBookmarkCollections` - manage bookmark-collection associations - `useCollections` - fetch and manage user collections - `useBookmarkBase` - shared bookmark functionality - `useBookmarkCacheInvalidator` - centralized cache invalidation - Add "Pages" tab to profile bookmarks section - `BookmarkedPagesList` and `PageBookmarkPill` components - Bulk fetch optimization for Reading View (reduces API calls) - Replace improper `cache.delete()` with `globalMutate()` - Add optimistic updates for instant UI feedback - Improve login/logout sync with retry logic - Add `clearBookmarks` and `clearReadingTracker` Redux actions - Add unit tests for Redux slices - Reduce component complexity by ~60% - Separate UI components from business logic - Add TypeScript types and JSDoc documentation * chore(icons): replace bookmark svg with feather icon * fix(bookmarks): address PR review comments - Add isSyncingRef guard to prevent duplicate syncs in useSyncUserData when effect re-runs due to dependency changes - Remove redundant null check in useVerseBookmark handleRemoveBookmark * style: add eslint disable comments and remove debug logging to fix ts build * fix(bookmarks): address PR review comments - Remove redundant cache mutation in SaveToCollectionAction.tsx (addToCollection already handles cache mutation internally) - Remove unnecessary empty fragment wrapper in BookmarkAction.tsx - Fix `any` type to `unknown` in errors.ts for type safety - Add UseVerseBookmarkReturn interface for consistency with usePageBookmark 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix(bookmarks): validate page bookmark response to prevent stale/error data - Check response has valid id and matches requested page number - Handle 404 error objects that were incorrectly treated as bookmarks - Prevent stale cached data from one page showing on another page - Add pageNumber validation to isPageBookmarked and handleBookmarkRemove * fix(bookmarks): resolve page bookmark hydration mismatch issue - Capture initial SSR mushafId with useRef to avoid hydration mismatch where server session has correct preference but client localStorage is stale - Use serialized SWR key format (pageBookmark:{mushafId}:{pageNumber}) to ensure fetcher receives correct values on revalidation - Add isClient check to prevent fetching during SSR - Use Number() for type-safe bookmark key comparisons - Reduce SWR dedupingInterval from 10s to 2s for better cross-tab sync 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(bookmarks): improve sync reliability and cache invalidation - Use reactive useIsLoggedIn hook instead of non-reactive isLoggedIn() to properly trigger sync when login status changes - Clear lastSyncAt cookie when user logs out (handles server-side logout via /logout page where client-side cleanup doesn't run) - Add pageBookmark: pattern to cache invalidation so page bookmark SWR caches are revalidated after sync completes - Add path: '/' to cookie operations for consistent behavior - Add bookmarkedVerses/Pages to useEffect dependencies to ensure sync runs with latest local data 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> * fix: RTL display issues in TranslationView and ReadingView (#2658) * [QF-4284] Fix answers button flickering in TranslationView (#2696) * Add more language names (#2705) * Add language names * Updates * [QF-3991] Redesign Auth UI (#2647) * fix: input height inconsistency & password input focus issue * refactor(login): redesign sign-in/sign-up ui * feat: update social auth buttons to horizontal layout * fix(login): correct typo in unified registration text and add loading state * refactor: add small margin top utility class and apply to submit buttons * test: update tests & refactor code * fix: code comment * refactor: switch to logical properties for directional support --------- Co-authored-by: zonetecde <zonetecde@gmail.com> * [QF-4260] Update OrText color to medium gray (#2680) style(auth): update or text color to medium gray * feat: add safe redirect handling in LoginContainer component (#2704) * revert: SSR getServerProps revert d6c5d3b and 0b30ddd 0b30ddd d6c5d3b Signed-off-by: Mokhtar <rrrokhtar@gmail.com> * revert: non SSR impacted parts Signed-off-by: Mokhtar <rrrokhtar@gmail.com> --------- Signed-off-by: Mohammed Mokhtar <rrrokhtar@gmail.com> Signed-off-by: Mokhtar <rrrokhtar@gmail.com> Co-authored-by: Osama Sayed <osamasayed@users.noreply.github.com> Co-authored-by: H Ayoob <41894237+mohsinayoob@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> Co-authored-by: Osama Sayed <toto777_90@hotmail.com> Co-authored-by: Ahmed Hussein <ahmedhussein.developer@gmail.com> Co-authored-by: zonetecde <zonetecde@gmail.com> Co-authored-by: Rayane Staszewski <56195432+zonetecde@users.noreply.github.com> Co-authored-by: Test User <test@example.com> Co-authored-by: afifvdin <afifudin.fdn@gmail.com> Co-authored-by: Al Imam <alimam01828@gmail.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Basit Minhas <basit3407@gmail.com> Co-authored-by: mustafa0x <mustafa.0x@gmail.com>
…es [post-merge-sync] Signed-off-by: Mokhtar <rrrokhtar@gmail.com>
tesiting & staging sync Signed-off-by: Mokhtar <rrrokhtar@gmail.com> --------- Signed-off-by: Mohammed Mokhtar <rrrokhtar@gmail.com> Signed-off-by: Mokhtar <rrrokhtar@gmail.com> Co-authored-by: Osama Sayed <osamasayed@users.noreply.github.com> Co-authored-by: H Ayoob <41894237+mohsinayoob@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Yousef Dergham <79238462+yousefdergham@users.noreply.github.com> Co-authored-by: Osama Sayed <toto777_90@hotmail.com> Co-authored-by: Ahmed Hussein <ahmedhussein.developer@gmail.com> Co-authored-by: zonetecde <zonetecde@gmail.com> Co-authored-by: Rayane Staszewski <56195432+zonetecde@users.noreply.github.com> Co-authored-by: Test User <test@example.com> Co-authored-by: afifvdin <afifudin.fdn@gmail.com> Co-authored-by: Al Imam <alimam01828@gmail.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Basit Minhas <basit3407@gmail.com> Co-authored-by: mustafa0x <mustafa.0x@gmail.com>
- Add comprehensive review prompt and common mistakes documentation - Enhance pull request template with rollback safety and edge cases - Include detailed checklists for code quality and best practices
…ts (#2666) * fix: align quranic calendar weeks with CSV and update tests * applied copilot suggestions * force a stable timezone for tests --------- Co-authored-by: Osama Sayed <toto777_90@hotmail.com>
8be1726 to
0738ff9
Compare
…e homepage card prefetch to false.
…an.com-frontend-next into perf/homepage-prefetch
9c8660c to
b9c054d
Compare
Summary
Made the homepage cards and buttons stop prefetching heavy Quran pages, so landing on the homepage doesn’t fire a bunch of background requests anymore.
Added a shouldPrefetch flag to the shared Card/Link usage so we can keep things quiet by default but opt in later if we really need it.
Type of change
Test plan
Checked with MCP Playwright that the changes took effect on the site.
Checklist
Summary by CodeRabbit