8 Commits

Author SHA1 Message Date
8f456e7e09 Update src/app/page.tsx 2026-03-05 16:41:20 +00:00
8016d3e5da Update src/app/layout.tsx 2026-03-05 16:41:20 +00:00
8fc04cdcaa Merge version_2 into main
Merge version_2 into main
2026-03-05 16:37:52 +00:00
49bf7b0974 Update src/app/page.tsx 2026-03-05 16:37:47 +00:00
70495d54c5 Update src/app/layout.tsx 2026-03-05 16:37:46 +00:00
3eff696895 Merge version_1 into main
Merge version_1 into main
2026-03-05 16:35:25 +00:00
4eeffb9410 Merge version_1 into main
Merge version_1 into main
2026-03-05 16:34:29 +00:00
5fd1d1e9b3 Merge version_1 into main
Merge version_1 into main
2026-03-05 16:33:18 +00:00
2 changed files with 123 additions and 43 deletions

View File

@@ -1,54 +1,21 @@
import type { Metadata } from "next";
import { DM_Sans } from "next/font/google";
import { Inter } from "next/font/google";
import "./globals.css";
import { ServiceWrapper } from "@/components/ServiceWrapper";
import Tag from "@/tag/Tag";
const dmSans = DM_Sans({
variable: "--font-dm-sans", subsets: ["latin"],
});
const inter = Inter({
variable: "--font-inter", subsets: ["latin"],
});
const inter = Inter({ subsets: ["latin"] });
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"),
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
}
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."
};
export default function RootLayout({
children,
}: Readonly<{
}: {
children: React.ReactNode;
}>) {
}) {
return (
<html lang="en" suppressHydrationWarning>
<ServiceWrapper>
<body
className={`${dmSans.variable} ${inter.variable} antialiased`}
>
<Tag />
{children}
<html lang="en">
<body className={inter.className}>{children}
<script
dangerouslySetInnerHTML={{
__html: `
@@ -1416,7 +1383,6 @@ export default function RootLayout({
}}
/>
</body>
</ServiceWrapper>
</html>
);
}
}

View File

@@ -1,5 +1,6 @@
"use client";
import { useState } from "react";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay";
import HeroBillboardTestimonial from "@/components/sections/hero/HeroBillboardTestimonial";
@@ -25,9 +26,36 @@ import {
Users,
Flame,
Star,
CheckCircle,
Calendar,
Clock,
Users as GuestIcon,
Shield,
} from "lucide-react";
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 (
<ThemeProvider
defaultButtonVariant="icon-arrow"
@@ -41,6 +69,91 @@ export default function SunHotelsLanding() {
secondaryButtonStyle="layered"
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">
<NavbarLayoutFloatingOverlay
brandName="Sun Hotels"
@@ -198,7 +311,7 @@ export default function SunHotelsLanding() {
<div id="reservation" data-section="reservation">
<ContactSplitForm
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={[
{ name: "name", type: "text", placeholder: "Your Full Name", 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"
mediaAnimation="slide-up"
mediaPosition="right"
onSubmit={handleReservationSubmit}
/>
</div>
@@ -265,4 +379,4 @@ export default function SunHotelsLanding() {
</div>
</ThemeProvider>
);
}
}