Compare commits

..

79 Commits

Author SHA1 Message Date
df02d9f8c7 Update src/app/page.tsx 2026-04-27 01:13:12 +00:00
15f3759b8d Update src/app/page.tsx 2026-04-27 01:12:44 +00:00
1120992fc1 Update src/app/layout.tsx 2026-04-27 01:12:44 +00:00
33222485f9 Update src/app/page.tsx 2026-04-27 01:12:15 +00:00
175337d9fe Switch to version 41: modified src/app/page.tsx 2026-04-27 00:47:23 +00:00
db72fecd40 Merge version_42 into main
Merge version_42 into main
2026-04-27 00:42:32 +00:00
8039db447b Update src/app/page.tsx 2026-04-27 00:42:28 +00:00
ae0bdfce63 Merge version_42 into main
Merge version_42 into main
2026-04-27 00:42:06 +00:00
db6c589753 Update src/app/page.tsx 2026-04-27 00:42:02 +00:00
f413388ce2 Merge version_41 into main
Merge version_41 into main
2026-04-27 00:40:19 +00:00
a5e06e87b9 Update src/app/page.tsx 2026-04-27 00:40:16 +00:00
c9abf24b7b Merge version_41 into main
Merge version_41 into main
2026-04-27 00:36:29 +00:00
f3be5a11fe Remove watermark 2026-04-27 00:36:26 +00:00
7068ae76b5 Merge version_41 into main
Merge version_41 into main
2026-03-21 23:23:54 +00:00
e2506c3a66 Update src/app/page.tsx 2026-03-21 23:23:50 +00:00
b260ab6f15 Merge version_40 into main
Merge version_40 into main
2026-03-21 23:16:27 +00:00
a5c834f9fc Update src/app/page.tsx 2026-03-21 23:16:17 +00:00
1aa9788a4a Update src/app/page.tsx 2026-03-21 23:11:27 +00:00
150f2b254c Merge version_38 into main
Merge version_38 into main
2026-03-21 23:10:39 +00:00
3aa7e33948 Update src/app/page.tsx 2026-03-21 23:10:35 +00:00
340716fe3e Merge version_37 into main
Merge version_37 into main
2026-03-21 23:07:29 +00:00
537601ee19 Update src/app/page.tsx 2026-03-21 23:07:25 +00:00
9c23776465 Merge version_36 into main
Merge version_36 into main
2026-03-21 23:04:00 +00:00
d68a1badc9 Update src/app/page.tsx 2026-03-21 23:03:56 +00:00
5854c172f5 Merge version_35 into main
Merge version_35 into main
2026-03-21 22:59:19 +00:00
19f25d0b8f Update src/app/page.tsx 2026-03-21 22:59:15 +00:00
65db121ec6 Merge version_34 into main
Merge version_34 into main
2026-03-21 22:56:54 +00:00
290ecbdf18 Update src/app/page.tsx 2026-03-21 22:56:50 +00:00
cf284f4bc6 Merge version_33 into main
Merge version_33 into main
2026-03-21 22:52:01 +00:00
e812a41272 Update src/app/page.tsx 2026-03-21 22:51:57 +00:00
6ec05e6497 Merge version_32 into main
Merge version_32 into main
2026-03-21 22:46:18 +00:00
0847c98641 Update src/app/page.tsx 2026-03-21 22:46:14 +00:00
574e17251e Merge version_31 into main
Merge version_31 into main
2026-03-21 22:34:46 +00:00
82edf03cf2 Update src/app/page.tsx 2026-03-21 22:34:42 +00:00
7569facec5 Merge version_30 into main
Merge version_30 into main
2026-03-21 22:30:41 +00:00
daab93c9f3 Update src/app/page.tsx 2026-03-21 22:30:37 +00:00
a2228ca537 Merge version_29 into main
Merge version_29 into main
2026-03-21 22:24:31 +00:00
68094e5592 Add src/hooks/useScrollDetection.ts 2026-03-21 22:24:27 +00:00
6dd47629e6 Update src/app/page.tsx 2026-03-21 22:24:27 +00:00
ab485b0d30 Merge version_28 into main
Merge version_28 into main
2026-03-21 22:16:05 +00:00
651cc9427b Update src/app/page.tsx 2026-03-21 22:16:01 +00:00
7f18332905 Merge version_27 into main
Merge version_27 into main
2026-03-21 22:08:53 +00:00
b0360b5784 Update src/app/page.tsx 2026-03-21 22:08:49 +00:00
b6a8015b5a Merge version_26 into main
Merge version_26 into main
2026-03-19 19:50:24 +00:00
c74227ca00 Update src/app/page.tsx 2026-03-19 19:50:20 +00:00
34667b3e39 Switch to version 24: modified src/app/page.tsx 2026-03-19 19:41:32 +00:00
3f4359dd46 Merge version_25 into main
Merge version_25 into main
2026-03-19 19:40:48 +00:00
30c0b01057 Update src/app/page.tsx 2026-03-19 19:40:44 +00:00
0b84fe33a3 Merge version_24 into main
Merge version_24 into main
2026-03-19 19:36:14 +00:00
970fa3fbea Update src/app/page.tsx 2026-03-19 19:36:10 +00:00
9807ee790c Merge version_23 into main
Merge version_23 into main
2026-03-19 19:33:13 +00:00
b5994e8235 Update src/app/page.tsx 2026-03-19 19:33:09 +00:00
e3f129208b Merge version_22 into main
Merge version_22 into main
2026-03-19 19:22:49 +00:00
1560f38543 Update src/app/page.tsx 2026-03-19 19:22:45 +00:00
b835383e2a Merge version_22 into main
Merge version_22 into main
2026-03-19 19:22:24 +00:00
c6ecfb010e Update src/app/page.tsx 2026-03-19 19:22:20 +00:00
64f3c3869b Merge version_22 into main
Merge version_22 into main
2026-03-19 19:21:49 +00:00
846aa84155 Update src/app/page.tsx 2026-03-19 19:21:45 +00:00
81a68f5e71 Merge version_19 into main
Merge version_19 into main
2026-03-19 19:19:40 +00:00
ef67dd7d0c Update src/app/page.tsx 2026-03-19 19:19:36 +00:00
0de13d4ccc Switch to version 19: modified src/app/page.tsx 2026-03-19 19:19:02 +00:00
fcc0441f5a Switch to version 20: modified src/app/page.tsx 2026-03-19 19:19:00 +00:00
452b4d00c9 Merge version_21 into main
Merge version_21 into main
2026-03-19 19:18:06 +00:00
53b6683972 Update src/app/page.tsx 2026-03-19 19:18:02 +00:00
e94914d0ba Merge version_20 into main
Merge version_20 into main
2026-03-19 19:13:03 +00:00
5796afa7d7 Update src/app/page.tsx 2026-03-19 19:12:59 +00:00
c91a752f88 Merge version_19 into main
Merge version_19 into main
2026-03-19 18:46:54 +00:00
c295bceaa4 Update src/app/page.tsx 2026-03-19 18:46:50 +00:00
e56e865f1a Merge version_19 into main
Merge version_19 into main
2026-03-19 07:27:03 +00:00
a16cb96315 Update src/app/page.tsx 2026-03-19 07:26:59 +00:00
08852338d6 Merge version_17 into main
Merge version_17 into main
2026-03-19 06:21:52 +00:00
e396880075 Update src/app/page.tsx 2026-03-19 06:21:48 +00:00
7a662c5872 Merge version_17 into main
Merge version_17 into main
2026-03-19 06:15:07 +00:00
dd69bdcbb8 Update src/app/page.tsx 2026-03-19 06:15:03 +00:00
35c9cd39b9 Merge version_16 into main
Merge version_16 into main
2026-03-19 06:10:53 +00:00
3eec907d94 Update src/app/page.tsx 2026-03-19 06:10:48 +00:00
ac8cb3c24e Merge version_15 into main
Merge version_15 into main
2026-03-19 06:06:45 +00:00
8af2e7629e Update src/app/page.tsx 2026-03-19 06:06:40 +00:00
abcce974ad Merge version_14 into main
Merge version_14 into main
2026-03-19 05:52:29 +00:00
3 changed files with 100 additions and 517 deletions

