Bob AI: Make testimonial stars yellow

This commit is contained in:
kudinDmitriyUp
2026-06-15 12:03:49 +00:00
parent 8205c28a74
commit 08c9cf3148
9 changed files with 395 additions and 241 deletions

View File

@@ -1,253 +1,36 @@
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import TeamProfileCards from '@/components/sections/team/TeamProfileCards';
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
import { Award, CheckCircle, Zap } 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 TeamSection from './HomePage/sections/Team';
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">
<HeroSplitVerticalMarquee
tag="Expert Business Accountants in Adelaide"
title="Your Financial Success, Simplified"
description="At Tremonte, we provide tailored accounting and business advisory services designed to help Adelaide business owners thrive. From tax compliance to strategic growth, we're with you every step of the way."
primaryButton={{
text: "Book Consultation",
href: "#contact",
}}
secondaryButton={{
text: "Our Services",
href: "#services",
}}
leftItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/people-working-elegant-cozy-office-space_23-2149548685.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/businesswoman-using-laptop_1398-1462.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/team-upbeat-business-partners-inspecting-solar-plant-machinery_482257-119652.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/agent-talking-with-parent-gen-z-girl-offering-advice-investing_482257-107458.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/agent-giving-sale-contract-clients-sign-after-they-decide-make-purchase_482257-118125.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/teamwork-looking-tablet_23-2149370557.jpg",
},
]}
rightItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/laughing-professional-businessman-working-his-office-businessperson-professional-environment_482257-32767.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/colleagues-working-together-project_23-2149286124.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/african-american-financial-consultant-writing-reports-while-having-meeting-with-clients-office_637285-898.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/green-screen-device-smiling-colleagues-doing-brainstorming_482257-123555.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/agent-office-using-software-laptop-build-emergency-fund-plan-family_482257-112015.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/two-happy-colleagues-using-laptop-video-call-sitting-table-with-cup-coffee-looking-display-talking-online-communication-concept_74855-12035.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="About Us"
quote="Tremonte Accounting has been a cornerstone for local Adelaide businesses for years, committed to precision, integrity, and proactive business growth strategies."
author="The Tremonte Leadership Team"
role="Accounting & Business Partners"
imageSrc="http://img.b2bpic.net/free-photo/business-team-studying-documents_74855-1499.jpg?_wi=1"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesDetailedSteps
tag="Our Expertise"
title="Comprehensive Accounting Services"
description="We offer a full suite of services tailored to your specific industry and growth needs."
steps={[
{
tag: "Core",
title: "Tax & Compliance",
subtitle: "Simplified Reporting",
description: "We ensure your business remains compliant with Australian tax laws while maximizing your benefits.",
imageSrc: "http://img.b2bpic.net/free-photo/business-woman-working-office-desktop_23-2148194732.jpg",
},
{
tag: "Growth",
title: "Business Advisory",
subtitle: "Strategic Planning",
description: "From financial forecasting to business planning, we help you make data-driven decisions.",
imageSrc: "http://img.b2bpic.net/free-photo/happy-couple-talking-while-having-consultations-with-their-agent-office_637285-11098.jpg",
},
{
tag: "Backoffice",
title: "Bookkeeping",
subtitle: "Cloud Solutions",
description: "Seamless cloud bookkeeping solutions integrated with your operations for complete visibility.",
imageSrc: "http://img.b2bpic.net/free-photo/three-thoughtful-marketing-analysts-working-with-diagrams_1262-15321.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="team" data-section="team">
<SectionErrorBoundary name="team">
<TeamProfileCards
tag="Our Experts"
title="Meet the Tremonte Team"
description="Your dedicated professionals in Adelaide."
items={[
{
title: "Senior Accountant",
description: "Expert in tax planning and corporate compliance.",
avatarSrc: "http://img.b2bpic.net/free-photo/confident-senior-businessman-with-digital-tablet_1262-2373.jpg",
buttonText: "Contact",
imageSrc: "http://img.b2bpic.net/free-photo/waist-up-confident-businessman-office_329181-19349.jpg",
},
{
title: "Business Analyst",
description: "Strategic advisory and growth specialist.",
avatarSrc: "http://img.b2bpic.net/free-photo/modern-office-composition-with-businessman_23-2147900145.jpg",
buttonText: "Contact",
imageSrc: "http://img.b2bpic.net/free-photo/happy-employee_1098-16109.jpg",
},
{
title: "Bookkeeping Manager",
description: "Cloud accounting specialist for small business.",
avatarSrc: "http://img.b2bpic.net/free-photo/portrait-woman-working-business-with-computer_482257-20185.jpg",
buttonText: "Contact",
imageSrc: "http://img.b2bpic.net/free-photo/old-couple-learning-use-technology_23-2149366903.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TeamSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsIconCards
tag="Our Impact"
title="Trusted by Local Business"
metrics={[
{
icon: CheckCircle,
title: "Clients Served",
value: "500+",
},
{
icon: Award,
title: "Years Experience",
value: "20+",
},
{
icon: Zap,
title: "Tax Savings",
value: "$5M+",
},
]}
description="Driving results for businesses across Adelaide."
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialTrustCard
quote="Tremonte provided incredible clarity for our business finances. Their expertise saved us significant tax and gave us the confidence to grow."
rating={5}
author="Local Adelaide Entrepreneur"
avatars={[
{
name: "Client 1",
imageSrc: "http://img.b2bpic.net/free-photo/woman-shaking-hands-with-male-colleague_482257-123554.jpg",
},
{
name: "Client 2",
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-woman-with-speech-bubble_53876-70978.jpg",
},
{
name: "Client 3",
imageSrc: "http://img.b2bpic.net/free-photo/young-handsome-smiling-businessman-showing-thumbs-up-with-funny-faces-drawings-focus-hands_176420-42468.jpg",
},
{
name: "Client 4",
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-businessman-suit-looking-camera-meeting_1163-4654.jpg",
},
{
name: "Client 5",
imageSrc: "http://img.b2bpic.net/free-photo/business-partners-celebrate-beginning-new-project-their-companies_482257-97532.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSplitMedia
tag="FAQ"
title="Frequently Asked Questions"
items={[
{
question: "What industries do you work with?",
answer: "We support a wide range of industries including retail, professional services, hospitality, and construction.",
},
{
question: "Are you located in Adelaide?",
answer: "Yes, we are proudly Adelaide-based and serve clients across the city and surrounding areas.",
},
{
question: "How do we get started?",
answer: "Simply contact us through our website to book a free introductory consultation.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/business-partners-working-office_273609-6863.jpg"
description="Answers to common queries about our accounting services."
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Get In Touch"
text="Ready to take control of your financial future? Contact the Tremonte team in Adelaide today for a consultation."
primaryButton={{
text: "Call (08) 8000 0000",
href: "tel:0880000000",
}}
secondaryButton={{
text: "Email Us",
href: "mailto:admin@tremonte.com.au",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View 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 AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="About Us"
quote="Tremonte Accounting has been a cornerstone for local Adelaide businesses for years, committed to precision, integrity, and proactive business growth strategies."
author="The Tremonte Leadership Team"
role="Accounting & Business Partners"
imageSrc="http://img.b2bpic.net/free-photo/business-team-studying-documents_74855-1499.jpg?_wi=1"
/>
</SectionErrorBoundary>
</div>
);
}

View 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="Get In Touch"
text="Ready to take control of your financial future? Contact the Tremonte team in Adelaide today for a consultation."
primaryButton={{
text: "Call (08) 8000 0000",
href: "tel:0880000000",
}}
secondaryButton={{
text: "Email Us",
href: "mailto:admin@tremonte.com.au",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,35 @@
// 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 FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSplitMedia
tag="FAQ"
title="Frequently Asked Questions"
items={[
{
question: "What industries do you work with?",
answer: "We support a wide range of industries including retail, professional services, hospitality, and construction.",
},
{
question: "Are you located in Adelaide?",
answer: "Yes, we are proudly Adelaide-based and serve clients across the city and surrounding areas.",
},
{
question: "How do we get started?",
answer: "Simply contact us through our website to book a free introductory consultation.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/business-partners-working-office_273609-6863.jpg"
description="Answers to common queries about our accounting services."
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,68 @@
// 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 HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroSplitVerticalMarquee
tag="Expert Business Accountants in Adelaide"
title="Your Financial Success, Simplified"
description="At Tremonte, we provide tailored accounting and business advisory services designed to help Adelaide business owners thrive. From tax compliance to strategic growth, we're with you every step of the way."
primaryButton={{
text: "Book Consultation",
href: "#contact",
}}
secondaryButton={{
text: "Our Services",
href: "#services",
}}
leftItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/people-working-elegant-cozy-office-space_23-2149548685.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/businesswoman-using-laptop_1398-1462.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/team-upbeat-business-partners-inspecting-solar-plant-machinery_482257-119652.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/agent-talking-with-parent-gen-z-girl-offering-advice-investing_482257-107458.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/agent-giving-sale-contract-clients-sign-after-they-decide-make-purchase_482257-118125.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/teamwork-looking-tablet_23-2149370557.jpg",
},
]}
rightItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/laughing-professional-businessman-working-his-office-businessperson-professional-environment_482257-32767.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/colleagues-working-together-project_23-2149286124.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/african-american-financial-consultant-writing-reports-while-having-meeting-with-clients-office_637285-898.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/green-screen-device-smiling-colleagues-doing-brainstorming_482257-123555.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/agent-office-using-software-laptop-build-emergency-fund-plan-family_482257-112015.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/two-happy-colleagues-using-laptop-video-call-sitting-table-with-cup-coffee-looking-display-talking-online-communication-concept_74855-12035.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View 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 { Award, CheckCircle, Zap } 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="Our Impact"
title="Trusted by Local Business"
metrics={[
{
icon: CheckCircle,
title: "Clients Served",
value: "500+",
},
{
icon: Award,
title: "Years Experience",
value: "20+",
},
{
icon: Zap,
title: "Tax Savings",
value: "$5M+",
},
]}
description="Driving results for businesses across Adelaide."
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,43 @@
// 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 FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ServicesSection(): React.JSX.Element {
return (
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesDetailedSteps
tag="Our Expertise"
title="Comprehensive Accounting Services"
description="We offer a full suite of services tailored to your specific industry and growth needs."
steps={[
{
tag: "Core",
title: "Tax & Compliance",
subtitle: "Simplified Reporting",
description: "We ensure your business remains compliant with Australian tax laws while maximizing your benefits.",
imageSrc: "http://img.b2bpic.net/free-photo/business-woman-working-office-desktop_23-2148194732.jpg",
},
{
tag: "Growth",
title: "Business Advisory",
subtitle: "Strategic Planning",
description: "From financial forecasting to business planning, we help you make data-driven decisions.",
imageSrc: "http://img.b2bpic.net/free-photo/happy-couple-talking-while-having-consultations-with-their-agent-office_637285-11098.jpg",
},
{
tag: "Backoffice",
title: "Bookkeeping",
subtitle: "Cloud Solutions",
description: "Seamless cloud bookkeeping solutions integrated with your operations for complete visibility.",
imageSrc: "http://img.b2bpic.net/free-photo/three-thoughtful-marketing-analysts-working-with-diagrams_1262-15321.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,43 @@
// 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 TeamProfileCards from '@/components/sections/team/TeamProfileCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TeamSection(): React.JSX.Element {
return (
<div id="team" data-section="team">
<SectionErrorBoundary name="team">
<TeamProfileCards
tag="Our Experts"
title="Meet the Tremonte Team"
description="Your dedicated professionals in Adelaide."
items={[
{
title: "Senior Accountant",
description: "Expert in tax planning and corporate compliance.",
avatarSrc: "http://img.b2bpic.net/free-photo/confident-senior-businessman-with-digital-tablet_1262-2373.jpg",
buttonText: "Contact",
imageSrc: "http://img.b2bpic.net/free-photo/waist-up-confident-businessman-office_329181-19349.jpg",
},
{
title: "Business Analyst",
description: "Strategic advisory and growth specialist.",
avatarSrc: "http://img.b2bpic.net/free-photo/modern-office-composition-with-businessman_23-2147900145.jpg",
buttonText: "Contact",
imageSrc: "http://img.b2bpic.net/free-photo/happy-employee_1098-16109.jpg",
},
{
title: "Bookkeeping Manager",
description: "Cloud accounting specialist for small business.",
avatarSrc: "http://img.b2bpic.net/free-photo/portrait-woman-working-business-with-computer_482257-20185.jpg",
buttonText: "Contact",
imageSrc: "http://img.b2bpic.net/free-photo/old-couple-learning-use-technology_23-2149366903.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,95 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import { Star } from "lucide-react";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
import { cls } from "@/lib/utils";
const avatars = [
{
name: "Client 1",
imageSrc: "http://img.b2bpic.net/free-photo/woman-shaking-hands-with-male-colleague_482257-123554.jpg"
},
{
name: "Client 2",
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-woman-with-speech-bubble_53876-70978.jpg"
},
{
name: "Client 3",
imageSrc: "http://img.b2bpic.net/free-photo/young-handsome-smiling-businessman-showing-thumbs-up-with-funny-faces-drawings-focus-hands_176420-42468.jpg"
},
{
name: "Client 4",
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-businessman-suit-looking-camera-meeting_1163-4654.jpg"
},
{
name: "Client 5",
imageSrc: "http://img.b2bpic.net/free-photo/business-partners-celebrate-beginning-new-project-their-companies_482257-97532.jpg"
}
];
type Avatar = {
name: string;
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
const TestimonialsInline = () => {
const visibleAvatars = avatars.slice(0, 6);
const remainingCount = avatars.length - visibleAvatars.length;
return (
<section aria-label="Testimonials section" className="py-20">
<div className="flex flex-col items-center gap-5 w-content-width mx-auto">
<ScrollReveal variant="slide-up" className="flex gap-1.5">
{Array.from({ length: 5 }).map((_, index) => (
<Star
key={index}
className={cls("size-6 text-yellow-400", index < 5 ? "fill-yellow-400" : "fill-transparent")}
strokeWidth={1.5}
/>
))}
</ScrollReveal>
<TextAnimation
text={"Tremonte provided incredible clarity for our business finances. Their expertise saved us significant tax and gave us the confidence to grow."}
variant="fade"
gradientText={false}
tag="p"
className="md:max-w-8/10 text-5xl 2xl:text-6xl leading-[1.15] font-semibold text-center text-balance"
/>
<ScrollReveal variant="slide-up" delay={0.1} className="md:max-w-7/10 text-lg md:text-xl leading-snug text-center text-balance">
<p>{"Local Adelaide Entrepreneur"}</p>
</ScrollReveal>
<ScrollReveal variant="slide-up" delay={0.2} className="flex items-center justify-center mt-1">
{visibleAvatars.map((avatar, index) => (
<div
key={avatar.name}
className={cls("relative size-12 md:size-16 overflow-hidden rounded-full border-2 border-background", index > 0 && "-ml-5")}
style={{ zIndex: visibleAvatars.length - index }}
>
<ImageOrVideo imageSrc={avatar.imageSrc} videoSrc={avatar.videoSrc} />
</div>
))}
{remainingCount > 0 && (
<div
className="flex items-center justify-center size-12 md:size-16 -ml-5 rounded-full border-2 border-background card"
style={{ zIndex: 0 }}
>
<span className="text-sm md:text-base font-semibold">+{remainingCount}</span>
</div>
)}
</ScrollReveal>
</div>
</section>
);
};
export default function TestimonialsSection() {
return (
<div data-webild-section="testimonials" id="testimonials">
<TestimonialsInline />
</div>
);
}