Bob AI: Added a newsletter signup section

This commit is contained in:
kudinDmitriyUp
2026-06-21 18:10:39 +00:00
parent a0d343b97f
commit e375c3f840
10 changed files with 417 additions and 240 deletions

View File

@@ -1,252 +1,38 @@
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly. Non-block content (wrappers, non-inlinable sections) is
// preserved inline; extracted section blocks become <XSection/> refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import AboutSection from './HomePage/sections/About';
import ShopSection from './HomePage/sections/Shop';
import HighlightsSection from './HomePage/sections/Highlights';
import TestimonialsSection from './HomePage/sections/Testimonials';
import PartnersSection from './HomePage/sections/Partners';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
import NewsletterSection from './HomePage/sections/Newsletter';export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroTiltedCards
tag="Artisanal Home Goods"
title="Curated Elegance for Your Living Space"
description="Discover a hand-picked collection of beautiful, sustainable home goods that bring warmth and comfort into your daily life."
primaryButton={{
text: "Shop Collection",
href: "#shop",
}}
secondaryButton={{
text: "Our Story",
href: "#about",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/woman-working-with-dried-flowers_52683-91337.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/closeup-details-autumn-home-decor-blurred-background_169016-23622.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/modern-organizer-cutlery-drawer-premium-kitchen_169016-68988.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/still-life-fruits-tablecloth_23-2151318370.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/many-wooden-tags-ribbons-shelf_23-2147874985.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="Our Philosophy"
title="Crafted with Intent"
description="We believe in the power of handmade objects to transform a house into a home. Each piece in our shop is selected for its story, quality, and commitment to sustainable craftsmanship."
imageSrc="http://img.b2bpic.net/free-photo/home-workspace-minimalistic-design_23-2148991458.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="shop" data-section="shop">
<SectionErrorBoundary name="shop">
<FeaturesRevealCardsBento
tag="Our Bestsellers"
title="Curated Essentials"
description="Explore our favorite items that define the Blissful aesthetic."
items={[
{
title: "Ceramic Vase",
description: "Hand-thrown pottery, perfect for minimal bouquets.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-artist-clay-pot_23-2148986303.jpg",
},
{
title: "Scented Candle",
description: "Notes of cedarwood and amber, hand-poured.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-table-book-candle-tea-space-dark-sofa-autumn-coziness-concept_169016-9787.jpg",
},
{
title: "Linen Throw",
description: "Soft, breathable linen for cozy afternoons.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/composition-with-candles-knitted-elements-other-decor-details-bedroom_169016-6768.jpg",
},
{
title: "Wooden Utensils",
description: "Sustainable oak cooking essentials.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/elegant-minimalistic-bowls_23-2149483981.jpg",
},
{
title: "Ceramic Mug",
description: "Speckled stoneware for your morning ritual.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/girl-holding-cup-tea-hands_169016-3431.jpg",
},
{
title: "Cushion Cover",
description: "Embroidered linen in earthy neutral tones.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/autumn-reading-book_169016-1462.jpg",
},
{
title: "Minimalist Print",
description: "Framed abstract art for your gallery wall.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/modern-art-studio-composition_23-2147868506.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ShopSection />
<div id="highlights" data-section="highlights">
<SectionErrorBoundary name="highlights">
<FeaturesMediaCarousel
tag="Why Blissful?"
title="Designed for Living"
description="Our products are designed to last, blending modern functionality with timeless aesthetic values."
items={[
{
title: "Natural Materials",
description: "Only the highest quality wood, clay, and fiber.",
buttonIcon: "Leaf",
imageSrc: "http://img.b2bpic.net/free-photo/couple-making-vase-with-clay_1157-30694.jpg",
},
{
title: "Sustainable Ethics",
description: "Carbon-neutral shipping and ethical sourcing.",
buttonIcon: "Recycle",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-christmas-gift-boxes_23-2149205047.jpg",
},
{
title: "Timeless Design",
description: "Pieces that evolve with your unique style.",
buttonIcon: "Heart",
imageSrc: "http://img.b2bpic.net/free-photo/cozy-home-still-life-with-inscription-home_169016-1530.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<HighlightsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialRatingCards
tag="Love from Customers"
title="What They Say"
description="Read stories from those who have found their home essentials with us."
testimonials={[
{
name: "Elena R.",
role: "Interior Stylist",
quote: "The quality of the ceramics I purchased is absolutely breathtaking.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/smiling-shopaholic-woman-with-colorful-paper-bags_23-2147823604.jpg",
},
{
name: "Marcus J.",
role: "Architect",
quote: "Finally, a shop that prioritizes both aesthetics and sustainability.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-creative-man-holding-tablet-papers-carpentry-workshop_342744-800.jpg",
},
{
name: "Sarah P.",
role: "Content Creator",
quote: "My living room feels so much more grounded since adding these pieces.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/smiling-worker-desk_1170-83.jpg",
},
{
name: "David W.",
role: "Entrepreneur",
quote: "The shipping was fast, and the packaging was completely plastic-free.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/couple-interacting-color-swatch_1170-832.jpg",
},
{
name: "Chloe M.",
role: "Home Chef",
quote: "I love the rustic charm of these wooden kitchen accessories.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/female-friends-looking-up-product-shop_23-2148721120.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="partners" data-section="partners">
<SectionErrorBoundary name="partners">
<SocialProofMarquee
tag="Recognized By"
title="Featured In"
description="We are honored to have been shared by these design leaders."
names={[
"Design Monthly",
"Artisan Home",
"Organic Living",
"Urban Dweller",
"Craft & Style",
"Home Aesthetic",
"Modern Habitat",
]}
/>
</SectionErrorBoundary>
</div>
<PartnersSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Help Center"
title="Common Questions"
description="Everything you need to know about our products and shipping."
items={[
{
question: "Are your materials sustainably sourced?",
answer: "Yes, we prioritize ethically harvested materials and fair-trade manufacturing.",
},
{
question: "What is your return policy?",
answer: "We offer a 30-day hassle-free return window for all unused goods.",
},
{
question: "Do you ship internationally?",
answer: "Currently, we ship to most regions across North America and Europe.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Let's Connect"
text="Have questions about our collection or need a consultation? Let's chat."
primaryButton={{
text: "Contact Us",
href: "#",
}}
secondaryButton={{
text: "Read Our Blog",
href: "#",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
<NewsletterSection />
</>
);
}

View File

@@ -0,0 +1,21 @@
// 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 AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="Our Philosophy"
title="Crafted with Intent"
description="We believe in the power of handmade objects to transform a house into a home. Each piece in our shop is selected for its story, quality, and commitment to sustainable craftsmanship."
imageSrc="http://img.b2bpic.net/free-photo/home-workspace-minimalistic-design_23-2148991458.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Let's Connect"
text="Have questions about our collection or need a consultation? Let's chat."
primaryButton={{
text: "Contact Us",
href: "#",
}}
secondaryButton={{
text: "Read Our Blog",
href: "#",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "faq" section.
import React from 'react';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Help Center"
title="Common Questions"
description="Everything you need to know about our products and shipping."
items={[
{
question: "Are your materials sustainably sourced?",
answer: "Yes, we prioritize ethically harvested materials and fair-trade manufacturing.",
},
{
question: "What is your return policy?",
answer: "We offer a 30-day hassle-free return window for all unused goods.",
},
{
question: "Do you ship internationally?",
answer: "Currently, we ship to most regions across North America and Europe.",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,45 @@
// 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 HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroTiltedCards
tag="Artisanal Home Goods"
title="Curated Elegance for Your Living Space"
description="Discover a hand-picked collection of beautiful, sustainable home goods that bring warmth and comfort into your daily life."
primaryButton={{
text: "Shop Collection",
href: "#shop",
}}
secondaryButton={{
text: "Our Story",
href: "#about",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/woman-working-with-dried-flowers_52683-91337.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/closeup-details-autumn-home-decor-blurred-background_169016-23622.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/modern-organizer-cutlery-drawer-premium-kitchen_169016-68988.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/still-life-fruits-tablecloth_23-2151318370.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/many-wooden-tags-ribbons-shelf_23-2147874985.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,40 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "highlights" section.
import React from 'react';
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HighlightsSection(): React.JSX.Element {
return (
<div id="highlights" data-section="highlights">
<SectionErrorBoundary name="highlights">
<FeaturesMediaCarousel
tag="Why Blissful?"
title="Designed for Living"
description="Our products are designed to last, blending modern functionality with timeless aesthetic values."
items={[
{
title: "Natural Materials",
description: "Only the highest quality wood, clay, and fiber.",
buttonIcon: "Leaf",
imageSrc: "http://img.b2bpic.net/free-photo/couple-making-vase-with-clay_1157-30694.jpg",
},
{
title: "Sustainable Ethics",
description: "Carbon-neutral shipping and ethical sourcing.",
buttonIcon: "Recycle",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-christmas-gift-boxes_23-2149205047.jpg",
},
{
title: "Timeless Design",
description: "Pieces that evolve with your unique style.",
buttonIcon: "Heart",
imageSrc: "http://img.b2bpic.net/free-photo/cozy-home-still-life-with-inscription-home_169016-1530.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,74 @@
import { useState } from 'react';
import Button from '@/components/ui/Button';
import Input from '@/components/ui/Input';
import Tag from '@/components/ui/Tag';
import TextAnimation from '@/components/ui/TextAnimation';
import ScrollReveal from '@/components/ui/ScrollReveal';
import ImageOrVideo from '@/components/ui/ImageOrVideo';
export default function NewsletterSection() {
const [email, setEmail] = useState('');
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
if (email) {
console.log('Subscribed:', email);
setEmail('');
}
};
return (
<section data-webild-section="newsletter" id="newsletter" className="relative w-full py-24 bg-background">
<div className="w-content-width mx-auto">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
<ScrollReveal variant="slide-up" className="order-2 lg:order-1">
<div className="relative aspect-[4/5] w-full rounded-lg overflow-hidden">
<ImageOrVideo
imageSrc="https://images.unsplash.com/photo-1556228578-0d85b1a4d571?auto=format&fit=crop&q=80&w=800"
className="object-cover w-full h-full"
/>
</div>
</ScrollReveal>
<div className="flex flex-col justify-center order-1 lg:order-2">
<ScrollReveal variant="slide-up">
<Tag text="Newsletter" className="mb-6" />
<TextAnimation
text="Stay in the Loop"
variant="slide-up"
tag="h2"
gradientText={false}
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
/>
<p className="text-lg text-accent mb-8">
Join our community to receive updates on new arrivals, exclusive offers, and styling tips directly to your inbox.
</p>
<form onSubmit={handleSubmit} className="flex flex-col sm:flex-row gap-4">
<Input
type="email"
placeholder="Enter your email address"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
className="flex-1"
/>
<Button
text="Subscribe"
variant="primary"
onClick={() => {
if (email) {
console.log('Subscribed:', email);
setEmail('');
}
}}
className="w-full sm:w-auto"
/>
</form>
</ScrollReveal>
</div>
</div>
</div>
</section>
);
}

View File

@@ -0,0 +1,29 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "partners" section.
import React from 'react';
import SocialProofMarquee from '@/components/sections/social-proof/SocialProofMarquee';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function PartnersSection(): React.JSX.Element {
return (
<div id="partners" data-section="partners">
<SectionErrorBoundary name="partners">
<SocialProofMarquee
tag="Recognized By"
title="Featured In"
description="We are honored to have been shared by these design leaders."
names={[
"Design Monthly",
"Artisan Home",
"Organic Living",
"Urban Dweller",
"Craft & Style",
"Home Aesthetic",
"Modern Habitat",
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,64 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "shop" section.
import React from 'react';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ShopSection(): React.JSX.Element {
return (
<div id="shop" data-section="shop">
<SectionErrorBoundary name="shop">
<FeaturesRevealCardsBento
tag="Our Bestsellers"
title="Curated Essentials"
description="Explore our favorite items that define the Blissful aesthetic."
items={[
{
title: "Ceramic Vase",
description: "Hand-thrown pottery, perfect for minimal bouquets.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-artist-clay-pot_23-2148986303.jpg",
},
{
title: "Scented Candle",
description: "Notes of cedarwood and amber, hand-poured.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-table-book-candle-tea-space-dark-sofa-autumn-coziness-concept_169016-9787.jpg",
},
{
title: "Linen Throw",
description: "Soft, breathable linen for cozy afternoons.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/composition-with-candles-knitted-elements-other-decor-details-bedroom_169016-6768.jpg",
},
{
title: "Wooden Utensils",
description: "Sustainable oak cooking essentials.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/elegant-minimalistic-bowls_23-2149483981.jpg",
},
{
title: "Ceramic Mug",
description: "Speckled stoneware for your morning ritual.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/girl-holding-cup-tea-hands_169016-3431.jpg",
},
{
title: "Cushion Cover",
description: "Embroidered linen in earthy neutral tones.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/autumn-reading-book_169016-1462.jpg",
},
{
title: "Minimalist Print",
description: "Framed abstract art for your gallery wall.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/modern-art-studio-composition_23-2147868506.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,57 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "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="Love from Customers"
title="What They Say"
description="Read stories from those who have found their home essentials with us."
testimonials={[
{
name: "Elena R.",
role: "Interior Stylist",
quote: "The quality of the ceramics I purchased is absolutely breathtaking.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/smiling-shopaholic-woman-with-colorful-paper-bags_23-2147823604.jpg",
},
{
name: "Marcus J.",
role: "Architect",
quote: "Finally, a shop that prioritizes both aesthetics and sustainability.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-creative-man-holding-tablet-papers-carpentry-workshop_342744-800.jpg",
},
{
name: "Sarah P.",
role: "Content Creator",
quote: "My living room feels so much more grounded since adding these pieces.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/smiling-worker-desk_1170-83.jpg",
},
{
name: "David W.",
role: "Entrepreneur",
quote: "The shipping was fast, and the packaging was completely plastic-free.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/couple-interacting-color-swatch_1170-832.jpg",
},
{
name: "Chloe M.",
role: "Home Chef",
quote: "I love the rustic charm of these wooden kitchen accessories.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/female-friends-looking-up-product-shop_23-2148721120.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}