View File

@@ -3,15 +3,14 @@ import { Halant } from "next/font/google";
import { Inter } from "next/font/google";
import "./globals.css";
import { ServiceWrapper } from "@/components/ServiceWrapper";
import Tag from "@/tag/Tag";
import { getVisualEditScript } from "@/utils/visual-edit-script";
import { Lato } from "next/font/google";
export const metadata: Metadata = {
title: 'Irentall Bridal Boutique | Wedding Dresses Los Angeles',
description: 'Find your perfect wedding dress at Irentall, a luxury bridal boutique in Los Feliz, Los Angeles. Personalized styling, curated gowns, and 5-star service.',
title: 'Irentall - Bridal Styling Los Angeles',
description: 'Find your perfect wedding dress in Los Angeles with our personalized bridal styling services.',
};
const lato = Lato({
@@ -28,7 +27,7 @@ export default function RootLayout({
<html lang="en" suppressHydrationWarning>
<ServiceWrapper>
<body className={`${lato.variable} antialiased`}>
<Tag />
{children}
<script
dangerouslySetInnerHTML={{

View File

@@ -1,545 +1,51 @@
"use client";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarStyleCentered from "@/components/navbar/NavbarStyleCentered/NavbarStyleCentered";
import HeroSplitDoubleCarousel from "@/components/sections/hero/HeroSplitDoubleCarousel";
import FeatureCardSixteen from "@/components/sections/feature/FeatureCardSixteen";
import TestimonialCardSixteen from "@/components/sections/testimonial/TestimonialCardSixteen";
import ProductCardFour from "@/components/sections/product/ProductCardFour";
import ContactCTA from "@/components/sections/contact/ContactCTA";
import FooterSimple from "@/components/sections/footer/FooterSimple";
import TestimonialAboutCard from "@/components/sections/about/TestimonialAboutCard";
import BlogCardThree from "@/components/sections/blog/BlogCardThree";
import { Star, Heart, Users, Camera, Sparkles, Crown, Phone, MessageCircle, User, Play, ChevronRight, X, ArrowDown, ArrowUp } from "lucide-react";
import { useState, useEffect } from "react";
import FooterBaseCard from "@/components/sections/footer/FooterBaseCard";
import InlineImageSplitTextAbout from "@/components/sections/about/InlineImageSplitTextAbout";
import { Instagram, Phone, MapPin } from "lucide-react";
import { useState, useRef } from "react";
export default function LandingPage() {
const [showModal, setShowModal] = useState(false);
const [showBackToTop, setShowBackToTop] = useState(false);
useEffect(() => {
const handleScroll = () => {
setShowBackToTop(window.scrollY > 300);
};
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const scrollToGallery = () => {
const gallerySectionElement = document.getElementById('gallery');
if (gallerySectionElement) {
gallerySectionElement.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
};
const scrollToTop = () => {
const heroSectionElement = document.getElementById('hero');
if (heroSectionElement) {
heroSectionElement.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
};
const allDresses = [
{
id: "dress-1", name: "Classic Elegance", price: "Starting at $1,200", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897612811-03t85tl3.jpg?_wi=1", imageAlt: "Elegant white wedding dress"
},
{
id: "dress-2", name: "Blush Romance", price: "Starting at $1,400", variant: "Blush Pink", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897625910-hax1y5k9.jpg?_wi=1", imageAlt: "Beautiful blush pink wedding gown"
},
{
id: "dress-3", name: "Modern Sophistication", price: "Starting at $1,300", variant: "Off-White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898154508-5owc9z0t.jpg?_wi=1", imageAlt: "Modern off-shoulder wedding dress"
},
{
id: "dress-4", name: "Intricate Lace", price: "Starting at $1,500", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898173007-a5wime2i.jpg?_wi=1", imageAlt: "Detailed lace wedding dress"
},
{
id: "dress-5", name: "Minimalist Chic", price: "Starting at $1,100", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898188020-nldykyrf.jpg?_wi=1", imageAlt: "Sleek minimalist wedding dress"
},
{
id: "dress-6", name: "Royal Drama", price: "Starting at $1,600", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898205862-ka8mspzk.jpg?_wi=1", imageAlt: "Dramatic train wedding dress"
},
{
id: "dress-7", name: "Ethereal Layers", price: "Starting at $1,350", variant: "Ivory", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897612811-03t85tl3.jpg?_wi=2", imageAlt: "Layered tulle ethereal wedding dress"
},
{
id: "dress-8", name: "Vintage Inspired", price: "Starting at $1,450", variant: "Champagne", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897625910-hax1y5k9.jpg?_wi=2", imageAlt: "Vintage champagne wedding gown"
},
{
id: "dress-9", name: "Modern Asymmetric", price: "Starting at $1,550", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898154508-5owc9z0t.jpg?_wi=2", imageAlt: "Asymmetric modern wedding dress"
},
{
id: "dress-10", name: "Beaded Elegance", price: "Starting at $1,700", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898173007-a5wime2i.jpg?_wi=2", imageAlt: "Beaded white wedding dress"
},
{
id: "dress-11", name: "Sleek Minimalist", price: "Starting at $1,150", variant: "Off-White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898188020-nldykyrf.jpg?_wi=2", imageAlt: "Sleek off-white minimalist dress"
},
{
id: "dress-12", name: "Princess Ball Gown", price: "Starting at $1,800", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898205862-ka8mspzk.jpg?_wi=2", imageAlt: "Princess ball gown wedding dress"
},
{
id: "dress-13", name: "Romantic Lace", price: "Starting at $1,400", variant: "Ivory", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897612811-03t85tl3.jpg?_wi=3", imageAlt: "Romantic lace wedding dress"
},
{
id: "dress-14", name: "Blush Elegance", price: "Starting at $1,480", variant: "Blush", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897625910-hax1y5k9.jpg?_wi=3", imageAlt: "Blush elegance wedding gown"
},
{
id: "dress-15", name: "Modern Drape", price: "Starting at $1,320", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898154508-5owc9z0t.jpg?_wi=3", imageAlt: "Modern drape wedding dress"
},
{
id: "dress-16", name: "Lace Detail", price: "Starting at $1,520", variant: "Ivory", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898173007-a5wime2i.jpg?_wi=3", imageAlt: "Lace detail wedding dress"
},
{
id: "dress-17", name: "Minimal Chic", price: "Starting at $1,120", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898188020-nldykyrf.jpg?_wi=3", imageAlt: "Minimal chic wedding dress"
},
{
id: "dress-18", name: "Dramatic Train", price: "Starting at $1,650", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898205862-ka8mspzk.jpg?_wi=3", imageAlt: "Dramatic train dress"
},
{
id: "dress-19", name: "Sophisticated Ivory", price: "Starting at $1,380", variant: "Ivory", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897612811-03t85tl3.jpg?_wi=4", imageAlt: "Sophisticated ivory wedding dress"
},
{
id: "dress-20", name: "Blush Romance Premium", price: "Starting at $1,550", variant: "Blush Pink", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897625910-hax1y5k9.jpg?_wi=4", imageAlt: "Premium blush pink wedding gown"
},
{
id: "dress-21", name: "Contemporary Cut", price: "Starting at $1,420", variant: "Off-White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898154508-5owc9z0t.jpg?_wi=4", imageAlt: "Contemporary cut wedding dress"
},
{
id: "dress-22", name: "Intricate Beading", price: "Starting at $1,720", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898173007-a5wime2i.jpg?_wi=4", imageAlt: "Intricate beading wedding dress"
},
{
id: "dress-23", name: "Elegant Minimalist", price: "Starting at $1,180", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898188020-nldykyrf.jpg?_wi=4", imageAlt: "Elegant minimalist wedding dress"
},
{
id: "dress-24", name: "Royal Gown", price: "Starting at $1,850", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773898205862-ka8mspzk.jpg?_wi=4", imageAlt: "Royal wedding gown"
},
{
id: "dress-25", name: "Timeless Beauty", price: "Starting at $1,440", variant: "Ivory", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897612811-03t85tl3.jpg?_wi=5", imageAlt: "Timeless beauty wedding dress"
}
];
const initialDresses = allDresses.slice(0, 6);
const allDresses = Array.from({ length: 6 }, (_, i) => ({ id: `dress-${i + 1}`, name: "Wedding Dress", price: "$1,200+", variant: "White", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773897612811-03t85tl3.jpg", imageAlt: "Wedding gown" }));
return (
<ThemeProvider
defaultButtonVariant="shift-hover"
defaultTextAnimation="background-highlight"
borderRadius="rounded"
contentWidth="small"
sizing="medium"
background="grid"
cardStyle="inset"
primaryButtonStyle="radial-glow"
secondaryButtonStyle="glass"
headingFontWeight="light"
>
{/* Fixed "Go to Dresses" Button */}
<button
onClick={scrollToGallery}
className="fixed right-6 bottom-32 z-40 w-16 h-16 rounded-full bg-gradient-to-r from-[var(--primary-cta)] to-[var(--primary-cta)] text-[var(--primary-cta-text)] shadow-lg hover:shadow-2xl transition-all duration-300 ease-out flex items-center justify-center hover:scale-110 active:scale-95"
aria-label="Go to Dresses"
title="Go to Dresses"
>
<div className="flex flex-col items-center justify-center gap-1">
<ArrowDown className="w-5 h-5" />
<span className="text-xs font-semibold text-center leading-tight">Dresses</span>
<ThemeProvider defaultButtonVariant="shift-hover" defaultTextAnimation="background-highlight" borderRadius="rounded" contentWidth="medium" sizing="medium" background="grid" cardStyle="glass-elevated" primaryButtonStyle="gradient" secondaryButtonStyle="glass" headingFontWeight="normal">
<div id="nav" data-section="nav" className="fixed top-0 left-0 w-full z-50 bg-[var(--background)]/90 backdrop-blur-md flex flex-col items-center py-2 gap-2 border-b border-[var(--accent)]/20">
<img src="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1777252323498-sec9a8v5.png" alt="Logo" className="h-12 w-auto object-contain" />
<div className="flex items-center gap-6">
<a href="https://instagram.com/irentall.usa" target="_blank" rel="noopener noreferrer" className="text-[var(--foreground)] hover:text-[var(--primary-cta)]"><Instagram className="w-5 h-5" /></a>
<a href="tel:747-800-7770" className="text-[var(--foreground)] hover:text-[var(--primary-cta)]"><Phone className="w-5 h-5" /></a>
<a href="https://www.google.com/maps/search/Irentall" target="_blank" rel="noopener noreferrer" className="text-[var(--foreground)] hover:text-[var(--primary-cta)]"><MapPin className="w-5 h-5" /></a>
</div>
</button>
{/* Fixed Back-to-Top Button */}
{showBackToTop && (
<button
onClick={scrollToTop}
className="fixed right-6 bottom-6 z-40 w-16 h-16 rounded-full bg-gradient-to-r from-[var(--secondary-cta)] to-[var(--secondary-cta)] text-[var(--secondary-cta-text)] shadow-lg hover:shadow-2xl transition-all duration-300 ease-out flex items-center justify-center hover:scale-110 active:scale-95 animate-in fade-in-0 duration-300"
aria-label="Back to Top"
title="Back to Top"
>
<ArrowUp className="w-5 h-5" />
</button>
)}
<div id="nav" data-section="nav">
<NavbarStyleCentered
brandName="Irentall"
navItems={[
{ name: "Home", id: "home" },
{ name: "About", id: "about" },
{ name: "Gallery", id: "gallery" },
{ name: "Contact", id: "contact" }
]}
button={{
text: "Call Now", href: "tel:747-800-7770"
}}
/>
</div>
<div id="hero" data-section="hero">
<HeroSplitDoubleCarousel
title="Find Your Perfect Wedding Dress in Los Angeles"
description="Personalized bridal styling with a curated collection of stunning gowns. Our expert team will guide you through every moment of your journey to find the dress of your dreams."
background={{ variant: "plain" }}
tag="5.0 ★ Loved by Local Brides"
tagIcon={Star}
tagAnimation="slide-up"
buttons={[
{ text: "Call Now", href: "tel:747-800-7770" },
{ text: "Browse Dresses", onClick: scrollToGallery }
]}
buttonAnimation="slide-up"
leftCarouselItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/woman-looking-herself_1157-187.jpg?_wi=1", imageAlt: "Bride in beautiful wedding dress at Irentall boutique"
},
{
imageSrc: "http://img.b2bpic.net/free-photo/woman-checking-two-shirts_23-2147601332.jpg?_wi=1", imageAlt: "Elegant Irentall bridal boutique interior"
},
{
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-bride-posing-medium-shot_23-2149860841.jpg?_wi=1", imageAlt: "Happy bride smiling in wedding dress"
}
]}
rightCarouselItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/young-women-enjoying-bachelorette-party_23-2149278361.jpg?_wi=1", imageAlt: "Bride with friends at bridal boutique"
},
{
imageSrc: "http://img.b2bpic.net/free-photo/elegant-beautiful-fashionable-woman-blonde-long-white-dre_7502-4897.jpg?_wi=1", imageAlt: "Elegant white wedding dress on display"
},
{
imageSrc: "http://img.b2bpic.net/free-photo/elegant-bride-posing_23-2148105871.jpg?_wi=1", imageAlt: "Bride in perfect wedding dress moment"
}
]}
carouselPosition="right"
/>
<div id="hero" data-section="hero" className="pt-32">
<HeroSplitDoubleCarousel title="Find Your Perfect Wedding Dress in Los Angeles" description="Personalized bridal styling with a curated collection of stunning gowns." background={{ variant: "plain" }} leftCarouselItems={[{ imageSrc: "http://img.b2bpic.net/free-photo/woman-looking-herself_1157-187.jpg" }]} rightCarouselItems={[{ imageSrc: "http://img.b2bpic.net/free-photo/elegant-beautiful-fashionable-woman-blonde-long-white-dre_7502-4897.jpg" }]} />
</div>
<div id="features" data-section="features">
<FeatureCardSixteen
title="What Makes Us Different"
description="At Irentall, we believe every bride deserves a personalized, stress-free experience. Here's what sets us apart from other boutiques."
textboxLayout="default"
useInvertedBackground={false}
tag="Our Promise"
tagIcon={Heart}
tagAnimation="slide-up"
negativeCard={{
items: [
"Impersonal big-box store experience", "Limited dress selection", "Rushed appointments", "Generic styling advice"
]
}}
positiveCard={{
items: [
"Personalized one-on-one attention", "Curated collection of stunning gowns", "Unhurried, comfortable fittings", "Expert styling guidance tailored to you"
]
}}
animationType="slide-up"
/>
<FeatureCardSixteen title="What Makes Us Different" description="Personalized service for your big day." negativeCard={{ items: ["Impersonal shopping"] }} positiveCard={{ items: ["One-on-one attention"] }} animationType="slide-up" textboxLayout="default" useInvertedBackground={false} />
</div>
<div id="about" data-section="about">
<TestimonialAboutCard
tag="Meet Our Founder"
tagIcon={User}
tagAnimation="slide-up"
title="Iren Ulikhanova "
description="Iren Ulikhanova is an accomplished professional in the wedding and dance industry, with years of experience as a dancer, choreographer, and wedding coach. As the owner of a refined wedding dress rental boutique, she combines artistic vision with deep understanding of bridal elegance, delivering a polished and personalized experience for every client. Known for her professionalism and attention to detail, Iren has helped countless couples bring their wedding visions to life, both through exquisite bridal styling and beautifully choreographed first dances."
subdescription=""
icon={Heart}
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773894327718-8nx4sc9p.jpg"
imageAlt="Irentall owner with bride"
mediaAnimation="slide-up"
useInvertedBackground={true}
/>
</div>
<div id="testimonials" data-section="testimonials">
<TestimonialCardSixteen
title="Real Brides, Real Love"
description="See what brides in Los Angeles are saying about their Irentall experience."
textboxLayout="default"
useInvertedBackground={false}
tag="Customer Stories"
tagIcon={Users}
tagAnimation="slide-up"
kpiItems={[
{ value: "50+", label: "Happy Brides" },
{ value: "5.0★", label: "Average Rating" },
{ value: "4.5+", label: "Month of Excellence" }
]}
testimonials={[
{
id: "1", name: "Marina Farhardyan ", role: "Bride", company: "Irentall Boutique", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-bride-posing-medium-shot_23-2149860841.jpg?_wi=2", imageAlt: "Sarah Johnson - Happy bride"
},
{
id: "2", name: "Jessica Martinez", role: "Bride", company: "Irentall Boutique", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-women-enjoying-bachelorette-party_23-2149278361.jpg?_wi=2", imageAlt: "Jessica Martinez - Bride with friends"
},
{
id: "3", name: "Emily Chen", role: "Bride", company: "Irentall Boutique", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/reflection-senior-mother-mature-daughter-mirror-home_23-2148202921.jpg", imageAlt: "Emily Chen - Bride in mirror"
},
{
id: "4", name: "Michelle Rodriguez", role: "Bride", company: "Irentall Boutique", rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/elegant-bride-posing_23-2148105871.jpg?_wi=2", imageAlt: "Michelle Rodriguez - Happy bride moment"
}
]}
animationType="slide-up"
/>
<InlineImageSplitTextAbout heading={[{ type: 'text', content: "Iren Ulikhanova" }]} useInvertedBackground={false} />
</div>
<div id="gallery" data-section="gallery">
<div className="relative">
<ProductCardFour
title="Our Dress Collection"
description="Handpicked dresses for every bride, every style, every story. From classic elegance to modern minimalism. Some of these dresses are exquisitely and elegantly sewed and crafted by MARAL."
textboxLayout="default"
useInvertedBackground={false}
tag="Gallery"
tagIcon={Camera}
tagAnimation="slide-up"
gridVariant="bento-grid"
animationType="slide-up"
products={initialDresses}
/>
{/* View More Button Positioned on Right */}
<div className="flex justify-end px-4 md:px-8 lg:px-16 py-6 md:py-10">
<button
onClick={() => setShowModal(true)}
className="group relative inline-flex items-center gap-2 px-6 md:px-8 py-3 md:py-4 bg-gradient-to-r from-[var(--primary-cta)] to-[var(--primary-cta)] text-[var(--primary-cta-text)] rounded-lg font-semibold hover:shadow-lg transition-all duration-300 ease-out"
aria-label="View More Dresses"
>
<span className="text-sm md:text-base">View More Dresses</span>
<ChevronRight className="w-5 h-5 md:w-6 md:h-6 group-hover:translate-x-1 transition-transform" />
</button>
</div>
</div>
{/* Modal Gallery */}
{showModal && (
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm p-4">
<div className="relative w-full max-w-6xl max-h-[90vh] bg-[var(--background)] rounded-2xl shadow-2xl overflow-hidden flex flex-col">
{/* Modal Header */}
<div className="flex items-center justify-between p-4 md:p-6 border-b border-[var(--accent)]/20">
<h2 className="text-xl md:text-2xl font-semibold text-[var(--foreground)]">Complete Dress Gallery</h2>
<button
onClick={() => setShowModal(false)}
className="p-2 hover:bg-[var(--accent)]/10 rounded-lg transition-colors"
aria-label="Close gallery"
>
<X className="w-6 h-6 text-[var(--foreground)]" />
</button>
</div>
{/* Modal Gallery Grid */}
<div className="overflow-y-auto flex-1 p-4 md:p-6">
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-6">
{allDresses.map((dress) => (
<div
key={dress.id}
className="group relative overflow-hidden rounded-lg bg-[var(--card)] shadow-md hover:shadow-xl transition-all duration-500 ease-out"
>
{/* Image Container */}
<div className="relative h-64 md:h-72 overflow-hidden bg-[var(--accent)]/5">
<img
src={dress.imageSrc}
alt={dress.imageAlt}
className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500 ease-out"
/>
{/* Hover Overlay */}
<div className="absolute inset-0 bg-gradient-to-t from-black/40 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
</div>
{/* Content */}
<div className="p-3 md:p-4">
<h3 className="text-sm md:text-base font-semibold text-[var(--foreground)] line-clamp-2">
{dress.name}
</h3>
<p className="text-xs md:text-sm text-[var(--foreground)]/70 mt-1">
{dress.variant}
</p>
<p className="text-sm md:text-base font-bold text-[var(--primary-cta)] mt-2">
{dress.price}
</p>
</div>
</div>
))}
</div>
</div>
{/* Modal Footer */}
<div className="flex items-center justify-end gap-3 p-4 md:p-6 border-t border-[var(--accent)]/20 bg-[var(--card)]/50">
<button
onClick={() => setShowModal(false)}
className="px-4 md:px-6 py-2 md:py-3 rounded-lg border border-[var(--accent)] text-[var(--foreground)] hover:bg-[var(--accent)]/10 transition-colors"
>
Close
</button>
</div>
</div>
</div>
)}
</div>
<div id="reels" data-section="reels">
<BlogCardThree
title="Behind the Beauty"
description=""
textboxLayout="default"
useInvertedBackground={true}
tag="Featured Content"
tagIcon={Play}
tagAnimation="slide-up"
animationType="slide-up"
blogs={[
{
id: "reel-1", category: "", title: "", excerpt: "", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-bride-posing-medium-shot_23-2149860841.jpg?_wi=2", imageAlt: "Bride and groom first look moment", authorName: "Irentall Team", authorAvatar: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773894327718-8nx4sc9p.jpg", date: ""
},
{
id: "reel-2", category: "", title: "", excerpt: "", imageSrc: "http://img.b2bpic.net/free-photo/young-women-enjoying-bachelorette-party_23-2149278361.jpg?_wi=2", imageAlt: "Bride twirling in wedding dress", authorName: "Irentall Team", authorAvatar: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773894327718-8nx4sc9p.jpg", date: ""
},
{
id: "reel-3", category: "", title: "", excerpt: "", imageSrc: "http://img.b2bpic.net/free-photo/elegant-beautiful-fashionable-woman-blonde-long-white-dre_7502-4897.jpg?_wi=2", imageAlt: "Bride with complete bridal accessories", authorName: "Irentall Team", authorAvatar: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773894327718-8nx4sc9p.jpg", date: ""
},
{
id: "reel-4", category: "", title: "", excerpt: "", imageSrc: "http://img.b2bpic.net/free-photo/elegant-bride-posing_23-2148105871.jpg?_wi=2", imageAlt: "Close-up of wedding dress lace details", authorName: "Irentall Team", authorAvatar: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3B5MJh3BJx339lVFA4KYjFzlzMX/uploaded-1773894327718-8nx4sc9p.jpg", date: ""
}
]}
uniformGridCustomHeightClasses="min-h-120 2xl:min-h-150"
/>
</div>
<div id="shoes" data-section="shoes">
<ProductCardFour
title="Bridal Shoes"
description="Complete your wedding day look with stunning shoes designed for comfort and elegance. From classic heels to modern designs."
textboxLayout="default"
useInvertedBackground={true}
tag="Accessory Collection"
tagIcon={Sparkles}
tagAnimation="slide-up"
gridVariant="three-columns-all-equal-width"
animationType="slide-up"
products={[
{
id: "shoe-1", name: "Classic Satin Heels", price: "Starting at $250", variant: "White", imageSrc: "http://img.b2bpic.net/free-photo/elegant-beautiful-fashionable-woman-blonde-long-white-dre_7502-4897.jpg?_wi=2", imageAlt: "Classic white satin bridal heels"
},
{
id: "shoe-2", name: "Jeweled Flats", price: "Starting at $280", variant: "Ivory", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-bridal-dress-hanger_23-2149640924.jpg?_wi=2", imageAlt: "Comfortable jeweled flat bridal shoes"
},
{
id: "shoe-3", name: "Pearl Embellished Pumps", price: "Starting at $320", variant: "Champagne", imageSrc: "http://img.b2bpic.net/free-photo/morning-bride-when-she-wears-beautiful-dress_1328-2238.jpg?_wi=2", imageAlt: "Pearl decorated champagne bridal pumps"
},
{
id: "shoe-4", name: "Delicate Strappy Sandals", price: "Starting at $200", variant: "Silver", imageSrc: "http://img.b2bpic.net/free-photo/elegant-bride-posing_23-2148105871.jpg?_wi=2", imageAlt: "Delicate silver strappy bridal sandals"
},
{
id: "shoe-5", name: "Vintage Lace Pumps", price: "Starting at $290", variant: "White", imageSrc: "http://img.b2bpic.net/free-photo/front-view-beautiful-bride-indoors_23-2149640909.jpg?_wi=2", imageAlt: "Vintage lace wedding pumps"
},
{
id: "shoe-6", name: "Minimalist Ballet Flats", price: "Starting at $220", variant: "Ivory", imageSrc: "http://img.b2bpic.net/free-photo/bride-playing-with-her-skirt_1157-725.jpg?_wi=2", imageAlt: "Minimalist ivory ballet flat shoes"
}
]}
/>
</div>
<div id="veils" data-section="veils">
<ProductCardFour
title="Veils & Crowns"
description="Enhance your bridal beauty with our exquisite collection of veils and headpieces. Each piece is carefully selected to complement your gown perfectly."
textboxLayout="default"
useInvertedBackground={false}
tag="Veil Collection"
tagIcon={Crown}
tagAnimation="slide-up"
gridVariant="three-columns-all-equal-width"
animationType="slide-up"
products={[
{
id: "veil-1", name: "Cathedral Length Veil", price: "Starting at $180", variant: "White Tulle", imageSrc: "http://img.b2bpic.net/free-photo/woman-looking-herself_1157-187.jpg?_wi=2", imageAlt: "Elegant cathedral length bridal veil"
},
{
id: "veil-2", name: "Lace Embellished Veil", price: "Starting at $220", variant: "Ivory Lace", imageSrc: "http://img.b2bpic.net/free-photo/woman-checking-two-shirts_23-2147601332.jpg?_wi=2", imageAlt: "Beautiful lace embellished bridal veil"
},
{
id: "veil-3", name: "Dramatic Detachable Veil", price: "Starting at $250", variant: "Ivory", imageSrc: "http://img.b2bpic.net/free-photo/beautiful-bride-posing-medium-shot_23-2149860841.jpg?_wi=1", imageAlt: "Dramatic detachable bridal veil"
},
{
id: "veil-4", name: "Short Birdcage Veil", price: "Starting at $120", variant: "Black Netting", imageSrc: "http://img.b2bpic.net/free-photo/young-women-enjoying-bachelorette-party_23-2149278361.jpg?_wi=1", imageAlt: "Modern short birdcage veil"
},
{
id: "veil-5", name: "Pearl Trimmed Veil", price: "Starting at $200", variant: "Champagne", imageSrc: "http://img.b2bpic.net/free-photo/elegant-beautiful-fashionable-woman-blonde-long-white-dre_7502-4897.jpg?_wi=1", imageAlt: "Pearl trimmed champagne bridal veil"
},
{
id: "veil-6", name: "Crystal Beaded Veil", price: "Starting at $270", variant: "White with Crystals", imageSrc: "http://img.b2bpic.net/free-photo/elegant-bride-posing_23-2148105871.jpg?_wi=1", imageAlt: "Sparkling crystal beaded bridal veil"
}
]}
/>
<ProductCardFour title="Our Collection" description="Explore our latest gowns." textboxLayout="default" useInvertedBackground={false} gridVariant="bento-grid" animationType="slide-up" products={allDresses} />
</div>
<div id="contact" data-section="contact">
<ContactCTA
tag="Get in Touch"
tagIcon={Phone}
tagAnimation="slide-up"
title="Ready to Find Your Dream Dress?"
description="Call or text us at 747-800-7770 to schedule your personal styling appointment. Our team is here to make your bridal journey unforgettable."
buttons={[
{ text: "Call (747) 800-7770", href: "tel:747-800-7770" },
{ text: "Text (747) 800-7770", href: "sms:747-800-7770" }
]}
buttonAnimation="slide-up"
background={{ variant: "plain" }}
useInvertedBackground={false}
buttonContainerClassName="flex flex-col sm:flex-row gap-3 justify-center"
buttonClassName="first:order-first second:order-last"
/>
<ContactCTA background={{ variant: "plain" }} useInvertedBackground={false} tag="Contact" title="Book Your Appointment" description="Call 747-800-7770 to get started." buttons={[{ text: "Call Now", href: "tel:747-800-7770" }]} />
</div>
<div id="footer" data-section="footer">
<FooterSimple
columns={[
{
title: "Irentall", items: [
{ label: "Home", href: "#home" },
{ label: "About", href: "#about" },
{ label: "Gallery", href: "#gallery" },
{ label: "Contact", href: "#contact" }
]
},
{
title: "Services", items: [
{ label: "Bridal Gowns", href: "#gallery" },
{ label: "Dress Fittings", href: "#appointment" },
{ label: "Personal Styling", href: "#appointment" },
{ label: "Consultations", href: "#appointment" }
]
},
{
title: "Accessories", items: [
{ label: "Shoes", href: "#shoes" },
{ label: "Veils & Headpieces", href: "#veils" },
{ label: "Complete Looks", href: "#appointment" }
]
},
{
title: "Contact", items: [
{ label: "Phone", href: "tel:747-800-7770" },
{ label: "Email", href: "mailto:info@irentall.com" },
{ label: "Address", href: "#contact" },
{ label: "Book Online", href: "#appointment" }
]
}
]}
bottomLeftText="© 2024 Irentall Bridal Boutique. All rights reserved."
bottomRightText="3106 Los Feliz Blvd, Los Angeles, CA 90039 | (747) 800-7770"
/>
<FooterBaseCard logoText="Irentall" columns={[{ title: "Links", items: [{ label: "Home", href: "/" }] }]} copyrightText="© 2024 Irentall." />
</div>
</ThemeProvider>
);

View File

@@ -0,0 +1,78 @@
import { useEffect, useRef, useState } from 'react';
interface UseScrollDetectionOptions {
targetElementId: string;
scrollThreshold?: number;
onStateChange?: (state: {
isScrollingPastTarget: boolean;
isScrollingBack: boolean;
scrollProgress: number;
}) => void;
}
interface UseScrollDetectionReturn {
isScrollingPastTarget: boolean;
isScrollingBack: boolean;
scrollProgress: number;
}
export function useScrollDetection({
targetElementId,
scrollThreshold = 0.3,
onStateChange,
}: UseScrollDetectionOptions): UseScrollDetectionReturn {
const [isScrollingPastTarget, setIsScrollingPastTarget] = useState(false);
const [isScrollingBack, setIsScrollingBack] = useState(false);
const [scrollProgress, setScrollProgress] = useState(0);
const lastScrollYRef = useRef(0);
const targetElementRef = useRef<HTMLElement | null>(null);
useEffect(() => {
// Get target element
targetElementRef.current = document.getElementById(targetElementId);
const handleScroll = () => {
if (!targetElementRef.current) return;
const targetRect = targetElementRef.current.getBoundingClientRect();
const windowHeight = window.innerHeight;
const scrollY = window.scrollY;
const currentScrollDirection = scrollY > lastScrollYRef.current ? 'down' : 'up';
// Calculate if we've scrolled past the target element
const targetTop = targetRect.top + scrollY;
const thresholdDistance = window.innerHeight * scrollThreshold;
const isPastTarget = scrollY > targetTop - thresholdDistance;
// Determine scroll direction
const isScrollingBackward = currentScrollDirection === 'up';
// Calculate scroll progress (0 to 1)
const progress = Math.min(scrollY / (targetTop + thresholdDistance), 1);
setIsScrollingPastTarget(isPastTarget);
setIsScrollingBack(isScrollingBackward);
setScrollProgress(progress);
// Call callback if provided
if (onStateChange) {
onStateChange({
isScrollingPastTarget: isPastTarget,
isScrollingBack: isScrollingBackward,
scrollProgress: progress,
});
}
lastScrollYRef.current = scrollY;
};
window.addEventListener('scroll', handleScroll, { passive: true });
return () => window.removeEventListener('scroll', handleScroll);
}, [targetElementId, scrollThreshold, onStateChange]);
return {
isScrollingPastTarget,
isScrollingBack,
scrollProgress,
};
}