structure, images, new updates completed
284
app/about/page.js
Normal file
@ -0,0 +1,284 @@
|
||||
'use client'
|
||||
import Link from "next/link"
|
||||
import Layout from "@/components/layout/Layout"
|
||||
import { Autoplay, Navigation, Pagination } from "swiper/modules"
|
||||
import { Swiper, SwiperSlide } from "swiper/react"
|
||||
import GallerySlider1 from '@/components/slider/GallerySlider1'
|
||||
|
||||
const swiperOptions = {
|
||||
modules: [Autoplay, Pagination, Navigation],
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 30,
|
||||
loop: true,
|
||||
|
||||
autoplay: {
|
||||
delay: 3000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
|
||||
navigation: {
|
||||
nextEl: '.srn',
|
||||
prevEl: '.srp',
|
||||
},
|
||||
|
||||
pagination: {
|
||||
el: '.swiper-pagination',
|
||||
clickable: true,
|
||||
},
|
||||
};
|
||||
|
||||
export default function About() {
|
||||
|
||||
return (
|
||||
<>
|
||||
<Layout headerStyle={2} footerStyle={2} breadcrumbTitle="About Us" bgImage={"/assets/images/about/about-banner.webp"}>
|
||||
{/* History Section */}
|
||||
<section className="history-section-two">
|
||||
<div className="auto-container">
|
||||
<div className="row clearfix align-items-center">
|
||||
|
||||
{/* Image Column */}
|
||||
<div className="image-column col-lg-7 col-md-12 col-sm-12">
|
||||
<div className="inner-column">
|
||||
<div className="image">
|
||||
<img src="/assets/images/about/about-us.webp" alt="" />
|
||||
</div>
|
||||
<div className="image-two mb-4">
|
||||
<img src="/assets/images/about/about-us-element.webp" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Content Column */}
|
||||
<div className="content-column col-lg-5 col-md-12 col-sm-12">
|
||||
<div className="inner-column">
|
||||
{/* Sec Title */}
|
||||
<div className="sec-title about-sec">
|
||||
<div className="title">About Us</div>
|
||||
<h2>Street Fresh. <span className="theme_color"> Full of Flavour.</span></h2>
|
||||
|
||||
<div className="text">At Sixty5 Street, we believe great food starts with freshness and ends with bold, memorable flavour. Our menu is inspired by the vibrant energy of street-style eats, where every dish and every blend is crafted to feel lively, colourful, and satisfying. Whether it’s one of our refreshing fruit mixes or a flavour-packed bowl, everything we serve is designed to bring you real taste made from real ingredients.</div>
|
||||
|
||||
</div>
|
||||
<ul className="list-style-two">
|
||||
<li>Fresh fruits and ingredients in every blend</li>
|
||||
<li>Street-inspired flavours prepared with care</li>
|
||||
<li>A vibrant experience that keeps you feeling energized</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{/* End History Section */}
|
||||
|
||||
{/* Menu Page Section */}
|
||||
<section className="menu-page-section">
|
||||
<div className="auto-container">
|
||||
<div className="row clearfix">
|
||||
|
||||
{/* Menu Block Two */}
|
||||
<div className="menu-block-two col-lg-4 col-md-6 col-sm-12">
|
||||
<div className="inner-box">
|
||||
<div className="icon">
|
||||
<img src="/assets/images/about/card-1.webp" alt="" />
|
||||
</div>
|
||||
<h6>Bold Flavours</h6>
|
||||
<div className="text">Every item is created to deliver bright, bold flavour. From our signature blends to our colourful bowls, we make sure each serving tastes fresh, lively, and instantly enjoyable.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Menu Block Two */}
|
||||
<div className="menu-block-two col-lg-4 col-md-6 col-sm-12">
|
||||
<div className="inner-box">
|
||||
<div className="icon">
|
||||
<img src="/assets/images/about/card-2.webp" alt="" />
|
||||
</div>
|
||||
<h6>Real Fruits</h6>
|
||||
<div className="text">We use high-quality fruits chosen for their natural sweetness and freshness. This ensures every mix, topping, and serving brings out authentic, clean flavour.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Menu Block Two */}
|
||||
<div className="menu-block-two col-lg-4 col-md-6 col-sm-12">
|
||||
<div className="inner-box">
|
||||
<div className="icon">
|
||||
<img src="/assets/images/about/card-3.webp" alt="" />
|
||||
</div>
|
||||
<h6>Healthy Blends</h6>
|
||||
<div className="text">Our blends are crafted to be both nourishing and delicious. Light, refreshing, and made fresh to order — perfect for energizing your day without compromise.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{/* End Restaurant Section */}
|
||||
|
||||
<section className="fluid-section-one">
|
||||
<div className="outer-container clearfix">
|
||||
|
||||
<div className="content-column">
|
||||
<div className="icon-box" style={{ backgroundImage: 'url(/assets/images/about/fresh-flavour-left-bottom-element.webp)' }} ></div>
|
||||
<div className="inner-column">
|
||||
|
||||
<div className="sec-title">
|
||||
<h2>Fresh Flavour <br /> Fusion</h2>
|
||||
<div className="separate"></div>
|
||||
<div className="text">At Sixty5 Street, we are always creating something new, fresh, and full of flavour. Our upcoming beverage range is crafted with real fruits, clean ingredients, and creative blends that bring a refreshing twist to your day. These new additions are designed to energize, hydrate, and satisfy—all while staying true to our vibrant, street-style taste.</div>
|
||||
</div>
|
||||
|
||||
<div className="button-box">
|
||||
<Link href="/menu" className="theme-btn btn-style-two clearfix"><span className="icon"></span>View Menu</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="image-column" style={{ backgroundImage: 'url(/assets/images/about/fresh-flavour-right.webp)' }} >
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Testimonial Section Two */}
|
||||
<section className="testimonial-section-two">
|
||||
<div
|
||||
className="icon-layer-two"
|
||||
style={{ backgroundImage: "url(/assets/images/about/review-right-bottom-element.webp)" }}
|
||||
></div>
|
||||
|
||||
<div className="auto-container">
|
||||
{/* Section Title */}
|
||||
<div className="sec-title centered">
|
||||
<div className="title">Google Reviews</div>
|
||||
<h2>Hear from our happy customers</h2>
|
||||
<div className="separate"></div>
|
||||
</div>
|
||||
|
||||
<div className="inner-container">
|
||||
<Swiper {...swiperOptions} className="single-item-carousel">
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“Absolutely love this place! Every blend tastes fresh and natural. The flavors pop, and you can really tell they use quality ingredients. Sixty5 Street never disappoints.”
|
||||
</div>
|
||||
<div className="designation">— Emily R.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“The perfect spot when you need something refreshing. Their fruit mixes are vibrant, clean, and full of energy. I always leave feeling great.”
|
||||
</div>
|
||||
<div className="designation">— Jason M.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“Sixty5 Street has mastered the art of fresh flavor. The bowls are colorful, the drinks are delicious, and everything feels thoughtfully prepared. A must-try!”
|
||||
</div>
|
||||
<div className="designation">— Sofia L.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“Consistently amazing! The blends are smooth, balanced, and not overly sweet. You can taste the real fruit in every sip. Highly recommend for healthy cravings.”
|
||||
</div>
|
||||
<div className="designation">— David P.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“Super fresh, super tasty. The street-style vibe makes the whole experience fun and lively. Sixty5 Street has quickly become one of my favorite places to grab a flavorful drink.”
|
||||
</div>
|
||||
<div className="designation">— Ava T.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
</Swiper>
|
||||
|
||||
{/* Google Review Button */}
|
||||
<div className="btns-box text-center mt-4">
|
||||
<Link
|
||||
href="https://www.google.com/search?sca_esv=0fe16c1f02c217b7&sxsrf=AE3TifOLptPQLUmmtN31E_3elXLW6TFOQw:1762618049873&si=AMgyJEtREmoPL4P1I5IDCfuA8gybfVI2d5Uj7QMwYCZHKDZ-E-aY0flGiK9jtBbvWKno0yJxYW9CK-ZYgm0G70i4ON2SMlNBNsid-fMvQPqNzI7FcY1u8NR67M0xsy1G8HMAZhtgOP2m&q=Sixty5+Street+Reviews&sa=X&ved=2ahUKEwjY5_L19-KQAxW89DgGHdw0AesQ0bkNegQILRAE&biw=1366&bih=633&dpr=1"
|
||||
target="_blank"
|
||||
className="theme-btn btn-style-one clearfix"
|
||||
>
|
||||
<span className="icon"></span> Review us on Google
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{/* End Testimonial Section Two */}
|
||||
|
||||
{/* Gallery Section */}
|
||||
<section className="gallery-section">
|
||||
<div className="outer-container">
|
||||
<GallerySlider1 />
|
||||
</div>
|
||||
</section>
|
||||
{/* End Gallery Section */}
|
||||
|
||||
</Layout>
|
||||
</>
|
||||
)
|
||||
}
|
||||
51
app/blog/[slug]/page.js
Normal file
@ -0,0 +1,51 @@
|
||||
import Layout from "@/components/layout/Layout";
|
||||
import Link from "next/link";
|
||||
import Blogs from "@/utils/constant.utils";
|
||||
import { notFound } from "next/navigation";
|
||||
|
||||
export async function generateStaticParams() {
|
||||
return Blogs.map((item) => ({
|
||||
slug: item.slug,
|
||||
}));
|
||||
}
|
||||
|
||||
export async function generateMetadata({ params }) {
|
||||
const blog = Blogs.find((item) => item.slug === params.slug);
|
||||
|
||||
}
|
||||
|
||||
export default function BlogDetails({ params }) {
|
||||
const blog = Blogs.find((item) => item.slug === params.slug);
|
||||
|
||||
if (!blog) return notFound();
|
||||
|
||||
return (
|
||||
<Layout
|
||||
headerStyle={2}
|
||||
footerStyle={2}
|
||||
breadcrumbTitle={blog.title}
|
||||
bgImage={blog.banner}
|
||||
>
|
||||
<div className="sidebar-page-container">
|
||||
<div className="auto-container">
|
||||
<div className="row clearfix">
|
||||
{/* Content Side */}
|
||||
<div className="content-side col-lg-12 col-md-12 col-sm-12">
|
||||
<div className="blog-detail">
|
||||
<div className="inner-box">
|
||||
<div className="image">
|
||||
<img src={blog.detailImage} alt={blog.title} />
|
||||
</div>
|
||||
|
||||
<div className="lower-content">
|
||||
<div dangerouslySetInnerHTML={{ __html: blog.content }} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
71
app/blog/page.js
Normal file
@ -0,0 +1,71 @@
|
||||
'use client'
|
||||
import Link from "next/link";
|
||||
import Layout from "@/components/layout/Layout";
|
||||
import Blogs from "@/utils/constant.utils";
|
||||
|
||||
const truncateWords = (text, limit) => {
|
||||
const words = text.split(" ");
|
||||
return words.length > limit ? words.slice(0, limit).join(" ") + " ..." : text;
|
||||
};
|
||||
|
||||
const stripHtml = (html) => {
|
||||
if (!html) return "";
|
||||
return html.replace(/<[^>]*>/g, "");
|
||||
};
|
||||
|
||||
export default function Blog() {
|
||||
return (
|
||||
<Layout
|
||||
headerStyle={2}
|
||||
footerStyle={2}
|
||||
breadcrumbTitle="Blog"
|
||||
bgImage={"/assets/images/inner-banner/blog-banner.webp"}
|
||||
>
|
||||
<div className="sidebar-page-container">
|
||||
<div className="auto-container">
|
||||
<div className="row clearfix">
|
||||
{Blogs.map((blog) => (
|
||||
<div
|
||||
key={blog.id}
|
||||
className="col-lg-4 col-md-6 col-sm-12 mb-4"
|
||||
>
|
||||
<div className="blog-card rounded shadow-sm overflow-hidden">
|
||||
{/* Blog Image */}
|
||||
<div className="blog-image">
|
||||
<img
|
||||
src={blog.imageDetail}
|
||||
alt={blog.title}
|
||||
className="img-fluid w-100"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Blog Title */}
|
||||
<div className="blog-content p-3">
|
||||
<h3 className="mb-2 text-lg font-semibold blog-title-hover">
|
||||
<Link href={`/blog/${blog.slug}`} className="blog-title-link">
|
||||
{stripHtml(blog.title)}
|
||||
</Link>
|
||||
</h3>
|
||||
|
||||
{/* Blog Excerpt */}
|
||||
<p className="text-gray-700 mb-3">
|
||||
{truncateWords(stripHtml(blog.para))}
|
||||
</p>
|
||||
|
||||
{/* Read More Button */}
|
||||
<Link
|
||||
href={`/blog/${blog.slug}`}
|
||||
className="font-medium blog-title-link"
|
||||
>
|
||||
Read More
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
207
app/contact/page.js
Normal file
@ -0,0 +1,207 @@
|
||||
'use client'
|
||||
import { useState, useEffect } from "react";
|
||||
import Layout from "@/components/layout/Layout";
|
||||
import ReCAPTCHA from "react-google-recaptcha";
|
||||
import axios from "axios";
|
||||
|
||||
export default function Contact() {
|
||||
const [formData, setFormData] = useState({
|
||||
name: "",
|
||||
email: "",
|
||||
phone: "",
|
||||
message: "",
|
||||
});
|
||||
|
||||
const [alert, setAlert] = useState({
|
||||
show: false,
|
||||
type: "",
|
||||
message: "",
|
||||
});
|
||||
|
||||
const [captchaToken, setCaptchaToken] = useState(null);
|
||||
|
||||
const handleCaptchaChange = (token) => {
|
||||
setCaptchaToken(token);
|
||||
};
|
||||
|
||||
const handleChange = (e) => {
|
||||
const { name, value } = e.target;
|
||||
setFormData(prev => ({ ...prev, [name]: value }));
|
||||
};
|
||||
|
||||
const handleSubmit = async (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
if (!formData.name || !formData.email || !formData.phone || !formData.message) {
|
||||
setAlert({ show: true, type: "danger", message: "Please fill in all fields." });
|
||||
return;
|
||||
}
|
||||
|
||||
if (!captchaToken) {
|
||||
setAlert({ show: true, type: "danger", message: "Please verify the CAPTCHA." });
|
||||
return;
|
||||
}
|
||||
|
||||
const emailData = {
|
||||
...formData,
|
||||
recaptchaToken: captchaToken,
|
||||
to: "info@metatroncubesolutions.com",
|
||||
senderName: "Website Contact Form",
|
||||
message: `
|
||||
<b>Name:</b> ${formData.name}<br/>
|
||||
<b>Email:</b> ${formData.email}<br/>
|
||||
<b>Phone:</b> ${formData.phone}<br/><br/>
|
||||
<b>Message:</b><br/>${formData.message}
|
||||
`,
|
||||
};
|
||||
|
||||
try {
|
||||
await axios.post("https://mailserver.metatronnest.com/send", emailData, {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
});
|
||||
|
||||
setAlert({ show: true, type: "success", message: "Your message has been sent successfully!" });
|
||||
setFormData({ name: "", email: "", phone: "", message: "" });
|
||||
setCaptchaToken(null);
|
||||
} catch {
|
||||
setAlert({ show: true, type: "danger", message: "Failed to send your message. Try again later." });
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (alert.show) {
|
||||
const timer = setTimeout(() => setAlert({ show: false, type: "", message: "" }), 5000);
|
||||
return () => clearTimeout(timer);
|
||||
}
|
||||
}, [alert.show]);
|
||||
|
||||
return (
|
||||
<Layout
|
||||
headerStyle={2}
|
||||
footerStyle={2}
|
||||
breadcrumbTitle="Contact Us"
|
||||
bgImage="/assets/images/inner-banner/contact-us-banner.webp"
|
||||
>
|
||||
{/* Contact Section */}
|
||||
<section className="contact-section" id="contact">
|
||||
<div className="auto-container">
|
||||
<div className="row clearfix">
|
||||
|
||||
{/* Left Column - Info */}
|
||||
<div className="title-column col-lg-5 col-md-12 col-sm-12">
|
||||
<div className="inner-column">
|
||||
<div className="sec-title">
|
||||
<div className="title">Reach us</div>
|
||||
<h2>Contact</h2>
|
||||
<div className="separate"></div>
|
||||
<div className="text">
|
||||
Whether you're grabbing lunch, chilling with friends, or fueling a late-night craving, we've got something hot, hearty, and delicious waiting for you.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul className="info-list">
|
||||
<li>
|
||||
<span className="icon flaticon-telephone"></span>
|
||||
<strong>Phone</strong>
|
||||
<a href="tel:+289-498-6565">+ 289-498-6565</a>
|
||||
</li>
|
||||
<li>
|
||||
<span className="icon flaticon-pin"></span>
|
||||
<strong>Address</strong>
|
||||
<a href="#">Unit 75, 100 Maritime Ontario Blvd, Brampton, ON L6S 0E7</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Right Column - Form */}
|
||||
<div className="form-column col-lg-7 col-md-12 col-sm-12">
|
||||
<div className="inner-column">
|
||||
<div className="contact-form">
|
||||
{alert.show && (
|
||||
<div className={`alert ${alert.type === "success" ? "text-green-600" : "text-red-600"}`}>
|
||||
{alert.message}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<form onSubmit={handleSubmit}>
|
||||
<div className="row clearfix">
|
||||
|
||||
<div className="col-lg-6 col-md-12 col-sm-12 form-group">
|
||||
<input
|
||||
type="text"
|
||||
name="name"
|
||||
placeholder="Your Name"
|
||||
value={formData.name}
|
||||
onChange={handleChange}
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="col-lg-6 col-md-12 col-sm-12 form-group">
|
||||
<input
|
||||
type="text"
|
||||
name="phone"
|
||||
placeholder="Your Phone Number"
|
||||
value={formData.phone}
|
||||
onChange={handleChange}
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="col-lg-12 col-md-12 col-sm-12 form-group">
|
||||
<input
|
||||
type="email"
|
||||
name="email"
|
||||
placeholder="Your Email"
|
||||
value={formData.email}
|
||||
onChange={handleChange}
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="col-lg-12 col-md-12 col-sm-12 form-group">
|
||||
<textarea
|
||||
name="message"
|
||||
placeholder="Your Message"
|
||||
value={formData.message}
|
||||
onChange={handleChange}
|
||||
required
|
||||
></textarea>
|
||||
</div>
|
||||
|
||||
<div className="col-lg-12 col-md-12 col-sm-12 form-group">
|
||||
<ReCAPTCHA
|
||||
sitekey="6LeJCgQsAAAAAFJHBxuxz4ZQ4bhG4VCVuXQaQxnx"
|
||||
onChange={handleCaptchaChange}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="col-lg-12 col-md-12 col-sm-12 form-group">
|
||||
<button type="submit" className="theme-btn btn-style-four">
|
||||
<span className="icon flaticon-arrow-pointing-to-right"></span> Send
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Google Map */}
|
||||
<section className="contact-map-section">
|
||||
<iframe
|
||||
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2888.8200521592764!2d-79.6977294!3d43.749255!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x882b3dbb0e18ed73%3A0xbdb3783d6e6393c9!2s100%20Maritime%20Ontario%20Blvd%20%2375%2C%20Brampton%2C%20ON%20L6S%200E7%2C%20Canada!5e0!3m2!1sen!2sus!4v170995882xxx"
|
||||
allowFullScreen
|
||||
loading="lazy"
|
||||
referrerPolicy="no-referrer-when-downgrade"
|
||||
></iframe>
|
||||
</section>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
158
app/gallery/page.js
Normal file
@ -0,0 +1,158 @@
|
||||
'use client';
|
||||
import { useState } from "react";
|
||||
import Layout from "@/components/layout/Layout";
|
||||
import 'react-image-lightbox/style.css';
|
||||
import Lightbox from 'react-image-lightbox';
|
||||
|
||||
export default function GalleryPage() {
|
||||
const images = [
|
||||
"/assets/images/home/categories/combos.webp",
|
||||
"/assets/images/home/categories/milkshakes.webp",
|
||||
"/assets/images/home/categories/poutine.webp",
|
||||
"/assets/images/home/categories/salads.webp",
|
||||
"/assets/images/home/categories/shawarma.webp",
|
||||
"/assets/images/home/categories/dosa.webp"
|
||||
];
|
||||
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const [photoIndex, setPhotoIndex] = useState(0);
|
||||
|
||||
return (
|
||||
<Layout
|
||||
headerStyle={2}
|
||||
footerStyle={2}
|
||||
breadcrumbTitle="Gallery"
|
||||
bgImage="/assets/images/about/about-banner.webp"
|
||||
>
|
||||
{/* Gallery Section Two */}
|
||||
<section className="gallery-section-two sec-pad" id="gallery">
|
||||
<div className="outer-container">
|
||||
<div className="masonry-items-container row no-gutters clearfix">
|
||||
|
||||
{/* Column 1 */}
|
||||
<div className="col-lg-3 col-md-6 col-sm-12">
|
||||
<div className="gallery-block-two masonry-item">
|
||||
<div className="inner-box">
|
||||
<div
|
||||
className="image-box"
|
||||
onClick={() => { setPhotoIndex(0); setIsOpen(true); }}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
<img src={images[0]} alt="Combos" />
|
||||
<div className="overlay-box">
|
||||
<h6>Combos</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Column 2 */}
|
||||
<div className="col-lg-3 col-md-6 col-sm-12">
|
||||
<div className="gallery-block-two masonry-item">
|
||||
<div className="inner-box">
|
||||
<div
|
||||
className="image-box"
|
||||
onClick={() => { setPhotoIndex(1); setIsOpen(true); }}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
<img src={images[1]} alt="Milk Shakes" />
|
||||
<div className="overlay-box">
|
||||
<h6>Milk Shakes</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="gallery-block-two masonry-item">
|
||||
<div className="inner-box">
|
||||
<div
|
||||
className="image-box"
|
||||
onClick={() => { setPhotoIndex(2); setIsOpen(true); }}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
<img src={images[2]} alt="Poutine" />
|
||||
<div className="overlay-box">
|
||||
<h6>Poutine</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Column 3 */}
|
||||
<div className="col-lg-6 col-md-12 col-sm-12">
|
||||
<div className="row no-gutters">
|
||||
<div className="col-lg-6 col-md-6 col-sm-12">
|
||||
<div className="gallery-block-two masonry-item">
|
||||
<div className="inner-box">
|
||||
<div
|
||||
className="image-box"
|
||||
onClick={() => { setPhotoIndex(3); setIsOpen(true); }}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
<img src={images[3]} alt="Salads" />
|
||||
<div className="overlay-box">
|
||||
<h6>Salads</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6 col-md-6 col-sm-12">
|
||||
<div className="gallery-block-two masonry-item">
|
||||
<div className="inner-box">
|
||||
<div
|
||||
className="image-box"
|
||||
onClick={() => { setPhotoIndex(4); setIsOpen(true); }}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
<img src={images[4]} alt="Shawarma Wraps" />
|
||||
<div className="overlay-box">
|
||||
<h6>Shawarma Wraps</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-12 col-md-12 col-sm-12">
|
||||
<div className="gallery-block-two masonry-item">
|
||||
<div className="inner-box">
|
||||
<div
|
||||
className="image-box"
|
||||
onClick={() => { setPhotoIndex(5); setIsOpen(true); }}
|
||||
style={{ cursor: "pointer" }}
|
||||
>
|
||||
<img src={images[5]} alt="Dosa" />
|
||||
<div className="overlay-box">
|
||||
<h6>Dosa</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{/* End Gallery Section Two */}
|
||||
|
||||
{/* Lightbox */}
|
||||
{isOpen && (
|
||||
<Lightbox
|
||||
mainSrc={images[photoIndex]}
|
||||
nextSrc={images[(photoIndex + 1) % images.length]}
|
||||
prevSrc={images[(photoIndex + images.length - 1) % images.length]}
|
||||
onCloseRequest={() => setIsOpen(false)}
|
||||
onMovePrevRequest={() =>
|
||||
setPhotoIndex((photoIndex + images.length - 1) % images.length)
|
||||
}
|
||||
onMoveNextRequest={() =>
|
||||
setPhotoIndex((photoIndex + 1) % images.length)
|
||||
}
|
||||
/>
|
||||
)}
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
109
app/menu/page.js
Normal file
@ -0,0 +1,109 @@
|
||||
'use client'
|
||||
import { useState } from 'react'
|
||||
import Layout from "@/components/layout/Layout"
|
||||
import Link from 'next/link'
|
||||
import { menuData } from '@/utils/constant.utils'
|
||||
|
||||
export default function Menus() {
|
||||
const [activeTab, setActiveTab] = useState('Wings')
|
||||
const tabs = Object.keys(menuData)
|
||||
const menuItems = menuData[activeTab] || []
|
||||
|
||||
// Split items into two columns
|
||||
const mid = Math.ceil(menuItems.length / 2)
|
||||
const firstHalf = menuItems.slice(0, mid)
|
||||
const secondHalf = menuItems.slice(mid)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Layout
|
||||
headerStyle={2}
|
||||
footerStyle={2}
|
||||
breadcrumbTitle="Our Menu"
|
||||
bgImage={"/assets/images/inner-banner/menu-banner.webp"}
|
||||
>
|
||||
{/* Menu Section */}
|
||||
<section className="menus-section sec-pad" id="menu">
|
||||
<div className="auto-container">
|
||||
{/* Section Title */}
|
||||
<div className="sec-title mb-3 centered">
|
||||
<div className="title">Our Menu</div>
|
||||
<h2>Explore Our Delicious Dishes</h2>
|
||||
<div className="separate"></div>
|
||||
</div>
|
||||
|
||||
{/* Tabs */}
|
||||
<ul className="nav nav-tabs justify-content-center mb-5 border-0">
|
||||
{tabs.map((tab) => (
|
||||
<li
|
||||
key={tab}
|
||||
className="nav-item"
|
||||
onClick={() => setActiveTab(tab)}
|
||||
style={{ cursor: 'pointer' }}
|
||||
>
|
||||
<span
|
||||
className={`nav-link ${activeTab === tab ? 'active fw-bold' : ''}`}
|
||||
style={activeTab === tab ? { color: '#cf2d1f' } : {}}
|
||||
>
|
||||
{tab}
|
||||
</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
|
||||
{/* Menu Items */}
|
||||
<div className="row clearfix">
|
||||
{/* Left Column */}
|
||||
<div className="menu-column col-lg-6 col-md-12 col-sm-12">
|
||||
<div className="inner-column">
|
||||
{firstHalf.map((item, index) => (
|
||||
<div className="menu-block" key={index}>
|
||||
<div className="inner-box">
|
||||
<div className="menu-image">
|
||||
<Link href="/#">
|
||||
<img src={item.img} alt={item.name} />
|
||||
</Link>
|
||||
</div>
|
||||
<h6>
|
||||
<Link href="/#">{item.name}</Link>
|
||||
</h6>
|
||||
<div className="title">{item.desc}</div>
|
||||
<div className="price-box">
|
||||
<span className="price">${item.price}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Right Column */}
|
||||
<div className="menu-column col-lg-6 col-md-12 col-sm-12">
|
||||
<div className="inner-column">
|
||||
{secondHalf.map((item, index) => (
|
||||
<div className="menu-block" key={index}>
|
||||
<div className="inner-box">
|
||||
<div className="menu-image">
|
||||
<Link href="/#">
|
||||
<img src={item.img} alt={item.name} />
|
||||
</Link>
|
||||
</div>
|
||||
<h6>
|
||||
<Link href="/#">{item.name}</Link>
|
||||
</h6>
|
||||
<div className="title">{item.desc}</div>
|
||||
<div className="price-box">
|
||||
<span className="price">${item.price}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</Layout>
|
||||
</>
|
||||
)
|
||||
}
|
||||
@ -8,7 +8,8 @@ import Juice from "@/components/sections/home1/Juice"
|
||||
import Recipe from "@/components/sections/home3/Recipe"
|
||||
import Fluid from "@/components/sections/home3/Fluid"
|
||||
import Menu2 from "@/components/sections/home4/Menu2"
|
||||
|
||||
import Testimonial from "@/components/sections/home1/client-review"
|
||||
import Blog from "@/components/sections/home2/blog"
|
||||
|
||||
export default function Home() {
|
||||
|
||||
@ -24,6 +25,8 @@ export default function Home() {
|
||||
{/* <Video /> */}
|
||||
<Menu2 />
|
||||
<Gallery />
|
||||
<Testimonial />
|
||||
<Blog />
|
||||
</Layout>
|
||||
</>
|
||||
)
|
||||
|
||||
@ -1,11 +1,10 @@
|
||||
import Link from "next/link"
|
||||
|
||||
export default function Breadcrumb({ breadcrumbTitle }) {
|
||||
export default function Breadcrumb({ breadcrumbTitle, bgImage }) {
|
||||
return (
|
||||
<>
|
||||
|
||||
{/* Page Title */}
|
||||
<section className="page-title" style={{ backgroundImage: 'url(/assets/images/background/6.jpg)' }} >
|
||||
<section className="page-title" style={{ backgroundImage: `url(${bgImage})` }} >
|
||||
<div className="pattern-layer" style={{ backgroundImage: 'url(/assets/images/background/pattern-7.png)' }} ></div>
|
||||
<div className="auto-container">
|
||||
<h2>{breadcrumbTitle}</h2>
|
||||
@ -16,7 +15,6 @@ export default function Breadcrumb({ breadcrumbTitle }) {
|
||||
</div>
|
||||
</section>
|
||||
{/* End Page Title */}
|
||||
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ import Footer3 from "./footer/Footer3"
|
||||
import Footer4 from "./footer/Footer4"
|
||||
|
||||
|
||||
export default function Layout({ headerStyle, footerStyle, headTitle, breadcrumbTitle, children, wrapperCls }) {
|
||||
export default function Layout({ headerStyle, footerStyle, headTitle, breadcrumbTitle, bgImage, children, wrapperCls }) {
|
||||
const [scroll, setScroll] = useState(0)
|
||||
// Mobile Menu
|
||||
const [isMobileMenu, setMobileMenu] = useState(false)
|
||||
@ -64,7 +64,7 @@ export default function Layout({ headerStyle, footerStyle, headTitle, breadcrumb
|
||||
<Sidebar isSidebar={isSidebar} handleSidebar={handleSidebar} />
|
||||
<SearchPopup isPopup={isPopup} handlePopup={handlePopup} />
|
||||
|
||||
{breadcrumbTitle && <Breadcrumb breadcrumbTitle={breadcrumbTitle} />}
|
||||
{breadcrumbTitle && <Breadcrumb breadcrumbTitle={breadcrumbTitle} bgImage={bgImage} />}
|
||||
|
||||
{children}
|
||||
|
||||
|
||||
@ -22,11 +22,14 @@ export default function Menu() {
|
||||
<li><Link href="index-4">Home Four</Link></li>
|
||||
</ul>
|
||||
</li> */}
|
||||
<li className="dropdown">
|
||||
<Link href="#about">About</Link>
|
||||
<li>
|
||||
<Link href="/">Home</Link>
|
||||
</li>
|
||||
<li className="dropdown">
|
||||
<Link href="#popular-dishes">Popular Dishes</Link>
|
||||
<li>
|
||||
<Link href="/about">About</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/gallery">Gallery</Link>
|
||||
</li>
|
||||
{/* <li className="dropdown">
|
||||
<Link href="#location">Locations</Link>
|
||||
|
||||
@ -7,16 +7,21 @@ export default function Menu() {
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
|
||||
<ul className="navigation right-nav clearfix">
|
||||
<li className="dropdown">
|
||||
{/* <li className="dropdown">
|
||||
<Link href="#sixty5-street-specials">Sixty5 Street Specials</Link>
|
||||
|
||||
</li>
|
||||
<li className="dropdown">
|
||||
<Link href="#menu">Menu</Link>
|
||||
|
||||
</li> */}
|
||||
<li>
|
||||
<Link href="/menu">Menu</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/blog">Blog</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/contact">Contact</Link>
|
||||
</li>
|
||||
{/* <li>
|
||||
<Link href="#contact">Contact</Link>
|
||||
|
||||
@ -54,7 +54,7 @@ const MobileMenu = ({ isSidebar, handleMobileMenu, handleSidebar }) => {
|
||||
</li> */}
|
||||
|
||||
<li className={isActive.key == 2 ? "dropdown current" : "dropdown"}>
|
||||
<Link href="/#about" onClick={handleMobileMenu}>About</Link>
|
||||
<Link href="/" onClick={handleMobileMenu}>Home</Link>
|
||||
{/* <ul style={{ display: `${isActive.key == 2 ? "block" : "none"}` }}>
|
||||
<li><Link href="about" onClick={handleMobileMenu}>About</Link></li>
|
||||
<li><Link href="team" onClick={handleMobileMenu}>Team</Link></li>
|
||||
@ -63,11 +63,11 @@ const MobileMenu = ({ isSidebar, handleMobileMenu, handleSidebar }) => {
|
||||
<div className={isActive.key == 2 ? "dropdown-btn open" : "dropdown-btn"} onClick={() => handleToggle(2)}><span className="fa fa-angle-right" /></div> */}
|
||||
</li>
|
||||
|
||||
<li><Link href="/#popular-dishes" onClick={handleMobileMenu}>Popular Dishes</Link></li>
|
||||
<li><Link href="/#sixty5-street-specials" onClick={handleMobileMenu}>Sixty5 Street Specials</Link></li>
|
||||
<li><Link href="/about" onClick={handleMobileMenu}>About</Link></li>
|
||||
<li><Link href="/gallery" onClick={handleMobileMenu}>Gallery</Link></li>
|
||||
|
||||
<li className={isActive.key == 3 ? "dropdown current" : "dropdown"}>
|
||||
<Link href="/#menu" onClick={handleMobileMenu}>Menu</Link>
|
||||
<Link href="/menu" onClick={handleMobileMenu}>Menu</Link>
|
||||
{/* <ul style={{ display: `${isActive.key == 3 ? "block" : "none"}` }}>
|
||||
<li><Link href="menu" onClick={handleMobileMenu}>Menu</Link></li>
|
||||
<li><Link href="milkshake" onClick={handleMobileMenu}>Milk Shake</Link></li>
|
||||
@ -77,6 +77,8 @@ const MobileMenu = ({ isSidebar, handleMobileMenu, handleSidebar }) => {
|
||||
</ul>
|
||||
<div className={isActive.key == 3 ? "dropdown-btn open" : "dropdown-btn"} onClick={() => handleToggle(3)}><span className="fa fa-angle-right" /></div> */}
|
||||
</li>
|
||||
<li><Link href="/blog" onClick={handleMobileMenu}>Blog</Link></li>
|
||||
<li><Link href="/contact" onClick={handleMobileMenu}>Contact</Link></li>
|
||||
|
||||
{/* <li className={isActive.key == 4 ? "dropdown current" : "dropdown"}><Link href="/#" onClick={handleMobileMenu}>Gallery</Link>
|
||||
<ul style={{ display: `${isActive.key == 4 ? "block" : "none"}` }}>
|
||||
|
||||
@ -30,10 +30,11 @@ export default function Footer2() {
|
||||
<div className="footer-widget contact-widget">
|
||||
<h6>Useful Links</h6>
|
||||
<ul className="contact-list">
|
||||
<li><Link href="#about">About</Link></li>
|
||||
<li><Link href="#popular-dishes">Popular Dishes</Link></li>
|
||||
<li><Link href="#sixty5-street-specials">Sixty5 Street Specials</Link></li>
|
||||
<li><Link href="#menu">Menu</Link></li>
|
||||
<li><Link href="/about">About</Link></li>
|
||||
<li><Link href="/gallery">Gallery</Link></li>
|
||||
<li><Link href="/menu">Menu</Link></li>
|
||||
<li><Link href="/blog">Blog</Link></li>
|
||||
<li><Link href="/contact">Contact</Link></li>
|
||||
{/* <li><Link href="tel:+289-498-6565">289-498-6565</Link></li> */}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
163
components/sections/home1/client-review.js
Normal file
@ -0,0 +1,163 @@
|
||||
'use client'
|
||||
import Link from "next/link"
|
||||
import { Autoplay, Navigation, Pagination } from "swiper/modules"
|
||||
import { Swiper, SwiperSlide } from "swiper/react"
|
||||
|
||||
const swiperOptions = {
|
||||
modules: [Autoplay, Pagination, Navigation],
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 30,
|
||||
loop: true,
|
||||
|
||||
autoplay: {
|
||||
delay: 3000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
|
||||
navigation: {
|
||||
nextEl: '.srn',
|
||||
prevEl: '.srp',
|
||||
},
|
||||
|
||||
pagination: {
|
||||
el: '.swiper-pagination',
|
||||
clickable: true,
|
||||
},
|
||||
};
|
||||
|
||||
export default function Testimonial() {
|
||||
return (
|
||||
<>
|
||||
|
||||
|
||||
{/* Testimonial Section Two */}
|
||||
<section className="testimonial-section-two pb-0">
|
||||
<div
|
||||
className="icon-layer-two"
|
||||
style={{ backgroundImage: "url(/assets/images/home/review-right-bottom-element-home.webp)" }}
|
||||
></div>
|
||||
|
||||
<div className="auto-container">
|
||||
{/* Section Title */}
|
||||
<div className="sec-title centered">
|
||||
<div className="title">Google Reviews</div>
|
||||
<h2>Hear from our happy customers</h2>
|
||||
<div className="separate"></div>
|
||||
</div>
|
||||
|
||||
<div className="inner-container">
|
||||
<Swiper {...swiperOptions} className="single-item-carousel">
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“Absolutely love this place! Every blend tastes fresh and natural. The flavors pop, and you can really tell they use quality ingredients. Sixty5 Street never disappoints.”
|
||||
</div>
|
||||
<div className="designation">— Emily R.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“The perfect spot when you need something refreshing. Their fruit mixes are vibrant, clean, and full of energy. I always leave feeling great.”
|
||||
</div>
|
||||
<div className="designation">— Jason M.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“Sixty5 Street has mastered the art of fresh flavor. The bowls are colorful, the drinks are delicious, and everything feels thoughtfully prepared. A must-try!”
|
||||
</div>
|
||||
<div className="designation">— Sofia L.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“Consistently amazing! The blends are smooth, balanced, and not overly sweet. You can taste the real fruit in every sip. Highly recommend for healthy cravings.”
|
||||
</div>
|
||||
<div className="designation">— David P.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
|
||||
{/* Testimonial Block Two */}
|
||||
<SwiperSlide>
|
||||
<div className="testimonial-block-two">
|
||||
<div className="inner-box">
|
||||
<div className="rating gap-1 mb-3">
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
<span className="fa fa-star"></span>
|
||||
</div>
|
||||
<div className="text">
|
||||
“Super fresh, super tasty. The street-style vibe makes the whole experience fun and lively. Sixty5 Street has quickly become one of my favorite places to grab a flavorful drink.”
|
||||
</div>
|
||||
<div className="designation">— Ava T.</div>
|
||||
</div>
|
||||
</div>
|
||||
</SwiperSlide>
|
||||
</Swiper>
|
||||
|
||||
{/* Google Review Button */}
|
||||
<div className="btns-box text-center mt-4">
|
||||
<Link
|
||||
href="https://www.google.com/search?sca_esv=0fe16c1f02c217b7&sxsrf=AE3TifOLptPQLUmmtN31E_3elXLW6TFOQw:1762618049873&si=AMgyJEtREmoPL4P1I5IDCfuA8gybfVI2d5Uj7QMwYCZHKDZ-E-aY0flGiK9jtBbvWKno0yJxYW9CK-ZYgm0G70i4ON2SMlNBNsid-fMvQPqNzI7FcY1u8NR67M0xsy1G8HMAZhtgOP2m&q=Sixty5+Street+Reviews&sa=X&ved=2ahUKEwjY5_L19-KQAxW89DgGHdw0AesQ0bkNegQILRAE&biw=1366&bih=633&dpr=1"
|
||||
target="_blank"
|
||||
className="theme-btn btn-style-one clearfix"
|
||||
>
|
||||
<span className="icon"></span> Review us on Google
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{/* End Testimonial Section Two */}
|
||||
|
||||
</>
|
||||
)
|
||||
}
|
||||
@ -8,17 +8,14 @@ export default function Menus() {
|
||||
const tabs = Object.keys(menuData);
|
||||
const menuItems = menuData[activeTab] || [];
|
||||
|
||||
// Split the array into 2 halves
|
||||
const mid = Math.ceil(menuItems.length / 2);
|
||||
const firstHalf = menuItems.slice(0, mid);
|
||||
const secondHalf = menuItems.slice(mid);
|
||||
const visibleItems = menuItems.slice(0, 6);
|
||||
|
||||
const mid = Math.ceil(visibleItems.length / 2);
|
||||
const firstHalf = visibleItems.slice(0, mid);
|
||||
const secondHalf = visibleItems.slice(mid);
|
||||
|
||||
return (
|
||||
<section className="menus-section" id="menu">
|
||||
{/* <div
|
||||
className="pattern-layer"
|
||||
style={{ backgroundImage: 'url(assets/images/background/4.jpg)' }}
|
||||
></div> */}
|
||||
<div className="auto-container">
|
||||
{/* Section Title */}
|
||||
<div className="sec-title mb-3 centered">
|
||||
@ -37,7 +34,7 @@ export default function Menus() {
|
||||
style={{ cursor: 'pointer' }}
|
||||
>
|
||||
<span
|
||||
className={`nav-link ${activeTab === tab ? 'active fw-bold ' : ''}`}
|
||||
className={`nav-link ${activeTab === tab ? 'active fw-bold' : ''}`}
|
||||
style={activeTab === tab ? { color: '#cf2d1f' } : {}}
|
||||
>
|
||||
{tab}
|
||||
@ -96,6 +93,15 @@ export default function Menus() {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="btns-box text-center mt-4">
|
||||
<Link
|
||||
href="/menu"
|
||||
className="theme-btn btn-style-one clearfix"
|
||||
>
|
||||
<span className="icon"></span> View All Menu
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
|
||||
63
components/sections/home2/blog.js
Normal file
@ -0,0 +1,63 @@
|
||||
'use client'
|
||||
import Link from "next/link";
|
||||
import Blogs from "@/utils/constant.utils";
|
||||
|
||||
const truncateWords = (text, limit) => {
|
||||
const words = text.split(" ");
|
||||
return words.length > limit ? words.slice(0, limit).join(" ") + " ..." : text;
|
||||
};
|
||||
|
||||
const stripHtml = (html) => {
|
||||
if (!html) return "";
|
||||
return html.replace(/<[^>]*>/g, "");
|
||||
};
|
||||
|
||||
export default function Blog() {
|
||||
return (
|
||||
<div className="sidebar-page-container">
|
||||
<div className="auto-container">
|
||||
<div className="row clearfix">
|
||||
{Blogs.map((blog) => (
|
||||
<div
|
||||
key={blog.id}
|
||||
className="col-lg-4 col-md-6 col-sm-12 mb-4"
|
||||
>
|
||||
<div className="blog-card rounded shadow-sm overflow-hidden">
|
||||
{/* Blog Image */}
|
||||
<div className="blog-image">
|
||||
<img
|
||||
src={blog.imageDetail}
|
||||
alt={blog.title}
|
||||
className="img-fluid w-100"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Blog Title */}
|
||||
<div className="blog-content p-3">
|
||||
<h3 className="mb-2 text-lg font-semibold blog-title-hover">
|
||||
<Link href={`/blog/${blog.slug}`} className="blog-title-link">
|
||||
{stripHtml(blog.title)}
|
||||
</Link>
|
||||
</h3>
|
||||
|
||||
{/* Blog Excerpt */}
|
||||
<p className="text-gray-700 mb-3">
|
||||
{truncateWords(stripHtml(blog.para))}
|
||||
</p>
|
||||
|
||||
{/* Read More Button */}
|
||||
<Link
|
||||
href={`/blog/${blog.slug}`}
|
||||
className="font-medium blog-title-link"
|
||||
>
|
||||
Read More
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
369
package-lock.json
generated
@ -8,11 +8,14 @@
|
||||
"name": "start-app-dir",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"axios": "^1.13.2",
|
||||
"isotope-layout": "^3.0.6",
|
||||
"next": "13.4.19",
|
||||
"react": "18.2.0",
|
||||
"react-curved-text": "^2.0.2",
|
||||
"react-dom": "18.2.0",
|
||||
"react-google-recaptcha": "^3.1.0",
|
||||
"react-image-lightbox": "^5.1.4",
|
||||
"react-modal-video": "^2.0.1",
|
||||
"sass": "^1.66.1",
|
||||
"sitemap": "^8.0.0",
|
||||
@ -511,6 +514,23 @@
|
||||
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.13.2",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
|
||||
"integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
"form-data": "^4.0.4",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/braces": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
||||
@ -535,6 +555,19 @@
|
||||
"node": ">=10.16.0"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bind-apply-helpers": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
||||
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001727",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz",
|
||||
@ -576,6 +609,18 @@
|
||||
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/core-js": {
|
||||
"version": "3.44.0",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz",
|
||||
@ -593,6 +638,15 @@
|
||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/desandro-matches-selector": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz",
|
||||
@ -629,12 +683,77 @@
|
||||
"deprecated": "dommatrix is no longer maintained. Please use @thednp/dommatrix.",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/dunder-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-define-property": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-errors": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-object-atoms": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
||||
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-set-tostringtag": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
||||
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"get-intrinsic": "^1.2.6",
|
||||
"has-tostringtag": "^1.0.2",
|
||||
"hasown": "^2.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/ev-emitter": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz",
|
||||
"integrity": "sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/exenv": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
|
||||
"integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==",
|
||||
"license": "BSD-3-Clause"
|
||||
},
|
||||
"node_modules/fill-range": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
||||
@ -657,6 +776,88 @@
|
||||
"desandro-matches-selector": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.11",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
||||
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"debug": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/form-data": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
|
||||
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"es-set-tostringtag": "^2.1.0",
|
||||
"hasown": "^2.0.2",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/function-bind": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.2",
|
||||
"es-define-property": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"es-object-atoms": "^1.1.1",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-proto": "^1.0.1",
|
||||
"gopd": "^1.2.0",
|
||||
"has-symbols": "^1.1.0",
|
||||
"hasown": "^2.0.2",
|
||||
"math-intrinsics": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"dunder-proto": "^1.0.1",
|
||||
"es-object-atoms": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/get-size": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/get-size/-/get-size-2.0.3.tgz",
|
||||
@ -669,12 +870,72 @@
|
||||
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/gopd": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/graceful-fs": {
|
||||
"version": "4.2.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/has-symbols": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/has-tostringtag": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
||||
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"has-symbols": "^1.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/hasown": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/hoist-non-react-statics": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
|
||||
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"react-is": "^16.7.0"
|
||||
}
|
||||
},
|
||||
"node_modules/immutable": {
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz",
|
||||
@ -755,6 +1016,15 @@
|
||||
"outlayer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/micromatch": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
||||
@ -769,6 +1039,27 @@
|
||||
"node": ">=8.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-types": {
|
||||
"version": "2.1.35",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"mime-db": "1.52.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.11",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
||||
@ -915,6 +1206,12 @@
|
||||
"react-is": "^16.13.1"
|
||||
}
|
||||
},
|
||||
"node_modules/proxy-from-env": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/react": {
|
||||
"version": "18.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
|
||||
@ -927,6 +1224,19 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-async-script": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react-async-script/-/react-async-script-1.2.0.tgz",
|
||||
"integrity": "sha512-bCpkbm9JiAuMGhkqoAiC0lLkb40DJ0HOEJIku+9JDjxX3Rcs+ztEOG13wbrOskt3n2DTrjshhaQ/iay+SnGg5Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"hoist-non-react-statics": "^3.3.0",
|
||||
"prop-types": "^15.5.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=16.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/react-curved-text": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/react-curved-text/-/react-curved-text-2.0.2.tgz",
|
||||
@ -953,12 +1263,62 @@
|
||||
"react": "^18.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-google-recaptcha": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz",
|
||||
"integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"prop-types": "^15.5.0",
|
||||
"react-async-script": "^1.2.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=16.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/react-image-lightbox": {
|
||||
"version": "5.1.4",
|
||||
"resolved": "https://registry.npmjs.org/react-image-lightbox/-/react-image-lightbox-5.1.4.tgz",
|
||||
"integrity": "sha512-kTiAODz091bgT7SlWNHab0LSMZAPJtlNWDGKv7pLlLY1krmf7FuG1zxE0wyPpeA8gPdwfr3cu6sPwZRqWsc3Eg==",
|
||||
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"prop-types": "^15.7.2",
|
||||
"react-modal": "^3.11.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "16.x || 17.x",
|
||||
"react-dom": "16.x || 17.x"
|
||||
}
|
||||
},
|
||||
"node_modules/react-is": {
|
||||
"version": "16.13.1",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/react-lifecycles-compat": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
|
||||
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/react-modal": {
|
||||
"version": "3.16.3",
|
||||
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.3.tgz",
|
||||
"integrity": "sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"exenv": "^1.2.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"react-lifecycles-compat": "^3.0.0",
|
||||
"warning": "^4.0.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19",
|
||||
"react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19"
|
||||
}
|
||||
},
|
||||
"node_modules/react-modal-video": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/react-modal-video/-/react-modal-video-2.0.2.tgz",
|
||||
@ -1143,6 +1503,15 @@
|
||||
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
||||
"license": "0BSD"
|
||||
},
|
||||
"node_modules/warning": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
||||
"integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"loose-envify": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/watchpack": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
|
||||
|
||||
@ -11,11 +11,14 @@
|
||||
"sitemap": "node scripts/generate-sitemap.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.13.2",
|
||||
"isotope-layout": "^3.0.6",
|
||||
"next": "13.4.19",
|
||||
"react": "18.2.0",
|
||||
"react-curved-text": "^2.0.2",
|
||||
"react-dom": "18.2.0",
|
||||
"react-google-recaptcha": "^3.1.0",
|
||||
"react-image-lightbox": "^5.1.4",
|
||||
"react-modal-video": "^2.0.1",
|
||||
"sass": "^1.66.1",
|
||||
"sitemap": "^8.0.0",
|
||||
|
||||
@ -454,7 +454,7 @@ img{
|
||||
overflow:hidden;
|
||||
overflow: hidden;
|
||||
border-radius: 50px;
|
||||
background-color:#5dca89;
|
||||
background-color:#cf2d1f;
|
||||
padding:7px 35px 6px 7px;
|
||||
text-transform: capitalize;
|
||||
font-family: var(--poppins);
|
||||
@ -484,7 +484,7 @@ img{
|
||||
|
||||
.btn-style-four:hover{
|
||||
color: #ffffff;
|
||||
background-color:#cf2d1f ;
|
||||
background-color:#ed7129 ;
|
||||
}
|
||||
|
||||
/* Social Icon One */
|
||||
|
||||
@ -1158,9 +1158,9 @@
|
||||
padding: 50px 0px;
|
||||
}
|
||||
|
||||
.gallery-section-two {
|
||||
/* .gallery-section-two {
|
||||
padding: 0px 0px;
|
||||
}
|
||||
} */
|
||||
|
||||
.banner-section-two .content-column h1 {
|
||||
font-size: 34px;
|
||||
|
||||
@ -2867,7 +2867,7 @@
|
||||
|
||||
.history-section {
|
||||
position: relative;
|
||||
padding: 80px 0px 80px;
|
||||
padding: 100px 0px 0px;
|
||||
}
|
||||
|
||||
.history-section .pattern-layer {
|
||||
@ -3006,7 +3006,7 @@
|
||||
|
||||
.contact-section {
|
||||
position: relative;
|
||||
padding: 80px 0px 60px;
|
||||
padding: 100px 0px 100px;
|
||||
}
|
||||
|
||||
.contact-section .title-column {
|
||||
@ -3387,7 +3387,7 @@
|
||||
padding: 2px 18px;
|
||||
border-radius: 8px;
|
||||
display: inline-block;
|
||||
background-color: #CF2D10 ;
|
||||
background-color: #CF2D10;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@ -4902,7 +4902,7 @@
|
||||
|
||||
.history-section-two {
|
||||
position: relative;
|
||||
padding: 100px 0px 150px;
|
||||
padding: 100px 0px 100px;
|
||||
}
|
||||
|
||||
.history-section-two .image-column {
|
||||
@ -4941,7 +4941,7 @@
|
||||
.history-section-two .content-column .inner-column {
|
||||
position: relative;
|
||||
padding-left: 20px;
|
||||
padding-top: 130px;
|
||||
padding-top: 100px;
|
||||
}
|
||||
|
||||
.history-section-two .content-column .sec-title {
|
||||
@ -5715,7 +5715,7 @@
|
||||
.sidebar-page-container {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
padding: 110px 0px 80px;
|
||||
padding: 100px 0px 100px;
|
||||
}
|
||||
|
||||
.sidebar-page-container .section-text {
|
||||
@ -5733,7 +5733,7 @@
|
||||
|
||||
.sidebar-page-container .content-side,
|
||||
.sidebar-page-container .sidebar-side {
|
||||
margin-bottom: 40px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.sidebar-page-container .icon-layer-one {
|
||||
@ -7041,7 +7041,6 @@
|
||||
.contact-map-section {
|
||||
position: relative;
|
||||
padding-top: 0px;
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
|
||||
.contact-map-section iframe {
|
||||
@ -7157,6 +7156,7 @@
|
||||
.testimonial-section-two {
|
||||
position: relative;
|
||||
padding: 100px 0px 100px;
|
||||
padding: 100px 0px 100px;
|
||||
}
|
||||
|
||||
.testimonial-section-two .inner-container {
|
||||
@ -7194,7 +7194,7 @@
|
||||
.testimonial-block-two .inner-box .rating {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
color: #ba9232;
|
||||
color: #ffdf00;
|
||||
}
|
||||
|
||||
.testimonial-block-two .inner-box .text {
|
||||
@ -7505,3 +7505,44 @@
|
||||
-webkit-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
.sec-pad {
|
||||
padding: 100px 0px;
|
||||
}
|
||||
|
||||
.blog-title-link:hover {
|
||||
color: #ed7129 !important;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
@media (max-width: 479px) {
|
||||
.testimonial-section-two {
|
||||
padding: 50px 0px 50px;
|
||||
}
|
||||
|
||||
.sidebar-page-container {
|
||||
padding: 50px 0px 50px;
|
||||
}
|
||||
|
||||
.history-section-two {
|
||||
padding: 50px 0px 100px;
|
||||
}
|
||||
|
||||
.fluid-section-one .content-column .inner-column {
|
||||
padding: 50px 20px;
|
||||
}
|
||||
|
||||
.sec-pad {
|
||||
padding: 50px 0px;
|
||||
}
|
||||
|
||||
.contact-section {
|
||||
padding: 50px 0px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 1023px) {
|
||||
.nav-outer.clearfix .navbar-collapse {
|
||||
justify-content: center !important;
|
||||
display: flex !important;
|
||||
}
|
||||
}
|
||||
|
||||
BIN
public/assets/images/about/about-banner.webp
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
public/assets/images/about/about-us-element.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/assets/images/about/about-us.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/assets/images/about/card-1.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
public/assets/images/about/card-2.webp
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
public/assets/images/about/card-3.webp
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 28 KiB |
BIN
public/assets/images/about/fresh-flavour-right.webp
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
public/assets/images/about/review-right-bottom-element.webp
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
public/assets/images/home/review-right-bottom-element-home.webp
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
public/assets/images/inner-banner/blog-banner.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/assets/images/inner-banner/contact-us-banner.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/assets/images/inner-banner/gallery-banner.webp
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/assets/images/inner-banner/menu-banner.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
@ -109,3 +109,120 @@ export const menuData = {
|
||||
{ name: 'Filter Coffee', img: '/assets/images/menu/hot-drinks/filter-coffee.webp', desc: '', price: 3.49 },
|
||||
],
|
||||
};
|
||||
|
||||
|
||||
const Blogs = [
|
||||
{
|
||||
id: 1,
|
||||
slug: "top-street-food-spots-in-waterloo",
|
||||
title: "Top Street Food Spots in Waterloo You Must Try",
|
||||
category: "Guides",
|
||||
date: "NOV 8, 2025",
|
||||
comments: "3 Comments",
|
||||
para:"From sizzling hot dogs to gourmet tacos, Waterloo's street food scene is diverse and dynamic.",
|
||||
imageDetail: "/assets/images/resource/news-4.jpg",
|
||||
banner: "/assets/images/inner-banner/blog-banner.webp",
|
||||
detailImage: "/assets/images/resource/news-4.jpg",
|
||||
content: `
|
||||
<div class="sec-title mt-4">
|
||||
<h3>Waterloo Street Food Scene</h3>
|
||||
</div>
|
||||
<p>From sizzling hot dogs to gourmet tacos, Waterloo's street food scene is diverse and dynamic. Local vendors bring creativity to every dish, offering unique flavors that can't be found in regular restaurants.</p>
|
||||
<p>Markets, food trucks, and pop-up stalls provide convenient and affordable ways to sample the city’s best street food. Be sure to explore different neighborhoods to catch the full spectrum of tastes.</p>
|
||||
|
||||
<blockquote>
|
||||
“Street food in Waterloo is more than just a snack; it’s a culinary adventure on every corner.”
|
||||
</blockquote>
|
||||
|
||||
<div class="sec-title mt-4">
|
||||
<h3>Must-Try Dishes</h3>
|
||||
</div>
|
||||
<ul class="list-style-twoo">
|
||||
<li>Loaded fries with local sauces.</li>
|
||||
<li>Gourmet tacos with fresh ingredients.</li>
|
||||
<li>Artisan donuts and sweet treats.</li>
|
||||
<li>Ethnic street food from around the globe.</li>
|
||||
</ul>
|
||||
`,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
slug: "best-vegan-street-food-in-cambridge",
|
||||
title: "Best Vegan Street Food in Cambridge You Can’t Miss",
|
||||
disc: "Cambridge offers a surprising variety of vegan street food. From hearty wraps to flavorful desserts, plant-based options are now widely available. \n\nThese dishes are perfect for both vegans and food enthusiasts looking to explore healthy, ethical, and delicious street food.",
|
||||
category: "Vegan & GF",
|
||||
date: "NOV 5, 2025",
|
||||
comments: "1 Comment",
|
||||
para:"From sizzling hot dogs to gourmet tacos, Waterloo's street food scene is diverse and dynamic.",
|
||||
alt: "Vegan street food wraps and tacos.",
|
||||
imageDetail: "/assets/images/resource/news-4.jpg",
|
||||
banner: "/assets/images/inner-banner/blog-banner.webp",
|
||||
detailImage: "/assets/images/resource/news-4.jpg",
|
||||
content: `
|
||||
<div class="sec-title mb-4">
|
||||
<h2>Vegan Street Food in Cambridge</h2>
|
||||
</div>
|
||||
|
||||
<div class="sec-title mt-4">
|
||||
<h3>Why Cambridge Vegan Street Food Rocks</h3>
|
||||
</div>
|
||||
<p>Plant-based street food is no longer an afterthought in Cambridge. Vendors are crafting innovative vegan dishes that appeal to everyone, whether it’s a colorful Buddha bowl or a loaded vegan burger.</p>
|
||||
<p>Using fresh, locally sourced ingredients, vegan street food here is as flavorful and satisfying as its non-vegan counterparts. From taste to presentation, it’s a feast for the senses.</p>
|
||||
|
||||
<blockquote>
|
||||
“Vegan street food is proof that plant-based can be indulgent, creative, and full of flavor at the same time.”
|
||||
</blockquote>
|
||||
|
||||
<div class="sec-title mt-4">
|
||||
<h3>Top Vegan Street Eats</h3>
|
||||
</div>
|
||||
<ul class="list-style-twoo">
|
||||
<li>Vegan tacos with cashew cheese.</li>
|
||||
<li>Loaded veggie fries with homemade sauces.</li>
|
||||
<li>Plant-based sliders with creative toppings.</li>
|
||||
<li>Sweet treats like vegan ice cream sandwiches.</li>
|
||||
</ul>
|
||||
`,
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
slug: "gluten-free-street-food-near-waterloo",
|
||||
title: "Gluten-Free Street Food Near Waterloo That Will Wow You",
|
||||
disc: "Gluten-free street food can be exciting and delicious. Vendors are offering creative GF alternatives to classic favorites. \n\nFrom savory snacks to sweet indulgences, you can enjoy a safe and flavorful experience without missing out on street food fun.",
|
||||
category: "Vegan & GF",
|
||||
date: "NOV 2, 2025",
|
||||
comments: "2 Comments",
|
||||
para:"From sizzling hot dogs to gourmet tacos, Waterloo's street food scene is diverse and dynamic.",
|
||||
alt: "Gluten-free street food dishes on a food truck.",
|
||||
imageDetail: "/assets/images/resource/news-4.jpg",
|
||||
banner: "/assets/images/inner-banner/blog-banner.webp",
|
||||
detailImage: "/assets/images/resource/news-4.jpg",
|
||||
content: `
|
||||
<div class="sec-title mb-4">
|
||||
<h2>Gluten-Free Street Food in Waterloo</h2>
|
||||
</div>
|
||||
|
||||
<div class="sec-title mt-4">
|
||||
<h3>GF Options You’ll Love</h3>
|
||||
</div>
|
||||
<p>Gluten-free street food is growing in popularity in Waterloo. Vendors are ensuring that classic street eats like tacos, fries, and pastries have GF versions that are safe and delicious.</p>
|
||||
<p>Attention to ingredient sourcing and preparation ensures that every dish is flavorful, safe, and satisfying for gluten-sensitive diners.</p>
|
||||
|
||||
<blockquote>
|
||||
“Going gluten-free doesn’t mean missing out — Waterloo street food has you covered with safe, tasty alternatives.”
|
||||
</blockquote>
|
||||
|
||||
<div class="sec-title mt-4">
|
||||
<h3>Must-Try GF Street Eats</h3>
|
||||
</div>
|
||||
<ul class="list-style-twoo">
|
||||
<li>GF loaded fries with savory toppings.</li>
|
||||
<li>Gluten-free tacos and wraps.</li>
|
||||
<li>Sweet GF pastries and donuts.</li>
|
||||
<li>Fresh, local gluten-free snacks from markets.</li>
|
||||
</ul>
|
||||
`,
|
||||
}
|
||||
];
|
||||
|
||||
export default Blogs;
|
||||
|
||||