diff --git a/package-lock.json b/package-lock.json index ce3b812b..c3e9987f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6259,6 +6259,40 @@ "node": ">=14.0.0" } }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emotion/is-prop-valid": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", diff --git a/src/components/testimonials/TestimonialCard.tsx b/src/components/testimonials/TestimonialCard.tsx index d20acf21..fea7aeca 100644 --- a/src/components/testimonials/TestimonialCard.tsx +++ b/src/components/testimonials/TestimonialCard.tsx @@ -2,7 +2,7 @@ import React from "react"; import { motion } from "framer-motion"; import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar"; import { useSafeColorMode } from "../../utils/useSafeColorMode"; -import { ExternalLink, Quote } from "lucide-react"; + interface TestimonialCardProps { name: string; @@ -10,7 +10,8 @@ interface TestimonialCardProps { content: string; date: string; avatar: string; - link: string; + gradient?: string; + borderColor?: string; } const TestimonialCard: React.FC = ({ @@ -19,17 +20,38 @@ const TestimonialCard: React.FC = ({ content, date, avatar, - link, + gradient, + borderColor, }) => { const { colorMode, isDark } = useSafeColorMode(); - const formatLinkDisplay = (url: string) => { - try { - const urlObj = new URL(url); - return urlObj.hostname + urlObj.pathname; - } catch { - return url; + const getBackgroundStyle = () => { + let colorStop = ""; + if (gradient === "bg-pink-100") { + colorStop = "rgba(244, 194, 214, 0.35)"; // Pink + } else if (gradient === "bg-purple-100") { + colorStop = "rgba(191, 190, 255, 0.35)"; // Blue/Lavender + } else { + colorStop = "rgba(165, 243, 252, 0.35)"; // Cyan } + + return { + background: ` + radial-gradient( + ellipse 600px 500px at 10% 85%, + ${colorStop} 0%, + rgba(255, 255, 255, 0) 70% + ), + linear-gradient( + 135deg, + rgba(255, 255, 255, 0.95) 0%, + rgba(255, 255, 255, 0.9) 100% + ) + `, + backdropFilter: "blur(4px)", + WebkitBackdropFilter: "blur(4px)", + border: "1px solid rgba(200, 200, 220, 0.4)", + }; }; return ( @@ -37,104 +59,60 @@ const TestimonialCard: React.FC = ({ initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} exit={{ opacity: 0, y: -20 }} - whileHover={{ y: -5 }} + whileHover={{ y: -8 }} transition={{ duration: 0.3 }} - className={`group relative h-full overflow-hidden rounded-2xl border backdrop-blur-sm transition-all duration-300 hover:shadow-2xl ${ - isDark - ? "border-gray-700/50 bg-gray-900/80 shadow-xl" - : "border-gray-200/50 bg-white/90 shadow-lg" - }`} + className={`group relative h-full w-full overflow-hidden rounded-3xl min-h-[550px] flex flex-col justify-between p-8`} + style={getBackgroundStyle()} > - {/* Gradient Background */} -
- - {/* Quote Icon */} -
- -
+ {/* Subtle glossy overlay */} +
-
- {/* Header */} -
-
- - - - {name.charAt(0)} - - -
-
-
-

- {name} -

-

- @{username} -

-
-
+ {/* Soft shadow */} +
- {/* Content */} -
-

