Skip to content

animations in testimonial section#496

Merged
knoxiboy merged 1 commit into
knoxiboy:mainfrom
ArshiBansal:testimo-nial_section
Jun 5, 2026
Merged

animations in testimonial section#496
knoxiboy merged 1 commit into
knoxiboy:mainfrom
ArshiBansal:testimo-nial_section

Conversation

@ArshiBansal
Copy link
Copy Markdown
Contributor

@ArshiBansal ArshiBansal commented Jun 1, 2026

User description

Description

Adds an enhanced testimonials experience by introducing a horizontally scrolling marquee for displaying user reviews and a review submission form for collecting new testimonials.

Changes Made

  1. Created a reusable TestimonialCard component for displaying testimonial content.
  2. Added a TestimonialsMarquee component with:
    -> Infinite scrolling testimonial cards.
    -> Pause-on-hover functionality for improved readability.
    -> Responsive behavior across desktop and mobile devices.
  3. Updated testimonial data structure to support ratings.
  4. Added a ReviewForm component allowing users to:
    ->Enter their name.
    -> Select a role (Student, Teacher, Admin, Other).
    -> Provide an optional rating.
    -> Submit a testimonial message.
  5. Integrated the marquee and review form into the Testimonials section of the homepage.
  6. Improved user engagement and social proof by making testimonials more interactive and prominent.

Related Issue

Closes #464

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • [.] New feature (non-breaking change that adds functionality)
  • Documentation update (README, guides, comments)
  • [.] Style / UI change (no logic change)
  • Code refactor (no behavior change)
  • Test addition or update
  • Breaking change (fix or feature that would cause existing functionality to change)

Screenshots (if UI change)

Before After
(screenshot) (screenshot)

How Has This Been Tested?

  • [.] Tested locally with npm run dev
  • [.] Verified on mobile viewport (375px)
  • [.] Verified on desktop viewport (1440px)

Checklist

  • [.] I have tested my changes locally (npm run dev)
  • [.] My code follows the existing code style (TypeScript, Tailwind, no any types)
  • [.] I have not introduced unrelated changes (each PR should address one issue)
  • [.] I have added comments where necessary
  • [.] My branch is up to date with main
  • [.] I have linked the related issue above
  • [.] Screenshots are included (if this is a UI change)

CodeAnt-AI Description

Add a scrolling testimonial display with star ratings

What Changed

  • Testimonials now appear in a horizontal scrolling row instead of a static list
  • Hovering over the testimonial row pauses the motion so reviews are easier to read
  • Testimonial cards now show optional star ratings along with the reviewer’s name and role
  • The testimonial layout is responsive, with faster scrolling on smaller screens

Impact

✅ More visible social proof
✅ Easier reading of customer reviews
✅ Smoother testimonial viewing on mobile

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Summary by CodeRabbit

  • New Features
    • Added a testimonials carousel section featuring customer testimonials with star ratings that scrolls horizontally with smooth animations.
    • Testimonial cards now display author names, roles, feedback text, and optional ratings for enhanced social proof.

@codeant-ai
Copy link
Copy Markdown

codeant-ai Bot commented Jun 1, 2026

CodeAnt AI is reviewing your PR.

@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 1, 2026

@ArshiBansal is attempting to deploy a commit to the Karan Mani Tripathi 's projects Team on Vercel.

A member of the Team first needs to authorize it.

Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Technical Review

Hi @ArshiBansal! Thank you for your contribution to DoubtDesk.

The code changes look good. Before we can complete the technical review, approve, and merge this pull request, we have one final requirement for all contributors: Please star the DoubtDesk repository.

Once you have starred the repository, please drop a comment here saying "done" (or we will automatically detect it) and we will proceed with approving and merging your PR. Thank you.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 1, 2026

Review Change Stack

Walkthrough

This PR adds a testimonials marquee feature to the landing page. A new TestimonialCard component renders individual testimonials with optional star ratings. The TestimonialsMarquee component wraps multiple cards in a horizontally scrolling marquee with CSS animations, array duplication for seamless looping, and hover-to-pause behavior. The homepage is updated with testimonials data and formatting adjustments to integrate the marquee.

Changes

Testimonials Marquee Feature

