Bob AI: Increased global text sizing to large for better readability
This commit is contained in:
@@ -32,21 +32,21 @@
|
||||
--width-carousel-item-3: calc(var(--width-content-width) / 3 - var(--vw-1_5) / 3 * 2);
|
||||
--width-carousel-item-4: calc(var(--width-content-width) / 4 - var(--vw-1_5) / 4 * 3);
|
||||
|
||||
/* @typography/text-sizing/medium */
|
||||
--text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);
|
||||
--text-xs: clamp(0.54rem, 0.72vw, 0.72rem);
|
||||
--text-sm: clamp(0.615rem, 0.82vw, 0.82rem);
|
||||
--text-base: clamp(0.69rem, 0.92vw, 0.92rem);
|
||||
--text-lg: clamp(0.75rem, 1vw, 1rem);
|
||||
--text-xl: clamp(0.825rem, 1.1vw, 1.1rem);
|
||||
--text-2xl: clamp(0.975rem, 1.3vw, 1.3rem);
|
||||
--text-3xl: clamp(1.2rem, 1.6vw, 1.6rem);
|
||||
--text-4xl: clamp(1.5rem, 2vw, 2rem);
|
||||
--text-5xl: clamp(2.025rem, 2.75vw, 2.75rem);
|
||||
--text-6xl: clamp(2.475rem, 3.3vw, 3.3rem);
|
||||
--text-7xl: clamp(3rem, 4vw, 4rem);
|
||||
--text-8xl: clamp(3.5rem, 4.5vw, 4.5rem);
|
||||
--text-9xl: clamp(5.25rem, 7vw, 7rem);
|
||||
/* @typography/text-sizing/large */
|
||||
--text-2xs: clamp(0.525rem, 0.7vw, 0.7rem);
|
||||
--text-xs: clamp(0.6rem, 0.8vw, 0.8rem);
|
||||
--text-sm: clamp(0.675rem, 0.9vw, 0.9rem);
|
||||
--text-base: clamp(0.75rem, 1vw, 1rem);
|
||||
--text-lg: clamp(0.825rem, 1.1vw, 1.1rem);
|
||||
--text-xl: clamp(0.9rem, 1.2vw, 1.2rem);
|
||||
--text-2xl: clamp(1.05rem, 1.4vw, 1.4rem);
|
||||
--text-3xl: clamp(1.35rem, 1.8vw, 1.8rem);
|
||||
--text-4xl: clamp(1.65rem, 2.2vw, 2.2rem);
|
||||
--text-5xl: clamp(2.25rem, 3vw, 3rem);
|
||||
--text-6xl: clamp(2.7rem, 3.6vw, 3.6rem);
|
||||
--text-7xl: clamp(3.375rem, 4.5vw, 4.5rem);
|
||||
--text-8xl: clamp(4.125rem, 5.5vw, 5.5rem);
|
||||
--text-9xl: clamp(6rem, 8vw, 8rem);
|
||||
}
|
||||
|
||||
/* @typography/text-sizing/medium (mobile) */
|
||||
|
||||
@@ -1,234 +1,33 @@
|
||||
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
|
||||
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
|
||||
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
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 TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardCarousel
|
||||
tag="Vienna's Reliable Plumbing & Heating"
|
||||
title="Professional Emergency Repair Services"
|
||||
description="Speed, reliability, and competence at your doorstep in 1060 Wien. 24/7 support for all your plumbing and heating emergencies."
|
||||
primaryButton={{
|
||||
text: "Call Now",
|
||||
href: "tel:+4366499501072",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Book Appointment",
|
||||
href: "#contact",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-man-working-as-plumber_23-2150746421.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/electrician-working-air-conditioner_482257-96273.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-composition-tools_23-2148138066.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-electrical-technician-working-switchboard-with-fuses-uses-tablet_169016-23926.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-voltage-infrastructure_1127-2074.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/kitchen-wash-zone-black-faucet-scandinavian-style_169016-69045.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutMediaOverlay
|
||||
tag="About Aqua"
|
||||
title="Precision Work, Reliable Results"
|
||||
description="Located at Gumpendorfer Str. 41, 1060 Wien, we pride ourselves on transparent pricing and impeccable service. From burst pipes to complete boiler installations, we handle your home with care and professionalism."
|
||||
imageSrc="http://img.b2bpic.net/free-photo/coveralls-digitally-generated-car-cardboard-box-pointing_1134-941.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesDetailedCards
|
||||
tag="Our Expertise"
|
||||
title="Comprehensive Plumbing & Heating Solutions"
|
||||
description="We offer a wide range of expert services to ensure your home systems run flawlessly."
|
||||
items={[
|
||||
{
|
||||
title: "Heating Systems",
|
||||
description: "Expert renovation, installation, and repair for your boiler and heating systems.",
|
||||
tags: [
|
||||
"Heating",
|
||||
"Energy Efficiency",
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/worker-repairing-water-heater_23-2149334230.jpg",
|
||||
},
|
||||
{
|
||||
title: "Burst Pipe Repair",
|
||||
description: "Rapid response to mitigate water damage. We find the source and repair it fast.",
|
||||
tags: [
|
||||
"Emergency",
|
||||
"Plumbing",
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-calling-plumber-solve-kitchen-problems_23-2150990681.jpg",
|
||||
},
|
||||
{
|
||||
title: "System Maintenance",
|
||||
description: "Comprehensive check-ups to prevent breakdowns and prolong the life of your equipment.",
|
||||
tags: [
|
||||
"Maintenance",
|
||||
"Support",
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-service_23-2150171258.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsMediaCards
|
||||
tag="Why Choose Aqua"
|
||||
title="Proven Excellence in Vienna"
|
||||
description="We deliver consistent, high-quality results backed by our reputation."
|
||||
metrics={[
|
||||
{
|
||||
value: "100+",
|
||||
title: "Happy Clients",
|
||||
description: "Trusted by homes across Vienna.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/we-are-finally-our-new-home_637285-12396.jpg",
|
||||
},
|
||||
{
|
||||
value: "24/7",
|
||||
title: "Emergency Response",
|
||||
description: "We are available whenever disaster strikes.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/yellow-pedestal-outdoor-post-against-wall_181624-3809.jpg",
|
||||
},
|
||||
{
|
||||
value: "10",
|
||||
title: "Years Experience",
|
||||
description: "A decade of industry knowledge.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/business-people-meeting_53876-13582.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Trusted by Locals"
|
||||
title="Client Success Stories"
|
||||
description="See why our neighbors recommend Aqua for professional plumbing services."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Franziska Metzger",
|
||||
role: "Local Guide",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-african-american-woman-cafe_273609-5292.jpg",
|
||||
},
|
||||
{
|
||||
name: "Viktoria Kuhn",
|
||||
role: "Homeowner",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/business-woman-banner-concept-with-copy-space_23-2149601533.jpg",
|
||||
},
|
||||
{
|
||||
name: "Nora Hofstetter",
|
||||
role: "Local Guide",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/person-drinking-beverage-while-break-time_23-2149256900.jpg",
|
||||
},
|
||||
{
|
||||
name: "Julian Schreiber",
|
||||
role: "Local Guide",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-woman-wearing-yellow-bandana_273609-13337.jpg",
|
||||
},
|
||||
{
|
||||
name: "Paul Schenk",
|
||||
role: "Homeowner",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/mature-blonde-business-woman-work_23-2149100291.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Common Questions"
|
||||
title="Need Help? Find Answers."
|
||||
description="Everything you need to know about our services and booking process."
|
||||
categories={[
|
||||
{
|
||||
name: "Emergency",
|
||||
items: [
|
||||
{
|
||||
question: "What counts as an emergency?",
|
||||
answer: "Burst pipes, total heating failure, or severe leaks.",
|
||||
},
|
||||
{
|
||||
question: "Do you come out the same day?",
|
||||
answer: "Yes, we strive to prioritize emergencies as quickly as possible.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Services",
|
||||
items: [
|
||||
{
|
||||
question: "Do you offer quotes?",
|
||||
answer: "We provide transparent, upfront pricing before starting any work.",
|
||||
},
|
||||
{
|
||||
question: "What locations do you serve?",
|
||||
answer: "We specialize in Vienna, specifically 1060 and surrounding districts.",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Ready to Start?"
|
||||
text="Call us at +43 664 995 01 072 or visit our office at Gumpendorfer Str. 41."
|
||||
primaryButton={{
|
||||
text: "Call Us Now",
|
||||
href: "tel:+4366499501072",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "https://maps.google.com/?q=59X4+8R+Vienna,+Austria",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
21
src/pages/HomePage/sections/About.tsx
Normal file
21
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
// 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 Aqua"
|
||||
title="Precision Work, Reliable Results"
|
||||
description="Located at Gumpendorfer Str. 41, 1060 Wien, we pride ourselves on transparent pricing and impeccable service. From burst pipes to complete boiler installations, we handle your home with care and professionalism."
|
||||
imageSrc="http://img.b2bpic.net/free-photo/coveralls-digitally-generated-car-cardboard-box-pointing_1134-941.jpg"
|
||||
/>
|
||||
</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="Ready to Start?"
|
||||
text="Call us at +43 664 995 01 072 or visit our office at Gumpendorfer Str. 41."
|
||||
primaryButton={{
|
||||
text: "Call Us Now",
|
||||
href: "tel:+4366499501072",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Get Directions",
|
||||
href: "https://maps.google.com/?q=59X4+8R+Vienna,+Austria",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
48
src/pages/HomePage/sections/Faq.tsx
Normal file
48
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,48 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "faq" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTabbedAccordion
|
||||
tag="Common Questions"
|
||||
title="Need Help? Find Answers."
|
||||
description="Everything you need to know about our services and booking process."
|
||||
categories={[
|
||||
{
|
||||
name: "Emergency",
|
||||
items: [
|
||||
{
|
||||
question: "What counts as an emergency?",
|
||||
answer: "Burst pipes, total heating failure, or severe leaks.",
|
||||
},
|
||||
{
|
||||
question: "Do you come out the same day?",
|
||||
answer: "Yes, we strive to prioritize emergencies as quickly as possible.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Services",
|
||||
items: [
|
||||
{
|
||||
question: "Do you offer quotes?",
|
||||
answer: "We provide transparent, upfront pricing before starting any work.",
|
||||
},
|
||||
{
|
||||
question: "What locations do you serve?",
|
||||
answer: "We specialize in Vienna, specifically 1060 and surrounding districts.",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
49
src/pages/HomePage/sections/Features.tsx
Normal file
49
src/pages/HomePage/sections/Features.tsx
Normal file
@@ -0,0 +1,49 @@
|
||||
// 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 FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesDetailedCards
|
||||
tag="Our Expertise"
|
||||
title="Comprehensive Plumbing & Heating Solutions"
|
||||
description="We offer a wide range of expert services to ensure your home systems run flawlessly."
|
||||
items={[
|
||||
{
|
||||
title: "Heating Systems",
|
||||
description: "Expert renovation, installation, and repair for your boiler and heating systems.",
|
||||
tags: [
|
||||
"Heating",
|
||||
"Energy Efficiency",
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/worker-repairing-water-heater_23-2149334230.jpg",
|
||||
},
|
||||
{
|
||||
title: "Burst Pipe Repair",
|
||||
description: "Rapid response to mitigate water damage. We find the source and repair it fast.",
|
||||
tags: [
|
||||
"Emergency",
|
||||
"Plumbing",
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/woman-calling-plumber-solve-kitchen-problems_23-2150990681.jpg",
|
||||
},
|
||||
{
|
||||
title: "System Maintenance",
|
||||
description: "Comprehensive check-ups to prevent breakdowns and prolong the life of your equipment.",
|
||||
tags: [
|
||||
"Maintenance",
|
||||
"Support",
|
||||
],
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-man-working-service_23-2150171258.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
48
src/pages/HomePage/sections/Hero.tsx
Normal file
48
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,48 @@
|
||||
// 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 HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardCarousel
|
||||
tag="Vienna's Reliable Plumbing & Heating"
|
||||
title="Professional Emergency Repair Services"
|
||||
description="Speed, reliability, and competence at your doorstep in 1060 Wien. 24/7 support for all your plumbing and heating emergencies."
|
||||
primaryButton={{
|
||||
text: "Call Now",
|
||||
href: "tel:+4366499501072",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Book Appointment",
|
||||
href: "#contact",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-man-working-as-plumber_23-2150746421.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/electrician-working-air-conditioner_482257-96273.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-composition-tools_23-2148138066.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-electrical-technician-working-switchboard-with-fuses-uses-tablet_169016-23926.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-voltage-infrastructure_1127-2074.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/kitchen-wash-zone-black-faucet-scandinavian-style_169016-69045.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/Metrics.tsx
Normal file
40
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
// 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="Why Choose Aqua"
|
||||
title="Proven Excellence in Vienna"
|
||||
description="We deliver consistent, high-quality results backed by our reputation."
|
||||
metrics={[
|
||||
{
|
||||
value: "100+",
|
||||
title: "Happy Clients",
|
||||
description: "Trusted by homes across Vienna.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/we-are-finally-our-new-home_637285-12396.jpg",
|
||||
},
|
||||
{
|
||||
value: "24/7",
|
||||
title: "Emergency Response",
|
||||
description: "We are available whenever disaster strikes.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/yellow-pedestal-outdoor-post-against-wall_181624-3809.jpg",
|
||||
},
|
||||
{
|
||||
value: "10",
|
||||
title: "Years Experience",
|
||||
description: "A decade of industry knowledge.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/business-people-meeting_53876-13582.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 TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeOverlayCards
|
||||
tag="Trusted by Locals"
|
||||
title="Client Success Stories"
|
||||
description="See why our neighbors recommend Aqua for professional plumbing services."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Franziska Metzger",
|
||||
role: "Local Guide",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-african-american-woman-cafe_273609-5292.jpg",
|
||||
},
|
||||
{
|
||||
name: "Viktoria Kuhn",
|
||||
role: "Homeowner",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/business-woman-banner-concept-with-copy-space_23-2149601533.jpg",
|
||||
},
|
||||
{
|
||||
name: "Nora Hofstetter",
|
||||
role: "Local Guide",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/person-drinking-beverage-while-break-time_23-2149256900.jpg",
|
||||
},
|
||||
{
|
||||
name: "Julian Schreiber",
|
||||
role: "Local Guide",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-woman-wearing-yellow-bandana_273609-13337.jpg",
|
||||
},
|
||||
{
|
||||
name: "Paul Schenk",
|
||||
role: "Homeowner",
|
||||
company: "Reviewer",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/mature-blonde-business-woman-work_23-2149100291.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user