Merge version_2_1781469097239 into main #1

Merged
bender merged 1 commits from version_2_1781469097239 into main 2026-06-14 20:34:04 +00:00
9 changed files with 322 additions and 187 deletions

View File

@@ -4,8 +4,29 @@ import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import SiteBackgroundSlot from "@/components/ui/SiteBackgroundSlot";
import { Outlet } from 'react-router-dom';
import { StyleProvider } from "@/components/ui/StyleProvider";
import { useEffect, useRef } from 'react';
import Modal from '@/components/ui/Modal';
import Input from '@/components/ui/Input';
import Textarea from '@/components/ui/Textarea';
import Label from '@/components/ui/Label';
import Button from '@/components/ui/Button';
export default function Layout() {
const triggerRef = useRef<HTMLButtonElement>(null);
useEffect(() => {
const handleClick = (e: MouseEvent) => {
const target = e.target as HTMLElement;
const link = target.closest('a');
if (link && link.getAttribute('href') === '#contact-modal') {
e.preventDefault();
triggerRef.current?.click();
}
};
document.addEventListener('click', handleClick);
return () => document.removeEventListener('click', handleClick);
}, []);
const navItems = [
{
"name": "Bemutatkozás",
@@ -45,13 +66,38 @@ export default function Layout() {
logo="A Te Szertartásvezetőd"
ctaButton={{
text: "Ajánlatkérés",
href: "#contact",
href: "#contact-modal",
}}
navItems={navItems} />
</SectionErrorBoundary>
<main className="flex-grow">
<Outlet />
</main>
<Modal
trigger={<button ref={triggerRef} className="hidden" />}
title="Foglald le a napodat!"
description="A 2026-os és már a 2027-es naptáram is nyitva!"
>
<form className="space-y-4 mt-4" onSubmit={(e) => e.preventDefault()}>
<div className="space-y-2">
<Label htmlFor="name">Név</Label>
<Input id="name" placeholder="A ti nevetek" />
</div>
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" placeholder="email@cim.hu" />
</div>
<div className="space-y-2">
<Label htmlFor="date">Esküvő tervezett dátuma</Label>
<Input id="date" placeholder="ÉÉÉÉ. HH. NN." />
</div>
<div className="space-y-2">
<Label htmlFor="message">Üzenet</Label>
<Textarea id="message" placeholder="Meséljetek magatokról és az elképzeléseitekről..." rows={4} />
</div>
<Button text="Üzenet küldése" className="w-full" />
</form>
</Modal>
<SectionErrorBoundary name="footer">
<FooterBrand
brand="A Te Szertartásvezetőd Tóth Eszter"

View File

@@ -1,197 +1,33 @@
import AboutText from '@/components/sections/about/AboutText';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import FeaturesRevealCards from '@/components/sections/features/FeaturesRevealCards';
import HeroBillboard from '@/components/sections/hero/HeroBillboard';
import TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly. Non-block content (wrappers, non-inlinable sections) is
// preserved inline; extracted section blocks become <XSection/> refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import AboutSection from './HomePage/sections/About';
import FeaturesSection from './HomePage/sections/Features';
import PortfolioSection from './HomePage/sections/Portfolio';
import ProcessSection from './HomePage/sections/Process';
import TestimonialsSection from './HomePage/sections/Testimonials';
import ContactSection from './HomePage/sections/Contact';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboard
title="A Te Szertartásvezetőd Tóth Eszter"
description="Mert egy szertartás olyan legyen, mint maga a pár. Személyes, őszinte és rólatok szóljon."
primaryButton={{
text: "Vegyük fel a kapcsolatot",
href: "#contact",
}}
secondaryButton={{
text: "Ismerj meg",
href: "#about",
}}
imageSrc="http://img.b2bpic.net/free-photo/happy-wedding-couple-is-walking-by-beautiful-garden_613910-6039.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutText
title="Tóth Eszter okleveles szertartásvezető, aki hisz abban, hogy a ceremónia a legmeghatóbb pillanata az esküvőnek. Számára ez több mint egy ünnepi beszéd személyes történetekből, közös emlékekből épül fel minden szertartás."
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesRevealCards
tag="Miért én?"
title="Személyes odafigyelés, profi keretek között."
description="Célom, hogy a szertartásotok ne csak egy része legyen az esküvőnek, hanem az a felejthetetlen pillanat, amikor minden rátok figyel."
items={[
{
title: "Személyre szabott szertartás",
description: "Egyedi szövegek, melyek rátok épülnek.",
imageSrc: "http://img.b2bpic.net/free-photo/gardener-reading-from-book-being-surrounded-by-plants_23-2148435673.jpg",
},
{
title: "Okleveles szakember",
description: "Profi háttér, elegáns megjelenés.",
imageSrc: "http://img.b2bpic.net/free-photo/female-wedding-planner-working-ceremony_23-2150167259.jpg",
},
{
title: "2026/2027 naptár nyitva",
description: "Foglald le az időpontodat időben.",
imageSrc: "http://img.b2bpic.net/free-photo/date-jule-23-made-wooden-cubes_1304-4692.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesSection />
<div id="portfolio" data-section="portfolio">
<SectionErrorBoundary name="portfolio">
<FeaturesImageBento
tag="Esküvők"
title="Pillanatok, amik örökre megmaradnak"
description="Tekintsd meg néhány korábbi szertartásom meghitt pillanatát."
items={[
{
title: "Réka & Attila",
description: "Dudok Rendezvényház",
imageSrc: "http://img.b2bpic.net/free-photo/romantic-engagement-happiness-couple-elegance_1153-2195.jpg",
},
{
title: "Elegáns részletek",
description: "Szabadtéri szertartás",
imageSrc: "http://img.b2bpic.net/free-photo/bouquet-white-ranunculus-flowers-blurred-background-with-heart_169016-49445.jpg",
},
{
title: "Örök pillanatok",
description: "Meghitt igent mondás",
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-young-man-wearing-black-suit-standing-along-with-his-bride_1157-13253.jpg",
},
{
title: "Különleges dekor",
description: "Romantikus hangulat",
imageSrc: "http://img.b2bpic.net/free-photo/look-from-white-chairs-standing-around-wedding-altar_8353-730.jpg",
},
{
title: "Tiszta öröm",
description: "Boldog szertartásvezetés",
imageSrc: "http://img.b2bpic.net/free-photo/bride-groom-exchanging-vows-wedding-ceremony_23-2150292060.jpg",
},
{
title: "Személyes elemek",
description: "Minden rólatok szól",
imageSrc: "http://img.b2bpic.net/free-photo/glamour-color-lovely-decoration-green_1304-2510.jpg",
},
{
title: "Szeretettel",
description: "Esküvői emlékképek",
imageSrc: "http://img.b2bpic.net/free-photo/couple-love-kissing-nature-travel-mountains_1328-1862.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<PortfolioSection />
<div id="process" data-section="process">
<SectionErrorBoundary name="process">
<FaqTwoColumn
tag="Hogyan dolgozom?"
title="Az első lépéstől a nagy napig."
description="Egyszerű és átlátható folyamat, hogy a szervezés ne stresszel járjon."
items={[
{
question: "1. Egyeztetés",
answer: "Találkozunk, megismerjük egymást és átbeszéljük az elképzeléseiteket.",
},
{
question: "2. Szertartás tervezés",
answer: "Megírom a személyes szöveget és megtervezzük a szertartás menetét.",
},
{
question: "3. Az igazi nap",
answer: "Mindent biztosítok, hogy a szertartás zökkenőmentes és emlékezetes legyen.",
},
]}
/>
</SectionErrorBoundary>
</div>
<ProcessSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialQuoteCards
tag="Vélemények"
title="Mások mondták rólunk"
description="Hálás vagyok minden párnak, akik megtiszteltek bizalmukkal."
testimonials={[
{
name: "Nóra & Dávid",
role: "Pár",
quote: "Eszter elképesztően figyelmes volt, a szertartás teljesen olyan lett, mint amilyet megálmodtunk.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-sits-stairs-house-looks-up_8353-11393.jpg",
},
{
name: "Kitti & Gergő",
role: "Pár",
quote: "Nem is lehetett volna szebb a ceremónia. Eszter szavai mindenkit könnyekre fakasztottak.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-man-hugging-stand-ocean-beach_8353-11401.jpg",
},
{
name: "Anna & Balázs",
role: "Pár",
quote: "Profi és közvetlen, csak ajánlani tudjuk mindenkinek!",
imageSrc: "http://img.b2bpic.net/free-photo/groom-preparing-his-wedding_1303-28306.jpg",
},
{
name: "Zsófia & Péter",
role: "Pár",
quote: "Tökéletes választás volt Eszter, minden részletre figyelt.",
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-bride-white-silk-robe-sits-bed-hotel-room_8353-8280.jpg",
},
{
name: "Erika & Zoltán",
role: "Pár",
quote: "Csodálatos hangulatot teremtett, örök emlék marad.",
imageSrc: "http://img.b2bpic.net/free-photo/groom-carries-bride-his-back-outdoors_1153-5963.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Foglald le a napodat!"
text="A 2026-os és már a 2027-es naptáram is nyitva! Veled is szívesen dolgoznék együtt."
primaryButton={{
text: "Üzenetet küldök",
href: "mailto:eszter@ateszertartasvezetod.hu",
}}
secondaryButton={{
text: "Instagramon is írhatsz",
href: "https://instagram.com/ateszertartasvezetod",
}}
/>
</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="Tóth Eszter okleveles szertartásvezető, aki hisz abban, hogy a ceremónia a legmeghatóbb pillanata az esküvőnek. Számára ez több mint egy ünnepi beszéd személyes történetekből, közös emlékekből épül fel minden szertartás."
/>
</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="Foglald le a napodat!"
text="A 2026-os és már a 2027-es naptáram is nyitva! Veled is szívesen dolgoznék együtt."
primaryButton={{
text: "Üzenetet küldök",
href: "mailto:eszter@ateszertartasvezetod.hu",
}}
secondaryButton={{
text: "Instagramon is írhatsz",
href: "https://instagram.com/ateszertartasvezetod",
}}
/>
</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 "features" section.
import React from 'react';
import FeaturesRevealCards from '@/components/sections/features/FeaturesRevealCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FeaturesSection(): React.JSX.Element {
return (
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesRevealCards
tag="Miért én?"
title="Személyes odafigyelés, profi keretek között."
description="Célom, hogy a szertartásotok ne csak egy része legyen az esküvőnek, hanem az a felejthetetlen pillanat, amikor minden rátok figyel."
items={[
{
title: "Személyre szabott szertartás",
description: "Egyedi szövegek, melyek rátok épülnek.",
imageSrc: "http://img.b2bpic.net/free-photo/gardener-reading-from-book-being-surrounded-by-plants_23-2148435673.jpg",
},
{
title: "Okleveles szakember",
description: "Profi háttér, elegáns megjelenés.",
imageSrc: "http://img.b2bpic.net/free-photo/female-wedding-planner-working-ceremony_23-2150167259.jpg",
},
{
title: "2026/2027 naptár nyitva",
description: "Foglald le az időpontodat időben.",
imageSrc: "http://img.b2bpic.net/free-photo/date-jule-23-made-wooden-cubes_1304-4692.jpg",
},
]}
/>
</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 "hero" section.
import React from 'react';
import HeroBillboard from '@/components/sections/hero/HeroBillboard';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboard
title="A Te Szertartásvezetőd Tóth Eszter"
description="Mert egy szertartás olyan legyen, mint maga a pár. Személyes, őszinte és rólatok szóljon."
primaryButton={{
text: "Vegyük fel a kapcsolatot",
href: "#contact-modal",
}}
secondaryButton={{
text: "Ismerj meg",
href: "#about",
}}
imageSrc="http://img.b2bpic.net/free-photo/happy-wedding-couple-is-walking-by-beautiful-garden_613910-6039.jpg"
/>
</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 "portfolio" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function PortfolioSection(): React.JSX.Element {
return (
<div id="portfolio" data-section="portfolio">
<SectionErrorBoundary name="portfolio">
<FeaturesImageBento
tag="Esküvők"
title="Pillanatok, amik örökre megmaradnak"
description="Tekintsd meg néhány korábbi szertartásom meghitt pillanatát."
items={[
{
title: "Réka & Attila",
description: "Dudok Rendezvényház",
imageSrc: "http://img.b2bpic.net/free-photo/romantic-engagement-happiness-couple-elegance_1153-2195.jpg",
},
{
title: "Elegáns részletek",
description: "Szabadtéri szertartás",
imageSrc: "http://img.b2bpic.net/free-photo/bouquet-white-ranunculus-flowers-blurred-background-with-heart_169016-49445.jpg",
},
{
title: "Örök pillanatok",
description: "Meghitt igent mondás",
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-young-man-wearing-black-suit-standing-along-with-his-bride_1157-13253.jpg",
},
{
title: "Különleges dekor",
description: "Romantikus hangulat",
imageSrc: "http://img.b2bpic.net/free-photo/look-from-white-chairs-standing-around-wedding-altar_8353-730.jpg",
},
{
title: "Tiszta öröm",
description: "Boldog szertartásvezetés",
imageSrc: "http://img.b2bpic.net/free-photo/bride-groom-exchanging-vows-wedding-ceremony_23-2150292060.jpg",
},
{
title: "Személyes elemek",
description: "Minden rólatok szól",
imageSrc: "http://img.b2bpic.net/free-photo/glamour-color-lovely-decoration-green_1304-2510.jpg",
},
{
title: "Szeretettel",
description: "Esküvői emlékképek",
imageSrc: "http://img.b2bpic.net/free-photo/couple-love-kissing-nature-travel-mountains_1328-1862.jpg",
},
]}
/>
</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 "process" section.
import React from 'react';
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ProcessSection(): React.JSX.Element {
return (
<div id="process" data-section="process">
<SectionErrorBoundary name="process">
<FaqTwoColumn
tag="Hogyan dolgozom?"
title="Az első lépéstől a nagy napig."
description="Egyszerű és átlátható folyamat, hogy a szervezés ne stresszel járjon."
items={[
{
question: "1. Egyeztetés",
answer: "Találkozunk, megismerjük egymást és átbeszéljük az elképzeléseiteket.",
},
{
question: "2. Szertartás tervezés",
answer: "Megírom a személyes szöveget és megtervezzük a szertartás menetét.",
},
{
question: "3. Az igazi nap",
answer: "Mindent biztosítok, hogy a szertartás zökkenőmentes és emlékezetes legyen.",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

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 "testimonials" section.
import React from 'react';
import TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialQuoteCards
tag="Vélemények"
title="Mások mondták rólunk"
description="Hálás vagyok minden párnak, akik megtiszteltek bizalmukkal."
testimonials={[
{
name: "Nóra & Dávid",
role: "Pár",
quote: "Eszter elképesztően figyelmes volt, a szertartás teljesen olyan lett, mint amilyet megálmodtunk.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-sits-stairs-house-looks-up_8353-11393.jpg",
},
{
name: "Kitti & Gergő",
role: "Pár",
quote: "Nem is lehetett volna szebb a ceremónia. Eszter szavai mindenkit könnyekre fakasztottak.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-man-hugging-stand-ocean-beach_8353-11401.jpg",
},
{
name: "Anna & Balázs",
role: "Pár",
quote: "Profi és közvetlen, csak ajánlani tudjuk mindenkinek!",
imageSrc: "http://img.b2bpic.net/free-photo/groom-preparing-his-wedding_1303-28306.jpg",
},
{
name: "Zsófia & Péter",
role: "Pár",
quote: "Tökéletes választás volt Eszter, minden részletre figyelt.",
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-bride-white-silk-robe-sits-bed-hotel-room_8353-8280.jpg",
},
{
name: "Erika & Zoltán",
role: "Pár",
quote: "Csodálatos hangulatot teremtett, örök emlék marad.",
imageSrc: "http://img.b2bpic.net/free-photo/groom-carries-bride-his-back-outdoors_1153-5963.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}