Merge version_2_1781544575148 into main #1
@@ -1,271 +1,41 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSimple from '@/components/sections/faq/FaqSimple';
|
||||
import FeaturesComparison from '@/components/sections/features/FeaturesComparison';
|
||||
import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee';
|
||||
import PricingSplitCards from '@/components/sections/pricing/PricingSplitCards';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import TeamGlassCards from '@/components/sections/team/TeamGlassCards';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import { Heart, Shield, Sparkles, Star, Users } 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 ProofSection from './HomePage/sections/Proof';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import FeaturesSection from './HomePage/sections/Features';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import PricingSection from './HomePage/sections/Pricing';
|
||||
import TeamSection from './HomePage/sections/Team';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import VouchersSection from './HomePage/sections/Vouchers';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroOverlayMarquee
|
||||
tag="Ekskluzywne centrum zdrowia i regeneracji"
|
||||
title="Nie musisz wiedzieć, jakiego zabiegu potrzebujesz. My dobierzemy rozwiązanie."
|
||||
description="Indywidualne podejście, fizjoterapia, kosmetologia i regeneracja. Zaufaj specjalistom, którzy analizują Twoje potrzeby."
|
||||
primaryButton={{
|
||||
text: "Bezpłatna konsultacja",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Poznaj nasze metody",
|
||||
href: "#about",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
text: "Ponad 180 opinii Google",
|
||||
icon: Star,
|
||||
},
|
||||
{
|
||||
text: "Zespół specjalistów",
|
||||
icon: Users,
|
||||
},
|
||||
{
|
||||
text: "Indywidualna terapia",
|
||||
icon: Heart,
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/still-life-cozy-home-interior-details-living-room_169016-3537.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="proof" data-section="proof">
|
||||
<SectionErrorBoundary name="proof">
|
||||
<SocialProofMarquee
|
||||
tag="Zaufanie"
|
||||
title="Pracujemy na markach premium"
|
||||
names={[
|
||||
"Massada",
|
||||
"Mesoestetic",
|
||||
"Klapp",
|
||||
"Norden",
|
||||
"DMK Molecular",
|
||||
"Medavita",
|
||||
"Honeywell Spa",
|
||||
]}
|
||||
description="Wybieramy tylko sprawdzone technologie i kosmetyki dla naszych klientów."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProofSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="O nas"
|
||||
title="Więcej niż salon kosmetyczny"
|
||||
description="Honeywell SPA to miejsce, w którym zdrowie spotyka się z wiedzą. Nie sprzedajemy zabiegów – oferujemy drogi do poprawy Twojego samopoczucia i wyglądu."
|
||||
items={[
|
||||
{
|
||||
icon: Shield,
|
||||
title: "Indywidualna diagnoza",
|
||||
description: "Analizujemy stan zdrowia i cele, dobierając najlepszą terapię.",
|
||||
},
|
||||
{
|
||||
icon: Sparkles,
|
||||
title: "Profesjonalna wiedza",
|
||||
description: "Zespół fizjoterapeutów, trychologów i kosmetologów.",
|
||||
},
|
||||
{
|
||||
icon: Heart,
|
||||
title: "Praca poprzez dotyk",
|
||||
description: "Masaże i fizjoterapia oparte na sprawdzonych technikach.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/women-holding-hands-medium-shot_23-2149856242.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesComparison
|
||||
tag="Nasze podejście"
|
||||
title="Dlaczego wybierasz Honeywell SPA?"
|
||||
description="Skupiamy się na efektach zdrowotnych, a nie tylko na powierzchownej pielęgnacji."
|
||||
negativeItems={[
|
||||
"Samodzielny wybór zabiegów",
|
||||
"Brak analizy potrzeb",
|
||||
"Koncentracja na jednej usłudze",
|
||||
]}
|
||||
positiveItems={[
|
||||
"Indywidualna konsultacja",
|
||||
"Holistyczna diagnostyka",
|
||||
"Dobór terapii pod cel",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Opinie"
|
||||
title="Ponad 180 opinii w Google"
|
||||
description="Zaufanie naszych klientów to nasz największy sukces."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Anna K.",
|
||||
role: "Klientka",
|
||||
quote: "Najlepsze miejsce w mieście. Profesjonalne podejście i w końcu ktoś mi pomógł z bólami kręgosłupa.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-woman-leaning-swimming-pool-edge_23-2147868482.jpg",
|
||||
},
|
||||
{
|
||||
name: "Marta W.",
|
||||
role: "Klientka",
|
||||
quote: "Indywidualne podejście to tutaj standard. Dobrano mi terapię, która wreszcie przyniosła efekty.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/happy-smiley-elderly-woman-posing-bathrobe_23-2148419306.jpg",
|
||||
},
|
||||
{
|
||||
name: "Karolina P.",
|
||||
role: "Klientka",
|
||||
quote: "Zawsze wychodzę zrelaksowana. Niesamowita wiedza zespołu w zakresie fizjoterapii.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-lesbian-couple-taking-selfie-wedding_23-2150835706.jpg",
|
||||
},
|
||||
{
|
||||
name: "Joanna B.",
|
||||
role: "Klientka",
|
||||
quote: "Polecam każdemu. Konsultacja przed zabiegiem otworzyła mi oczy na to, co naprawdę potrzebuję.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tender-beautiful-african-woman-sleepwear-smiling-sitting-chair-resting-relaxing-home_176420-12823.jpg",
|
||||
},
|
||||
{
|
||||
name: "Ewa L.",
|
||||
role: "Klientka",
|
||||
quote: "Bardzo profesjonalne miejsce. Zero ściemy, same konkretne efekty i świetna atmosfera.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-smiley-bride-before-wedding_23-2149860779.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
<VouchersSection />
|
||||
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingSplitCards
|
||||
tag="Oferta"
|
||||
title="Wybierz kierunek regeneracji"
|
||||
description="Nasza oferta jest elastyczna i dobierana do indywidualnych potrzeb."
|
||||
plans={[
|
||||
{
|
||||
tag: "Start",
|
||||
price: "Indywidualnie",
|
||||
period: "/ sesja",
|
||||
description: "Pierwsza konsultacja i diagnostyka Twoich potrzeb.",
|
||||
primaryButton: {
|
||||
text: "Umów się",
|
||||
href: "#contact",
|
||||
},
|
||||
featuresTitle: "Co zyskujesz?",
|
||||
features: [
|
||||
"Analiza stanu zdrowia",
|
||||
"Dobór ścieżki terapeutycznej",
|
||||
"Plan pielęgnacji domowej",
|
||||
],
|
||||
},
|
||||
{
|
||||
tag: "Terapia",
|
||||
price: "Pakiety",
|
||||
period: "/ zabiegi",
|
||||
description: "Seria zabiegów nakierowana na długofalowe efekty i zdrowie.",
|
||||
primaryButton: {
|
||||
text: "Zapytaj o plan",
|
||||
href: "#contact",
|
||||
},
|
||||
featuresTitle: "W tym:",
|
||||
features: [
|
||||
"Fizjoterapia i masaż",
|
||||
"Kosmetologia premium",
|
||||
"Modelowanie sylwetki",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<PricingSection />
|
||||
|
||||
<div id="team" data-section="team">
|
||||
<SectionErrorBoundary name="team">
|
||||
<TeamGlassCards
|
||||
tag="Zespół"
|
||||
title="Nasi specjaliści"
|
||||
description="Łączymy wiedzę medyczną, fizjoterapeutyczną i kosmetologiczną."
|
||||
members={[
|
||||
{
|
||||
name: "Anna Nowak",
|
||||
role: "Fizjoterapeuta",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-female-nurse-outdoors_23-2150796744.jpg",
|
||||
},
|
||||
{
|
||||
name: "Marek Kowalski",
|
||||
role: "Kosmetolog",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stable-girl-white-doctor-uniform_141793-376.jpg",
|
||||
},
|
||||
{
|
||||
name: "Kasia Zielińska",
|
||||
role: "Trycholog",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-male-doctor-with-displeased-expression-yellow-wall_179666-13069.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TeamSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSimple
|
||||
tag="Wsparcie"
|
||||
title="Najczęstsze pytania"
|
||||
items={[
|
||||
{
|
||||
question: "Nie wiem, jaki zabieg wybrać. Co mam zrobić?",
|
||||
answer: "To nasze zadanie. Zapraszamy na bezpłatną konsultację, podczas której przeanalizujemy Twoje potrzeby i dobierzemy najlepszą terapię.",
|
||||
},
|
||||
{
|
||||
question: "Czy konsultacja jest płatna?",
|
||||
answer: "Wybrane konsultacje są bezpłatne. Skontaktuj się z nami, aby ustalić szczegóły.",
|
||||
},
|
||||
{
|
||||
question: "Jak szybko zobaczę efekty?",
|
||||
answer: "Każdy organizm jest inny. Podczas konsultacji określimy realny plan działania i czas oczekiwanych efektów.",
|
||||
},
|
||||
]}
|
||||
description="Odpowiedzi na najczęściej zadawane pytania."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Kontakt"
|
||||
text="Jesteś gotowa zadbać o swoje zdrowie? Umów się na bezpłatną konsultację już dziś."
|
||||
primaryButton={{
|
||||
text: "Zadzwoń teraz",
|
||||
href: "tel:+48123456789",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Napisz wiadomość",
|
||||
href: "mailto:kontakt@honeywellspa.pl",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
23
src/pages/HomePage/sections/About.tsx
Normal file
23
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,23 @@
|
||||
// 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 AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import { Heart, Shield, Sparkles, Star, Users } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="O nas"
|
||||
title="Więcej niż salon kosmetyczny"
|
||||
description="Honeywell SPA to kameralne miejsce, w którym zdrowie spotyka się z wiedzą. Jesteśmy zespołem specjalistów z wieloma umiejętnościami. Naszą siłą jest praca poprzez dotyk i holistyczne podejście do pacjenta. Oferujemy szeroki wachlarz zabiegów – od relaksu, przez fizjoterapię, trychologię, kosmetologię, aż po naturalne masaże liftingujące. Specjalizujemy się w terapii obrzęków. Pracujemy na kosmetykach premium: Massada, Mesoestetic, Klapp, Norden, DMK Molecular, Medavita."
|
||||
items={[{"title":"Indywidualna diagnoza","description":"Analizujemy stan zdrowia i cele, dobierając najlepszą terapię. Oferujemy bezpłatne konsultacje, np. przy odchudzaniu czy depilacji laserowej.","icon":"Shield"},{"description":"Jesteśmy znani z pracy poprzez dotyk. Specjalizujemy się w masażach, fizjoterapii i skutecznej terapii obrzęków.","title":"Praca poprzez dotyk","icon":"Heart"},{"icon":"Sparkles","description":"Zespół fizjoterapeutów, trychologów i kosmetologów pracujący na markach premium (Massada, Mesoestetic, Klapp, DMK).","title":"Profesjonalna wiedza"}]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/women-holding-hands-medium-shot_23-2149856242.jpg"
|
||||
/>
|
||||
</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="Kontakt"
|
||||
text="Jesteś gotowa zadbać o swoje zdrowie? Umów się na bezpłatną konsultację już dziś."
|
||||
primaryButton={{
|
||||
text: "Zadzwoń teraz",
|
||||
href: "tel:+48123456789",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Napisz wiadomość",
|
||||
href: "mailto:kontakt@honeywellspa.pl",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/Faq.tsx
Normal file
34
src/pages/HomePage/sections/Faq.tsx
Normal 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 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="Wsparcie"
|
||||
title="Najczęstsze pytania"
|
||||
items={[
|
||||
{
|
||||
question: "Nie wiem, jaki zabieg wybrać. Co mam zrobić?",
|
||||
answer: "To nasze zadanie. Zapraszamy na bezpłatną konsultację, podczas której przeanalizujemy Twoje potrzeby i dobierzemy najlepszą terapię.",
|
||||
},
|
||||
{
|
||||
question: "Czy konsultacja jest płatna?",
|
||||
answer: "Wybrane konsultacje są bezpłatne. Skontaktuj się z nami, aby ustalić szczegóły.",
|
||||
},
|
||||
{
|
||||
question: "Jak szybko zobaczę efekty?",
|
||||
answer: "Każdy organizm jest inny. Podczas konsultacji określimy realny plan działania i czas oczekiwanych efektów.",
|
||||
},
|
||||
]}
|
||||
description="Odpowiedzi na najczęściej zadawane pytania."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
30
src/pages/HomePage/sections/Features.tsx
Normal file
30
src/pages/HomePage/sections/Features.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
// 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 FeaturesComparison from '@/components/sections/features/FeaturesComparison';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesComparison
|
||||
tag="Nasze podejście"
|
||||
title="Dlaczego wybierasz Honeywell SPA?"
|
||||
description="Skupiamy się na efektach zdrowotnych, a nie tylko na powierzchownej pielęgnacji."
|
||||
negativeItems={[
|
||||
"Samodzielny wybór zabiegów",
|
||||
"Brak analizy potrzeb",
|
||||
"Koncentracja na jednej usłudze",
|
||||
]}
|
||||
positiveItems={[
|
||||
"Indywidualna konsultacja",
|
||||
"Holistyczna diagnostyka",
|
||||
"Dobór terapii pod cel",
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Hero.tsx
Normal file
38
src/pages/HomePage/sections/Hero.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 "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroOverlayMarquee from '@/components/sections/hero/HeroOverlayMarquee';
|
||||
import { Heart, Shield, Sparkles, Star, Users } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroOverlayMarquee
|
||||
tag="Ekskluzywne centrum zdrowia i regeneracji"
|
||||
title="Nie musisz wiedzieć, jakiego zabiegu potrzebujesz. My pomożemy Ci znaleźć najlepsze rozwiązanie."
|
||||
description="Indywidualne podejście, fizjoterapia, kosmetologia i regeneracja. Zaufaj specjalistom, którzy analizują Twoje potrzeby. Oferujemy bezpłatne konsultacje, by dobrać zabieg do Twojego stanu i schorzeń."
|
||||
primaryButton={{"href":"#contact","text":"Umów się na bezpłatną konsultację"}}
|
||||
secondaryButton={{"href":"#about","text":"Poznaj nasze metody"}}
|
||||
items={[
|
||||
{
|
||||
text: "Ponad 180 opinii Google",
|
||||
icon: Star,
|
||||
},
|
||||
{
|
||||
text: "Zespół specjalistów",
|
||||
icon: Users,
|
||||
},
|
||||
{
|
||||
text: "Indywidualna terapia",
|
||||
icon: Heart,
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/still-life-cozy-home-interior-details-living-room_169016-3537.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Pricing.tsx
Normal file
21
src/pages/HomePage/sections/Pricing.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
// 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 PricingSplitCards from '@/components/sections/pricing/PricingSplitCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function PricingSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="pricing" data-section="pricing">
|
||||
<SectionErrorBoundary name="pricing">
|
||||
<PricingSplitCards
|
||||
tag="Oferta"
|
||||
title="Wybierz kierunek regeneracji"
|
||||
description="Nasza oferta jest elastyczna i dobierana do indywidualnych potrzeb."
|
||||
plans={[{"featuresTitle":"Co zyskujesz?","features":["Analiza stanu zdrowia","Dobór ścieżki terapeutycznej","Plan pielęgnacji domowej"],"description":"Pierwsza konsultacja i diagnostyka Twoich potrzeb.","price":"Indywidualnie","primaryButton":{"href":"#contact","text":"Umów się na bezpłatną konsultację"},"tag":"Start","period":"/ sesja"},{"price":"Pakiety","period":"/ zabiegi","primaryButton":{"href":"#contact","text":"Umów się na bezpłatną konsultację"},"tag":"Terapia","featuresTitle":"W tym:","features":["Fizjoterapia i masaż","Kosmetologia premium","Modelowanie sylwetki"],"description":"Seria zabiegów nakierowana na długofalowe efekty i zdrowie."}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Proof.tsx
Normal file
29
src/pages/HomePage/sections/Proof.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 "proof" section.
|
||||
|
||||
import React from 'react';
|
||||
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProofSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="proof" data-section="proof">
|
||||
<SectionErrorBoundary name="proof">
|
||||
<SocialProofMarquee
|
||||
tag="Zaufanie"
|
||||
title="Pracujemy na markach premium"
|
||||
names={[
|
||||
"Massada",
|
||||
"Mesoestetic",
|
||||
"Klapp",
|
||||
"Norden",
|
||||
"DMK Molecular",
|
||||
"Medavita",
|
||||
"Honeywell Spa",
|
||||
]}
|
||||
description="Wybieramy tylko sprawdzone technologie i kosmetyki dla naszych klientów."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
37
src/pages/HomePage/sections/Team.tsx
Normal file
37
src/pages/HomePage/sections/Team.tsx
Normal file
@@ -0,0 +1,37 @@
|
||||
// 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 TeamGlassCards from '@/components/sections/team/TeamGlassCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TeamSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="team" data-section="team">
|
||||
<SectionErrorBoundary name="team">
|
||||
<TeamGlassCards
|
||||
tag="Zespół"
|
||||
title="Nasi specjaliści"
|
||||
description="Łączymy wiedzę medyczną, fizjoterapeutyczną i kosmetologiczną."
|
||||
members={[
|
||||
{
|
||||
name: "Anna Nowak",
|
||||
role: "Fizjoterapeuta",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-female-nurse-outdoors_23-2150796744.jpg",
|
||||
},
|
||||
{
|
||||
name: "Marek Kowalski",
|
||||
role: "Kosmetolog",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stable-girl-white-doctor-uniform_141793-376.jpg",
|
||||
},
|
||||
{
|
||||
name: "Kasia Zielińska",
|
||||
role: "Trycholog",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-male-doctor-with-displeased-expression-yellow-wall_179666-13069.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
52
src/pages/HomePage/sections/Testimonials.tsx
Normal file
52
src/pages/HomePage/sections/Testimonials.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 "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Opinie"
|
||||
title="Ponad 180 opinii w Google"
|
||||
description="Zaufanie naszych klientów to nasz największy sukces."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Anna K.",
|
||||
role: "Klientka",
|
||||
quote: "Najlepsze miejsce w mieście. Profesjonalne podejście i w końcu ktoś mi pomógł z bólami kręgosłupa.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-woman-leaning-swimming-pool-edge_23-2147868482.jpg",
|
||||
},
|
||||
{
|
||||
name: "Marta W.",
|
||||
role: "Klientka",
|
||||
quote: "Indywidualne podejście to tutaj standard. Dobrano mi terapię, która wreszcie przyniosła efekty.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/happy-smiley-elderly-woman-posing-bathrobe_23-2148419306.jpg",
|
||||
},
|
||||
{
|
||||
name: "Karolina P.",
|
||||
role: "Klientka",
|
||||
quote: "Zawsze wychodzę zrelaksowana. Niesamowita wiedza zespołu w zakresie fizjoterapii.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-lesbian-couple-taking-selfie-wedding_23-2150835706.jpg",
|
||||
},
|
||||
{
|
||||
name: "Joanna B.",
|
||||
role: "Klientka",
|
||||
quote: "Polecam każdemu. Konsultacja przed zabiegiem otworzyła mi oczy na to, co naprawdę potrzebuję.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/tender-beautiful-african-woman-sleepwear-smiling-sitting-chair-resting-relaxing-home_176420-12823.jpg",
|
||||
},
|
||||
{
|
||||
name: "Ewa L.",
|
||||
role: "Klientka",
|
||||
quote: "Bardzo profesjonalne miejsce. Zero ściemy, same konkretne efekty i świetna atmosfera.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-smiley-bride-before-wedding_23-2149860779.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
72
src/pages/HomePage/sections/Vouchers.tsx
Normal file
72
src/pages/HomePage/sections/Vouchers.tsx
Normal file
@@ -0,0 +1,72 @@
|
||||
import { motion } from 'motion/react';
|
||||
import Button from '@/components/ui/Button';
|
||||
import ScrollReveal from '@/components/ui/ScrollReveal';
|
||||
import TextAnimation from '@/components/ui/TextAnimation';
|
||||
import Tag from '@/components/ui/Tag';
|
||||
import ImageOrVideo from '@/components/ui/ImageOrVideo';
|
||||
import Card from '@/components/ui/Card';
|
||||
|
||||
export default function VouchersSection() {
|
||||
const products = [
|
||||
{
|
||||
name: "Voucher Kwotowy",
|
||||
price: "od 100 zł",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/gift-box-with-ribbon-bow-wooden-table_1150-17631.jpg",
|
||||
},
|
||||
{
|
||||
name: "Voucher na Masaż Relaksacyjny",
|
||||
price: "250 zł",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/spa-composition-with-towels-candles-flowers_1150-17632.jpg",
|
||||
},
|
||||
{
|
||||
name: "Voucher na Zabieg Kosmetyczny",
|
||||
price: "350 zł",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/spa-treatment-with-candles-towels_1150-17633.jpg",
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
<section data-webild-section="vouchers" id="vouchers" className="relative w-full py-24 bg-background">
|
||||
<div className="w-content-width mx-auto px-6">
|
||||
<div className="flex flex-col items-center text-center mb-16">
|
||||
<ScrollReveal variant="fade">
|
||||
<Tag text="Prezent" className="mb-4" />
|
||||
</ScrollReveal>
|
||||
<TextAnimation
|
||||
text="Vouchery Podarunkowe"
|
||||
variant="slide-up"
|
||||
tag="h2"
|
||||
gradientText={false}
|
||||
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
|
||||
/>
|
||||
<ScrollReveal variant="fade" delay={0.2}>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl mx-auto mb-8">
|
||||
Szukasz idealnego prezentu? Podaruj bliskim zdrowie i relaks. Nasze vouchery to doskonały wybór na każdą okazję. Nasi klienci uwielbiają nas polecać!
|
||||
</p>
|
||||
<Button text="Kup voucher" href="#contact" variant="primary" />
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
{products.map((product, index) => (
|
||||
<ScrollReveal variant="fade" key={index} delay={0.1 * index}>
|
||||
<Card className="overflow-hidden flex flex-col h-full">
|
||||
<div className="relative aspect-[4/3] w-full overflow-hidden">
|
||||
<ImageOrVideo
|
||||
imageSrc={product.imageSrc}
|
||||
className="w-full h-full object-cover transition-transform duration-500 hover:scale-105"
|
||||
/>
|
||||
</div>
|
||||
<div className="p-6 flex flex-col flex-grow">
|
||||
<h3 className="text-xl font-bold text-foreground mb-2">{product.name}</h3>
|
||||
<p className="text-lg font-semibold text-primary-cta mb-6 mt-auto">{product.price}</p>
|
||||
<Button text="Wybierz" href="#contact" variant="secondary" className="w-full justify-center" />
|
||||
</div>
|
||||
</Card>
|
||||
</ScrollReveal>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user