Layer / File(s) Summary
Testimonial card component
src/components/TestimonialCard.tsx
Defines a Testimonial type with name, role, text, and optional rating fields. Exports TestimonialCard component that renders testimonial text, conditionally renders star rows based on rating, and displays author info with dark/light Tailwind styling.
Testimonials marquee component
src/components/TestimonialsMarquee.tsx
Implements a client component that duplicates the testimonials array to create seamless scrolling, renders each duplicated testimonial using TestimonialCard, includes styled-jsx CSS for marquee keyframe animation with continuous linear motion and hover pause, and applies responsive animation timing for devices under 768px.
Homepage testimonials section and content formatting
src/app/page.tsx
Reformats testimonials section heading and wrapper JSX, updates testimonial text data, and reflowed hero, features, and how-it-works section markup and content strings across multiple lines. Sign-out dialog handler quotation style and scroll-to-top button SVG structure adjusted; no functional changes to component logic or displayed content.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Suggested labels

gssoc'26, level:intermediate, quality:clean, type:feature, type:design, size/l

Suggested reviewers

  • knoxiboy
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The PR implements TestimonialCard and TestimonialsMarquee with marquee animations and responsive behavior, but lacks ReviewForm component and API endpoints required by issue #464. Implement the ReviewForm component with Name, Role, Rating, and Review fields; add POST /api/testimonials and GET /api/testimonials endpoints with validation.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'animations in testimonial section' is related to the main change but is incomplete; it omits the TestimonialCard component and ReviewForm additions central to issue #464.
Out of Scope Changes check ✅ Passed All changes in src/app/page.tsx and new components (TestimonialCard, TestimonialsMarquee) are within scope for issue #464's testimonial section enhancement.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed: dependency version conflict. Check your lock file or package.json.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

@coderabbitai review

@github-actions github-actions Bot added gssoc'26 GSSoC program issue level:intermediate Intermediate level task type:docs Documentation update type:feature New feature labels Jun 1, 2026
Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Technical Review

Hi @ArshiBansal! Thank you for your contribution to DoubtDesk.

The code changes look good. Before we can complete the technical review, approve, and merge this pull request, we have one final requirement for all contributors: Please star the DoubtDesk repository.

Once you have starred the repository, please drop a comment here saying "done" (or we will automatically detect it) and we will proceed with approving and merging your PR. Thank you.

@github-actions github-actions Bot added the size/l label Jun 1, 2026
@codeant-ai codeant-ai Bot added the size:L This PR changes 100-499 lines, ignoring generated files label Jun 1, 2026
@github-actions github-actions Bot removed the size:L This PR changes 100-499 lines, ignoring generated files label Jun 1, 2026
Comment thread src/app/page.tsx
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/app/page.tsx (1)

376-397: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

TestimonialsMarquee component is not integrated.

The testimonials section still uses the old grid layout instead of the new TestimonialsMarquee component created in this PR. The PR objectives state "Integrates the marquee and review form into the homepage Testimonials section," but the marquee component is not being used here.

