Merge version_3_1781705989896 into main
Merge version_3_1781705989896 into main
This commit was merged in pull request #4.
This commit is contained in:
@@ -1,140 +1,35 @@
|
||||
import AboutText from '@/components/sections/about/AboutText';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
|
||||
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import TestimonialMarqueeCards from '@/components/sections/testimonial/TestimonialMarqueeCards';
|
||||
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 MenuSection from './HomePage/sections/Menu';
|
||||
import MetricsSection from './HomePage/sections/Metrics';
|
||||
import TestimonialsSection from './HomePage/sections/Testimonials';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import LocationSection from './HomePage/sections/Location';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroSplitMediaGrid
|
||||
tag="Traditional Portuguese Taste"
|
||||
title="Bifana: The Ultimate Pork Sandwich"
|
||||
description="Experience authentic flavors crafted with passion. Join us for a culinary journey in the heart of the city."
|
||||
primaryButton={{
|
||||
text: "Reserve Now", href: "#contact"}}
|
||||
secondaryButton={{
|
||||
text: "View Menu", href: "#menu"}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-club-sandwich-potato-cheeps-plate-with-sauce_176474-2565.jpg"},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/bagel-bread-with-smoked-salmon-meat-vegetable_74190-7666.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutText
|
||||
title="Our story begins with the perfect pork recipe, handed down through generations and perfected for your enjoyment."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesImageBento
|
||||
tag="Menu Highlights"
|
||||
title="Authentic Digital Menu"
|
||||
description="Browse our curated selection of traditional bifanas and artisanal sides."
|
||||
items={[
|
||||
{
|
||||
title: "Original Bifana", description: "The classic, marinated pork steak sandwich.", imageSrc: "http://img.b2bpic.net/free-photo/azerbaijani-dish-three-sisters-dolma-stuffed-vegetables-with-minced-meat_140725-4848.jpg"},
|
||||
{
|
||||
title: "Garlic Fries", description: "Hand-cut fries tossed with fresh garlic.", imageSrc: "http://img.b2bpic.net/free-photo/arrangement-potato-fries-wooden-table_23-2148501555.jpg"},
|
||||
{
|
||||
title: "Craft Beer", description: "Local brews to pair with your meal.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-tattooed-bearded-hipster-male-manufacturer-presenting-beer-microbrewery_613910-8073.jpg"},
|
||||
{
|
||||
title: "Spicy Bifana", description: "With homemade chili oil blend.", imageSrc: "http://img.b2bpic.net/free-photo/traditional-cuban-sandwich-wooden-table_123827-35229.jpg"},
|
||||
{
|
||||
title: "Sweet Tart", description: "Traditional custard dessert tart.", imageSrc: "http://img.b2bpic.net/free-photo/front-view-delicious-little-cake-with-red-icing-inside-plate-dark-background-tea-sweet-biscuit-pie-cookies-sugar_140725-115642.jpg"},
|
||||
{
|
||||
title: "House Salad", description: "Fresh seasonal greens and vinaigrette.", imageSrc: "http://img.b2bpic.net/free-photo/high-angle-healthy-salad-white-bowl_23-2148747473.jpg"},
|
||||
{
|
||||
title: "Bifana Combo", description: "Sandwich, fries, and beverage.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-spicy-mini-tacos-served-with-chili-paste_140725-4995.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MenuSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="By the numbers"
|
||||
title="Crafted with quality"
|
||||
description="Quality and tradition define our culinary legacy."
|
||||
metrics={[
|
||||
{
|
||||
icon: "Award", title: "Years of Tradition", value: "25+"},
|
||||
{
|
||||
icon: "Users", title: "Happy Diners", value: "100k+"},
|
||||
{
|
||||
icon: "Utensils", title: "Bifanas Served", value: "500k+"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeCards
|
||||
tag="Reviews"
|
||||
title="What our guests say"
|
||||
description="Join the community of food lovers who enjoy our traditional bifanas."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Maria", role: "Local Foodie", quote: "Best bifana I've ever had, truly authentic.", imageSrc: "http://img.b2bpic.net/free-photo/woman-using-digital-tablet-cafe_1170-736.jpg"},
|
||||
{
|
||||
name: "Carlos", role: "Regular Guest", quote: "The atmosphere and flavors are unbeatable.", imageSrc: "http://img.b2bpic.net/free-photo/food-blogger-cute-fitness-cook-recording-video-social-media-making-salad_140725-166656.jpg"},
|
||||
{
|
||||
name: "Sofia", role: "Visitor", quote: "A must-visit spot in the city center.", imageSrc: "http://img.b2bpic.net/free-photo/friends-eating-conversating-restaurant_23-2148006709.jpg"},
|
||||
{
|
||||
name: "Joao", role: "Food Critic", quote: "Excellence in every bite.", imageSrc: "http://img.b2bpic.net/free-photo/pleased-female-entrepreneur-trendy-sunglasses-denim-jacke_197531-31011.jpg"},
|
||||
{
|
||||
name: "Ana", role: "Happy Diner", quote: "Perfect service and delicious food.", imageSrc: "http://img.b2bpic.net/free-photo/people-cheering-with-wine-glasses-luxurious-restaurant_23-2150517422.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<TestimonialsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSplitMedia
|
||||
tag="Help"
|
||||
title="Common Questions"
|
||||
description="Need assistance? We're here to help you have the best experience."
|
||||
items={[
|
||||
{
|
||||
question: "Do you accept reservations?", answer: "Yes, we highly recommend booking ahead for groups."},
|
||||
{
|
||||
question: "Are vegetarian options available?", answer: "We offer several salad and side options."},
|
||||
{
|
||||
question: "Is the menu online?", answer: "Yes, you can browse our full digital menu above."},
|
||||
]}
|
||||
imageSrc="https://images.pexels.com/photos/9001223/pexels-photo-9001223.jpeg?auto=compress&cs=tinysrgb&h=650&w=940&id=9001223"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
<LocationSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Booking"
|
||||
text="Reserve your table today and taste the best Bifana in town."
|
||||
primaryButton={{
|
||||
text: "Book via Phone", href: "tel:+123456789"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "mailto:info@bifana.com"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
18
src/pages/HomePage/sections/About.tsx
Normal file
18
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,18 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "about" section.
|
||||
|
||||
import React from 'react';
|
||||
import AboutText from '@/components/sections/about/AboutText';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutText
|
||||
title="Our story begins with the perfect pork recipe, handed down through generations and perfected for your enjoyment."
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
23
src/pages/HomePage/sections/Contact.tsx
Normal file
23
src/pages/HomePage/sections/Contact.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 "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="Booking"
|
||||
text="Reserve your table today and taste the best Bifana in town."
|
||||
primaryButton={{
|
||||
text: "Book via Phone", href: "tel:+123456789"}}
|
||||
secondaryButton={{
|
||||
text: "Contact Us", href: "mailto:info@bifana.com"}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
29
src/pages/HomePage/sections/Faq.tsx
Normal file
29
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
// 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 FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSplitMedia
|
||||
tag="Help"
|
||||
title="Common Questions"
|
||||
description="Need assistance? We're here to help you have the best experience."
|
||||
items={[
|
||||
{
|
||||
question: "Do you accept reservations?", answer: "Yes, we highly recommend booking ahead for groups."},
|
||||
{
|
||||
question: "Are vegetarian options available?", answer: "We offer several salad and side options."},
|
||||
{
|
||||
question: "Is the menu online?", answer: "Yes, you can browse our full digital menu above."},
|
||||
]}
|
||||
imageSrc="https://images.pexels.com/photos/9001223/pexels-photo-9001223.jpeg?auto=compress&cs=tinysrgb&h=650&w=940&id=9001223"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
19
src/pages/HomePage/sections/Hero.tsx
Normal file
19
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
// Created by add_section_from_catalog (HeroBillboardCarousel).
|
||||
|
||||
import React from 'react';
|
||||
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div data-webild-section="hero" id="hero">
|
||||
<HeroBillboardCarousel
|
||||
title="Bifana: The Ultimate Pork Sandwich"
|
||||
tag="Traditional Portuguese Taste"
|
||||
items={[{"imageSrc":"http://img.b2bpic.net/free-photo/close-up-club-sandwich-potato-cheeps-plate-with-sauce_176474-2565.jpg"},{"imageSrc":"http://img.b2bpic.net/free-photo/bagel-bread-with-smoked-salmon-meat-vegetable_74190-7666.jpg"}]}
|
||||
primaryButton={{"text":"Reserve Now","href":"#contact"}}
|
||||
description="Experience authentic flavors crafted with passion. Join us for a culinary journey in the heart of the city."
|
||||
secondaryButton={{"text":"View Menu","href":"#menu"}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
35
src/pages/HomePage/sections/Location.tsx
Normal file
35
src/pages/HomePage/sections/Location.tsx
Normal file
@@ -0,0 +1,35 @@
|
||||
import React from 'react';
|
||||
import { motion } from "motion/react";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
import { motion } from "motion/react"
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal"
|
||||
|
||||
export default function LocationSection() {
|
||||
return (
|
||||
<div data-webild-section="location" id="location">
|
||||
<section className="relative w-full py-24 bg-background">
|
||||
<div className="max-w-content-width mx-auto px-6">
|
||||
<ScrollReveal variant="fade">
|
||||
<div className="flex flex-col items-center text-center mb-12">
|
||||
<h2 className="text-4xl font-bold text-foreground mb-4">Find Us</h2>
|
||||
<p className="text-lg text-muted-foreground max-w-2xl">
|
||||
Visit us in the heart of the city for an unforgettable culinary experience.
|
||||
</p>
|
||||
</div>
|
||||
<div className="w-full h-[400px] rounded-xl overflow-hidden border border-border">
|
||||
<iframe
|
||||
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3113.136456015975!2d-9.1393366!3d38.7123919!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0xd19347a6433e103%3A0x8b1e4a0737a400c3!2sLisbon%2C%20Portugal!5e0!3m2!1sen!2sus!4v1650000000000!5m2!1sen!2sus"
|
||||
width="100%"
|
||||
height="100%"
|
||||
style={{ border: 0 }}
|
||||
allowFullScreen={true}
|
||||
loading="lazy"
|
||||
referrerPolicy="no-referrer-when-downgrade"
|
||||
></iframe>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
36
src/pages/HomePage/sections/Menu.tsx
Normal file
36
src/pages/HomePage/sections/Menu.tsx
Normal file
@@ -0,0 +1,36 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "menu" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MenuSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="menu" data-section="menu">
|
||||
<SectionErrorBoundary name="menu">
|
||||
<FeaturesImageBento
|
||||
tag="Menu Highlights"
|
||||
title="Authentic Digital Menu"
|
||||
description="Browse our curated selection of traditional bifanas and artisanal sides."
|
||||
items={[
|
||||
{
|
||||
title: "Original Bifana", description: "The classic, marinated pork steak sandwich.", imageSrc: "http://img.b2bpic.net/free-photo/azerbaijani-dish-three-sisters-dolma-stuffed-vegetables-with-minced-meat_140725-4848.jpg"},
|
||||
{
|
||||
title: "Garlic Fries", description: "Hand-cut fries tossed with fresh garlic.", imageSrc: "http://img.b2bpic.net/free-photo/arrangement-potato-fries-wooden-table_23-2148501555.jpg"},
|
||||
{
|
||||
title: "Craft Beer", description: "Local brews to pair with your meal.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-tattooed-bearded-hipster-male-manufacturer-presenting-beer-microbrewery_613910-8073.jpg"},
|
||||
{
|
||||
title: "Spicy Bifana", description: "With homemade chili oil blend.", imageSrc: "http://img.b2bpic.net/free-photo/traditional-cuban-sandwich-wooden-table_123827-35229.jpg"},
|
||||
{
|
||||
title: "Sweet Tart", description: "Traditional custard dessert tart.", imageSrc: "http://img.b2bpic.net/free-photo/front-view-delicious-little-cake-with-red-icing-inside-plate-dark-background-tea-sweet-biscuit-pie-cookies-sugar_140725-115642.jpg"},
|
||||
{
|
||||
title: "House Salad", description: "Fresh seasonal greens and vinaigrette.", imageSrc: "http://img.b2bpic.net/free-photo/high-angle-healthy-salad-white-bowl_23-2148747473.jpg"},
|
||||
{
|
||||
title: "Bifana Combo", description: "Sandwich, fries, and beverage.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-spicy-mini-tacos-served-with-chili-paste_140725-4995.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
28
src/pages/HomePage/sections/Metrics.tsx
Normal file
28
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
// 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 MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsIconCards
|
||||
tag="By the numbers"
|
||||
title="Crafted with quality"
|
||||
description="Quality and tradition define our culinary legacy."
|
||||
metrics={[
|
||||
{
|
||||
icon: "Award", title: "Years of Tradition", value: "25+"},
|
||||
{
|
||||
icon: "Users", title: "Happy Diners", value: "100k+"},
|
||||
{
|
||||
icon: "Utensils", title: "Bifanas Served", value: "500k+"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
32
src/pages/HomePage/sections/Testimonials.tsx
Normal file
32
src/pages/HomePage/sections/Testimonials.tsx
Normal file
@@ -0,0 +1,32 @@
|
||||
// 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 TestimonialMarqueeCards from '@/components/sections/testimonial/TestimonialMarqueeCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function TestimonialsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<SectionErrorBoundary name="testimonials">
|
||||
<TestimonialMarqueeCards
|
||||
tag="Reviews"
|
||||
title="What our guests say"
|
||||
description="Join the community of food lovers who enjoy our traditional bifanas."
|
||||
testimonials={[
|
||||
{
|
||||
name: "Maria", role: "Local Foodie", quote: "Best bifana I've ever had, truly authentic.", imageSrc: "http://img.b2bpic.net/free-photo/woman-using-digital-tablet-cafe_1170-736.jpg"},
|
||||
{
|
||||
name: "Carlos", role: "Regular Guest", quote: "The atmosphere and flavors are unbeatable.", imageSrc: "http://img.b2bpic.net/free-photo/food-blogger-cute-fitness-cook-recording-video-social-media-making-salad_140725-166656.jpg"},
|
||||
{
|
||||
name: "Sofia", role: "Visitor", quote: "A must-visit spot in the city center.", imageSrc: "http://img.b2bpic.net/free-photo/friends-eating-conversating-restaurant_23-2148006709.jpg"},
|
||||
{
|
||||
name: "Joao", role: "Food Critic", quote: "Excellence in every bite.", imageSrc: "http://img.b2bpic.net/free-photo/pleased-female-entrepreneur-trendy-sunglasses-denim-jacke_197531-31011.jpg"},
|
||||
{
|
||||
name: "Ana", role: "Happy Diner", quote: "Perfect service and delicious food.", imageSrc: "http://img.b2bpic.net/free-photo/people-cheering-with-wine-glasses-luxurious-restaurant_23-2150517422.jpg"},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user