Bob AI: Add location section with Google Maps embed
This commit is contained in:
@@ -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 />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
22
src/pages/HomePage/sections/About.tsx
Normal file
22
src/pages/HomePage/sections/About.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
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="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>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Faq.tsx
Normal file
38
src/pages/HomePage/sections/Faq.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Gallery.tsx
Normal file
57
src/pages/HomePage/sections/Gallery.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 "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>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Hero.tsx
Normal file
29
src/pages/HomePage/sections/Hero.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
44
src/pages/HomePage/sections/Location.tsx
Normal file
44
src/pages/HomePage/sections/Location.tsx
Normal 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 ağı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>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Pricing.tsx
Normal file
52
src/pages/HomePage/sections/Pricing.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
43
src/pages/HomePage/sections/Services.tsx
Normal file
43
src/pages/HomePage/sections/Services.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
42
src/pages/HomePage/sections/Testimonials.tsx
Normal file
42
src/pages/HomePage/sections/Testimonials.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user