Skip to content

testimonials#56

Merged
Kitenite merged 3 commits intomainfrom
testimonials
Nov 11, 2025
Merged

testimonials#56
Kitenite merged 3 commits intomainfrom
testimonials

Conversation

@Kitenite
Copy link
Copy Markdown
Collaborator

@Kitenite Kitenite commented Nov 10, 2025

Description

Related Issues

Type of Change

  • Bug fix
  • New feature
  • Documentation
  • Refactor
  • Other (please describe):

Testing

Screenshots (if applicable)

Additional Notes

Summary by CodeRabbit

  • New Features
    • Added a testimonials section to the homepage showcasing customer quotes and reviews.
    • Two looping, horizontally scrolling testimonial rows with mirrored animations for continuous motion.
    • Animated section header, responsive typography, and consistent card layout showing quote, author, title, and personalized avatar.
    • Smooth entrance and scrolling animations for an engaging gallery experience.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Nov 10, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

Adds a new TestimonialsSection React component (exported via its index barrel) and integrates it into the home page; the component renders two mirrored, continuously-scrolling testimonial rows with animated cards and color-coded avatar circles.

Changes

Cohort / File(s) Summary
TestimonialsSection component
apps/website/src/app/components/TestimonialsSection/TestimonialsSection.tsx, apps/website/src/app/components/TestimonialsSection/index.ts
New React + TypeScript component defining a readonly TESTIMONIALS array and exporting TestimonialsSection. Renders an animated header and two horizontally-looping testimonial rows using framer-motion; each card shows quote text, avatar circle with per-item color, author and title. Barrel export added.
Home page integration
apps/website/src/app/page.tsx
Imports and renders TestimonialsSection on the home page between FeaturesSection and Footer.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Page as Home Page
  participant Component as TestimonialsSection
  participant Motion as framer-motion (animation)
  Note over Page,Component `#DDEBF7`: Page imports and mounts component
  Page->>Component: render()
  Component->>Component: read TESTIMONIALS array
  Component->>Motion: start loop animation (row A -> left-to-right)
  Component->>Motion: start loop animation (row B -> right-to-left, mirrored)
  Motion-->>Component: animation frames / looped transforms
  Component-->>Page: DOM with two scrolling rows and testimonial cards
  Note over Motion `#F6E7D7`: Continuous, mirrored marquee animations
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Focus review on responsive layout, accessibility (semantic elements, alt text), and animation performance.
  • Files to check closely:
    • TestimonialsSection.tsx — rendering logic, loop animations, key props for framer-motion.
    • page.tsx — import placement and potential SSR/SSR hydration concerns.

Possibly related PRs

  • testimonials #56 — Adds the same TestimonialsSection component, data, and index re-export; likely the directly related PR for this change.

Poem

🐇 I hop in with a cheerful cheer,

Quotes that sparkle far and near.
Avatars twirl, the rows take flight,
Motion loops through day and night.
A tiny rabbit claps—delight!

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is largely incomplete with placeholder text, unchecked type of change boxes, and empty critical sections like Related Issues and Testing. Complete the description template by providing a clear summary of changes, checking the appropriate type of change, linking related issues, and documenting testing performed.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'testimonials' is vague and generic, lacking specificity about what was actually implemented or changed. Revise the title to be more descriptive, such as 'Add TestimonialsSection component to homepage' to clearly indicate the primary change.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e0af9d8 and bef90f0.

📒 Files selected for processing (1)
  • apps/website/src/app/components/TestimonialsSection/TestimonialsSection.tsx (1 hunks)

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

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: 1

🧹 Nitpick comments (2)
apps/website/src/app/components/TestimonialsSection/TestimonialsSection.tsx (2)

72-74: Consider using index or unique ID for React key.

Currently using testimonial.author as the key, which works since all names are unique. However, if the same author provides multiple testimonials or names aren't guaranteed unique, React reconciliation could break.

Since this is a static array, using the index is acceptable:

-					{TESTIMONIALS.map((testimonial, idx) => (
+					{TESTIMONIALS.map((testimonial, idx) => (
 						<motion.div
-							key={testimonial.author}
+							key={idx}

Alternatively, add a unique id field to each testimonial object for better semantic clarity.


71-111: Consider extracting testimonial card into a separate component.

The testimonial card rendering logic (lines 73-109) could be extracted into a separate TestimonialCard component to improve maintainability and testability.

This would make the code more modular:

// TestimonialCard.tsx
interface TestimonialCardProps {
  testimonial: typeof TESTIMONIALS[number];
  index: number;
}

function TestimonialCard({ testimonial, index }: TestimonialCardProps) {
  return (
    <motion.div
      initial={{ opacity: 0, y: 20 }}
      whileInView={{ opacity: 1, y: 0 }}
      viewport={{ once: true, margin: "-100px" }}
      transition={{ duration: 0.5, delay: index * 0.1 }}
      className="bg-zinc-900/50 rounded-2xl p-6 sm:p-8 border border-zinc-800 hover:border-zinc-700 transition-colors"
    >
      {/* card content */}
    </motion.div>
  );
}

Then simplify the main component:

{TESTIMONIALS.map((testimonial, idx) => (
  <TestimonialCard key={idx} testimonial={testimonial} index={idx} />
))}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fe59ed3 and e0af9d8.

📒 Files selected for processing (3)
  • apps/website/src/app/components/TestimonialsSection/TestimonialsSection.tsx (1 hunks)
  • apps/website/src/app/components/TestimonialsSection/index.ts (1 hunks)
  • apps/website/src/app/page.tsx (2 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
apps/website/src/app/components/TestimonialsSection/TestimonialsSection.tsx (1)
apps/website/src/app/components/TestimonialsSection/index.ts (1)
  • TestimonialsSection (1-1)
apps/website/src/app/page.tsx (2)
apps/website/src/app/components/TestimonialsSection/TestimonialsSection.tsx (1)
  • TestimonialsSection (52-115)
apps/website/src/app/components/TestimonialsSection/index.ts (1)
  • TestimonialsSection (1-1)
🔇 Additional comments (2)
apps/website/src/app/page.tsx (1)

10-10: LGTM!

The TestimonialsSection is correctly imported and positioned in the page layout between features and footer, following the same pattern as other components.

Also applies to: 22-22

apps/website/src/app/components/TestimonialsSection/index.ts (1)

1-1: LGTM!

Standard barrel export pattern consistent with the codebase conventions.

Comment thread apps/website/src/app/components/TestimonialsSection/TestimonialsSection.tsx Outdated
@Kitenite Kitenite merged commit 49d20f8 into main Nov 11, 2025
1 of 5 checks passed
@Kitenite Kitenite deleted the testimonials branch November 11, 2025 18:10
This was referenced Nov 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant