diff --git a/app/about/page.js b/app/about/page.js new file mode 100644 index 0000000..e2a214b --- /dev/null +++ b/app/about/page.js @@ -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 ( + <> + + {/* History Section */} +
+
+
+ + {/* Image Column */} +
+
+
+ +
+
+ +
+
+
+ + {/* Content Column */} +
+
+ {/* Sec Title */} +
+
About Us
+

Street Fresh. Full of Flavour.

+ +
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.
+ +
+
    +
  • Fresh fruits and ingredients in every blend
  • +
  • Street-inspired flavours prepared with care
  • +
  • A vibrant experience that keeps you feeling energized
  • +
+
+
+ +
+
+
+ {/* End History Section */} + + {/* Menu Page Section */} +
+
+
+ + {/* Menu Block Two */} +
+
+
+ +
+
Bold Flavours
+
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.
+
+
+ + {/* Menu Block Two */} +
+
+
+ +
+
Real Fruits
+
We use high-quality fruits chosen for their natural sweetness and freshness. This ensures every mix, topping, and serving brings out authentic, clean flavour.
+
+
+ + {/* Menu Block Two */} +
+
+
+ +
+
Healthy Blends
+
Our blends are crafted to be both nourishing and delicious. Light, refreshing, and made fresh to order — perfect for energizing your day without compromise.
+
+
+ +
+
+
+ {/* End Restaurant Section */} + +
+
+ +
+
+
+ +
+

Fresh Flavour
Fusion

+
+
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.
+
+ +
+ View Menu +
+
+
+ + +
+
+ +
+
+ + {/* Testimonial Section Two */} +
+
+ +
+ {/* Section Title */} +
+
Google Reviews
+

Hear from our happy customers

+
+
+ +
+ + {/* Testimonial Block Two */} + +
+
+
+ + + + + +
+
+ “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.” +
+
— Emily R.
+
+
+
+ + {/* Testimonial Block Two */} + +
+
+
+ + + + + +
+
+ “The perfect spot when you need something refreshing. Their fruit mixes are vibrant, clean, and full of energy. I always leave feeling great.” +
+
— Jason M.
+
+
+
+ + {/* Testimonial Block Two */} + +
+
+
+ + + + + +
+
+ “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!” +
+
— Sofia L.
+
+
+
+ + {/* Testimonial Block Two */} + +
+
+
+ + + + + +
+
+ “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.” +
+
— David P.
+
+
+
+ + {/* Testimonial Block Two */} + +
+
+
+ + + + + +
+
+ “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.” +
+
— Ava T.
+
+
+
+
+ + {/* Google Review Button */} +
+ + Review us on Google + +
+
+
+
+ {/* End Testimonial Section Two */} + + {/* Gallery Section */} +
+
+ +
+
+ {/* End Gallery Section */} + +
+ + ) +} \ No newline at end of file diff --git a/app/blog/[slug]/page.js b/app/blog/[slug]/page.js new file mode 100644 index 0000000..bed815c --- /dev/null +++ b/app/blog/[slug]/page.js @@ -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 ( + +
+
+
+ {/* Content Side */} +
+
+
+
+ {blog.title} +
+ +
+
+
+
+
+
+
+
+
+ + ); +} diff --git a/app/blog/page.js b/app/blog/page.js new file mode 100644 index 0000000..e1a488f --- /dev/null +++ b/app/blog/page.js @@ -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 ( + +
+
+
+ {Blogs.map((blog) => ( +
+
+ {/* Blog Image */} +
+ {blog.title} +
+ + {/* Blog Title */} +
+

+ + {stripHtml(blog.title)} + +

+ + {/* Blog Excerpt */} +

+ {truncateWords(stripHtml(blog.para))} +

+ + {/* Read More Button */} + + Read More + +
+
+
+ ))} +
+
+
+
+ ); +} diff --git a/app/contact/page.js b/app/contact/page.js new file mode 100644 index 0000000..609492a --- /dev/null +++ b/app/contact/page.js @@ -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: ` + Name: ${formData.name}
+ Email: ${formData.email}
+ Phone: ${formData.phone}

+ Message:
${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 ( + + {/* Contact Section */} +
+
+
+ + {/* Left Column - Info */} +
+
+
+
Reach us
+

Contact

+
+
+ 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. +
+
+ + +
+
+ + {/* Right Column - Form */} +
+
+
+ {alert.show && ( +
+ {alert.message} +
+ )} + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+ +
+
+
+ + {/* Google Map */} +
+ +
+
+ ); +} diff --git a/app/gallery/page.js b/app/gallery/page.js new file mode 100644 index 0000000..62b2caf --- /dev/null +++ b/app/gallery/page.js @@ -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 ( + + {/* Gallery Section Two */} + + {/* End Gallery Section Two */} + + {/* Lightbox */} + {isOpen && ( + setIsOpen(false)} + onMovePrevRequest={() => + setPhotoIndex((photoIndex + images.length - 1) % images.length) + } + onMoveNextRequest={() => + setPhotoIndex((photoIndex + 1) % images.length) + } + /> + )} + + ); +} diff --git a/app/menu/page.js b/app/menu/page.js new file mode 100644 index 0000000..4cca857 --- /dev/null +++ b/app/menu/page.js @@ -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 ( + <> + + {/* Menu Section */} + + + + ) +} diff --git a/app/page.js b/app/page.js index 8b8c3e4..c8a1bde 100644 --- a/app/page.js +++ b/app/page.js @@ -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() { {/*
+ +
+ + View All Menu + +
); diff --git a/components/sections/home2/blog.js b/components/sections/home2/blog.js new file mode 100644 index 0000000..994b305 --- /dev/null +++ b/components/sections/home2/blog.js @@ -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 ( +
+
+
+ {Blogs.map((blog) => ( +
+
+ {/* Blog Image */} +
+ {blog.title} +
+ + {/* Blog Title */} +
+

+ + {stripHtml(blog.title)} + +

+ + {/* Blog Excerpt */} +

+ {truncateWords(stripHtml(blog.para))} +

+ + {/* Read More Button */} + + Read More + +
+
+
+ ))} +
+
+
+ ); +} diff --git a/package-lock.json b/package-lock.json index 8398773..6367469 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 7bfaec1..faa4e1f 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/public/assets/css/global.css b/public/assets/css/global.css index 5e4a00c..1f73d11 100644 --- a/public/assets/css/global.css +++ b/public/assets/css/global.css @@ -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 */ diff --git a/public/assets/css/responsive.css b/public/assets/css/responsive.css index d82b170..5bb50b7 100644 --- a/public/assets/css/responsive.css +++ b/public/assets/css/responsive.css @@ -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; diff --git a/public/assets/css/style.css b/public/assets/css/style.css index be1f8d3..7417003 100644 --- a/public/assets/css/style.css +++ b/public/assets/css/style.css @@ -2351,7 +2351,7 @@ position: relative; padding-bottom: 0px; background-color: #050505; - /* background-color: #e0766d; */ + /* background-color: #e0766d; */ } @@ -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 { @@ -5468,7 +5468,7 @@ } .spec { - color: #cf2d1f; + color: #cf2d1f; } /*** @@ -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 { @@ -7504,4 +7504,45 @@ opacity: 0.5; -webkit-filter: grayscale(100%); filter: grayscale(100%); -} \ No newline at end of file +} + +.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; + } +} diff --git a/public/assets/images/about/about-banner.webp b/public/assets/images/about/about-banner.webp new file mode 100644 index 0000000..6a78903 Binary files /dev/null and b/public/assets/images/about/about-banner.webp differ diff --git a/public/assets/images/about/about-us-element.webp b/public/assets/images/about/about-us-element.webp new file mode 100644 index 0000000..bfeec58 Binary files /dev/null and b/public/assets/images/about/about-us-element.webp differ diff --git a/public/assets/images/about/about-us.webp b/public/assets/images/about/about-us.webp new file mode 100644 index 0000000..7bd5503 Binary files /dev/null and b/public/assets/images/about/about-us.webp differ diff --git a/public/assets/images/about/card-1.webp b/public/assets/images/about/card-1.webp new file mode 100644 index 0000000..460367a Binary files /dev/null and b/public/assets/images/about/card-1.webp differ diff --git a/public/assets/images/about/card-2.webp b/public/assets/images/about/card-2.webp new file mode 100644 index 0000000..9fb678b Binary files /dev/null and b/public/assets/images/about/card-2.webp differ diff --git a/public/assets/images/about/card-3.webp b/public/assets/images/about/card-3.webp new file mode 100644 index 0000000..fa55785 Binary files /dev/null and b/public/assets/images/about/card-3.webp differ diff --git a/public/assets/images/about/fresh-flavour-left-bottom-element.webp b/public/assets/images/about/fresh-flavour-left-bottom-element.webp new file mode 100644 index 0000000..ccb335c Binary files /dev/null and b/public/assets/images/about/fresh-flavour-left-bottom-element.webp differ diff --git a/public/assets/images/about/fresh-flavour-right.webp b/public/assets/images/about/fresh-flavour-right.webp new file mode 100644 index 0000000..10ce182 Binary files /dev/null and b/public/assets/images/about/fresh-flavour-right.webp differ diff --git a/public/assets/images/about/review-right-bottom-element.webp b/public/assets/images/about/review-right-bottom-element.webp new file mode 100644 index 0000000..07e69bc Binary files /dev/null and b/public/assets/images/about/review-right-bottom-element.webp differ diff --git a/public/assets/images/home/review-right-bottom-element-home.webp b/public/assets/images/home/review-right-bottom-element-home.webp new file mode 100644 index 0000000..6a70593 Binary files /dev/null and b/public/assets/images/home/review-right-bottom-element-home.webp differ diff --git a/public/assets/images/inner-banner/blog-banner.webp b/public/assets/images/inner-banner/blog-banner.webp new file mode 100644 index 0000000..b81dbb3 Binary files /dev/null and b/public/assets/images/inner-banner/blog-banner.webp differ diff --git a/public/assets/images/inner-banner/contact-us-banner.webp b/public/assets/images/inner-banner/contact-us-banner.webp new file mode 100644 index 0000000..fb56a6e Binary files /dev/null and b/public/assets/images/inner-banner/contact-us-banner.webp differ diff --git a/public/assets/images/inner-banner/gallery-banner.webp b/public/assets/images/inner-banner/gallery-banner.webp new file mode 100644 index 0000000..e7a1c47 Binary files /dev/null and b/public/assets/images/inner-banner/gallery-banner.webp differ diff --git a/public/assets/images/inner-banner/menu-banner.webp b/public/assets/images/inner-banner/menu-banner.webp new file mode 100644 index 0000000..4ade38e Binary files /dev/null and b/public/assets/images/inner-banner/menu-banner.webp differ diff --git a/utils/constant.utils.js b/utils/constant.utils.js index 5c3c0a6..e310007 100644 --- a/utils/constant.utils.js +++ b/utils/constant.utils.js @@ -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: ` +
+

Waterloo Street Food Scene

+
+

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.

+

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.

+ +
+ “Street food in Waterloo is more than just a snack; it’s a culinary adventure on every corner.” +
+ +
+

Must-Try Dishes

+
+ + `, + }, + { + 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: ` +
+

Vegan Street Food in Cambridge

+
+ +
+

Why Cambridge Vegan Street Food Rocks

+
+

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.

+

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.

+ +
+ “Vegan street food is proof that plant-based can be indulgent, creative, and full of flavor at the same time.” +
+ +
+

Top Vegan Street Eats

+
+ + `, + }, + { + 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: ` +
+

Gluten-Free Street Food in Waterloo

+
+ +
+

GF Options You’ll Love

+
+

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.

+

Attention to ingredient sourcing and preparation ensures that every dish is flavorful, safe, and satisfying for gluten-sensitive diners.

+ +
+ “Going gluten-free doesn’t mean missing out — Waterloo street food has you covered with safe, tasty alternatives.” +
+ +
+

Must-Try GF Street Eats

+
+ + `, + } +]; + +export default Blogs;