diff --git a/app/globals.css b/app/globals.css index 4a15d17..9e4a633 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,2 +1,17 @@ @import "tailwindcss"; @import "poyraz-ui/preset.css"; + +@layer utilities { + @keyframes marquee { + 0% { transform: translateX(0%); } + 100% { transform: translateX(-50%); } + } + + .animate-marquee { + animation: marquee 35s linear infinite; + } + + .pause-on-hover:hover { + animation-play-state: paused; + } +} diff --git a/components/custom-testimonial-card.tsx b/components/custom-testimonial-card.tsx new file mode 100644 index 0000000..59911f1 --- /dev/null +++ b/components/custom-testimonial-card.tsx @@ -0,0 +1,64 @@ +import React from "react"; +import Image from "next/image"; + +export interface CustomTestimonialCardProps extends React.HTMLAttributes { + quote: string; + author: string; + role?: string; + avatar?: string; + rating?: number; + lineClamp?: boolean; +} + +export const CustomTestimonialCard = React.forwardRef( + ({ quote, author, role, avatar, rating, lineClamp, className, ...props }, ref) => { + return ( +
+
+ {rating && ( +
+ {Array.from({ length: 5 }).map((_, i) => ( + + + + ))} +
+ )} +

+ "{quote}" +

+
+ +
+ {avatar ? ( + {author} + ) : ( +
+ {author.charAt(0)} +
+ )} +
+ {author} + {role && {role}} +
+
+
+ ); + } +); + +CustomTestimonialCard.displayName = "CustomTestimonialCard"; diff --git a/components/reference-cards.tsx b/components/reference-cards.tsx index 37df150..442b200 100644 --- a/components/reference-cards.tsx +++ b/components/reference-cards.tsx @@ -1,5 +1,5 @@ -import { Link } from "@/i18n/routing"; -import { TestimonialCard } from "poyraz-ui/molecules"; + +import { CustomTestimonialCard } from "@/components/custom-testimonial-card"; import { REFERENCES } from "@/data/references"; import { useLocale } from "next-intl"; import { getLocalizedValue } from "@/lib/locale"; @@ -7,40 +7,44 @@ import { getLocalizedValue } from "@/lib/locale"; type ReferenceCardsProps = { className?: string; cardClassName?: string; + lineClamp?: boolean; }; -export function ReferenceCards({ className, cardClassName }: ReferenceCardsProps) { +export function ReferenceCards({ className, cardClassName, lineClamp }: ReferenceCardsProps) { const locale = useLocale(); return (
{REFERENCES.map((item) => { const card = ( - ); - if (!item.profileHref) { - return
{card}
; + const href = item.documentHref || item.profileHref; + + if (!href) { + return
{card}
; } return ( - {card} - + ); })}
diff --git a/components/references-detail-content.tsx b/components/references-detail-content.tsx index 1df2947..8bb5869 100644 --- a/components/references-detail-content.tsx +++ b/components/references-detail-content.tsx @@ -15,8 +15,9 @@ export function ReferencesDetailContent() { ); diff --git a/components/references-section.tsx b/components/references-section.tsx index 35a61f2..d73b148 100644 --- a/components/references-section.tsx +++ b/components/references-section.tsx @@ -5,11 +5,20 @@ import { ReferenceCards } from "@/components/reference-cards"; export function ReferencesSection() { return (
-
- +
+ {/* We use two sets of cards for seamless infinite marquee effect */} +
+ + +
+
diff --git a/data/references.ts b/data/references.ts index d7886be..c2c681a 100644 --- a/data/references.ts +++ b/data/references.ts @@ -12,6 +12,7 @@ export type Reference = { avatar: string; rating?: number; profileHref?: string; + documentHref?: string; }; export const REFERENCES: Reference[] = [ @@ -85,4 +86,18 @@ export const REFERENCES: Reference[] = [ en: "I've been working with Poyraz since the early days of Shipin, and he continues to impress me with his professionalism. He has a rare combination of solid technical skills and passion for teaching others. If I was to say one thing about him, it would be his reliability. He never over-promises, always delivers on his commitments, and genuinely incorporates feedback to improve his work.", }, }, + { + id: "ilker-yoncaci", + author: "İlker Yoncacı", + role: { + tr: "Dr. Öğr. Üyesi - OSTİM Teknik Üniversitesi - VİA Bilgisayar Sistemleri Founder / CEO", + en: "Assist. Prof. Dr. - OSTİM Technical University - VİA Computer Systems Founder / CEO", + }, + avatar: "/avatars/ilker.png", + documentHref: "/referances/ilker.pdf", + quote: { + tr: "Poyraz AVSEVER’le Ostim Teknik Üniversitesi bünyesinde çalışırken tanıştım. Kendisi 2025-2026 Eğitim Öğretim Yılı Bahar döneminde iki dersimi birden almış ve gayet iyi notlarla derslerimden geçmiştir. Çalıştığı süre zarfında başarılı çalışmalara imza atan Poyraz AVSEVER’in yazılı ve sözlü iletişim becerileri son derece güçlüdür. Hem bağımsız hem de bir ekiple çalışabilen Poyraz, iş disiplini ile de beğenimizi kazanmıştır. Derslerin yanısıra Poyraz, web ve mobil teknolojiler konularında pek çok süreçte görev almıştır. Öğrenmeye açık yapısı ve araştırma hevesi sayesinde temel mühendislik altyapısını iyi bir seviyeye taşımıştır. Gerek ekip arkadaşları gerekse paydaşları ile kuvvetli bir iletişim kurmayı başaran; proaktif olarak fikir ve öneri geliştirebilen Poyraz’ın kurumunuza da aynı şekilde katkı sağlayacağına inanıyorum. Disiplinli çalışması ve uyumlu karakteri göz önüne alındığında, yer alacağı çalışmalarda verimli olacağını düşünüyor ve kendisini tavsiye ediyorum. Konuyla ilgili herhangi bir sorunuz olursa benimle iletişim kurabilirsiniz.", + en: "I met Poyraz AVSEVER while working at Ostim Technical University. He took two of my courses in the Spring semester of the 2025-2026 Academic Year and passed them with very good grades. Poyraz AVSEVER, who has carried out successful works during his time working, has extremely strong written and verbal communication skills. Capable of working both independently and with a team, Poyraz has won our appreciation with his work discipline. In addition to courses, Poyraz took part in many processes regarding web and mobile technologies. Thanks to his openness to learning and enthusiasm for research, he has brought his basic engineering infrastructure to a good level. I believe that Poyraz, who successfully establishes strong communication with both his teammates and stakeholders and can proactively develop ideas and suggestions, will contribute to your institution in the same way. Considering his disciplined work and harmonious character, I think he will be productive in the projects he will take part in and I recommend him. If you have any questions about the subject, you can contact me.", + }, + }, ];