Merge version_2_1781545273991 into main #1

Merged
bender merged 1 commits from version_2_1781545273991 into main 2026-06-15 17:44:13 +00:00
8 changed files with 319 additions and 160 deletions

View File

@@ -1,171 +1,33 @@
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
import HeroSplit from '@/components/sections/hero/HeroSplit';
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
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">
<HeroSplit
tag="Jeddah's Trusted Partner"
title="Professional Administrative & Legal Services"
description="Diwaniya General Service provides efficient, reliable solutions for all your personal and business paperwork needs in Jeddah. Expert support, right when you need it."
primaryButton={{
text: "Call Now: 050 460 9559",
href: "tel:+966504609559",
}}
secondaryButton={{
text: "Get a Quote",
href: "#contact",
}}
imageSrc="http://img.b2bpic.net/free-photo/hr-manager-interviewing-woman-after-doing-background-checks_482257-115673.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTextSplit
title="Why Choose Diwaniya"
descriptions={[
"Located in Al-Baghdadiyah Al-Sharqiyah, we have served the Jeddah community for years. We pride ourselves on attention to detail, fast processing times, and full transparency.",
"Whether you need assistance with paralegal documentation, bill payments, or general management consulting, our expert team ensures your business needs are handled with care and professional precision.",
"We focus on making complex administrative tasks simple and stress-free for our clients, providing high-quality service that saves you time and effort every single day.",
]}
primaryButton={{
text: "Call Today",
href: "tel:+966504609559",
}}
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesMediaCarousel
tag="Our Expertise"
title="Core Services We Offer"
description="We offer a diverse range of professional services tailored to support your business and administrative requirements."
items={[
{
title: "Paralegal Services",
description: "Expert assistance with documentation and legal forms.",
buttonIcon: "FileText",
imageSrc: "http://img.b2bpic.net/free-photo/young-adult-organizing-documents_23-2149396668.jpg",
},
{
title: "Management Consulting",
description: "Streamlining business processes for local enterprises.",
buttonIcon: "Briefcase",
imageSrc: "http://img.b2bpic.net/free-photo/co-workers-talking-about-annual-sales_1098-489.jpg",
},
{
title: "Bill & Payment Services",
description: "Convenient payment and processing support.",
buttonIcon: "CreditCard",
imageSrc: "http://img.b2bpic.net/free-photo/call-center-agent-typing-pc-keyboard-assisting-customers-through-live-chat_482257-125755.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="Proven Results"
title="Reliable Service History"
description="Dedicated to maintaining excellence in every transaction and client interaction."
metrics={[
{
value: "4.7★",
title: "Client Rating",
description: "Consistently rated highly by our Jeddah community.",
imageSrc: "http://img.b2bpic.net/free-photo/african-american-doctor-shaking-hands-with-her-female-patient-while-meeting-clinic-focus-is-happy-woman_637285-1785.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialTrustCard
quote="Diwaniya General Service has been instrumental in keeping my paperwork organized. Reliable, fast, and very professional."
rating={5}
author="Haris Malayil, Business Client"
avatars={[
{
name: "Haris",
imageSrc: "http://img.b2bpic.net/free-photo/successful-young-man-stylish-hat-relaxing-alone-cozy-cafeteria-lunch-break-looking-with-happy-expression_273609-1935.jpg",
},
{
name: "Mohammed",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-young-businesswoman-digital-nomad-posing-her-office-wearing-casual-clothes_1258-195343.jpg",
},
{
name: "Ali",
imageSrc: "http://img.b2bpic.net/free-photo/happy-businesswoman-her-coworkers-clapping-hands-meeting-office_637285-207.jpg",
},
{
name: "Sarah",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-successful-entrepreneur_1098-3855.jpg",
},
{
name: "David",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiling-businessman-using-modern-smart-phone-young-happy-man-working-his-office-holding-cellphone_1391-602.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTwoColumn
tag="Common Questions"
title="Frequently Asked Questions"
description="Get quick answers to common queries about our general services."
items={[
{
question: "What is your working hours?",
answer: "We are open daily until 11:30 PM to serve you.",
},
{
question: "Where are you located?",
answer: "We are located in Al-Baghdadiyah Al-Sharqiyah, Jeddah 22235.",
},
{
question: "Do I need an appointment?",
answer: "Walk-ins are welcome, but appointments are recommended for complex services.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Get Started"
text="Ready to get started with Diwaniya? Give us a call or stop by today."
primaryButton={{
text: "Call 050 460 9559",
href: "tel:+966504609559",
}}
secondaryButton={{
text: "Directions",
href: "https://maps.google.com",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

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 "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="Why Choose Diwaniya"
descriptions={[
"Located in Al-Baghdadiyah Al-Sharqiyah, we have served the Jeddah community for years. We pride ourselves on attention to detail, fast processing times, and full transparency.",
"Whether you need assistance with paralegal documentation, bill payments, or general management consulting, our expert team ensures your business needs are handled with care and professional precision.",
"We focus on making complex administrative tasks simple and stress-free for our clients, providing high-quality service that saves you time and effort every single day.",
]}
primaryButton={{
text: "Call Today",
href: "tel:+966504609559",
}}
/>
</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 Started"
text="Ready to get started with Diwaniya? Give us a call or stop by today."
primaryButton={{
text: "Call 050 460 9559",
href: "tel:+966504609559",
}}
secondaryButton={{
text: "Directions",
href: "https://maps.google.com",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// 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 FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTwoColumn
tag="Common Questions"
title="Frequently Asked Questions"
description="Get quick answers to common queries about our general services."
items={[
{
question: "What is your working hours?",
answer: "We are open daily until 11:30 PM to serve you.",
},
{
question: "Where are you located?",
answer: "We are located in Al-Baghdadiyah Al-Sharqiyah, Jeddah 22235.",
},
{
question: "Do I need an appointment?",
answer: "Walk-ins are welcome, but appointments are recommended for complex services.",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,40 @@
// 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="Our Expertise"
title="Core Services We Offer"
description="We offer a diverse range of professional services tailored to support your business and administrative requirements."
items={[
{
title: "Paralegal Services",
description: "Expert assistance with documentation and legal forms.",
buttonIcon: "FileText",
imageSrc: "http://img.b2bpic.net/free-photo/young-adult-organizing-documents_23-2149396668.jpg",
},
{
title: "Management Consulting",
description: "Streamlining business processes for local enterprises.",
buttonIcon: "Briefcase",
imageSrc: "http://img.b2bpic.net/free-photo/co-workers-talking-about-annual-sales_1098-489.jpg",
},
{
title: "Bill & Payment Services",
description: "Convenient payment and processing support.",
buttonIcon: "CreditCard",
imageSrc: "http://img.b2bpic.net/free-photo/call-center-agent-typing-pc-keyboard-assisting-customers-through-live-chat_482257-125755.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,99 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import Button from "@/components/ui/Button";
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
const primaryButton = {
text: "Call Now: 050 460 9559",
href: "tel:+966504609559"
};
const secondaryButton = {
text: "Get a Quote",
href: "#contact"
};
type HeroSplitProps = {
tag: string;
title: string;
description: string;
primaryButton: { text: string; href: string };
secondaryButton: { text: string; href: string };
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
const HeroInline = () => {
return (
<section aria-label="Hero section" className="relative flex items-center h-fit md:h-svh pt-25 pb-20 md:py-0">
<HeroBackgroundSlot />
<div className="flex flex-col md:flex-row items-center gap-12 md:gap-20 w-content-width mx-auto">
<div className="w-full md:w-1/2">
<div className="flex flex-col items-center md:items-start gap-3">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>{"Jeddah's Trusted Partner"}</p>
</div>
<TextAnimation
text={"Professional Administrative & Legal Services"}
variant="fade"
gradientText={true}
tag="h1"
className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center md:text-left text-balance"
/>
<TextAnimation
text={"Diwaniya General Service provides efficient, reliable solutions for all your personal and business paperwork needs in Jeddah. Expert support, right when you need it."}
variant="fade"
gradientText={false}
tag="p"
className="md:max-w-8/10 text-lg md:text-xl leading-snug text-center md:text-left text-balance"
/>
<div className="flex flex-wrap max-md: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 variant="fade" delay={0.2} className="w-full md:w-1/2">
<div className="flex flex-col items-center md:items-end gap-3" dir="rtl">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>{"شريكك الموثوق في جدة"}</p>
</div>
<TextAnimation
text={"خدمات إدارية وقانونية احترافية"}
variant="fade"
gradientText={true}
tag="h1"
className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center md:text-right text-balance"
/>
<TextAnimation
text={"تقدم ديوانية للخدمات العامة حلولاً فعالة وموثوقة لجميع احتياجاتك من المعاملات الشخصية والتجارية في جدة. دعم خبير، في الوقت الذي تحتاجه."}
variant="fade"
gradientText={false}
tag="p"
className="md:max-w-8/10 text-lg md:text-xl leading-snug text-center md:text-right text-balance"
/>
<div className="flex flex-wrap max-md:justify-center gap-3 mt-2 md:mt-3">
<Button text={"اتصل الآن: 050 460 9559"} href={primaryButton.href} variant="primary"/>
<Button text={"احصل على تسعيرة"} href={secondaryButton.href} variant="secondary" animationDelay={0.1} />
</div>
</div>
</ScrollReveal>
</div>
</section>
);
};
export default function HeroSection() {
return (
<div data-webild-section="hero" id="hero">
<HeroInline />
</div>
);
}

View 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="Proven Results"
title="Reliable Service History"
description="Dedicated to maintaining excellence in every transaction and client interaction."
metrics={[
{
value: "4.7★",
title: "Client Rating",
description: "Consistently rated highly by our Jeddah community.",
imageSrc: "http://img.b2bpic.net/free-photo/african-american-doctor-shaking-hands-with-her-female-patient-while-meeting-clinic-focus-is-happy-woman_637285-1785.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,42 @@
// 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 TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialTrustCard
quote="Diwaniya General Service has been instrumental in keeping my paperwork organized. Reliable, fast, and very professional."
rating={5}
author="Haris Malayil, Business Client"
avatars={[
{
name: "Haris",
imageSrc: "http://img.b2bpic.net/free-photo/successful-young-man-stylish-hat-relaxing-alone-cozy-cafeteria-lunch-break-looking-with-happy-expression_273609-1935.jpg",
},
{
name: "Mohammed",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-confident-young-businesswoman-digital-nomad-posing-her-office-wearing-casual-clothes_1258-195343.jpg",
},
{
name: "Ali",
imageSrc: "http://img.b2bpic.net/free-photo/happy-businesswoman-her-coworkers-clapping-hands-meeting-office_637285-207.jpg",
},
{
name: "Sarah",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-successful-entrepreneur_1098-3855.jpg",
},
{
name: "David",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiling-businessman-using-modern-smart-phone-young-happy-man-working-his-office-holding-cellphone_1391-602.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}