Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f456e7e09 | |||
| 8016d3e5da | |||
| 8fc04cdcaa | |||
| 49bf7b0974 | |||
| 70495d54c5 | |||
| 3eff696895 | |||
| 4eeffb9410 | |||
| 5fd1d1e9b3 |
@@ -1,54 +1,21 @@
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { DM_Sans } from "next/font/google";
|
|
||||||
import { Inter } from "next/font/google";
|
import { Inter } from "next/font/google";
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
import { ServiceWrapper } from "@/components/ServiceWrapper";
|
|
||||||
import Tag from "@/tag/Tag";
|
|
||||||
|
|
||||||
const dmSans = DM_Sans({
|
const inter = Inter({ subsets: ["latin"] });
|
||||||
variable: "--font-dm-sans", subsets: ["latin"],
|
|
||||||
});
|
|
||||||
|
|
||||||
const inter = Inter({
|
|
||||||
variable: "--font-inter", subsets: ["latin"],
|
|
||||||
});
|
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Sun Hotels - Multi-Cuisine Restaurant Udumalaipettai", description: "Authentic multi-cuisine dining at Sun Hotels, Udumalaipettai. Specializing in Chettinad cuisine, spacious AC dining, free parking, and exceptional service. Reserve your table today.", keywords: "restaurant Udumalaipettai, Chettinad cuisine, multi-cuisine restaurant, authentic food, family dining, best restaurant Tamil Nadu", metadataBase: new URL("https://sunhotelsudumalaipettai.com"),
|
title: "Sun Hotels - Multi-Cuisine Restaurant", description: "Authentic taste and comfortable dining at Sun Hotels, located at UKPM Square, Udumalaipettai. Experience Chettinad and multi-cuisine specialties."
|
||||||
alternates: {
|
|
||||||
canonical: "https://sunhotelsudumalaipettai.com"
|
|
||||||
},
|
|
||||||
openGraph: {
|
|
||||||
title: "Sun Hotels - Authentic Multi-Cuisine Restaurant", description: "Experience premium multi-cuisine dining with authentic Chettinad specialties, spacious ambience, and exceptional service at Sun Hotels in Udumalaipettai.", url: "https://sunhotelsudumalaipettai.com", siteName: "Sun Hotels", images: [
|
|
||||||
{
|
|
||||||
url: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AX9aeiPEMX5CxW1d7qMul1H4jm/uploaded-1772728290259-kzbva66l.jpg", alt: "Sun Hotels restaurant exterior and dining experience"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
type: "website"
|
|
||||||
},
|
|
||||||
twitter: {
|
|
||||||
card: "summary_large_image", title: "Sun Hotels - Udumalaipettai", description: "Multi-cuisine restaurant featuring authentic Chettinad dishes, spacious dining, and exceptional hospitality.", images: ["https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AX9aeiPEMX5CxW1d7qMul1H4jm/uploaded-1772728290259-kzbva66l.jpg"]
|
|
||||||
},
|
|
||||||
robots: {
|
|
||||||
index: true,
|
|
||||||
follow: true
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
children,
|
children,
|
||||||
}: Readonly<{
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}>) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<html lang="en" suppressHydrationWarning>
|
<html lang="en">
|
||||||
<ServiceWrapper>
|
<body className={inter.className}>{children}
|
||||||
<body
|
|
||||||
className={`${dmSans.variable} ${inter.variable} antialiased`}
|
|
||||||
>
|
|
||||||
<Tag />
|
|
||||||
{children}
|
|
||||||
|
|
||||||
<script
|
<script
|
||||||
dangerouslySetInnerHTML={{
|
dangerouslySetInnerHTML={{
|
||||||
__html: `
|
__html: `
|
||||||
@@ -1416,7 +1383,6 @@ export default function RootLayout({
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</body>
|
</body>
|
||||||
</ServiceWrapper>
|
|
||||||
</html>
|
</html>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
116
src/app/page.tsx
116
src/app/page.tsx
@@ -1,5 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
|
import { useState } from "react";
|
||||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||||
import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay";
|
import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay";
|
||||||
import HeroBillboardTestimonial from "@/components/sections/hero/HeroBillboardTestimonial";
|
import HeroBillboardTestimonial from "@/components/sections/hero/HeroBillboardTestimonial";
|
||||||
@@ -25,9 +26,36 @@ import {
|
|||||||
Users,
|
Users,
|
||||||
Flame,
|
Flame,
|
||||||
Star,
|
Star,
|
||||||
|
CheckCircle,
|
||||||
|
Calendar,
|
||||||
|
Clock,
|
||||||
|
Users as GuestIcon,
|
||||||
|
Shield,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
|
|
||||||
export default function SunHotelsLanding() {
|
export default function SunHotelsLanding() {
|
||||||
|
const [reservationConfirmation, setReservationConfirmation] = useState<{
|
||||||
|
show: boolean;
|
||||||
|
data: Record<string, string> | null;
|
||||||
|
}>({
|
||||||
|
show: false,
|
||||||
|
data: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
const handleReservationSubmit = (data: Record<string, string>) => {
|
||||||
|
setReservationConfirmation({
|
||||||
|
show: true,
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const closeConfirmation = () => {
|
||||||
|
setReservationConfirmation({
|
||||||
|
show: false,
|
||||||
|
data: null,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider
|
<ThemeProvider
|
||||||
defaultButtonVariant="icon-arrow"
|
defaultButtonVariant="icon-arrow"
|
||||||
@@ -41,6 +69,91 @@ export default function SunHotelsLanding() {
|
|||||||
secondaryButtonStyle="layered"
|
secondaryButtonStyle="layered"
|
||||||
headingFontWeight="bold"
|
headingFontWeight="bold"
|
||||||
>
|
>
|
||||||
|
{reservationConfirmation.show && reservationConfirmation.data && (
|
||||||
|
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4">
|
||||||
|
<div className="w-full max-w-md rounded-3xl bg-white p-8 shadow-2xl">
|
||||||
|
<div className="flex justify-center mb-6">
|
||||||
|
<CheckCircle className="w-16 h-16 text-green-500" />
|
||||||
|
</div>
|
||||||
|
<h2 className="text-2xl font-bold text-center mb-2 text-gray-900">
|
||||||
|
Reservation Confirmed!
|
||||||
|
</h2>
|
||||||
|
<p className="text-center text-gray-600 mb-6">
|
||||||
|
Thank you for booking with us. Your table is reserved.
|
||||||
|
</p>
|
||||||
|
<div className="bg-gray-50 rounded-2xl p-6 space-y-4 mb-6">
|
||||||
|
<div className="flex items-start gap-3">
|
||||||
|
<span className="text-gray-400 mt-1">👤</span>
|
||||||
|
<div>
|
||||||
|
<p className="text-sm text-gray-500">Guest Name</p>
|
||||||
|
<p className="font-semibold text-gray-900">
|
||||||
|
{reservationConfirmation.data.name}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-3">
|
||||||
|
<Calendar className="w-5 h-5 text-gray-400 mt-0.5" />
|
||||||
|
<div>
|
||||||
|
<p className="text-sm text-gray-500">Date</p>
|
||||||
|
<p className="font-semibold text-gray-900">
|
||||||
|
{new Date(reservationConfirmation.data.date).toLocaleDateString(
|
||||||
|
"en-US", {
|
||||||
|
weekday: "long", year: "numeric", month: "long", day: "numeric"}
|
||||||
|
)}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-3">
|
||||||
|
<Clock className="w-5 h-5 text-gray-400 mt-0.5" />
|
||||||
|
<div>
|
||||||
|
<p className="text-sm text-gray-500">Time</p>
|
||||||
|
<p className="font-semibold text-gray-900">
|
||||||
|
{reservationConfirmation.data.time}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-3">
|
||||||
|
<GuestIcon className="w-5 h-5 text-gray-400 mt-0.5" />
|
||||||
|
<div>
|
||||||
|
<p className="text-sm text-gray-500">Number of Guests</p>
|
||||||
|
<p className="font-semibold text-gray-900">
|
||||||
|
{reservationConfirmation.data.guests} {reservationConfirmation.data.guests === "1" ? "guest" : "guests"}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-3">
|
||||||
|
<Phone className="w-5 h-5 text-gray-400 mt-0.5" />
|
||||||
|
<div>
|
||||||
|
<p className="text-sm text-gray-500">Contact Number</p>
|
||||||
|
<p className="font-semibold text-gray-900">
|
||||||
|
{reservationConfirmation.data.phone}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{reservationConfirmation.data.specialRequest && (
|
||||||
|
<div className="border-t border-gray-200 pt-4 mt-4">
|
||||||
|
<p className="text-sm text-gray-500 mb-2">Special Requests</p>
|
||||||
|
<p className="text-sm text-gray-700">
|
||||||
|
{reservationConfirmation.data.specialRequest}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div className="space-y-3">
|
||||||
|
<p className="text-sm text-gray-600 text-center">
|
||||||
|
A confirmation has been sent to your phone number. We look forward to serving you!
|
||||||
|
</p>
|
||||||
|
<button
|
||||||
|
onClick={closeConfirmation}
|
||||||
|
className="w-full bg-gradient-to-r from-orange-500 to-red-500 hover:from-orange-600 hover:to-red-600 text-white font-semibold py-3 rounded-full transition-all"
|
||||||
|
>
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<div id="nav" data-section="nav">
|
<div id="nav" data-section="nav">
|
||||||
<NavbarLayoutFloatingOverlay
|
<NavbarLayoutFloatingOverlay
|
||||||
brandName="Sun Hotels"
|
brandName="Sun Hotels"
|
||||||
@@ -198,7 +311,7 @@ export default function SunHotelsLanding() {
|
|||||||
<div id="reservation" data-section="reservation">
|
<div id="reservation" data-section="reservation">
|
||||||
<ContactSplitForm
|
<ContactSplitForm
|
||||||
title="Reserve Your Table"
|
title="Reserve Your Table"
|
||||||
description="Book your dining experience at Sun Hotels. We look forward to serving you authentic cuisine in a warm and welcoming atmosphere."
|
description="Book your dining experience at Sun Hotels with instant SMS confirmation. Your reservation is guaranteed, and we look forward to serving you authentic cuisine in a warm and welcoming atmosphere."
|
||||||
inputs={[
|
inputs={[
|
||||||
{ name: "name", type: "text", placeholder: "Your Full Name", required: true },
|
{ name: "name", type: "text", placeholder: "Your Full Name", required: true },
|
||||||
{ name: "phone", type: "tel", placeholder: "Phone Number", required: true },
|
{ name: "phone", type: "tel", placeholder: "Phone Number", required: true },
|
||||||
@@ -216,6 +329,7 @@ export default function SunHotelsLanding() {
|
|||||||
imageAlt="Elegant restaurant setting for reservations"
|
imageAlt="Elegant restaurant setting for reservations"
|
||||||
mediaAnimation="slide-up"
|
mediaAnimation="slide-up"
|
||||||
mediaPosition="right"
|
mediaPosition="right"
|
||||||
|
onSubmit={handleReservationSubmit}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user