Merge version_2_1781445103843 into main #1

Merged
bender merged 1 commits from version_2_1781445103843 into main 2026-06-14 13:53:22 +00:00
10 changed files with 380 additions and 233 deletions

View File

@@ -1,245 +1,38 @@
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroSplit from '@/components/sections/hero/HeroSplit';
import PricingSimpleCards from '@/components/sections/pricing/PricingSimpleCards';
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 ServicesSection from './HomePage/sections/Services';
import GallerySection from './HomePage/sections/Gallery';
import AboutSection from './HomePage/sections/About';
import TestimonialsSection from './HomePage/sections/Testimonials';
import PricingSection from './HomePage/sections/Pricing';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
import LocationSection from './HomePage/sections/Location';export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroSplit
tag="Luxury Hair Studio"
title="Güzelliğini Yeniden Keşfet"
description="Uzman ekibimizle tarzınızı yansıtan profesyonel dokunuşlar. Kendinizi ödüllendirin ve randevunuzu hemen oluşturun."
primaryButton={{
text: "Randevu Al",
href: "#contact",
}}
secondaryButton={{
text: "Hizmetler",
href: "#services",
}}
imageSrc="http://img.b2bpic.net/free-photo/skies-snowboard-lounge-area_482257-76730.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesDetailedSteps
tag="Özel Hizmetler"
title="Profesyonel Dokunuşlar"
description="Her saç tipi için özel bakım ve tasarım seçenekleri."
steps={[
{
tag: "Kesim",
title: "Saç Kesimi",
subtitle: "Modern Tasarım",
description: "Yüz hatlarınıza uygun, modern ve kişiselleştirilmiş saç kesimleri.",
imageSrc: "http://img.b2bpic.net/free-photo/instruments-used-latino-hair-salon_23-2150555177.jpg",
},
{
tag: "Boya",
title: "Boya & Renk",
subtitle: "Uzman Renklendirme",
description: "En kaliteli ürünlerle saç sağlığınızı koruyan profesyonel boyama teknikleri.",
imageSrc: "http://img.b2bpic.net/free-photo/blonde-girl-getting-her-hair-done_23-2148108856.jpg",
},
{
tag: "Bakım",
title: "Fön & Bakım",
subtitle: "İpeksi Saçlar",
description: "Saçınızın ihtiyacı olan özel bakım kürleri ve profesyonel fön uygulamaları.",
imageSrc: "http://img.b2bpic.net/free-photo/crying-woman-has-frustrated-face-expression-sits-bathrobe-tired-beauty-procedures_273609-37078.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="gallery" data-section="gallery">
<SectionErrorBoundary name="gallery">
<FeaturesImageBento
tag="Galeri"
title="Çalışmalarımız"
description="Instagram tarzı değişimler ve popüler saç modelleri."
items={[
{
title: "Modern Kesim",
description: "Kısa saç modelleri.",
imageSrc: "http://img.b2bpic.net/free-photo/blonde-female-friends-dressed-white_273609-6118.jpg",
},
{
title: "Doğal Işıltı",
description: "Boya teknikleri.",
imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-woman-trendy-summer-red-skirt-black-leather-jacket_158538-2480.jpg",
},
{
title: "Özel Gün",
description: "Gelin saçı.",
imageSrc: "http://img.b2bpic.net/free-photo/teenager-girl-with-hippie-clothes-dreadlocks_23-2149085216.jpg",
},
{
title: "Bakımlı Saçlar",
description: "Günlük fön.",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-woman-getting-ready-giving-haircut-her-client_23-2148353413.jpg",
},
{
title: "Hacimli Dalgalar",
description: "Profesyonel stil.",
imageSrc: "http://img.b2bpic.net/free-photo/elegant-woman-black-jacket-with-flowing-brown-hair_23-2152020227.jpg",
},
{
title: "Kişisel Stil",
description: "Trendler.",
imageSrc: "http://img.b2bpic.net/free-photo/happy-client-hairdresser-shop_23-2149319768.jpg",
},
{
title: "Sağlıklı Parlaklık",
description: "Bakım sonucu.",
imageSrc: "http://img.b2bpic.net/free-photo/professional-woman-making-up-girl_23-2148210709.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<GallerySection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTextSplit
title="Hakkımızda"
descriptions={[
"Luxe Salon olarak, yılların deneyimini modern estetikle birleştiriyoruz. Amacımız, her misafirimizin salondan mutlu ve özgüvenli ayrılmasını sağlamak.",
"Neden bizi seçmelisiniz? Çünkü biz saçınızı sadece boyamıyoruz; saçınızın sağlığını önemsiyor ve kişiliğinizi yansıtan en doğru tasarımı oluşturuyoruz.",
]}
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialTrustCard
quote="Hayatımda gördüğüm en profesyonel salon. Saç rengim tam istediğim gibi oldu, ekip çok ilgili!"
rating={5}
author="Ayşe Yılmaz"
avatars={[
{
name: "Ayşe Yılmaz",
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-pink-sweater-looking-camera-posing-high-quality-photo_114579-31514.jpg",
},
{
name: "Zeynep Demir",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-hairdresser-washing-man-s-hair_23-2150665396.jpg",
},
{
name: "Canan Akın",
imageSrc: "http://img.b2bpic.net/free-photo/young-black-people-taking-care-afro-hair_23-2149575435.jpg",
},
{
name: "Merve Şahin",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-woman-with-smartphone_23-2148294016.jpg",
},
{
name: "Ece Çelik",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-women-getting-married_23-2150753670.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingSimpleCards
tag="Fiyat Listesi"
title="Hizmet Ücretlerimiz"
description="Size özel hizmetlerimizin başlangıç fiyatları."
plans={[
{
tag: "Temel",
price: "600 TL",
description: "Klasik saç kesimi ve fön uygulaması.",
features: [
"Saç Kesimi",
"Yıkama",
"Fön",
],
},
{
tag: "Popüler",
price: "1.500 TL",
description: "Tam boya ve stil tasarımı.",
features: [
"Dip Boya",
"Bakım",
"Kesim",
],
},
{
tag: "Premium",
price: "2.500 TL",
description: "Özel renk ve tam kapsamlı bakım.",
features: [
"Balayage",
"Kür Bakım",
"Profesyonel Fön",
],
},
]}
/>
</SectionErrorBoundary>
</div>
<PricingSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTwoColumn
tag="SSS"
title="Sıkça Sorulan Sorular"
description="Randevu ve hizmetlerimizle ilgili merak ettikleriniz."
items={[
{
question: "Nasıl randevu alabilirim?",
answer: "WhatsApp hattımızdan veya web sitemizdeki form aracılığıyla anında randevu alabilirsiniz.",
},
{
question: "Hangi ürünleri kullanıyorsunuz?",
answer: "Dünya standartlarında, saç sağlığını koruyan profesyonel ürünler tercih ediyoruz.",
},
{
question: "Ödemeyi nasıl yapabilirim?",
answer: "Nakit veya kredi kartı ile ödeme seçeneklerimiz mevcuttur.",
},
{
question: "İptal politikası nedir?",
answer: "Randevunuzu en az 24 saat önceden bildirerek ücretsiz iptal edebilirsiniz.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<LocationSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Randevu"
text="Güzelliğinize profesyonel bir dokunuş için hemen yerinizi ayırtın. WhatsApp üzerinden hızlı randevu oluşturabilirsiniz."
primaryButton={{
text: "WhatsApp'tan Randevu Al",
href: "https://wa.me/905000000000",
}}
secondaryButton={{
text: "Formu Doldur",
href: "#",
}}
/>
</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 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="Hakkımızda"
descriptions={[
"Luxe Salon olarak, yılların deneyimini modern estetikle birleştiriyoruz. Amacımız, her misafirimizin salondan mutlu ve özgüvenli ayrılmasını sağlamak.",
"Neden bizi seçmelisiniz? Çünkü biz saçınızı sadece boyamıyoruz; saçınızın sağlığını önemsiyor ve kişiliğinizi yansıtan en doğru tasarımı oluşturuyoruz.",
]}
/>
</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="Randevu"
text="Güzelliğinize profesyonel bir dokunuş için hemen yerinizi ayırtın. WhatsApp üzerinden hızlı randevu oluşturabilirsiniz."
primaryButton={{
text: "WhatsApp'tan Randevu Al",
href: "https://wa.me/905000000000",
}}
secondaryButton={{
text: "Formu Doldur",
href: "#",
}}
/>
</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 "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="SSS"
title="Sıkça Sorulan Sorular"
description="Randevu ve hizmetlerimizle ilgili merak ettikleriniz."
items={[
{
question: "Nasıl randevu alabilirim?",
answer: "WhatsApp hattımızdan veya web sitemizdeki form aracılığıyla anında randevu alabilirsiniz.",
},
{
question: "Hangi ürünleri kullanıyorsunuz?",
answer: "Dünya standartlarında, saç sağlığını koruyan profesyonel ürünler tercih ediyoruz.",
},
{
question: "Ödemeyi nasıl yapabilirim?",
answer: "Nakit veya kredi kartı ile ödeme seçeneklerimiz mevcuttur.",
},
{
question: "İptal politikası nedir?",
answer: "Randevunuzu en az 24 saat önceden bildirerek ücretsiz iptal edebilirsiniz.",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,57 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "gallery" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function GallerySection(): React.JSX.Element {
return (
<div id="gallery" data-section="gallery">
<SectionErrorBoundary name="gallery">
<FeaturesImageBento
tag="Galeri"
title="Çalışmalarımız"
description="Instagram tarzı değişimler ve popüler saç modelleri."
items={[
{
title: "Modern Kesim",
description: "Kısa saç modelleri.",
imageSrc: "http://img.b2bpic.net/free-photo/blonde-female-friends-dressed-white_273609-6118.jpg",
},
{
title: "Doğal Işıltı",
description: "Boya teknikleri.",
imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-woman-trendy-summer-red-skirt-black-leather-jacket_158538-2480.jpg",
},
{
title: "Özel Gün",
description: "Gelin saçı.",
imageSrc: "http://img.b2bpic.net/free-photo/teenager-girl-with-hippie-clothes-dreadlocks_23-2149085216.jpg",
},
{
title: "Bakımlı Saçlar",
description: "Günlük fön.",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-woman-getting-ready-giving-haircut-her-client_23-2148353413.jpg",
},
{
title: "Hacimli Dalgalar",
description: "Profesyonel stil.",
imageSrc: "http://img.b2bpic.net/free-photo/elegant-woman-black-jacket-with-flowing-brown-hair_23-2152020227.jpg",
},
{
title: "Kişisel Stil",
description: "Trendler.",
imageSrc: "http://img.b2bpic.net/free-photo/happy-client-hairdresser-shop_23-2149319768.jpg",
},
{
title: "Sağlıklı Parlaklık",
description: "Bakım sonucu.",
imageSrc: "http://img.b2bpic.net/free-photo/professional-woman-making-up-girl_23-2148210709.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// 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 HeroSplit from '@/components/sections/hero/HeroSplit';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroSplit
tag="Luxury Hair Studio"
title="Güzelliğini Yeniden Keşfet"
description="Uzman ekibimizle tarzınızı yansıtan profesyonel dokunuşlar. Kendinizi ödüllendirin ve randevunuzu hemen oluşturun."
primaryButton={{
text: "Randevu Al",
href: "#contact",
}}
secondaryButton={{
text: "Hizmetler",
href: "#services",
}}
imageSrc="http://img.b2bpic.net/free-photo/skies-snowboard-lounge-area_482257-76730.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,44 @@
import React from "react";
import ScrollReveal from "@/components/ui/ScrollReveal";
export default function LocationSection() {
return (
<section data-webild-section="location" id="location" className="relative w-full py-24 bg-background">
<div className="max-w-content-width mx-auto px-6">
<ScrollReveal variant="fade">
<div className="text-center mb-12">
<h2 className="text-4xl font-bold text-foreground mb-4">Bizi Ziyaret Edin</h2>
<p className="text-lg text-muted-foreground">Salonumuzda sizi ırlamaktan mutluluk duyarız.</p>
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
<div className="rounded-2xl overflow-hidden h-[400px] shadow-lg bg-card border border-border">
<iframe
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3009.833132085354!2d28.97696!3d41.03694!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x14cab7650656bd63%3A0x8ca058b28c20b6c3!2sTaksim%20Meydan%C4%B1!5e0!3m2!1str!2str!4v1700000000000!5m2!1str!2str"
width="100%"
height="100%"
style={{ border: 0 }}
allowFullScreen={true}
loading="lazy"
referrerPolicy="no-referrer-when-downgrade"
></iframe>
</div>
<div className="space-y-8">
<div className="bg-card p-6 rounded-2xl border border-border shadow-sm">
<h3 className="text-xl font-semibold text-foreground mb-2">Adresimiz</h3>
<p className="text-muted-foreground">Taksim Meydanı, İstiklal Caddesi No:1<br/>Beyoğlu, İstanbul</p>
</div>
<div className="bg-card p-6 rounded-2xl border border-border shadow-sm">
<h3 className="text-xl font-semibold text-foreground mb-2">Çalışma Saatleri</h3>
<p className="text-muted-foreground">Pazartesi - Cumartesi: 09:00 - 20:00<br/>Pazar: Kapalı</p>
</div>
<div className="bg-card p-6 rounded-2xl border border-border shadow-sm">
<h3 className="text-xl font-semibold text-foreground mb-2">İletişim</h3>
<p className="text-muted-foreground">Telefon: +90 500 000 00 00<br/>E-posta: info@kuafor.com</p>
</div>
</div>
</div>
</ScrollReveal>
</div>
</section>
);
}

View File

@@ -0,0 +1,52 @@
// 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 PricingSimpleCards from '@/components/sections/pricing/PricingSimpleCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function PricingSection(): React.JSX.Element {
return (
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingSimpleCards
tag="Fiyat Listesi"
title="Hizmet Ücretlerimiz"
description="Size özel hizmetlerimizin başlangıç fiyatları."
plans={[
{
tag: "Temel",
price: "600 TL",
description: "Klasik saç kesimi ve fön uygulaması.",
features: [
"Saç Kesimi",
"Yıkama",
"Fön",
],
},
{
tag: "Popüler",
price: "1.500 TL",
description: "Tam boya ve stil tasarımı.",
features: [
"Dip Boya",
"Bakım",
"Kesim",
],
},
{
tag: "Premium",
price: "2.500 TL",
description: "Özel renk ve tam kapsamlı bakım.",
features: [
"Balayage",
"Kür Bakım",
"Profesyonel Fön",
],
},
]}
/>
</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="Özel Hizmetler"
title="Profesyonel Dokunuşlar"
description="Her saç tipi için özel bakım ve tasarım seçenekleri."
steps={[
{
tag: "Kesim",
title: "Saç Kesimi",
subtitle: "Modern Tasarım",
description: "Yüz hatlarınıza uygun, modern ve kişiselleştirilmiş saç kesimleri.",
imageSrc: "http://img.b2bpic.net/free-photo/instruments-used-latino-hair-salon_23-2150555177.jpg",
},
{
tag: "Boya",
title: "Boya & Renk",
subtitle: "Uzman Renklendirme",
description: "En kaliteli ürünlerle saç sağlığınızı koruyan profesyonel boyama teknikleri.",
imageSrc: "http://img.b2bpic.net/free-photo/blonde-girl-getting-her-hair-done_23-2148108856.jpg",
},
{
tag: "Bakım",
title: "Fön & Bakım",
subtitle: "İpeksi Saçlar",
description: "Saçınızın ihtiyacı olan özel bakım kürleri ve profesyonel fön uygulamaları.",
imageSrc: "http://img.b2bpic.net/free-photo/crying-woman-has-frustrated-face-expression-sits-bathrobe-tired-beauty-procedures_273609-37078.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="Hayatımda gördüğüm en profesyonel salon. Saç rengim tam istediğim gibi oldu, ekip çok ilgili!"
rating={5}
author="Ayşe Yılmaz"
avatars={[
{
name: "Ayşe Yılmaz",
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-pink-sweater-looking-camera-posing-high-quality-photo_114579-31514.jpg",
},
{
name: "Zeynep Demir",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-hairdresser-washing-man-s-hair_23-2150665396.jpg",
},
{
name: "Canan Akın",
imageSrc: "http://img.b2bpic.net/free-photo/young-black-people-taking-care-afro-hair_23-2149575435.jpg",
},
{
name: "Merve Şahin",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-woman-with-smartphone_23-2148294016.jpg",
},
{
name: "Ece Çelik",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-women-getting-married_23-2150753670.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}