Merge version_2_1781416076002 into main #2

Merged
bender merged 1 commits from version_2_1781416076002 into main 2026-06-14 05:50:11 +00:00
9 changed files with 406 additions and 169 deletions

View File

@@ -1,181 +1,36 @@
import AboutText from '@/components/sections/about/AboutText';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import FeaturesArrowCards from '@/components/sections/features/FeaturesArrowCards';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
import PricingLayeredCards from '@/components/sections/pricing/PricingLayeredCards';
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
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 WorkshopSection from './HomePage/sections/Workshop';
import PricingSection from './HomePage/sections/Pricing';
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">
<HeroSplitMediaGrid
tag="Samsun's Trusted Mechanic"
title="Professional Auto Repair Services"
description="Keeping your vehicle performing at its best with reliable, transparent, and expert automotive care in Samsun."
primaryButton={{
text: "Book Appointment", href: "#contact"}}
secondaryButton={{
text: "Our Services", href: "#services"}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/handsome-man-blue-uniform-checks-car_1157-31499.jpg"},
{
imageSrc: "http://img.b2bpic.net/free-photo/close-up-woman-electric-car_23-2149146253.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutText
title="Poyraz Oto is dedicated to providing honest and high-quality car maintenance for the Samsun community. With years of experience and state-of-the-art diagnostic tools, we ensure every vehicle leaves our shop in perfect condition."
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesArrowCards
tag="Expertise"
title="Our Specialized Auto Services"
description="From routine oil changes to complex electronic repairs, we cover all aspects of vehicle maintenance."
items={[
{
title: "Advanced Diagnostics", tags: [
"Technology", "Repair"],
imageSrc: "http://img.b2bpic.net/free-photo/car-engine_1373-569.jpg"},
{
title: "Preventive Maintenance", tags: [
"Safety", "Engine"],
imageSrc: "http://img.b2bpic.net/free-photo/mechanic-repairing-car-workshop_329181-11819.jpg"},
{
title: "Brake & Suspension", tags: [
"Safety", "Repair"],
imageSrc: "http://img.b2bpic.net/free-photo/mechanic-changing-brake-discs-car-service_1303-26910.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="workshop" data-section="workshop">
<SectionErrorBoundary name="workshop">
<FeaturesImageBento
tag="Comprehensive"
title="Our Workshop Highlights"
description="Complete care for your vehicle's mechanical and electrical systems."
items={[
{
title: "Tire Balancing", description: "Precision wheel alignment.", imageSrc: "http://img.b2bpic.net/free-photo/modern-automobile-mechanic-composition_23-2147881684.jpg"},
{
title: "Electrical Systems", description: "Computerized troubleshooting.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-young-man-working-bike_23-2149039023.jpg"},
{
title: "Suspension Work", description: "Smooth ride assurance.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-woman-repairing-car_23-2150171262.jpg"},
{
title: "Climate Control", description: "AC system repairs.", imageSrc: "http://img.b2bpic.net/free-photo/woman-hand-turning-car-air-conditioning-system-car-air-conditioner-off-button-close-up-view_657921-553.jpg"},
{
title: "Engine Tuning", description: "Optimized performance.", imageSrc: "http://img.b2bpic.net/free-photo/male-mechanic-working-his-workshop_23-2148970737.jpg"},
{
title: "Exhaust Repair", description: "Efficiency and safety.", imageSrc: "http://img.b2bpic.net/free-photo/young-woman-fixing-undercarriage-with-wrench_7502-4429.jpg"},
{
title: "Detailing", description: "Vehicle rejuvenation.", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-car-washing-service_23-2149212196.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<WorkshopSection />
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingLayeredCards
tag="Maintenance"
title="Service Packages"
description="Affordable maintenance plans for your peace of mind."
plans={[
{
tag: "Standard", price: "500 TL", description: "Essential oil and filter change.", primaryButton: {
text: "Select", href: "#contact"},
features: [
"Engine Oil", "Oil Filter", "Checkup"],
},
{
tag: "Complete", price: "1200 TL", description: "Comprehensive seasonal checkup.", primaryButton: {
text: "Select", href: "#contact"},
features: [
"Standard Plus", "Brake Check", "AC Clean"],
},
{
tag: "Premium", price: "2500 TL", description: "Top-to-bottom vehicle restoration.", primaryButton: {
text: "Select", href: "#contact"},
features: [
"Complete Plus", "Suspension", "Tires"],
},
]}
/>
</SectionErrorBoundary>
</div>
<PricingSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialOverlayCards
tag="Feedback"
title="Our Happy Customers"
description="See why Samsun trusts Poyraz Oto."
testimonials={[
{
name: "Ahmet Y.", role: "Driver", company: "Local Customer", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/happy-auto-repairman-shaking-hands-with-his-customers-workshop_637285-7786.jpg"},
{
name: "Ayşe K.", role: "Employee", company: "Samsun Corp", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/charismatic-man-holding-car-keys-showing-thumbs-up_158595-4217.jpg"},
{
name: "Mehmet D.", role: "Student", company: "Local Customer", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/mechanic-giving-keys-car-customer_329181-11862.jpg"},
{
name: "Fatma S.", role: "Teacher", company: "Samsun Local", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/client-vehicle-distributor-checkup_482257-115279.jpg"},
{
name: "Can B.", role: "Worker", company: "Local Business", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/mechanic-customer-signing-document-workshop_329181-11872.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Q&A"
title="Common Questions"
description="We are here to answer your common questions regarding our automotive services."
items={[
{
question: "Do you offer warranty?", answer: "Yes, we provide a 6-month warranty on all mechanical repairs."},
{
question: "Can I leave my car overnight?", answer: "Yes, our workshop is secure and monitored 24/7."},
{
question: "What payment methods do you accept?", answer: "We accept cash, credit cards, and bank transfers."},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Visit Us"
text="Ready to get your car serviced in Samsun? Book your appointment today and experience our expert service."
primaryButton={{
text: "Call Now", href: "tel:+905550000000"}}
secondaryButton={{
text: "Email Us", href: "mailto:info@poyrazotosamsun.com"}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,18 @@
// 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 AboutText from '@/components/sections/about/AboutText';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutText
title="Poyraz Oto is dedicated to providing honest and high-quality car maintenance for the Samsun community. With years of experience and state-of-the-art diagnostic tools, we ensure every vehicle leaves our shop in perfect condition."
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,23 @@
// 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="Visit Us"
text="Ready to get your car serviced in Samsun? Book your appointment today and experience our expert service."
primaryButton={{
text: "Call Now", href: "tel:+905550000000"}}
secondaryButton={{
text: "Email Us", href: "mailto:info@poyrazotosamsun.com"}}
/>
</SectionErrorBoundary>
</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 "faq" section.
import React from 'react';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Q&A"
title="Common Questions"
description="We are here to answer your common questions regarding our automotive services."
items={[
{
question: "Do you offer warranty?", answer: "Yes, we provide a 6-month warranty on all mechanical repairs."},
{
question: "Can I leave my car overnight?", answer: "Yes, our workshop is secure and monitored 24/7."},
{
question: "What payment methods do you accept?", answer: "We accept cash, credit cards, and bank transfers."},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,166 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import { useEffect, useState } from "react";
import { Star } from "lucide-react";
import { motion, AnimatePresence } from "motion/react";
import { cls } from "@/lib/utils";
import Button from "@/components/ui/Button";
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
const primaryButton = {
href: "#contact",
text: "Book Appointment"
};
const secondaryButton = {
href: "#services",
text: "Our Services"
};
const testimonials = [
{
imageSrc: "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=150&h=150&fit=crop&crop=faces",
text: "Best auto repair shop in Samsun! They fixed my engine issues quickly and the price was very reasonable.",
name: "Ahmet Yılmaz",
handle: "@ahmety",
rating: 5
},
{
name: "Ayşe Demir",
handle: "@aysed",
rating: 5,
imageSrc: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=150&h=150&fit=crop&crop=faces",
text: "Very professional and trustworthy. I always bring my car here for regular maintenance."
},
{
name: "Mehmet Kaya",
handle: "@mehmetk",
rating: 5,
imageSrc: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=150&h=150&fit=crop&crop=faces",
text: "Great service and friendly staff. They explained everything clearly before starting the repair."
}
];
type Testimonial = {
name: string;
handle: string;
text: string;
rating: number;
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
type HeroOverlayTestimonialProps = {
tag: string;
title: string;
description: string;
primaryButton: { text: string; href: string };
secondaryButton: { text: string; href: string };
testimonials: Testimonial[];
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
const INTERVAL = 5000;
const HeroInline = () => {
const [currentIndex, setCurrentIndex] = useState(0);
useEffect(() => {
if (testimonials.length <= 1) return;
const interval = setInterval(() => {
setCurrentIndex((prev) => (prev + 1) % testimonials.length);
}, INTERVAL);
return () => clearInterval(interval);
}, [currentIndex, testimonials.length]);
const testimonial = testimonials[currentIndex];
return (
<section
aria-label="Hero section"
className="relative w-full h-svh overflow-hidden flex flex-col justify-start mb-20"
>
<HeroBackgroundSlot />
<ImageOrVideo
imageSrc={"http://img.b2bpic.net/free-photo/handsome-man-blue-uniform-checks-car_1157-31499.jpg"}
className="absolute inset-0 w-full h-full object-cover rounded-none"
/>
<div className="absolute inset-0 bg-gradient-to-b from-background/80 via-background/50 to-background" />
<div
className="absolute z-10 w-[150vw] h-[150vw] left-0 top-0 -translate-x-1/2 -translate-y-1/2 backdrop-blur mask-[radial-gradient(circle,black_20%,transparent_70%)]"
aria-hidden="true"
/>
<div className="relative z-10 w-content-width mx-auto pt-35">
<div className="flex flex-col gap-3 w-full md:w-6/10 lg:w-1/2 xl:w-45/100 2xl:w-4/10">
<div className="w-fit px-3 py-1 mb-1 text-sm card rounded">
<p>{"Samsun's Trusted Mechanic"}</p>
</div>
<TextAnimation
text={"Professional Auto Repair Services"}
variant="fade-blur"
gradientText={true}
tag="h1"
className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-white text-balance"
/>
<TextAnimation
text={"Keeping your vehicle performing at its best with reliable, transparent, and expert automotive care in Samsun."}
variant="fade-blur"
gradientText={false}
tag="p"
className="text-lg md:text-xl text-white leading-snug text-balance"
/>
<div className="flex flex-wrap 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>
<AnimatePresence mode="wait">
<motion.div
key={currentIndex}
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -10 }}
transition={{ duration: 0.3 }}
className="absolute z-10 bottom-4 left-4 right-4 p-3 xl:p-4 2xl:p-5 card rounded flex flex-col gap-3 xl:gap-4 2xl:gap-5 md:left-auto md:bottom-6 md:right-6 md:max-w-25/100 2xl:max-w-2/10"
>
<div className="flex gap-1.5">
{Array.from({ length: 5 }).map((_, index) => (
<Star
key={index}
className={cls("size-5 text-accent", index < testimonial.rating ? "fill-accent" : "fill-transparent")}
strokeWidth={1.5}
/>
))}
</div>
<p className="text-lg leading-snug text-balance">{testimonial.text}</p>
<div className="flex items-center gap-3">
<ImageOrVideo
imageSrc={testimonial.imageSrc}
videoSrc={testimonial.videoSrc}
className="size-10 md:size-11 2xl:size-12 rounded-full object-cover"
/>
<div className="flex flex-col">
<span className="text-base text-foreground leading-snug font-medium">{testimonial.name}</span>
<span className="text-base text-foreground/75 leading-snug">{testimonial.handle}</span>
</div>
</div>
</motion.div>
</AnimatePresence>
</section>
);
};
export default function HeroSection() {
return (
<div data-webild-section="hero" id="hero">
<HeroInline />
</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 "pricing" section.
import React from 'react';
import PricingLayeredCards from '@/components/sections/pricing/PricingLayeredCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function PricingSection(): React.JSX.Element {
return (
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingLayeredCards
tag="Maintenance"
title="Service Packages"
description="Affordable maintenance plans for your peace of mind."
plans={[
{
tag: "Standard", price: "500 TL", description: "Essential oil and filter change.", primaryButton: {
text: "Select", href: "#contact"},
features: [
"Engine Oil", "Oil Filter", "Checkup"],
},
{
tag: "Complete", price: "1200 TL", description: "Comprehensive seasonal checkup.", primaryButton: {
text: "Select", href: "#contact"},
features: [
"Standard Plus", "Brake Check", "AC Clean"],
},
{
tag: "Premium", price: "2500 TL", description: "Top-to-bottom vehicle restoration.", primaryButton: {
text: "Select", href: "#contact"},
features: [
"Complete Plus", "Suspension", "Tires"],
},
]}
/>
</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 "services" section.
import React from 'react';
import FeaturesArrowCards from '@/components/sections/features/FeaturesArrowCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ServicesSection(): React.JSX.Element {
return (
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesArrowCards
tag="Expertise"
title="Our Specialized Auto Services"
description="From routine oil changes to complex electronic repairs, we cover all aspects of vehicle maintenance."
items={[
{
title: "Advanced Diagnostics", tags: [
"Technology", "Repair"],
imageSrc: "http://img.b2bpic.net/free-photo/car-engine_1373-569.jpg"},
{
title: "Preventive Maintenance", tags: [
"Safety", "Engine"],
imageSrc: "http://img.b2bpic.net/free-photo/mechanic-repairing-car-workshop_329181-11819.jpg"},
{
title: "Brake & Suspension", tags: [
"Safety", "Repair"],
imageSrc: "http://img.b2bpic.net/free-photo/mechanic-changing-brake-discs-car-service_1303-26910.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,37 @@
// 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 TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialOverlayCards
tag="Feedback"
title="Our Happy Customers"
description="See why Samsun trusts Poyraz Oto."
testimonials={[
{
name: "Ahmet Y.", role: "Driver", company: "Local Customer", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/happy-auto-repairman-shaking-hands-with-his-customers-workshop_637285-7786.jpg"},
{
name: "Ayşe K.", role: "Employee", company: "Samsun Corp", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/charismatic-man-holding-car-keys-showing-thumbs-up_158595-4217.jpg"},
{
name: "Mehmet D.", role: "Student", company: "Local Customer", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/mechanic-giving-keys-car-customer_329181-11862.jpg"},
{
name: "Fatma S.", role: "Teacher", company: "Samsun Local", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/client-vehicle-distributor-checkup_482257-115279.jpg"},
{
name: "Can B.", role: "Worker", company: "Local Business", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/mechanic-customer-signing-document-workshop_329181-11872.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,36 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "workshop" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function WorkshopSection(): React.JSX.Element {
return (
<div id="workshop" data-section="workshop">
<SectionErrorBoundary name="workshop">
<FeaturesImageBento
tag="Comprehensive"
title="Our Workshop Highlights"
description="Complete care for your vehicle's mechanical and electrical systems."
items={[
{
title: "Tire Balancing", description: "Precision wheel alignment.", imageSrc: "http://img.b2bpic.net/free-photo/modern-automobile-mechanic-composition_23-2147881684.jpg"},
{
title: "Electrical Systems", description: "Computerized troubleshooting.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-young-man-working-bike_23-2149039023.jpg"},
{
title: "Suspension Work", description: "Smooth ride assurance.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-woman-repairing-car_23-2150171262.jpg"},
{
title: "Climate Control", description: "AC system repairs.", imageSrc: "http://img.b2bpic.net/free-photo/woman-hand-turning-car-air-conditioning-system-car-air-conditioner-off-button-close-up-view_657921-553.jpg"},
{
title: "Engine Tuning", description: "Optimized performance.", imageSrc: "http://img.b2bpic.net/free-photo/male-mechanic-working-his-workshop_23-2148970737.jpg"},
{
title: "Exhaust Repair", description: "Efficiency and safety.", imageSrc: "http://img.b2bpic.net/free-photo/young-woman-fixing-undercarriage-with-wrench_7502-4429.jpg"},
{
title: "Detailing", description: "Vehicle rejuvenation.", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-car-washing-service_23-2149212196.jpg"},
]}
/>
</SectionErrorBoundary>
</div>
);
}