Compare commits
4 Commits
version_2_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| e8d9c268dc | |||
|
|
bd99faf45a | ||
| 6ceaeeba0e | |||
| 017c06a4f2 |
@@ -1,154 +1,36 @@
|
||||
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import HeroCenteredLogos from '@/components/sections/hero/HeroCenteredLogos';
|
||||
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import TeamGlassCards from '@/components/sections/team/TeamGlassCards';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
// AUTO-GENERATED shell by per-section-migrate.
|
||||
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
|
||||
// files directly. Non-block content (wrappers, non-inlinable sections) is
|
||||
// preserved inline; extracted section blocks become <XSection/> refs.
|
||||
|
||||
export default function HomePage() {
|
||||
import React from 'react';
|
||||
import HeroSection from './HomePage/sections/Hero';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import FeaturesSection from './HomePage/sections/Features';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import TeamSection from './HomePage/sections/Team';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import SocialProofSection from './HomePage/sections/SocialProof';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroCenteredLogos
|
||||
avatarsSrc={[
|
||||
"http://img.b2bpic.net/free-photo/male-dj-grey-suit-listening-headphones-enjoying-music_114579-15960.jpg", "http://img.b2bpic.net/free-photo/middle-age-latin-businesswoman-smiling-happy-standing-with-arms-crossed-gesture-city_839833-17431.jpg", "http://img.b2bpic.net/free-photo/medium-shot-young-man-posing-black-white_23-2149411420.jpg", "http://img.b2bpic.net/free-photo/waist-up-confident-businessman-office_329181-19349.jpg"]}
|
||||
avatarText="Trusted by 50+ creatives worldwide"
|
||||
title="Mastering the Art of Cinematic Editing"
|
||||
description="I help directors, agencies, and brands elevate their visual stories through expert post-production and creative editing."
|
||||
primaryButton={{
|
||||
text: "View Portfolio", href: "#features"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Me", href: "#contact"}}
|
||||
names={[
|
||||
"Alice", "Bob", "Charlie", "David"]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/blurry-wet-car-lights-from-inside-car_181624-586.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutMediaOverlay
|
||||
tag="About My Craft"
|
||||
title="Storytelling at 24 Frames Per Second"
|
||||
description="With over 5 years of experience in high-end video editing, I focus on precision, rhythm, and emotion to turn raw footage into compelling narratives that resonate."
|
||||
primaryButton={{
|
||||
text: "Get in Touch", href: "#contact"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/asian-woman-editing-music-video-her-living-room-studio_482257-124253.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Selected Work"
|
||||
title="Curated Portfolio"
|
||||
description="A glimpse into my recent collaborations and project aesthetics."
|
||||
items={[
|
||||
{
|
||||
title: "Brand Story", description: "High-end corporate narrative", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/3d-rendering-cinema-movie-theater_23-2151928691.jpg"},
|
||||
{
|
||||
title: "Docu-Style", description: "Authentic storytelling piece", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/young-man-video-creator-working-editing-movie-montage-project_482257-126299.jpg"},
|
||||
{
|
||||
title: "Commercial", description: "Product-focused ad campaign", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/3d-black-white-background_23-2150499081.jpg"},
|
||||
{
|
||||
title: "Music Video", description: "Artistic visual expression", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/lovely-couple-love-embracing-corridor_8353-7513.jpg"},
|
||||
{
|
||||
title: "Motion Graphic", description: "Custom animated assets", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/abstract-light-painting-dark_52683-92739.jpg"},
|
||||
{
|
||||
title: "Sports Promo", description: "High-energy dynamic cut", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-man-doing-sport-outdoors_23-2149142348.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsMediaCards
|
||||
tag="My Impact"
|
||||
title="Numbers That Matter"
|
||||
description="The metrics of success behind every project."
|
||||
metrics={[
|
||||
{
|
||||
value: "500+", title: "Projects Completed", description: "Over half a thousand edits delivered", imageSrc: "http://img.b2bpic.net/free-photo/client-dark-vip-cinema-studio_23-2149500648.jpg"},
|
||||
{
|
||||
value: "10M+", title: "Total Views", description: "Impact across global platforms", imageSrc: "http://img.b2bpic.net/free-photo/focused-editor-woman-works-video-montage-creative-software_482257-125115.jpg"},
|
||||
{
|
||||
value: "98%", title: "Client Satisfaction", description: "Consistency across all deliveries", imageSrc: "http://img.b2bpic.net/free-photo/music-leisure-entertainment-youth-concept_53876-21298.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="team" data-section="team">
|
||||
<SectionErrorBoundary name="team">
|
||||
<TeamGlassCards
|
||||
tag="The Core"
|
||||
title="Creative Collaborative"
|
||||
description="I work with a network of talented professionals to deliver end-to-end production needs."
|
||||
members={[
|
||||
{
|
||||
name: "Alex Riv", role: "Senior Editor", imageSrc: "http://img.b2bpic.net/free-photo/man-filming-q-session-with-mobile-phone-answering-questions_482257-116712.jpg"},
|
||||
{
|
||||
name: "Jordan P.", role: "Colorist", imageSrc: "http://img.b2bpic.net/free-photo/closeup-smiling-beautiful-adult-businesswoman_1262-1760.jpg"},
|
||||
{
|
||||
name: "Sam K.", role: "Sound Design", imageSrc: "http://img.b2bpic.net/free-photo/spotlight-portrait-golden-hour_23-2151915122.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TeamSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Kind Words"
|
||||
title="What Clients Say"
|
||||
description="Real feedback from the incredible brands I've helped."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.", role: "CEO", quote: "Incredible turnaround and unmatched eye for detail.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-positive-woman-black-shirt-posing-white-background-high-quality-photo_114579-61008.jpg"},
|
||||
{
|
||||
name: "Michael C.", role: "CTO", quote: "Professional, creative, and always meets the deadline.", imageSrc: "http://img.b2bpic.net/free-photo/young-businesswoman-portrait-office_1262-1506.jpg"},
|
||||
{
|
||||
name: "Emily R.", role: "Marketing Dir", quote: "Transformed our vision into a cinematic reality.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-handsome-bearded-man-suit_23-2149705921.jpg"},
|
||||
{
|
||||
name: "David K.", role: "Product Mgr", quote: "The best editor I've worked with this year.", imageSrc: "http://img.b2bpic.net/free-photo/closeup-content-pretty-businesswoman-glasses_1262-1740.jpg"},
|
||||
{
|
||||
name: "Jane L.", role: "Creative Lead", quote: "Perfect collaboration, looking forward to the next one.", imageSrc: "http://img.b2bpic.net/free-photo/young-businessman-happy-expression_1194-1675.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="social-proof" data-section="social-proof">
|
||||
<SectionErrorBoundary name="social-proof">
|
||||
<SocialProofMarquee
|
||||
tag="Trusted By"
|
||||
title="Industry Partners"
|
||||
description="Proud to collaborate with forward-thinking companies."
|
||||
names={[
|
||||
"Microsoft", "Google", "Apple", "Adobe", "Netflix", "Sony", "Nike"]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<SocialProofSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Let's Collaborate"
|
||||
text="Have a project in mind? Let's discuss how we can create something exceptional together."
|
||||
primaryButton={{
|
||||
text: "Book a Consultation", href: "mailto:me@example.com"}}
|
||||
secondaryButton={{
|
||||
text: "Send a Message", href: "#"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
23
src/pages/HomePage/sections/About.tsx
Normal file
23
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,23 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "about" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutMediaOverlay
|
||||
tag="About My Craft"
|
||||
title="Storytelling at 24 Frames Per Second"
|
||||
description="With over 5 years of experience in high-end video editing, I focus on precision, rhythm, and emotion to turn raw footage into compelling narratives that resonate."
|
||||
primaryButton={{
|
||||
text: "Get in Touch", href: "#contact"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/asian-woman-editing-music-video-her-living-room-studio_482257-124253.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
53
src/pages/HomePage/sections/Contact.tsx
Normal file
53
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,53 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import Button from "@/components/ui/Button";
|
||||
|
||||
const primaryButton = {
|
||||
text: "Email Me",
|
||||
href: "mailto:your@email.com"
|
||||
};
|
||||
const secondaryButton = {
|
||||
text: "WhatsApp Me",
|
||||
href: "https://wa.me/1234567890"
|
||||
};
|
||||
|
||||
const ContactInline = () => {
|
||||
return (
|
||||
<section aria-label="Contact section" className="py-20">
|
||||
<div className="w-content-width mx-auto">
|
||||
<ScrollReveal variant="fade-blur">
|
||||
<div className="flex flex-col items-center gap-8 md:gap-10 py-20 px-8 rounded card">
|
||||
<div className="flex flex-col items-center gap-2">
|
||||
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
|
||||
<p>{"Let's Collaborate"}</p>
|
||||
</div>
|
||||
|
||||
<TextAnimation
|
||||
text={"Have a project in mind? Let's discuss how we can create something exceptional together."}
|
||||
variant="fade"
|
||||
gradientText={true}
|
||||
tag="h2"
|
||||
className="md:max-w-8/10 text-5xl 2xl:text-6xl leading-[1.15] font-semibold text-center text-balance"
|
||||
/>
|
||||
|
||||
<div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3">
|
||||
<Button text={primaryButton.text} href={primaryButton.href} variant="primary" />
|
||||
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary" animationDelay={0.1} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default function ContactSection() {
|
||||
return (
|
||||
<div data-webild-section="contact" id="contact">
|
||||
<ContactInline />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/Features.tsx
Normal file
34
src/pages/HomePage/sections/Features.tsx
Normal file
@@ -0,0 +1,34 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "features" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Selected Work"
|
||||
title="Curated Portfolio"
|
||||
description="A glimpse into my recent collaborations and project aesthetics."
|
||||
items={[
|
||||
{
|
||||
title: "Brand Story", description: "High-end corporate narrative", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/3d-rendering-cinema-movie-theater_23-2151928691.jpg"},
|
||||
{
|
||||
title: "Docu-Style", description: "Authentic storytelling piece", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/young-man-video-creator-working-editing-movie-montage-project_482257-126299.jpg"},
|
||||
{
|
||||
title: "Commercial", description: "Product-focused ad campaign", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/3d-black-white-background_23-2150499081.jpg"},
|
||||
{
|
||||
title: "Music Video", description: "Artistic visual expression", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/lovely-couple-love-embracing-corridor_8353-7513.jpg"},
|
||||
{
|
||||
title: "Motion Graphic", description: "Custom animated assets", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/abstract-light-painting-dark_52683-92739.jpg"},
|
||||
{
|
||||
title: "Sports Promo", description: "High-energy dynamic cut", buttonIcon: "Play", imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-man-doing-sport-outdoors_23-2149142348.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Hero.tsx
Normal file
29
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroCenteredLogos from '@/components/sections/hero/HeroCenteredLogos';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroCenteredLogos
|
||||
avatarsSrc={[
|
||||
"http://img.b2bpic.net/free-photo/male-dj-grey-suit-listening-headphones-enjoying-music_114579-15960.jpg", "http://img.b2bpic.net/free-photo/middle-age-latin-businesswoman-smiling-happy-standing-with-arms-crossed-gesture-city_839833-17431.jpg", "http://img.b2bpic.net/free-photo/medium-shot-young-man-posing-black-white_23-2149411420.jpg", "http://img.b2bpic.net/free-photo/waist-up-confident-businessman-office_329181-19349.jpg"]}
|
||||
avatarText="Trusted by 50+ creatives worldwide"
|
||||
title="Mastering the Art of Cinematic Editing"
|
||||
description="I help directors, agencies, and brands elevate their visual stories through expert post-production and creative editing."
|
||||
primaryButton={{
|
||||
text: "View Portfolio", href: "#features"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Me", href: "#contact"}}
|
||||
names={[
|
||||
"Alice", "Bob", "Charlie", "David"]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/blurry-wet-car-lights-from-inside-car_181624-586.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Metrics.tsx
Normal file
28
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsMediaCards
|
||||
tag="My Impact"
|
||||
title="Numbers That Matter"
|
||||
description="The metrics of success behind every project."
|
||||
metrics={[
|
||||
{
|
||||
value: "500+", title: "Projects Completed", description: "Over half a thousand edits delivered", imageSrc: "http://img.b2bpic.net/free-photo/client-dark-vip-cinema-studio_23-2149500648.jpg"},
|
||||
{
|
||||
value: "10M+", title: "Total Views", description: "Impact across global platforms", imageSrc: "http://img.b2bpic.net/free-photo/focused-editor-woman-works-video-montage-creative-software_482257-125115.jpg"},
|
||||
{
|
||||
value: "98%", title: "Client Satisfaction", description: "Consistency across all deliveries", imageSrc: "http://img.b2bpic.net/free-photo/music-leisure-entertainment-youth-concept_53876-21298.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
22
src/pages/HomePage/sections/SocialProof.tsx
Normal file
22
src/pages/HomePage/sections/SocialProof.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "social-proof" section.
|
||||
|
||||
import React from 'react';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function SocialProofSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="social-proof" data-section="social-proof">
|
||||
<SectionErrorBoundary name="social-proof">
|
||||
<SocialProofMarquee
|
||||
tag="Trusted By"
|
||||
title="Industry Partners"
|
||||
description="Proud to collaborate with forward-thinking companies."
|
||||
names={[
|
||||
"Microsoft", "Google", "Apple", "Adobe", "Netflix", "Sony", "Nike"]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Team.tsx
Normal file
28
src/pages/HomePage/sections/Team.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "team" section.
|
||||
|
||||
import React from 'react';
|
||||
import TeamGlassCards from '@/components/sections/team/TeamGlassCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TeamSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="team" data-section="team">
|
||||
<SectionErrorBoundary name="team">
|
||||
<TeamGlassCards
|
||||
tag="The Core"
|
||||
title="Creative Collaborative"
|
||||
description="I work with a network of talented professionals to deliver end-to-end production needs."
|
||||
members={[
|
||||
{
|
||||
name: "Alex Riv", role: "Senior Editor", imageSrc: "http://img.b2bpic.net/free-photo/man-filming-q-session-with-mobile-phone-answering-questions_482257-116712.jpg"},
|
||||
{
|
||||
name: "Jordan P.", role: "Colorist", imageSrc: "http://img.b2bpic.net/free-photo/closeup-smiling-beautiful-adult-businesswoman_1262-1760.jpg"},
|
||||
{
|
||||
name: "Sam K.", role: "Sound Design", imageSrc: "http://img.b2bpic.net/free-photo/spotlight-portrait-golden-hour_23-2151915122.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
32
src/pages/HomePage/sections/Testimonials.tsx
Normal file
32
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Kind Words"
|
||||
title="What Clients Say"
|
||||
description="Real feedback from the incredible brands I've helped."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah J.", role: "CEO", quote: "Incredible turnaround and unmatched eye for detail.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-positive-woman-black-shirt-posing-white-background-high-quality-photo_114579-61008.jpg"},
|
||||
{
|
||||
name: "Michael C.", role: "CTO", quote: "Professional, creative, and always meets the deadline.", imageSrc: "http://img.b2bpic.net/free-photo/young-businesswoman-portrait-office_1262-1506.jpg"},
|
||||
{
|
||||
name: "Emily R.", role: "Marketing Dir", quote: "Transformed our vision into a cinematic reality.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-handsome-bearded-man-suit_23-2149705921.jpg"},
|
||||
{
|
||||
name: "David K.", role: "Product Mgr", quote: "The best editor I've worked with this year.", imageSrc: "http://img.b2bpic.net/free-photo/closeup-content-pretty-businesswoman-glasses_1262-1740.jpg"},
|
||||
{
|
||||
name: "Jane L.", role: "Creative Lead", quote: "Perfect collaboration, looking forward to the next one.", imageSrc: "http://img.b2bpic.net/free-photo/young-businessman-happy-expression_1194-1675.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user