Merge version_2_1781605481785 into main
Merge version_2_1781605481785 into main
This commit was merged in pull request #1.
This commit is contained in:
@@ -42,7 +42,7 @@ export default function Layout() {
|
||||
<SiteBackgroundSlot />
|
||||
<SectionErrorBoundary name="navbar">
|
||||
<NavbarFloating
|
||||
logo="Piter Nails"
|
||||
logo="Старт"
|
||||
ctaButton={{
|
||||
text: "Записаться",
|
||||
href: "#booking",
|
||||
@@ -56,36 +56,40 @@ export default function Layout() {
|
||||
<FooterBasic
|
||||
columns={[
|
||||
{
|
||||
title: "Студия",
|
||||
title: "Центр",
|
||||
items: [
|
||||
{
|
||||
label: "О нас",
|
||||
href: "#",
|
||||
href: "#why-us",
|
||||
},
|
||||
{
|
||||
label: "Мастера",
|
||||
href: "#",
|
||||
label: "Программы",
|
||||
href: "#services",
|
||||
},
|
||||
{
|
||||
label: "Галерея",
|
||||
href: "#gallery",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Услуги",
|
||||
title: "Информация",
|
||||
items: [
|
||||
{
|
||||
label: "Маникюр",
|
||||
href: "#",
|
||||
label: "Отзывы",
|
||||
href: "#testimonials",
|
||||
},
|
||||
{
|
||||
label: "Педикюр",
|
||||
href: "#",
|
||||
label: "Контакты",
|
||||
href: "#contacts",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Контакты",
|
||||
title: "Социальные сети",
|
||||
items: [
|
||||
{
|
||||
label: "Instagram",
|
||||
label: "ВКонтакте",
|
||||
href: "#",
|
||||
},
|
||||
{
|
||||
@@ -95,7 +99,7 @@ export default function Layout() {
|
||||
],
|
||||
},
|
||||
]}
|
||||
leftText="© 2024 Piter Nails. Все права защищены."
|
||||
leftText="© 2024 Образовательный центр «Старт». Все права защищены."
|
||||
rightText="Политика конфиденциальности"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
|
||||
@@ -5,15 +5,15 @@
|
||||
|
||||
:root {
|
||||
/* @colorThemes/lightTheme/grayNavyBlue */
|
||||
--background: #f5faff;
|
||||
--card: #ffffff;
|
||||
--foreground: #001122;
|
||||
--primary-cta: #15479c;
|
||||
--primary-cta-text: #f5faff;
|
||||
--secondary-cta: #ffffff;
|
||||
--secondary-cta-text: #001122;
|
||||
--accent: #a8cce8;
|
||||
--background-accent: #7ba3cf;
|
||||
--background: #0F1115;
|
||||
--card: rgba(255, 255, 255, 0.03);
|
||||
--foreground: #ffffff;
|
||||
--primary-cta: #D4AF37;
|
||||
--primary-cta-text: #0F1115;
|
||||
--secondary-cta: rgba(255, 255, 255, 0.1);
|
||||
--secondary-cta-text: #ffffff;
|
||||
--accent: #007AFF;
|
||||
--background-accent: #8A2BE2;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 0.5rem;
|
||||
|
||||
@@ -1,308 +1,39 @@
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroBillboardBrand from '@/components/sections/hero/HeroBillboardBrand';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
import TestimonialColumnMarqueeCards from '@/components/sections/testimonial/TestimonialColumnMarqueeCards';
|
||||
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 AdvantagesSection from './HomePage/sections/Advantages';
|
||||
import ServicesSection from './HomePage/sections/Services';
|
||||
import GallerySection from './HomePage/sections/Gallery';
|
||||
import WhyUsSection from './HomePage/sections/WhyUs';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import PromotionSection from './HomePage/sections/Promotion';
|
||||
import BookingSection from './HomePage/sections/Booking';
|
||||
import ContactsSection from './HomePage/sections/Contacts';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardBrand
|
||||
brand="Маникюр и педикюр, которые хочется рассматривать"
|
||||
description="Безупречный сервис, стерильность и идеальный результат в Piter Nails"
|
||||
primaryButton={{
|
||||
text: "Записаться онлайн",
|
||||
href: "#booking",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Посмотреть работы",
|
||||
href: "#gallery",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/close-up-woman-holding-flower_23-2148749792.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="advantages" data-section="advantages">
|
||||
<SectionErrorBoundary name="advantages">
|
||||
<MetricsFeatureCards
|
||||
tag="Наши стандарты"
|
||||
title="Почему выбирают нас"
|
||||
description="Мы создаем безупречный сервис в Санкт-Петербурге."
|
||||
metrics={[
|
||||
{
|
||||
value: "100%",
|
||||
title: "Стерильность",
|
||||
features: [
|
||||
"Три этапа обработки",
|
||||
"Крафт-пакеты",
|
||||
"Безопасность",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "5+",
|
||||
title: "Опыт мастеров",
|
||||
features: [
|
||||
"Профильное обучение",
|
||||
"Повышение квалификации",
|
||||
"Профессионализм",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "5000+",
|
||||
title: "Довольных клиентов",
|
||||
features: [
|
||||
"Регулярные визиты",
|
||||
"Доверие",
|
||||
"Высокий NPS",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "1 мин",
|
||||
title: "Запись онлайн",
|
||||
features: [
|
||||
"Удобный виджет",
|
||||
"24/7 доступ",
|
||||
"Без ожидания",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AdvantagesSection />
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Наши услуги"
|
||||
title="Популярные направления"
|
||||
description="Выбирайте идеальный уход для ваших рук и ног."
|
||||
items={[
|
||||
{
|
||||
title: "Маникюр + гель-лак",
|
||||
description: "Классический уход с покрытием",
|
||||
href: "#booking",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-woman-using-hand-sanitizer_23-2148694562.jpg",
|
||||
},
|
||||
{
|
||||
title: "Педикюр",
|
||||
description: "Профессиональный уход за стопами",
|
||||
href: "#booking",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/nail-art-professional-working-client-nails_23-2149265946.jpg",
|
||||
},
|
||||
{
|
||||
title: "Наращивание ногтей",
|
||||
description: "Любая длина и форма",
|
||||
href: "#booking",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/nail-hygiene-care-cutting-cuticles_23-2148766595.jpg",
|
||||
},
|
||||
{
|
||||
title: "Дизайн ногтей",
|
||||
description: "Авторские рисунки и декорации",
|
||||
href: "#booking",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-young-female-manicure-pink-t-shirt-with-black-gloves-black-mask-doing-manicure-with-hesitated-expression-blue_140725-24227.jpg",
|
||||
},
|
||||
{
|
||||
title: "Укрепление ногтей",
|
||||
description: "Для здоровья и прочности",
|
||||
href: "#booking",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/manicure-process-closeup_1385-275.jpg",
|
||||
},
|
||||
{
|
||||
title: "Комплекс 4 руки",
|
||||
description: "Максимальная скорость и комфорт",
|
||||
href: "#booking",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-friends-with-beautiful-manicures_23-2149975473.jpg",
|
||||
},
|
||||
{
|
||||
title: "SPA уход",
|
||||
description: "Парафинотерапия и питание",
|
||||
href: "#booking",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/hands-with-colorful-nails_23-2149921709.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ServicesSection />
|
||||
|
||||
<div id="gallery" data-section="gallery">
|
||||
<SectionErrorBoundary name="gallery">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Портфолио"
|
||||
title="Наши работы"
|
||||
description="Вдохновляйтесь эстетикой в каждом движении."
|
||||
items={[
|
||||
{
|
||||
title: "Маникюр",
|
||||
description: "Эстетика",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/pretty-young-woman-with-flowers_23-2148341372.jpg",
|
||||
},
|
||||
{
|
||||
title: "Педикюр",
|
||||
description: "Стиль",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-beauty-nail-art_23-2149249961.jpg",
|
||||
},
|
||||
{
|
||||
title: "Дизайн",
|
||||
description: "Тренды",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-young-attractive-female-white-shirt-holding-different-manicure-accessories-with-smile-green-surface_140725-64181.jpg",
|
||||
},
|
||||
{
|
||||
title: "Классика",
|
||||
description: "Безупречность",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/african-american-woman-applying-hairdresser-hairstylist-beauty-saloon_627829-4642.jpg",
|
||||
},
|
||||
{
|
||||
title: "Наращивание",
|
||||
description: "Изящность",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/view-human-hands_23-2149512269.jpg",
|
||||
},
|
||||
{
|
||||
title: "Декор",
|
||||
description: "Акцент",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-woman-with-colorful-manicure_23-2149311575.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<GallerySection />
|
||||
|
||||
<div id="why-us" data-section="why-us">
|
||||
<SectionErrorBoundary name="why-us">
|
||||
<FaqSplitMedia
|
||||
tag="О студии"
|
||||
title="Почему выбирают Piter Nails"
|
||||
description="Мы создаем комфорт, который хочется повторить."
|
||||
items={[
|
||||
{
|
||||
question: "Безопасность и стерильность",
|
||||
answer: "Строгое соблюдение СанПиН, только одноразовые расходники.",
|
||||
},
|
||||
{
|
||||
question: "Качественные материалы",
|
||||
answer: "Премиум бренды, стойкость до 4 недель.",
|
||||
},
|
||||
{
|
||||
question: "Удобное расположение",
|
||||
answer: "Санкт-Петербург, пр. Просвещения, 46 к.1",
|
||||
},
|
||||
{
|
||||
question: "Комфортная атмосфера",
|
||||
answer: "Кофе, чай, уютная зона ожидания.",
|
||||
},
|
||||
{
|
||||
question: "Гарантия качества",
|
||||
answer: "Бесплатная коррекция в течение 7 дней.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/girls-showing-her-stylish-manicure-holding-thair-fingers-black-handbag_132075-12048.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<WhyUsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialColumnMarqueeCards
|
||||
tag="Отзывы"
|
||||
title="Что говорят наши клиенты"
|
||||
description="5000+ довольных улыбок в Piter Nails."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Алена",
|
||||
role: "Постоянный клиент",
|
||||
quote: "Лучший маникюр в районе! Очень уютно.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-cute-girl-looking-away_23-2148436134.jpg",
|
||||
},
|
||||
{
|
||||
name: "Ольга",
|
||||
role: "Бизнес-леди",
|
||||
quote: "Делала комплекс в 4 руки, супер быстро и качественно.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/two-happy-male-female-business-people-showing-thumbs-up-outdoors_1262-12567.jpg",
|
||||
},
|
||||
{
|
||||
name: "Мария",
|
||||
role: "Студентка",
|
||||
quote: "Дизайн как в Pinterest, я в восторге!",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/happy-cute-woman-portrait-outdoor_624325-1864.jpg",
|
||||
},
|
||||
{
|
||||
name: "Елена",
|
||||
role: "Клиент",
|
||||
quote: "Безупречная стерильность, всегда возвращаюсь.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-happy-smiling-woman-showing-copy-space_93675-133221.jpg",
|
||||
},
|
||||
{
|
||||
name: "Анна",
|
||||
role: "Клиент",
|
||||
quote: "Самый красивый салон, сервис на высшем уровне.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/male-female-friends-getting-manicure-together_23-2150285913.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="promotion" data-section="promotion">
|
||||
<SectionErrorBoundary name="promotion">
|
||||
<ContactCta
|
||||
tag="Специальное предложение"
|
||||
text="Скидка 15% на первое посещение студии Piter Nails"
|
||||
primaryButton={{
|
||||
text: "Получить скидку",
|
||||
href: "#booking",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Узнать подробнее",
|
||||
href: "#contacts",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<PromotionSection />
|
||||
|
||||
<div id="booking" data-section="booking">
|
||||
<SectionErrorBoundary name="booking">
|
||||
<ContactCta
|
||||
tag="Запись онлайн"
|
||||
text="Готовы сделать маникюр мечты?"
|
||||
primaryButton={{
|
||||
text: "Записаться через WhatsApp",
|
||||
href: "https://wa.me/79000000000",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Записаться через Telegram",
|
||||
href: "https://t.me/piter_nails",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<BookingSection />
|
||||
|
||||
<div id="contacts" data-section="contacts">
|
||||
<SectionErrorBoundary name="contacts">
|
||||
<ContactCta
|
||||
tag="Наши контакты"
|
||||
text="СПб, пр. Просвещения, 46 к.1 | +7 (900) 000-00-00"
|
||||
primaryButton={{
|
||||
text: "Построить маршрут",
|
||||
href: "https://yandex.ru/maps",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Наш Instagram",
|
||||
href: "https://instagram.com",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactsSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
21
src/pages/HomePage/sections/Advantages.tsx
Normal file
21
src/pages/HomePage/sections/Advantages.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 "advantages" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AdvantagesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="advantages" data-section="advantages">
|
||||
<SectionErrorBoundary name="advantages">
|
||||
<MetricsFeatureCards
|
||||
tag="Преимущества"
|
||||
title="Стандарты образования"
|
||||
description="Мы создаем премиальную образовательную среду для развития будущих лидеров."
|
||||
metrics={[{"features":["Персональные траектории","Раскрытие талантов","Внимание к деталям"],"title":"Индивидуальный подход","value":"100%"},{"features":["Высшая категория","Современные методики","Постоянное развитие"],"title":"Опытные педагоги","value":"10+ лет"},{"features":["Критическое мышление","Эмоциональный интеллект","Soft skills"],"value":"21 век","title":"Навыки будущего"},{"features":["Охрана 24/7","Экологичные материалы","Психологический комфорт"],"title":"Безопасная среда","value":"24/7"}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Booking.tsx
Normal file
21
src/pages/HomePage/sections/Booking.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 "booking" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function BookingSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="booking" data-section="booking">
|
||||
<SectionErrorBoundary name="booking">
|
||||
<ContactCta
|
||||
tag="Консультация"
|
||||
text="Запишитесь на первое занятие уже сегодня"
|
||||
primaryButton={{"href":"https://wa.me/79000000000","text":"Написать в WhatsApp"}}
|
||||
secondaryButton={{"text":"Написать в Telegram","href":"https://t.me/start_edu"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Contacts.tsx
Normal file
21
src/pages/HomePage/sections/Contacts.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 "contacts" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contacts" data-section="contacts">
|
||||
<SectionErrorBoundary name="contacts">
|
||||
<ContactCta
|
||||
tag="Контакты"
|
||||
text="Санкт-Петербург, проспект Просвещения, 33 к.1 | +7 (812) 000-00-00"
|
||||
primaryButton={{"href":"https://yandex.ru/maps","text":"Построить маршрут"}}
|
||||
secondaryButton={{"href":"https://vk.com","text":"Мы ВКонтакте"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
100
src/pages/HomePage/sections/Gallery.tsx
Normal file
100
src/pages/HomePage/sections/Gallery.tsx
Normal file
@@ -0,0 +1,100 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
|
||||
import type { LucideIcon } from "lucide-react";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import ImageOrVideo from "@/components/ui/ImageOrVideo";
|
||||
import LoopCarousel from "@/components/ui/LoopCarousel";
|
||||
import Button from "@/components/ui/Button";
|
||||
import { useButtonClick } from "@/hooks/useButtonClick";
|
||||
import { resolveIcon } from "@/utils/resolve-icon";
|
||||
|
||||
const items = [
|
||||
{
|
||||
title: "Маникюр",
|
||||
description: "Эстетика",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/pretty-young-woman-with-flowers_23-2148341372.jpg"
|
||||
},
|
||||
{
|
||||
title: "Педикюр",
|
||||
description: "Стиль",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-beauty-nail-art_23-2149249961.jpg"
|
||||
},
|
||||
{
|
||||
title: "Дизайн",
|
||||
description: "Тренды",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/front-view-young-attractive-female-white-shirt-holding-different-manicure-accessories-with-smile-green-surface_140725-64181.jpg"
|
||||
},
|
||||
{
|
||||
title: "Классика",
|
||||
description: "Безупречность",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/african-american-woman-applying-hairdresser-hairstylist-beauty-saloon_627829-4642.jpg"
|
||||
},
|
||||
{
|
||||
title: "Наращивание",
|
||||
description: "Изящность",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/view-human-hands_23-2149512269.jpg"
|
||||
},
|
||||
{
|
||||
title: "Декор",
|
||||
description: "Акцент",
|
||||
buttonIcon: "Star",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-smiley-woman-with-colorful-manicure_23-2149311575.jpg"
|
||||
}
|
||||
];
|
||||
|
||||
type FeatureItem = {
|
||||
title: string;
|
||||
description: string;
|
||||
buttonIcon: string | LucideIcon;
|
||||
buttonHref?: string;
|
||||
buttonOnClick?: () => void;
|
||||
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
|
||||
|
||||
interface FeaturesMediaCarouselProps {
|
||||
tag: string;
|
||||
title: string;
|
||||
description: string;
|
||||
primaryButton?: { text: string; href: string };
|
||||
secondaryButton?: { text: string; href: string };
|
||||
items: FeatureItem[];
|
||||
}
|
||||
|
||||
const FeatureMediaCarouselCard = ({ item }: { item: FeatureItem }) => {
|
||||
const handleClick = useButtonClick(item.buttonHref, item.buttonOnClick);
|
||||
const Icon = resolveIcon(item.buttonIcon);
|
||||
|
||||
return (
|
||||
<div id="gallery" data-section="gallery" className="relative w-full py-24 bg-background">
|
||||
<div className="max-w-6xl mx-auto px-6">
|
||||
<div className="text-center mb-16">
|
||||
<span className="inline-block py-1 px-3 rounded-full bg-primary-cta/10 text-primary-cta text-sm font-medium mb-4">
|
||||
Пространство
|
||||
</span>
|
||||
<h2 className="text-4xl md:text-5xl font-bold text-foreground mb-6">Галерея центра</h2>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
||||
Современные классы, зоны отдыха и творческие пространства.
|
||||
</p>
|
||||
</div>
|
||||
<div className="columns-1 md:columns-2 lg:columns-3 gap-4 space-y-4">
|
||||
{[
|
||||
"https://images.unsplash.com/photo-1503676260728-1c00da094a0b?q=80&w=2022&auto=format&fit=crop",
|
||||
"https://images.unsplash.com/photo-1509062522246-3755977927d7?q=80&w=2132&auto=format&fit=crop",
|
||||
"https://images.unsplash.com/photo-1513364776144-60967b0f800f?q=80&w=2071&auto=format&fit=crop",
|
||||
"https://images.unsplash.com/photo-1546410531-bea5aadcb6ce?q=80&w=2062&auto=format&fit=crop",
|
||||
"https://images.unsplash.com/photo-1529333166437-7750a6dd5a70?q=80&w=2069&auto=format&fit=crop",
|
||||
"https://images.unsplash.com/photo-1581091226825-a6a2a5aee158?q=80&w=2070&auto=format&fit=crop"
|
||||
].map((src, i) => (
|
||||
<div key={i} className="break-inside-avoid overflow-hidden rounded-2xl">
|
||||
<img src={src} alt={`Gallery image ${i + 1}`} className="w-full h-auto object-cover hover:scale-105 transition-transform duration-500" />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
22
src/pages/HomePage/sections/Hero.tsx
Normal file
22
src/pages/HomePage/sections/Hero.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 "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroBillboardBrand from '@/components/sections/hero/HeroBillboardBrand';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardBrand
|
||||
brand="Место, где начинается успешное будущее ребёнка"
|
||||
description="Современные программы развития, обучение и подготовка детей в комфортной образовательной среде"
|
||||
primaryButton={{"href":"#booking","text":"Записаться на пробное занятие"}}
|
||||
secondaryButton={{"href":"#services","text":"Посмотреть программы"}}
|
||||
imageSrc="https://picsum.photos/seed/634825388/1200/800"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Promotion.tsx
Normal file
21
src/pages/HomePage/sections/Promotion.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 "promotion" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function PromotionSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="promotion" data-section="promotion">
|
||||
<SectionErrorBoundary name="promotion">
|
||||
<ContactCta
|
||||
tag="Специальное предложение"
|
||||
text="Бесплатное пробное занятие и диагностика навыков вашего ребёнка"
|
||||
primaryButton={{"href":"#booking","text":"Записаться на пробное занятие"}}
|
||||
secondaryButton={{"href":"#services","text":"Посмотреть программы"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Services.tsx
Normal file
21
src/pages/HomePage/sections/Services.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 "services" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ServicesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Направления"
|
||||
title="Образовательные программы"
|
||||
description="Комплексные программы для гармоничного развития вашего ребёнка."
|
||||
items={[{"imageSrc":"https://images.unsplash.com/photo-1503676260728-1c00da094a0b?q=80&w=2022&auto=format&fit=crop","href":"#booking","description":"Комплексная подготовка к первому классу","title":"Подготовка к школе"},{"imageSrc":"https://images.unsplash.com/photo-1509062522246-3755977927d7?q=80&w=2132&auto=format&fit=crop","title":"Развитие интеллекта","href":"#booking","description":"Ментальная арифметика и скорочтение"},{"title":"Творческие программы","href":"#booking","description":"Арт-студия и театральное мастерство","imageSrc":"https://images.unsplash.com/photo-1513364776144-60967b0f800f?q=80&w=2071&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1546410531-bea5aadcb6ce?q=80&w=2062&auto=format&fit=crop","title":"Иностранные языки","href":"#booking","description":"Английский с носителями языка"},{"imageSrc":"https://images.unsplash.com/photo-1529333166437-7750a6dd5a70?q=80&w=2069&auto=format&fit=crop","href":"#booking","description":"Шахматы и программирование","title":"Логика и мышление"},{"href":"#booking","description":"Робототехника и финансовая грамотность","title":"Дополнительные занятия","imageSrc":"https://images.unsplash.com/photo-1581091226825-a6a2a5aee158?q=80&w=2070&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1514068574489-503a8eb91592?q=80&w=2111&auto=format&fit=crop","href":"#booking","description":"Спортивные секции и танцы","title":"Физическое развитие"}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Testimonials.tsx
Normal file
21
src/pages/HomePage/sections/Testimonials.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 "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="Отзывы"
|
||||
title="Отзывы родителей"
|
||||
description="Истории успеха наших учеников и отзывы родителей."
|
||||
testimonials={[{"imageSrc":"https://images.unsplash.com/photo-1544005313-94ddf0286df2?q=80&w=1976&auto=format&fit=crop","role":"Мама ученика 2 класса","quote":"Мой сын стал намного увереннее в себе и полюбил учиться. Спасибо педагогам за индивидуальный подход!","name":"Елена Смирнова"},{"quote":"Отличный центр! Дочь с удовольствием ходит на робототехнику и английский. Результаты превзошли ожидания.","name":"Алексей Иванов","role":"Папа ученицы 5 класса","imageSrc":"https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?q=80&w=1974&auto=format&fit=crop"},{"imageSrc":"https://images.unsplash.com/photo-1534528741775-53994a69daeb?q=80&w=1964&auto=format&fit=crop","role":"Мама дошкольника","quote":"Подготовка к школе на высшем уровне. Ребенок пошел в первый класс полностью готовым и с огромным желанием учиться.","name":"Мария Петрова"},{"name":"Дмитрий Соколов","quote":"Современные методики и прекрасная атмосфера. Дети не просто учатся, они развиваются как личности.","imageSrc":"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?q=80&w=1974&auto=format&fit=crop","role":"Папа учеников 3 и 6 классов"},{"name":"Анна Кузнецова","quote":"Лучший образовательный центр в городе. Профессиональные педагоги и очень комфортные условия для детей.","role":"Мама ученицы 8 класса","imageSrc":"https://images.unsplash.com/photo-1531746020798-e6953c6e8e04?q=80&w=1964&auto=format&fit=crop"}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
22
src/pages/HomePage/sections/WhyUs.tsx
Normal file
22
src/pages/HomePage/sections/WhyUs.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 "why-us" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function WhyUsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="why-us" data-section="why-us">
|
||||
<SectionErrorBoundary name="why-us">
|
||||
<FaqSplitMedia
|
||||
tag="О центре"
|
||||
title="Почему родители выбирают нас"
|
||||
description="Мы создаем среду, в которой дети раскрывают свой потенциал и становятся лидерами."
|
||||
items={[{"answer":"Уникальные методики, разработанные экспертами в области детской психологии и педагогики.","question":"Качество образования"},{"question":"Безопасность","answer":"Закрытая территория, видеонаблюдение, пропускная система и экологичные материалы."},{"answer":"Наши ученики побеждают в олимпиадах и поступают в лучшие школы города.","question":"Результаты"},{"question":"Комфорт","answer":"Современные классы, зоны отдыха и эргономичная мебель для правильной осанки."},{"question":"Развитие личности","answer":"Мы развиваем не только интеллект, но и эмоциональный интеллект, лидерские качества и soft skills."}]}
|
||||
imageSrc="https://picsum.photos/seed/1297150003/1200/800"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user