Compare commits
7 Commits
version_1_
...
version_5_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c751f81bff | ||
| 68ee274d37 | |||
| 44eea82f1e | |||
| 05839b27f1 | |||
| e5fe0bbfe0 | |||
| 655a288c4c | |||
| a861252437 |
@@ -42,7 +42,7 @@ export default function Layout() {
|
||||
<SiteBackgroundSlot />
|
||||
<SectionErrorBoundary name="navbar">
|
||||
<NavbarDropdown
|
||||
logo="Agency"
|
||||
logo="Digital Grace Marketing"
|
||||
ctaButton={{
|
||||
text: "Get Started",
|
||||
href: "#contact",
|
||||
@@ -54,7 +54,7 @@ export default function Layout() {
|
||||
</main>
|
||||
<SectionErrorBoundary name="footer">
|
||||
<FooterBrand
|
||||
brand="Agency"
|
||||
brand="Digital Grace Marketing"
|
||||
columns={[
|
||||
{
|
||||
items: [
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter+Tight:wght@400;500;600;700&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Figtree:wght@400;500;600;700&display=swap');
|
||||
@import "tailwindcss";
|
||||
@import "./styles/masks.css";
|
||||
@import "./styles/animations.css";
|
||||
|
||||
:root {
|
||||
/* @colorThemes/lightTheme/grayNavyBlue */
|
||||
--background: #f5f4ef;
|
||||
--card: #dad6cd;
|
||||
--foreground: #2a2928;
|
||||
--primary-cta: #2a2928;
|
||||
--primary-cta-text: #f5f4ef;
|
||||
--secondary-cta: #ecebea;
|
||||
--secondary-cta-text: #2a2928;
|
||||
--accent: #ffffff;
|
||||
--background-accent: #c6b180;
|
||||
--background: #f7f6f7;
|
||||
--card: #ffffff;
|
||||
--foreground: #250c0d;
|
||||
--primary-cta: #b82b40;
|
||||
--primary-cta-text: #f7f6f7;
|
||||
--secondary-cta: #ffffff;
|
||||
--secondary-cta-text: #250c0d;
|
||||
--accent: #b90941;
|
||||
--background-accent: #e8a8b6;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 1rem;
|
||||
@@ -88,7 +88,7 @@
|
||||
--color-background-accent: var(--background-accent);
|
||||
|
||||
/* Fonts */
|
||||
--font-sans: 'Inter Tight', sans-serif;
|
||||
--font-sans: 'Figtree', sans-serif;
|
||||
--font-tight: "Inter Tight", sans-serif;
|
||||
--font-mono: monospace;
|
||||
|
||||
@@ -137,7 +137,7 @@ body {
|
||||
margin: 0;
|
||||
background-color: var(--background);
|
||||
color: var(--foreground);
|
||||
font-family: 'Inter Tight', sans-serif;
|
||||
font-family: 'Figtree', sans-serif;
|
||||
position: relative;
|
||||
min-height: 100vh;
|
||||
overscroll-behavior: none;
|
||||
@@ -150,7 +150,7 @@ h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: 'Inter Tight', sans-serif;
|
||||
font-family: 'Figtree', sans-serif;
|
||||
}
|
||||
|
||||
/* Default card/button styles. Template theme.css imports come after this file
|
||||
|
||||
@@ -1,256 +1,36 @@
|
||||
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroBillboard from '@/components/sections/hero/HeroBillboard';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import PricingSplitCards from '@/components/sections/pricing/PricingSplitCards';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import { Target, TrendingUp, Users } from "lucide-react";
|
||||
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 ServicesSection from './HomePage/sections/Services';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import PricingSection from './HomePage/sections/Pricing';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import ProofSection from './HomePage/sections/Proof';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboard
|
||||
title="Strategic marketing that drives measurable growth"
|
||||
description="We partner with ambitious brands to craft campaigns that connect, convert, and scale. Let's build something remarkable together."
|
||||
primaryButton={{
|
||||
text: "Explore Our Work",
|
||||
href: "#services",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "#contact",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/keyboard-glasses-marble-surface_140725-23257.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="Our Story"
|
||||
descriptions={[
|
||||
"We believe in marketing that doesn't just look good, but performs. Founded on the principle of transparency and ROI, we bridge the gap between creative vision and business impact.",
|
||||
"Our team of strategists and creators are dedicated to scaling brands that matter. We don't just execute; we innovate.",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Expertise"
|
||||
title="Our Core Services"
|
||||
description="Comprehensive marketing solutions tailored to your growth goals."
|
||||
items={[
|
||||
{
|
||||
title: "Brand Strategy",
|
||||
description: "Crafting identity and positioning.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/colorful-triangle-paper-pack_23-2148547766.jpg",
|
||||
},
|
||||
{
|
||||
title: "Performance Marketing",
|
||||
description: "Driving measurable conversions.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/aerial-view-man-working-computer_53876-31625.jpg",
|
||||
},
|
||||
{
|
||||
title: "Content Creation",
|
||||
description: "Engaging storytelling and production.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/open-laptop-with-diagram-glasses-mobile-office-supplies_1163-2754.jpg",
|
||||
},
|
||||
{
|
||||
title: "SEO & Growth",
|
||||
description: "Optimizing for visibility.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/innovation-development-rocket-graphic-concept_53876-120019.jpg",
|
||||
},
|
||||
{
|
||||
title: "Email Campaigns",
|
||||
description: "Automated nurture streams.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-working-together-animation-studio_23-2149207973.jpg",
|
||||
},
|
||||
{
|
||||
title: "Social Strategy",
|
||||
description: "Building community engagement.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/business-work-area_1388-82.jpg",
|
||||
},
|
||||
{
|
||||
title: "Analytics & Reporting",
|
||||
description: "Deep-dive performance insights.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-multicolored-growth-cones_23-2148780633.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ServicesSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Impact"
|
||||
title="Proven Results"
|
||||
description="Numbers that define our success and your growth."
|
||||
metrics={[
|
||||
{
|
||||
icon: TrendingUp,
|
||||
title: "Growth Delivered",
|
||||
value: "$50M+",
|
||||
},
|
||||
{
|
||||
icon: Users,
|
||||
title: "Clients Scaled",
|
||||
value: "120+",
|
||||
},
|
||||
{
|
||||
icon: Target,
|
||||
title: "Conversion Lift",
|
||||
value: "240%",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingSplitCards
|
||||
tag="Partnership"
|
||||
title="Transparent Packages"
|
||||
description="Tailored solutions for your business size and needs."
|
||||
plans={[
|
||||
{
|
||||
tag: "Launch",
|
||||
price: "$5,000",
|
||||
period: "/mo",
|
||||
description: "Essential support for early-stage teams.",
|
||||
primaryButton: {
|
||||
text: "Choose Plan",
|
||||
href: "#contact",
|
||||
},
|
||||
featuresTitle: "Included features:",
|
||||
features: [
|
||||
"Strategy Session",
|
||||
"Basic Analytics",
|
||||
"Brand Audit",
|
||||
"Monthly Reporting",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Scale",
|
||||
price: "$12,000",
|
||||
period: "/mo",
|
||||
description: "Advanced strategy for scaling companies.",
|
||||
primaryButton: {
|
||||
text: "Choose Plan",
|
||||
href: "#contact",
|
||||
},
|
||||
featuresTitle: "Everything in Launch plus:",
|
||||
features: [
|
||||
"Performance Ads",
|
||||
"Content Production",
|
||||
"Advanced SEO",
|
||||
"Dedicated PM",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<PricingSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Clients"
|
||||
title="Client Success"
|
||||
description="Hear from the brands we've helped grow."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah Johnson",
|
||||
role: "CEO",
|
||||
quote: "They transformed our marketing strategy completely.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smile-woman-talking-phone-looking-camera_23-2148317284.jpg",
|
||||
},
|
||||
{
|
||||
name: "Michael Chen",
|
||||
role: "CTO",
|
||||
quote: "Reliable, strategic, and always delivering ROI.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/positive-middle-aged-business-leader-window_1262-5388.jpg",
|
||||
},
|
||||
{
|
||||
name: "Emily Rodriguez",
|
||||
role: "Marketing Director",
|
||||
quote: "Best agency partner we've had in 5 years.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/confident-african-american-businessman-black-classic-jacket-isolated-dark-background_613910-17869.jpg",
|
||||
},
|
||||
{
|
||||
name: "David Kim",
|
||||
role: "Founder",
|
||||
quote: "Data-driven results that exceeded our targets.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-woman-posing-wrapping-up-grey-cloth_176420-16804.jpg",
|
||||
},
|
||||
{
|
||||
name: "Jane Smith",
|
||||
role: "COO",
|
||||
quote: "Seamless execution and visionary strategy.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-business-woman-with-executive-job-working-with-management-marketing-statistics-computer-office-worker-analyzing-research-charts-data-reports_482257-41126.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="proof" data-section="proof">
|
||||
<SectionErrorBoundary name="proof">
|
||||
<SocialProofMarquee
|
||||
tag="Partners"
|
||||
title="Trusted By Industry Leaders"
|
||||
description="Working with the world's most ambitious brands."
|
||||
names={[
|
||||
"InnovateLab",
|
||||
"GrowthCo",
|
||||
"TechCorp",
|
||||
"StartupXYZ",
|
||||
"BrandNext",
|
||||
"ScaleFast",
|
||||
"FutureBound",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProofSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Contact"
|
||||
text="Ready to scale? Let's discuss your marketing strategy."
|
||||
primaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Portfolio",
|
||||
href: "#services",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
22
src/pages/HomePage/sections/About.tsx
Normal file
22
src/pages/HomePage/sections/About.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 "about" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutTextSplit
|
||||
title="Our Story"
|
||||
descriptions={[
|
||||
"We believe in marketing that doesn't just look good, but performs. Founded on the principle of transparency and ROI, we bridge the gap between creative vision and business impact.",
|
||||
"Our team of strategists and creators are dedicated to scaling brands that matter. We don't just execute; we innovate.",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Contact.tsx
Normal file
27
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Contact"
|
||||
text="Ready to scale? Let's discuss your marketing strategy."
|
||||
primaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Our Portfolio",
|
||||
href: "#services",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Hero.tsx
Normal file
28
src/pages/HomePage/sections/Hero.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 "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroBillboard from '@/components/sections/hero/HeroBillboard';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboard
|
||||
title="Strategic marketing that drives measurable growth"
|
||||
description="We partner with ambitious brands to craft campaigns that connect, convert, and scale. Let's build something remarkable together."
|
||||
primaryButton={{
|
||||
text: "Explore Our Work",
|
||||
href: "#services",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "#contact",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/keyboard-glasses-marble-surface_140725-23257.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Metrics.tsx
Normal file
38
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
// 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 MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import { Target, TrendingUp, Users } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="Impact"
|
||||
title="Proven Results"
|
||||
description="Numbers that define our success and your growth."
|
||||
metrics={[
|
||||
{
|
||||
icon: TrendingUp,
|
||||
title: "Growth Delivered",
|
||||
value: "$50M+",
|
||||
},
|
||||
{
|
||||
icon: Users,
|
||||
title: "Clients Scaled",
|
||||
value: "120+",
|
||||
},
|
||||
{
|
||||
icon: Target,
|
||||
title: "Conversion Lift",
|
||||
value: "240%",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
56
src/pages/HomePage/sections/Pricing.tsx
Normal file
56
src/pages/HomePage/sections/Pricing.tsx
Normal file
@@ -0,0 +1,56 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "pricing" section.
|
||||
|
||||
import React from 'react';
|
||||
import PricingSplitCards from '@/components/sections/pricing/PricingSplitCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function PricingSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingSplitCards
|
||||
tag="Partnership"
|
||||
title="Transparent Packages"
|
||||
description="Tailored solutions for your business size and needs."
|
||||
plans={[
|
||||
{
|
||||
tag: "Launch",
|
||||
price: "$5,000",
|
||||
period: "/mo",
|
||||
description: "Essential support for early-stage teams.",
|
||||
primaryButton: {
|
||||
text: "Choose Plan",
|
||||
href: "#contact",
|
||||
},
|
||||
featuresTitle: "Included features:",
|
||||
features: [
|
||||
"Strategy Session",
|
||||
"Basic Analytics",
|
||||
"Brand Audit",
|
||||
"Monthly Reporting",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Scale",
|
||||
price: "$12,000",
|
||||
period: "/mo",
|
||||
description: "Advanced strategy for scaling companies.",
|
||||
primaryButton: {
|
||||
text: "Choose Plan",
|
||||
href: "#contact",
|
||||
},
|
||||
featuresTitle: "Everything in Launch plus:",
|
||||
features: [
|
||||
"Performance Ads",
|
||||
"Content Production",
|
||||
"Advanced SEO",
|
||||
"Dedicated PM",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Proof.tsx
Normal file
29
src/pages/HomePage/sections/Proof.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 "proof" section.
|
||||
|
||||
import React from 'react';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProofSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="proof" data-section="proof">
|
||||
<SectionErrorBoundary name="proof">
|
||||
<SocialProofMarquee
|
||||
tag="Partners"
|
||||
title="Trusted By Industry Leaders"
|
||||
description="Working with the world's most ambitious brands."
|
||||
names={[
|
||||
"InnovateLab",
|
||||
"GrowthCo",
|
||||
"TechCorp",
|
||||
"StartupXYZ",
|
||||
"BrandNext",
|
||||
"ScaleFast",
|
||||
"FutureBound",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
64
src/pages/HomePage/sections/Services.tsx
Normal file
64
src/pages/HomePage/sections/Services.tsx
Normal file
@@ -0,0 +1,64 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "services" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ServicesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Expertise"
|
||||
title="Our Core Services"
|
||||
description="Comprehensive marketing solutions tailored to your growth goals."
|
||||
items={[
|
||||
{
|
||||
title: "Brand Strategy",
|
||||
description: "Crafting identity and positioning.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/colorful-triangle-paper-pack_23-2148547766.jpg",
|
||||
},
|
||||
{
|
||||
title: "Performance Marketing",
|
||||
description: "Driving measurable conversions.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/aerial-view-man-working-computer_53876-31625.jpg",
|
||||
},
|
||||
{
|
||||
title: "Content Creation",
|
||||
description: "Engaging storytelling and production.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/open-laptop-with-diagram-glasses-mobile-office-supplies_1163-2754.jpg",
|
||||
},
|
||||
{
|
||||
title: "SEO & Growth",
|
||||
description: "Optimizing for visibility.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/innovation-development-rocket-graphic-concept_53876-120019.jpg",
|
||||
},
|
||||
{
|
||||
title: "Email Campaigns",
|
||||
description: "Automated nurture streams.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-working-together-animation-studio_23-2149207973.jpg",
|
||||
},
|
||||
{
|
||||
title: "Social Strategy",
|
||||
description: "Building community engagement.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/business-work-area_1388-82.jpg",
|
||||
},
|
||||
{
|
||||
title: "Analytics & Reporting",
|
||||
description: "Deep-dive performance insights.",
|
||||
href: "#",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-multicolored-growth-cones_23-2148780633.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// 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 TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Clients"
|
||||
title="Client Success"
|
||||
description="Hear from the brands we've helped grow."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Sarah Johnson",
|
||||
role: "CEO",
|
||||
quote: "They transformed our marketing strategy completely.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smile-woman-talking-phone-looking-camera_23-2148317284.jpg",
|
||||
},
|
||||
{
|
||||
name: "Michael Chen",
|
||||
role: "CTO",
|
||||
quote: "Reliable, strategic, and always delivering ROI.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/positive-middle-aged-business-leader-window_1262-5388.jpg",
|
||||
},
|
||||
{
|
||||
name: "Emily Rodriguez",
|
||||
role: "Marketing Director",
|
||||
quote: "Best agency partner we've had in 5 years.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/confident-african-american-businessman-black-classic-jacket-isolated-dark-background_613910-17869.jpg",
|
||||
},
|
||||
{
|
||||
name: "David Kim",
|
||||
role: "Founder",
|
||||
quote: "Data-driven results that exceeded our targets.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-woman-posing-wrapping-up-grey-cloth_176420-16804.jpg",
|
||||
},
|
||||
{
|
||||
name: "Jane Smith",
|
||||
role: "COO",
|
||||
quote: "Seamless execution and visionary strategy.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-business-woman-with-executive-job-working-with-management-marketing-statistics-computer-office-worker-analyzing-research-charts-data-reports_482257-41126.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user