🔄 Proposed integration of TestimonialsMarquee
+import TestimonialsMarquee from "`@/components/TestimonialsMarquee`";
+
 // ... rest of imports

 export default function Home() {
   // ... existing code

   const testimonials = [
     {
       name: "Aarav Sharma",
       role: "B.Tech Student",
       text: "DoubtDesk made it so easy to clear my doubts during exam prep. The AI explanations are super clear.",
     },
     {
       name: "Neha Verma",
       role: "CS Student",
       text: "No more messy WhatsApp groups. Everything is structured and easy to follow.",
     },
     {
       name: "Rohit Mehta",
       role: "Teaching Assistant",
       text: "Analytics help me understand where students struggle the most.",
     },
   ];

   // ... existing code

   return (
     // ... existing JSX
     
     {/* Testimonials Section */}
     <section
       id="testimonials"
       className="scroll-mt-20 px-4 sm:px-6 lg:px-8 py-20 relative z-10 border-t border-slate-200/60 dark:border-zinc-900 bg-slate-100/40 dark:bg-black/20 transition-colors duration-500"
     >
       <div className="max-w-7xl mx-auto space-y-16">
         <div className="text-center space-y-3">
           <div
             className={`${staatliches.className} text-sm tracking-[0.14em] text-blue-600 dark:text-blue-400 uppercase`}
           >
             Testimonials
           </div>
           <h3 className="text-3xl sm:text-4xl font-extrabold text-slate-900 dark:text-slate-100 tracking-tight transition-colors duration-300">
             What students say
           </h3>
           <p className="text-base text-slate-600 dark:text-zinc-400 max-w-md mx-auto transition-colors duration-300">
             Real feedback from learners and educators
           </p>
         </div>

-        <div className="grid md:grid-cols-3 gap-6">
-          {testimonials.map((t, index) => (
-            <div
-              key={t.name}
-              style={{ animationDelay: `${index * 200}ms` }}
-              className="p-6 rounded-3xl border border-slate-200/80 dark:border-zinc-800/80 bg-white dark:bg-zinc-900/40 backdrop-blur-md hover:border-blue-400 dark:hover:border-zinc-700 hover:bg-slate-50 dark:hover:bg-zinc-900/60 transition-all duration-500 flex flex-col justify-between shadow-sm dark:shadow-none hover:shadow-xl hover:-translate-y-1 animate-in fade-in slide-in-from-bottom-6 fill-mode-both"
-            >
-              <p className="text-slate-600 dark:text-slate-300 text-sm leading-relaxed italic transition-colors duration-300">
-                "{t.text}"
-              </p>
-
-              <div className="mt-6 pt-4 border-t border-slate-100 dark:border-zinc-800/60 flex flex-col">
-                <div className="text-slate-950 dark:text-slate-100 font-bold tracking-tight transition-colors duration-300">
-                  {t.name}
-                </div>
-                <div className="text-xs font-medium text-slate-400 dark:text-zinc-500 mt-0.5 transition-colors duration-300">
-                  {t.role}
-                </div>
-              </div>
-            </div>
-          ))}
-        </div>
+        <TestimonialsMarquee testimonials={testimonials} />
       </div>
     </section>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/page.tsx` around lines 376 - 397, Replace the manual grid mapping of
testimonials in the page component with the new TestimonialsMarquee component:
import TestimonialsMarquee, remove the block that maps testimonials.map(...)
(the div with className "grid md:grid-cols-3 gap-6" and its children), and
render <TestimonialsMarquee testimonials={testimonials} /> in its place ensuring
you pass the testimonials array prop; also remove any duplicate styling wrapper
that is no longer needed and keep any surrounding section/container markup
intact.
🧹 Nitpick comments (4)
src/components/TestimonialsMarquee.tsx (2)

49-53: ⚡ Quick win

Key generation may cause collisions with duplicate names.

Using ${testimonial.name}-${index} for keys can produce collisions if the testimonials array contains duplicate names. While unlikely, this could cause React rendering issues.

🔑 Proposed improvement for unique keys

If testimonials have unique IDs, use those:

-            <TestimonialCard
-              key={`${testimonial.name}-${index}`}
-              testimonial={testimonial}
-            />
+            <TestimonialCard
+              key={testimonial.id ?? `${testimonial.name}-${testimonial.role}-${index}`}
+              testimonial={testimonial}
+            />

Or include more fields to ensure uniqueness:

             <TestimonialCard
-              key={`${testimonial.name}-${index}`}
+              key={`${testimonial.name}-${testimonial.role}-${index}`}
               testimonial={testimonial}
             />
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/TestimonialsMarquee.tsx` around lines 49 - 53, The key prop on
the mapped duplicatedTestimonials currently uses `${testimonial.name}-${index}`
which can collide for duplicate names; update the mapping in the
duplicatedTestimonials => TestimonialCard render to use a truly unique
identifier (prefer testimonial.id if available) or compose a more unique key
(e.g., combine testimonial.id or email with index or timestamp) and set that as
the key prop on TestimonialCard so keys are stable and unique across renders.

13-17: ⚡ Quick win

Add empty state handling.

The component doesn't handle the case when testimonials is empty or undefined, which could result in an empty marquee or runtime errors.

🛡️ Proposed empty state handling
 export default function TestimonialsMarquee({
   testimonials,
 }: {
   testimonials: Testimonial[];
 }) {
+  if (!testimonials || testimonials.length === 0) {
+    return null;
+  }
+
   const duplicatedTestimonials = [...testimonials, ...testimonials];

As per coding guidelines, **/*.tsx files must be reviewed for missing loading/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/TestimonialsMarquee.tsx` around lines 13 - 17, The
TestimonialsMarquee component does not handle empty or undefined testimonials,
which can produce an empty marquee or runtime errors; update the
TestimonialsMarquee function to guard the testimonials prop (e.g., if
(!testimonials || testimonials.length === 0) ...) and return a sensible empty
state UI or null/placeholder (a short message or skeleton) so downstream code
that maps or renders items (inside TestimonialsMarquee) never runs against
undefined/empty arrays; ensure the guard is added before any map/iteration or
marquee logic in TestimonialsMarquee.
src/app/page.tsx (1)

115-131: 💤 Low value

Testimonials data lacks rating field.

The testimonials data array doesn't include the optional rating field that the TestimonialCard component supports. Consider adding ratings to showcase the star display feature.

⭐ Example with ratings added
   const testimonials = [
     {
       name: "Aarav Sharma",
       role: "B.Tech Student",
       text: "DoubtDesk made it so easy to clear my doubts during exam prep. The AI explanations are super clear.",
+      rating: 5,
     },
     {
       name: "Neha Verma",
       role: "CS Student",
       text: "No more messy WhatsApp groups. Everything is structured and easy to follow.",
+      rating: 5,
     },
     {
       name: "Rohit Mehta",
       role: "Teaching Assistant",
       text: "Analytics help me understand where students struggle the most.",
+      rating: 4,
     },
   ];
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/page.tsx` around lines 115 - 131, The testimonials array used to
render TestimonialCard instances is missing the optional rating property, so add
a numeric rating (e.g., 1–5) to each testimonial object in the testimonials
constant (the objects for "Aarav Sharma", "Neha Verma", "Rohit Mehta") so
TestimonialCard can display stars; ensure the property name is exactly rating
and matches the prop expected by TestimonialCard and that any
mapping/prop-passing code that spreads or selects fields (where testimonials are
mapped into <TestimonialCard ... />) continues to pass the rating through.
src/components/TestimonialCard.tsx (1)

16-16: ⚡ Quick win

Fixed width may limit responsive behavior.

The card uses a fixed width of 320px which prevents it from adapting to smaller containers. Consider using max-w-[320px] w-full to allow the card to shrink on smaller screens while maintaining a maximum width.

📱 Proposed responsive improvement
-    <div className="w-[320px] flex-shrink-0 rounded-3xl border border-slate-200 dark:border-zinc-800 bg-white dark:bg-zinc-900/40 p-6 shadow-sm">
+    <div className="w-full max-w-[320px] flex-shrink-0 rounded-3xl border border-slate-200 dark:border-zinc-800 bg-white dark:bg-zinc-900/40 p-6 shadow-sm">

As per coding guidelines, **/*.tsx files must be reviewed for responsive design considerations.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/TestimonialCard.tsx` at line 16, The TestimonialCard div uses
a fixed width ("w-[320px]") which prevents shrinking; update the className on
the root div in the TestimonialCard component to use responsive sizing (replace
"w-[320px]" with "max-w-[320px] w-full" in the className string) so the card
keeps a 320px max but can shrink on smaller screens.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/TestimonialCard.tsx`:
- Around line 21-27: The star-rating output in TestimonialCard uses
testimonial.rating to render star spans but has no accessible label; update the
container (the div rendering the stars) to include an accessible label (e.g.,
aria-label or role="img" with aria-label) that exposes the rating value and
scale (for example: "Rating: X out of 5") so screen readers announce the meaning
and value; keep the conditional using testimonial.rating and preserve the
Array.from mapping of spans but ensure the aria-label references
testimonial.rating (and optional max value) to provide semantic context.

In `@src/components/TestimonialsMarquee.tsx`:
- Around line 6-11: Duplicate Testimonial interface is defined in multiple
components; extract the interface named Testimonial into a single shared type
file (e.g., export interface Testimonial { name: string; role: string; text:
string; rating?: number }) and remove the local definitions, then update the
components that reference Testimonial (TestimonialsMarquee and TestimonialCard)
to import the shared Testimonial type instead of declaring it inline.
- Around line 47-56: The marquee only pauses on hover; make it
keyboard-accessible by adding a focused/keyboard-controlled pause state:
introduce a local state (e.g., paused) in TestimonialsMarquee and apply it to
the marquee animation logic, make the outer container (the element with
className "marquee-container") focusable (tabIndex=0), add onFocus={() =>
setPaused(true)} and onBlur={() => setPaused(false)}, and handle onKeyDown on
that same element to toggle or set paused when Space or Enter is pressed; also
add an accessible label (aria-label) describing the control and ensure
TestimonialCard rendering (duplicatedTestimonials map) continues to use the same
keys. Ensure the pause state is the single source of truth for stopping the
marquee animation.

---

Outside diff comments:
In `@src/app/page.tsx`:
- Around line 376-397: Replace the manual grid mapping of testimonials in the
page component with the new TestimonialsMarquee component: import
TestimonialsMarquee, remove the block that maps testimonials.map(...) (the div
with className "grid md:grid-cols-3 gap-6" and its children), and render
<TestimonialsMarquee testimonials={testimonials} /> in its place ensuring you
pass the testimonials array prop; also remove any duplicate styling wrapper that
is no longer needed and keep any surrounding section/container markup intact.

---

Nitpick comments:
In `@src/app/page.tsx`:
- Around line 115-131: The testimonials array used to render TestimonialCard
instances is missing the optional rating property, so add a numeric rating
(e.g., 1–5) to each testimonial object in the testimonials constant (the objects
for "Aarav Sharma", "Neha Verma", "Rohit Mehta") so TestimonialCard can display
stars; ensure the property name is exactly rating and matches the prop expected
by TestimonialCard and that any mapping/prop-passing code that spreads or
selects fields (where testimonials are mapped into <TestimonialCard ... />)
continues to pass the rating through.

In `@src/components/TestimonialCard.tsx`:
- Line 16: The TestimonialCard div uses a fixed width ("w-[320px]") which
prevents shrinking; update the className on the root div in the TestimonialCard
component to use responsive sizing (replace "w-[320px]" with "max-w-[320px]
w-full" in the className string) so the card keeps a 320px max but can shrink on
smaller screens.

In `@src/components/TestimonialsMarquee.tsx`:
- Around line 49-53: The key prop on the mapped duplicatedTestimonials currently
uses `${testimonial.name}-${index}` which can collide for duplicate names;
update the mapping in the duplicatedTestimonials => TestimonialCard render to
use a truly unique identifier (prefer testimonial.id if available) or compose a
more unique key (e.g., combine testimonial.id or email with index or timestamp)
and set that as the key prop on TestimonialCard so keys are stable and unique
across renders.
- Around line 13-17: The TestimonialsMarquee component does not handle empty or
undefined testimonials, which can produce an empty marquee or runtime errors;
update the TestimonialsMarquee function to guard the testimonials prop (e.g., if
(!testimonials || testimonials.length === 0) ...) and return a sensible empty
state UI or null/placeholder (a short message or skeleton) so downstream code
that maps or renders items (inside TestimonialsMarquee) never runs against
undefined/empty arrays; ensure the guard is added before any map/iteration or
marquee logic in TestimonialsMarquee.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e139874f-20e5-4ae0-b467-8b1852a02974

📥 Commits

Reviewing files that changed from the base of the PR and between 99d5b8b and 44f5ba7.

📒 Files selected for processing (3)
  • src/app/page.tsx
  • src/components/TestimonialCard.tsx
  • src/components/TestimonialsMarquee.tsx

Comment thread src/components/TestimonialCard.tsx
Comment thread src/components/TestimonialsMarquee.tsx
Comment thread src/components/TestimonialsMarquee.tsx
Comment thread src/components/TestimonialCard.tsx
Comment thread src/components/TestimonialsMarquee.tsx
Comment thread src/components/TestimonialsMarquee.tsx
@codeant-ai
Copy link
Copy Markdown

codeant-ai Bot commented Jun 1, 2026

CodeAnt AI finished reviewing your PR.

Repository owner deleted a comment from github-actions Bot Jun 4, 2026
@knoxiboy knoxiboy added the frontend UI components, pages, styling label Jun 4, 2026
@knoxiboy
Copy link
Copy Markdown
Owner

knoxiboy commented Jun 4, 2026

Hi @ArshiBansal! Thanks for your work on this. Before we can merge, please address the following:

  • Implement the 7 unresolved suggestions from CodeRabbit/CodeAnt AI (make sure to reply or resolve the review threads).

Once these are fixed, the PR will be automatically evaluated again. Let us know if you need any help!

@knoxiboy knoxiboy merged commit 7a4f7ed into knoxiboy:main Jun 5, 2026
16 of 19 checks passed
@github-actions github-actions Bot added gssoc:approved Approved for GSSoC mentor:knoxiboy Reviewed by mentor knoxiboy quality:clean Clean code quality and removed size/l labels Jun 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

frontend UI components, pages, styling gssoc:approved Approved for GSSoC gssoc'26 GSSoC program issue level:intermediate Intermediate level task mentor:knoxiboy Reviewed by mentor knoxiboy quality:clean Clean code quality type:docs Documentation update type:feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Interactive Testimonials Page with Marquee Reviews and Review Submission Form

2 participants