Bob AI: Update contact section with custom form and Yandex map
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import FooterBasic from '@/components/sections/footer/FooterBasic';
|
||||
import NavbarFloating from '@/components/ui/NavbarFloating';
|
||||
import NavbarFullscreen from '@/components/ui/NavbarFullscreen';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
import SiteBackgroundSlot from "@/components/ui/SiteBackgroundSlot";
|
||||
import { Outlet } from 'react-router-dom';
|
||||
@@ -8,32 +8,24 @@ import { StyleProvider } from "@/components/ui/StyleProvider";
|
||||
export default function Layout() {
|
||||
const navItems = [
|
||||
{
|
||||
"name": "Home",
|
||||
"name": "Главная",
|
||||
"href": "#hero"
|
||||
},
|
||||
{
|
||||
"name": "Properties",
|
||||
"name": "Каталог",
|
||||
"href": "#products"
|
||||
},
|
||||
{
|
||||
"name": "About",
|
||||
"name": "О нас",
|
||||
"href": "#about"
|
||||
},
|
||||
{
|
||||
"name": "Contact",
|
||||
"href": "#contact"
|
||||
},
|
||||
{
|
||||
"name": "Features",
|
||||
"name": "Условия",
|
||||
"href": "#features"
|
||||
},
|
||||
{
|
||||
"name": "Testimonials",
|
||||
"href": "#testimonials"
|
||||
},
|
||||
{
|
||||
"name": "Metrics",
|
||||
"href": "#metrics"
|
||||
"name": "Контакты",
|
||||
"href": "#contact"
|
||||
}
|
||||
];
|
||||
|
||||
@@ -41,10 +33,10 @@ export default function Layout() {
|
||||
<StyleProvider buttonVariant="default" siteBackground="noise" heroBackground="lightRaysCenter">
|
||||
<SiteBackgroundSlot />
|
||||
<SectionErrorBoundary name="navbar">
|
||||
<NavbarFloating
|
||||
<NavbarFullscreen
|
||||
logo="Kvadrat Capital"
|
||||
ctaButton={{
|
||||
text: "Enquire Now",
|
||||
text: "Связаться",
|
||||
href: "#contact",
|
||||
}}
|
||||
navItems={navItems} />
|
||||
@@ -56,51 +48,38 @@ export default function Layout() {
|
||||
<FooterBasic
|
||||
columns={[
|
||||
{
|
||||
title: "Agency",
|
||||
title: "Агентство",
|
||||
items: [
|
||||
{
|
||||
label: "About",
|
||||
label: "О нас",
|
||||
href: "#about",
|
||||
},
|
||||
{
|
||||
label: "Properties",
|
||||
label: "Каталог",
|
||||
href: "#products",
|
||||
},
|
||||
{
|
||||
label: "Careers",
|
||||
href: "#",
|
||||
label: "Условия",
|
||||
href: "#features",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Legal",
|
||||
title: "Контакты",
|
||||
items: [
|
||||
{
|
||||
label: "Privacy",
|
||||
href: "#",
|
||||
label: "Грозный, Чеченская Республика",
|
||||
href: "#contact",
|
||||
},
|
||||
{
|
||||
label: "Terms",
|
||||
href: "#",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Connect",
|
||||
items: [
|
||||
{
|
||||
label: "Twitter",
|
||||
href: "#",
|
||||
},
|
||||
{
|
||||
label: "Instagram",
|
||||
href: "#",
|
||||
label: "Связаться с нами",
|
||||
href: "#contact",
|
||||
},
|
||||
],
|
||||
},
|
||||
]}
|
||||
leftText="© 2024 Kvadrat Capital. All rights reserved."
|
||||
rightText="Curated with prestige."
|
||||
leftText="© 2024 Kvadrat Capital. Все права защищены."
|
||||
rightText="Надежность и доверие."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</StyleProvider>
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap');
|
||||
@import "tailwindcss";
|
||||
@import "./styles/masks.css";
|
||||
@import "./styles/animations.css";
|
||||
|
||||
:root {
|
||||
/* @colorThemes/lightTheme/grayNavyBlue */
|
||||
--background: #f5f4ef;
|
||||
--card: #dad6cd;
|
||||
--foreground: #2a2928;
|
||||
--primary-cta: #2a2928;
|
||||
--primary-cta-text: #f5f4ef;
|
||||
--secondary-cta: #ecebea;
|
||||
--secondary-cta-text: #2a2928;
|
||||
--accent: #ffffff;
|
||||
--background-accent: #c6b180;
|
||||
--background: #ffffff;
|
||||
--card: #f8f9fb;
|
||||
--foreground: #1a1a2e;
|
||||
--primary-cta: #0f172a;
|
||||
--primary-cta-text: #ffffff;
|
||||
--secondary-cta: #1e3a5f;
|
||||
--secondary-cta-text: #ffffff;
|
||||
--accent: #1e3a5f;
|
||||
--background-accent: #f8f9fb;
|
||||
|
||||
/* @layout/border-radius/rounded */
|
||||
--radius: 1.5rem;
|
||||
--radius: 1rem;
|
||||
|
||||
/* @layout/content-width/medium */
|
||||
--width-content-width: clamp(40rem, 72.5vw, 100rem);
|
||||
@@ -88,7 +88,7 @@
|
||||
--color-background-accent: var(--background-accent);
|
||||
|
||||
/* Fonts */
|
||||
--font-sans: 'Manrope', sans-serif;
|
||||
--font-sans: 'Montserrat', sans-serif;
|
||||
--font-tight: "Inter Tight", sans-serif;
|
||||
--font-mono: monospace;
|
||||
|
||||
|
||||
@@ -1,256 +1,36 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import FeaturesMediaCards from '@/components/sections/features/FeaturesMediaCards';
|
||||
import HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import { Award, Shield, Zap } 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 FeaturesSection from './HomePage/sections/Features';
|
||||
import ProductsSection from './HomePage/sections/Products';
|
||||
import AboutSection from './HomePage/sections/About';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBrand
|
||||
brand="Kvadrat Capital"
|
||||
description="Excellence in curated property investments and luxury residential acquisitions."
|
||||
primaryButton={{
|
||||
text: "View Portfolio",
|
||||
href: "#products",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Book Consultation",
|
||||
href: "#contact",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/balcony-witu-elegant-furniture-decoration-generative-ai_188544-12681.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesMediaCards
|
||||
tag="Our Expertise"
|
||||
title="Why Kvadrat Capital?"
|
||||
description="We blend market intelligence with sophisticated property management to deliver exceptional returns."
|
||||
items={[
|
||||
{
|
||||
title: "Strategic Investment",
|
||||
description: "Data-driven insights for high-yield real estate acquisitions.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/architectural-blueprints_1359-454.jpg",
|
||||
},
|
||||
{
|
||||
title: "Client-Centric Service",
|
||||
description: "Bespoke property brokerage tailored to your lifestyle and portfolio.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/side-view-female-realtor-shaking-hands-with-couple-new-house-deal_23-2148895464.jpg",
|
||||
},
|
||||
{
|
||||
title: "Architectural Prestige",
|
||||
description: "Curating residential spaces that define modern architectural standards.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-modern-office-buildings_1359-605.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FeaturesSection />
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesImageBento
|
||||
tag="Curated Listings"
|
||||
title="Featured Residential Assets"
|
||||
description="Explore our exclusive inventory of premium properties."
|
||||
items={[
|
||||
{
|
||||
title: "City Penthouse",
|
||||
description: "Downtown luxury.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/modern-sauna-with-panoramic-windows-wooden-design_169016-70021.jpg",
|
||||
},
|
||||
{
|
||||
title: "Coastal Villa",
|
||||
description: "Modern serenity.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/relax-house-thai-style_1150-17982.jpg",
|
||||
},
|
||||
{
|
||||
title: "Urban Oasis",
|
||||
description: "Refined interiors.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/luxury-bedroom-with-modern-design-elegance-generated-by-ai_188544-23557.jpg",
|
||||
},
|
||||
{
|
||||
title: "Modern Kitchens",
|
||||
description: "High-end design.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/elegant-young-woman-bikini-male-shirt-posing-with-glass-water-kitchen_627829-11342.jpg",
|
||||
},
|
||||
{
|
||||
title: "Spa Retreats",
|
||||
description: "Luxury bathrooms.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/modern-kitchen-drawer-made-natural-wood-elegant-premium-interior-design_169016-72733.jpg",
|
||||
},
|
||||
{
|
||||
title: "Sky Terraces",
|
||||
description: "Rooftop living.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/outdoor-patio-with-table-chair_74190-7542.jpg",
|
||||
},
|
||||
{
|
||||
title: "Architectural Detail",
|
||||
description: "Craftsmanship.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/vertical-shot-bench-yard-door-old-private-house_181624-6710.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ProductsSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="Our Heritage"
|
||||
title="Defining Modern Living"
|
||||
description="Kvadrat Capital is built on the foundation of trust, transparency, and architectural appreciation."
|
||||
items={[
|
||||
{
|
||||
icon: Shield,
|
||||
title: "Certified Integrity",
|
||||
description: "Fully licensed and bonded.",
|
||||
},
|
||||
{
|
||||
icon: Award,
|
||||
title: "Market Leaders",
|
||||
description: "Decades of collective experience.",
|
||||
},
|
||||
{
|
||||
icon: Zap,
|
||||
title: "Swift Closing",
|
||||
description: "Streamlined acquisition process.",
|
||||
},
|
||||
]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/happy-couple-receiving-keys-their-new-home-from-realtor_23-2148895470.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Client Stories"
|
||||
title="What Our Clients Say"
|
||||
description="Experience excellence through the perspective of those we have served."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Arthur Dent",
|
||||
role: "Investor",
|
||||
quote: "Unparalleled expertise in luxury acquisitions.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-happy-mother-home_23-2148321636.jpg",
|
||||
},
|
||||
{
|
||||
name: "Trillian Astra",
|
||||
role: "Homeowner",
|
||||
quote: "They made the impossible acquisition simple.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-carefree-brunette-woman-sitting-couch-living-room-online-shopping_1258-201984.jpg",
|
||||
},
|
||||
{
|
||||
name: "Ford Prefect",
|
||||
role: "Portfolio Owner",
|
||||
quote: "Professional, reliable, and extremely effective.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-businessman-video-calling-mobile-phone_23-2148176223.jpg",
|
||||
},
|
||||
{
|
||||
name: "Zaphod Beeblebrox",
|
||||
role: "Investor",
|
||||
quote: "Best real estate team in the industry today.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/serious-executive-with-short-hair-crossed-arms_1149-89.jpg",
|
||||
},
|
||||
{
|
||||
name: "Marvin Android",
|
||||
role: "Developer",
|
||||
quote: "A truly superior level of customer service.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/blond-businessman-happy-expression_1194-3863.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsSimpleCards
|
||||
tag="The Numbers"
|
||||
title="Proven Performance"
|
||||
description="Delivering measurable value for every client we partner with."
|
||||
metrics={[
|
||||
{
|
||||
value: "$500M+",
|
||||
description: "Assets Under Management",
|
||||
},
|
||||
{
|
||||
value: "1.2k+",
|
||||
description: "Properties Successfully Closed",
|
||||
},
|
||||
{
|
||||
value: "15+",
|
||||
description: "Years of Excellence",
|
||||
},
|
||||
{
|
||||
value: "98%",
|
||||
description: "Client Retention Rate",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqTwoColumn
|
||||
tag="General Inquiries"
|
||||
title="Frequently Asked Questions"
|
||||
description="Everything you need to know about starting your property journey."
|
||||
items={[
|
||||
{
|
||||
question: "How do I start an investment portfolio?",
|
||||
answer: "Consult with our team to align your goals.",
|
||||
},
|
||||
{
|
||||
question: "Are your properties vetted?",
|
||||
answer: "Yes, every asset undergoes strict due diligence.",
|
||||
},
|
||||
{
|
||||
question: "Can I visit a property?",
|
||||
answer: "Viewings are available upon request and qualification.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer financing assistance?",
|
||||
answer: "We work with top lenders to facilitate deals.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Get Started"
|
||||
text="Your next premium investment is a conversation away."
|
||||
primaryButton={{
|
||||
text: "Contact Us",
|
||||
href: "mailto:hello@kvadrat.capital",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Visit Office",
|
||||
href: "#",
|
||||
}}
|
||||
/>
|
||||
</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 { Award, Shield, Zap } 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="О нас"
|
||||
title="Ваш надежный партнер в сфере недвижимости"
|
||||
description="Kvadrat Capital — ведущее агентство недвижимости в Грозном. Мы помогаем нашим клиентам находить лучшие объекты для жизни и инвестиций, обеспечивая безопасность и прозрачность каждой сделки."
|
||||
items={[{"icon":"Shield","title":"Надежность","description":"Работаем со всеми надежными застройщиками Чеченской Республики."},{"title":"Опыт","icon":"Award","description":"Более 10 лет успешной работы на рынке недвижимости."},{"icon":"Zap","title":"Оперативность","description":"Быстрое оформление сделок и помощь в получении рассрочки."}]}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/happy-couple-receiving-keys-their-new-home-from-realtor_23-2148895470.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
122
src/pages/HomePage/sections/Contact.tsx
Normal file
122
src/pages/HomePage/sections/Contact.tsx
Normal file
@@ -0,0 +1,122 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
import TextAnimation from "@/components/ui/TextAnimation";
|
||||
import Button from "@/components/ui/Button";
|
||||
import Input from "@/components/ui/Input";
|
||||
import Textarea from "@/components/ui/Textarea";
|
||||
import Tag from "@/components/ui/Tag";
|
||||
import { MapPin, Phone, Mail, User } from "lucide-react";
|
||||
|
||||
const ContactInline = () => {
|
||||
return (
|
||||
<section aria-label="Contact section" className="py-20 bg-background">
|
||||
<div className="w-content-width mx-auto px-4 md:px-6">
|
||||
<div className="flex flex-col items-center text-center mb-16">
|
||||
<ScrollReveal>
|
||||
<Tag text="Контакты" className="mb-4" />
|
||||
</ScrollReveal>
|
||||
<TextAnimation
|
||||
text="Свяжитесь с нами"
|
||||
variant="slide-up"
|
||||
tag="h2"
|
||||
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
|
||||
gradientText={false}
|
||||
/>
|
||||
<ScrollReveal delay={0.1}>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
||||
Оставьте заявку, и наши специалисты свяжутся с вами в ближайшее время для консультации.
|
||||
</p>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-start">
|
||||
<ScrollReveal delay={0.2} className="w-full">
|
||||
<div className="bg-card rounded-theme p-8 shadow-sm">
|
||||
<form className="space-y-6" onSubmit={(e) => e.preventDefault()}>
|
||||
<div className="space-y-4">
|
||||
<div className="relative">
|
||||
<div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
||||
<User className="h-5 w-5 text-muted-foreground" />
|
||||
</div>
|
||||
<Input
|
||||
type="text"
|
||||
placeholder="Ваше имя"
|
||||
className="pl-10 bg-background border-none"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div className="relative">
|
||||
<div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
||||
<Phone className="h-5 w-5 text-muted-foreground" />
|
||||
</div>
|
||||
<Input
|
||||
type="tel"
|
||||
placeholder="Номер телефона"
|
||||
className="pl-10 bg-background border-none"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
<div className="relative">
|
||||
<Textarea
|
||||
placeholder="Ваше сообщение"
|
||||
className="bg-background border-none min-h-[120px]"
|
||||
rows={4}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<Button
|
||||
text="Отправить заявку"
|
||||
variant="primary"
|
||||
className="w-full"
|
||||
/>
|
||||
</form>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
|
||||
<ScrollReveal delay={0.3} className="w-full h-full flex flex-col">
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6 mb-8">
|
||||
<div className="flex items-start space-x-4">
|
||||
<div className="bg-primary-cta/10 p-3 rounded-full">
|
||||
<MapPin className="h-6 w-6 text-primary-cta" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="font-semibold text-foreground mb-1">Адрес</h4>
|
||||
<p className="text-muted-foreground">г. Грозный, Чеченская Республика</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start space-x-4">
|
||||
<div className="bg-primary-cta/10 p-3 rounded-full">
|
||||
<Phone className="h-6 w-6 text-primary-cta" />
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="font-semibold text-foreground mb-1">Телефон</h4>
|
||||
<p className="text-muted-foreground">+7 (999) 000-00-00</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex-grow rounded-theme overflow-hidden min-h-[300px] bg-card">
|
||||
<iframe
|
||||
src="https://yandex.ru/map-widget/v1/?ll=45.688928%2C43.318353&z=12"
|
||||
width="100%"
|
||||
height="100%"
|
||||
frameBorder="0"
|
||||
allowFullScreen={true}
|
||||
className="w-full h-full border-0"
|
||||
title="Yandex Map"
|
||||
></iframe>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default function ContactSection() {
|
||||
return (
|
||||
<div data-webild-section="contact" id="contact">
|
||||
<ContactInline />
|
||||
</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="General Inquiries"
|
||||
title="Frequently Asked Questions"
|
||||
description="Everything you need to know about starting your property journey."
|
||||
items={[
|
||||
{
|
||||
question: "How do I start an investment portfolio?",
|
||||
answer: "Consult with our team to align your goals.",
|
||||
},
|
||||
{
|
||||
question: "Are your properties vetted?",
|
||||
answer: "Yes, every asset undergoes strict due diligence.",
|
||||
},
|
||||
{
|
||||
question: "Can I visit a property?",
|
||||
answer: "Viewings are available upon request and qualification.",
|
||||
},
|
||||
{
|
||||
question: "Do you offer financing assistance?",
|
||||
answer: "We work with top lenders to facilitate deals.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Features.tsx
Normal file
21
src/pages/HomePage/sections/Features.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 "features" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesMediaCards from '@/components/sections/features/FeaturesMediaCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FeaturesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="features" data-section="features">
|
||||
<SectionErrorBoundary name="features">
|
||||
<FeaturesMediaCards
|
||||
tag="Условия"
|
||||
title="Выгодные условия покупки"
|
||||
description="Мы предлагаем гибкие и выгодные условия для приобретения недвижимости."
|
||||
items={[{"description":"Без переплат и скрытых комиссий, сроком до 6 лет.","title":"Исламская рассрочка","imageSrc":"http://img.b2bpic.net/free-photo/architectural-blueprints_1359-454.jpg"},{"imageSrc":"http://img.b2bpic.net/free-photo/side-view-female-realtor-shaking-hands-with-couple-new-house-deal_23-2148895464.jpg","description":"Возможность приобретения недвижимости без первоначального взноса.","title":"Без первоначального взноса"},{"description":"Принимаем материнский капитал в качестве оплаты.","title":"Материнский капитал","imageSrc":"http://img.b2bpic.net/free-photo/close-up-modern-office-buildings_1359-605.jpg"},{"imageSrc":"http://img.b2bpic.net/free-photo/architectural-blueprints_1359-454.jpg","description":"Специальные условия и скидки для участников СВО.","title":"Скидки для СВО"},{"imageSrc":"http://img.b2bpic.net/free-photo/side-view-female-realtor-shaking-hands-with-couple-new-house-deal_23-2148895464.jpg","description":"Льготные условия приобретения для пенсионеров.","title":"Скидки пенсионерам"},{"imageSrc":"http://img.b2bpic.net/free-photo/close-up-modern-office-buildings_1359-605.jpg","description":"Сотрудничаем со всеми надежными застройщиками региона.","title":"Все застройщики ЧР"},{"imageSrc":"http://img.b2bpic.net/free-photo/architectural-blueprints_1359-454.jpg","description":"Широкий выбор коммерческих помещений для бизнеса.","title":"Коммерческая недвижимость"},{"imageSrc":"http://img.b2bpic.net/free-photo/side-view-female-realtor-shaking-hands-with-couple-new-house-deal_23-2148895464.jpg","description":"Участки под ИЖС и коммерческую застройку.","title":"Земельные участки"}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</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 HeroBrand from '@/components/sections/hero/HeroBrand';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBrand
|
||||
brand="Kvadrat Capital"
|
||||
description="Надежное агентство недвижимости в Грозном. Работаем со всеми застройщиками Чеченской Республики. Исламская рассрочка, материнский капитал, скидки для СВО и пенсионеров."
|
||||
primaryButton={{"href":"#products","text":"Смотреть каталог"}}
|
||||
secondaryButton={{"href":"#contact","text":"Связаться с нами"}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/balcony-witu-elegant-furniture-decoration-generative-ai_188544-12681.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Metrics.tsx
Normal file
38
src/pages/HomePage/sections/Metrics.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 "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsSimpleCards
|
||||
tag="The Numbers"
|
||||
title="Proven Performance"
|
||||
description="Delivering measurable value for every client we partner with."
|
||||
metrics={[
|
||||
{
|
||||
value: "$500M+",
|
||||
description: "Assets Under Management",
|
||||
},
|
||||
{
|
||||
value: "1.2k+",
|
||||
description: "Properties Successfully Closed",
|
||||
},
|
||||
{
|
||||
value: "15+",
|
||||
description: "Years of Excellence",
|
||||
},
|
||||
{
|
||||
value: "98%",
|
||||
description: "Client Retention Rate",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
21
src/pages/HomePage/sections/Products.tsx
Normal file
21
src/pages/HomePage/sections/Products.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 "products" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ProductsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="products" data-section="products">
|
||||
<SectionErrorBoundary name="products">
|
||||
<FeaturesImageBento
|
||||
tag="Каталог"
|
||||
title="Актуальные предложения"
|
||||
description="Ознакомьтесь с нашими эксклюзивными предложениями недвижимости в Грозном."
|
||||
items={[{"description":"3 комнаты, 120 м², центр города.","imageSrc":"http://img.b2bpic.net/free-photo/modern-sauna-with-panoramic-windows-wooden-design_169016-70021.jpg","title":"ЖК Ахмат Тауэр"},{"description":"2 комнаты, 75 м², развитая инфраструктура.","title":"ЖК Минутка","imageSrc":"http://img.b2bpic.net/free-photo/relax-house-thai-style_1150-17982.jpg"},{"title":"ЖК Европейский","imageSrc":"http://img.b2bpic.net/free-photo/luxury-bedroom-with-modern-design-elegance-generated-by-ai_188544-23557.jpg","description":"4 комнаты, 150 м², премиум класс."},{"title":"ЖК Солнечный","imageSrc":"http://img.b2bpic.net/free-photo/elegant-young-woman-bikini-male-shirt-posing-with-glass-water-kitchen_627829-11342.jpg","description":"1 комната, 45 м², отличный вариант для инвестиций."},{"imageSrc":"http://img.b2bpic.net/free-photo/modern-kitchen-drawer-made-natural-wood-elegant-premium-interior-design_169016-72733.jpg","title":"ТЦ Гранд Парк","description":"Коммерческое помещение, 200 м², первая линия."},{"imageSrc":"http://img.b2bpic.net/free-photo/outdoor-patio-with-table-chair_74190-7542.jpg","title":"Поселок Алды","description":"Участок под ИЖС, 10 соток."},{"imageSrc":"http://img.b2bpic.net/free-photo/vertical-shot-bench-yard-door-old-private-house_181624-6710.jpg","title":"Коттеджный поселок","description":"Таунхаус, 180 м², закрытая территория."}]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Testimonials.tsx
Normal file
57
src/pages/HomePage/sections/Testimonials.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 "testimonials" section.
|
||||
|
||||
import React from 'react';
|
||||
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialRatingCards
|
||||
tag="Client Stories"
|
||||
title="What Our Clients Say"
|
||||
description="Experience excellence through the perspective of those we have served."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Arthur Dent",
|
||||
role: "Investor",
|
||||
quote: "Unparalleled expertise in luxury acquisitions.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-happy-mother-home_23-2148321636.jpg",
|
||||
},
|
||||
{
|
||||
name: "Trillian Astra",
|
||||
role: "Homeowner",
|
||||
quote: "They made the impossible acquisition simple.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiling-carefree-brunette-woman-sitting-couch-living-room-online-shopping_1258-201984.jpg",
|
||||
},
|
||||
{
|
||||
name: "Ford Prefect",
|
||||
role: "Portfolio Owner",
|
||||
quote: "Professional, reliable, and extremely effective.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-businessman-video-calling-mobile-phone_23-2148176223.jpg",
|
||||
},
|
||||
{
|
||||
name: "Zaphod Beeblebrox",
|
||||
role: "Investor",
|
||||
quote: "Best real estate team in the industry today.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/serious-executive-with-short-hair-crossed-arms_1149-89.jpg",
|
||||
},
|
||||
{
|
||||
name: "Marvin Android",
|
||||
role: "Developer",
|
||||
quote: "A truly superior level of customer service.",
|
||||
rating: 5,
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/blond-businessman-happy-expression_1194-3863.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user