- {content.replace(/#\w+/g, '').trim()} +

+ {/* Testimonial Quote - Top Section */} +
+

+ "{content.replace(/#\w+/g, '').trim()}"

- {/* Footer */} -
- {/* Hashtags */} -
- {content.match(/#\w+/g)?.map((hashtag, index) => ( - - {hashtag} - - ))} -
+ {/* Avatar and Info - Bottom Section */} +
+
+ {/* Large Avatar with White Background */} + + + + {name.charAt(0)} + + + +
+

+ {name} +

+ {username !== "AryanGupta" && username !== "DonaldAnyamba" && ( +

+ {username === "VivienChen" ? "Founder @ Toastie (BC Y24)" : + username === "DanielHan" ? "Founder @ Unsloth AI (YC W24, BC Y24)" : + "AI Engineer @ Relevance AI"} +

+ )} - {/* Link and Date */} -
- - {formatLinkDisplay(link)} - - - - {date} - +
+ {date} +
+
- - {/* Hover Effect Border */} -
); }; diff --git a/src/components/testimonials/TestimonialCarousel.tsx b/src/components/testimonials/TestimonialCarousel.tsx index db76a2f6..2b23f7fb 100644 --- a/src/components/testimonials/TestimonialCarousel.tsx +++ b/src/components/testimonials/TestimonialCarousel.tsx @@ -7,7 +7,6 @@ import { CarouselPrevious, type CarouselApi, } from "../ui/carousel"; -import { Button } from "../ui/button"; import TestimonialCard from "./TestimonialCard"; import Autoplay from "embla-carousel-autoplay"; import { motion } from "framer-motion"; @@ -15,31 +14,54 @@ import { useSafeColorMode } from "../../utils/useSafeColorMode"; const baseTestimonials = [ { - name: "Rashi Chouhan", - username: "RashiChouhan", + name: "Ethan Trang", + username: "EthanTrang", content: - "Valuable insights shared, productive discussions, and actionable outcomes. Looking forward to implementing the strategies discussed.! #TechCommunity #WomenInTech", + "The Recode Hive team are amazing to work with, very responsive. I'm a newbie to AI and they stepped us through the process", date: "May 18, 2024", - avatar: "/icons/adobe.png", - link: "https://topmate.io/sanjaykv", + avatar: "/icons/ethan.png", + gradient: "bg-pink-100", + borderColor: "border-pink-200", }, { - name: "Namith", - username: "namith", + name: "Vivien Chen", + username: "VivienChen", content: - "Gave remarkable insights on parts i have to improve and gave me new opportunities . cheers~! #TechCommunity #Grateful", + "The tech talent in Recode Hive is unparalleled. We worked with consultants who work in companies like Palantir, OpenAI, Relevance AI and more", date: "April 21, 2023", - avatar: "/icons/google.png", - link: "https://topmate.io/sanjaykv", + avatar: "/icons/vivien.png", + gradient: "bg-purple-100", + borderColor: "border-purple-200", }, { - name: "Rajdeep Chakraborty", - username: "RajdeepChakraborty", + name: "Daniel Han", + username: "DanielHan", content: - "I appreciate Sanjay sir's insights on open source and his suggestions for improving my GitHub profile. I'm excited to hear more and discuss open source further.! #OpenSource #TechCommunity", + "We were able to get our project scoped, matched and kicked off in one day.Our invoicing is now 10x faster, thanks to Recode Hive's automation.", date: "Oct 18, 2024", - avatar: "/icons/amazon.png", - link: "https://topmate.io/sanjaykv", + avatar: "/icons/daniel.png", + gradient: "bg-cyan-100", + borderColor: "border-cyan-200", + }, + { + name: "Aryan Gupta", + username: "AryanGupta", + content: + "you're constantly inspiring me to get applying for jobs and help me to improve my resume for 90+ ats score and improve my LinkedIn profile. you provided me detailed document analysis of my resume and video for me", + date: "Sept 17, 2024", + avatar: "/icons/aryan.png", + gradient: "bg-pink-100", + borderColor: "border-pink-200", + }, + { + name: "Donald Anyamba", + username: "DonaldAnyamba", + content: + "Pointing out that my contributions all points back to my personal projects is an eye opener, especially now that I want to start building towards open source.", + date: "May 4, 2026", + avatar: "/icons/donald.png", + gradient: "bg-purple-100", + borderColor: "border-purple-200", }, ]; @@ -65,35 +87,37 @@ export function TestimonialCarousel() { }, [api]); return ( -
- {/* Background Elements */} -
-
-
+
+ {/* Dotted Grid Background Pattern */} +
+ + {/* Animated Gradient Orbs */} +
+
+
+
-
- + -
- - ⭐ Client Testimonials - -
-

- Loved by Many Users + Builders ❤️ Recode Hive

- +

+ Our builders go on to do incredible things from working at OpenAI to becoming AI engineers and founders. +

- + {testimonials.map((testimonial, index) => ( - - + + {/* Dots Indicator */}
{Array.from({ length: count }).map((_, index) => (
- - + +
diff --git a/static/icons/daniel.png b/static/icons/daniel.png new file mode 100644 index 00000000..16670633 Binary files /dev/null and b/static/icons/daniel.png differ diff --git a/static/icons/ethan.png b/static/icons/ethan.png new file mode 100644 index 00000000..1b1590b1 Binary files /dev/null and b/static/icons/ethan.png differ diff --git a/static/icons/vivien.png b/static/icons/vivien.png new file mode 100644 index 00000000..9b82cc29 Binary files /dev/null and b/static/icons/vivien.png differ