diff options
Diffstat (limited to 'frontend/src/app')
-rw-r--r-- | frontend/src/app/(auth)/login/page.js | 34 | ||||
-rw-r--r-- | frontend/src/app/(auth)/register/page.js | 34 | ||||
-rw-r--r-- | frontend/src/app/admin/page.js | 293 | ||||
-rw-r--r-- | frontend/src/app/favicon.ico | bin | 0 -> 25931 bytes | |||
-rw-r--r-- | frontend/src/app/globals.css | 122 | ||||
-rw-r--r-- | frontend/src/app/layout.js | 30 | ||||
-rw-r--r-- | frontend/src/app/page.js | 219 |
7 files changed, 732 insertions, 0 deletions
diff --git a/frontend/src/app/(auth)/login/page.js b/frontend/src/app/(auth)/login/page.js new file mode 100644 index 0000000..03208e0 --- /dev/null +++ b/frontend/src/app/(auth)/login/page.js @@ -0,0 +1,34 @@ +import Link from 'next/link'; +import LoginForm from '@/components/auth/LoginForm'; + +export const metadata = { + title: 'Login - Restaurant Management System', + description: 'Login to your account', +}; + +const LoginPage = () => { + return ( + <div className="min-h-screen flex flex-col justify-center items-center p-4 bg-gray-50 dark:bg-slate-900"> + <div className="w-full max-w-md text-center mb-8"> + <Link href="/" className="text-2xl font-bold text-primary"> + Restaurant + </Link> + <h1 className="text-3xl font-bold mt-6">Welcome Back</h1> + <p className="text-gray-600 dark:text-gray-400 mt-2"> + Enter your credentials to access your account + </p> + </div> + + <LoginForm /> + + <p className="mt-8 text-center text-gray-600 dark:text-gray-400"> + Don't have an account?{' '} + <Link href="/register" className="text-primary hover:underline"> + Register here + </Link> + </p> + </div> + ); +}; + +export default LoginPage;
\ No newline at end of file diff --git a/frontend/src/app/(auth)/register/page.js b/frontend/src/app/(auth)/register/page.js new file mode 100644 index 0000000..1916413 --- /dev/null +++ b/frontend/src/app/(auth)/register/page.js @@ -0,0 +1,34 @@ +import Link from 'next/link'; +import RegisterForm from '@/components/auth/RegisterForm'; + +export const metadata = { + title: 'Register - Restaurant Management System', + description: 'Create a new account', +}; + +const RegisterPage = () => { + return ( + <div className="min-h-screen flex flex-col justify-center items-center p-4 bg-gray-50 dark:bg-slate-900"> + <div className="w-full max-w-md text-center mb-8"> + <Link href="/" className="text-2xl font-bold text-primary"> + Restaurant + </Link> + <h1 className="text-3xl font-bold mt-6">Create Account</h1> + <p className="text-gray-600 dark:text-gray-400 mt-2"> + Join us to enjoy delicious food and exclusive offers + </p> + </div> + + <RegisterForm /> + + <p className="mt-8 text-center text-gray-600 dark:text-gray-400"> + Already have an account?{' '} + <Link href="/login" className="text-primary hover:underline"> + Login here + </Link> + </p> + </div> + ); +}; + +export default RegisterPage;
\ No newline at end of file diff --git a/frontend/src/app/admin/page.js b/frontend/src/app/admin/page.js new file mode 100644 index 0000000..9f0e737 --- /dev/null +++ b/frontend/src/app/admin/page.js @@ -0,0 +1,293 @@ +import AdminLayout from '@/components/layouts/AdminLayout'; + +export const metadata = { + title: 'Admin Dashboard - Restaurant Management System', + description: 'Admin dashboard for managing the restaurant', +}; + +const AdminDashboard = () => { + return ( + <AdminLayout> + <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8"> + {/* Stats Card: Total Orders */} + <div className="bg-white dark:bg-slate-800 p-6 rounded-lg shadow-md"> + <h3 className="text-sm font-medium text-gray-500 dark:text-gray-400 mb-1"> + Total Orders + </h3> + <p className="text-3xl font-bold">128</p> + <div className="mt-2 flex items-center text-sm text-green-600"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="16" + height="16" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" + className="mr-1" + > + <polyline points="23 6 13.5 15.5 8.5 10.5 1 18" /> + <polyline points="17 6 23 6 23 12" /> + </svg> + <span>12% increase</span> + </div> + </div> + + {/* Stats Card: Revenue */} + <div className="bg-white dark:bg-slate-800 p-6 rounded-lg shadow-md"> + <h3 className="text-sm font-medium text-gray-500 dark:text-gray-400 mb-1"> + Revenue + </h3> + <p className="text-3xl font-bold">$3,240</p> + <div className="mt-2 flex items-center text-sm text-green-600"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="16" + height="16" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" + className="mr-1" + > + <polyline points="23 6 13.5 15.5 8.5 10.5 1 18" /> + <polyline points="17 6 23 6 23 12" /> + </svg> + <span>8% increase</span> + </div> + </div> + + {/* Stats Card: Customers */} + <div className="bg-white dark:bg-slate-800 p-6 rounded-lg shadow-md"> + <h3 className="text-sm font-medium text-gray-500 dark:text-gray-400 mb-1"> + Customers + </h3> + <p className="text-3xl font-bold">64</p> + <div className="mt-2 flex items-center text-sm text-green-600"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="16" + height="16" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" + className="mr-1" + > + <polyline points="23 6 13.5 15.5 8.5 10.5 1 18" /> + <polyline points="17 6 23 6 23 12" /> + </svg> + <span>24% increase</span> + </div> + </div> + + {/* Stats Card: Reservations */} + <div className="bg-white dark:bg-slate-800 p-6 rounded-lg shadow-md"> + <h3 className="text-sm font-medium text-gray-500 dark:text-gray-400 mb-1"> + Reservations + </h3> + <p className="text-3xl font-bold">32</p> + <div className="mt-2 flex items-center text-sm text-yellow-600"> + <svg + xmlns="http://www.w3.org/2000/svg" + width="16" + height="16" + viewBox="0 0 24 24" + fill="none" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + strokeLinejoin="round" + className="mr-1" + > + <line x1="5" y1="12" x2="19" y2="12" /> + </svg> + <span>Same as last week</span> + </div> + </div> + </div> + + {/* Recent Orders */} + <div className="bg-white dark:bg-slate-800 rounded-lg shadow-md mb-8"> + <div className="p-6 border-b border-gray-200 dark:border-slate-700"> + <h2 className="text-lg font-semibold">Recent Orders</h2> + </div> + <div className="overflow-x-auto"> + <table className="w-full text-sm"> + <thead className="bg-gray-50 dark:bg-slate-700"> + <tr> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Order ID + </th> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Customer + </th> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Date + </th> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Status + </th> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Amount + </th> + </tr> + </thead> + <tbody className="divide-y divide-gray-200 dark:divide-slate-700"> + <tr> + <td className="px-6 py-4 whitespace-nowrap">#ORDER123</td> + <td className="px-6 py-4 whitespace-nowrap">John Smith</td> + <td className="px-6 py-4 whitespace-nowrap">Apr 28, 2025</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-800/20 dark:text-green-400"> + Completed + </span> + </td> + <td className="px-6 py-4 whitespace-nowrap">$128.50</td> + </tr> + <tr> + <td className="px-6 py-4 whitespace-nowrap">#ORDER122</td> + <td className="px-6 py-4 whitespace-nowrap">Sarah Johnson</td> + <td className="px-6 py-4 whitespace-nowrap">Apr 28, 2025</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800 dark:bg-yellow-800/20 dark:text-yellow-400"> + Preparing + </span> + </td> + <td className="px-6 py-4 whitespace-nowrap">$75.20</td> + </tr> + <tr> + <td className="px-6 py-4 whitespace-nowrap">#ORDER121</td> + <td className="px-6 py-4 whitespace-nowrap">Michael Brown</td> + <td className="px-6 py-4 whitespace-nowrap">Apr 27, 2025</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-blue-100 text-blue-800 dark:bg-blue-800/20 dark:text-blue-400"> + Delivered + </span> + </td> + <td className="px-6 py-4 whitespace-nowrap">$92.40</td> + </tr> + <tr> + <td className="px-6 py-4 whitespace-nowrap">#ORDER120</td> + <td className="px-6 py-4 whitespace-nowrap">Emma Wilson</td> + <td className="px-6 py-4 whitespace-nowrap">Apr 27, 2025</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-800/20 dark:text-green-400"> + Completed + </span> + </td> + <td className="px-6 py-4 whitespace-nowrap">$54.60</td> + </tr> + <tr> + <td className="px-6 py-4 whitespace-nowrap">#ORDER119</td> + <td className="px-6 py-4 whitespace-nowrap">David Clark</td> + <td className="px-6 py-4 whitespace-nowrap">Apr 26, 2025</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-red-100 text-red-800 dark:bg-red-800/20 dark:text-red-400"> + Cancelled + </span> + </td> + <td className="px-6 py-4 whitespace-nowrap">$0.00</td> + </tr> + </tbody> + </table> + </div> + </div> + + {/* Today's Reservations */} + <div className="bg-white dark:bg-slate-800 rounded-lg shadow-md"> + <div className="p-6 border-b border-gray-200 dark:border-slate-700"> + <h2 className="text-lg font-semibold">Today's Reservations</h2> + </div> + <div className="overflow-x-auto"> + <table className="w-full text-sm"> + <thead className="bg-gray-50 dark:bg-slate-700"> + <tr> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Customer + </th> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Time + </th> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Table + </th> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Guests + </th> + <th className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider"> + Status + </th> + </tr> + </thead> + <tbody className="divide-y divide-gray-200 dark:divide-slate-700"> + <tr> + <td className="px-6 py-4 whitespace-nowrap">Jessica Lee</td> + <td className="px-6 py-4 whitespace-nowrap">12:30 PM</td> + <td className="px-6 py-4 whitespace-nowrap">Table 5</td> + <td className="px-6 py-4 whitespace-nowrap">4</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-800/20 dark:text-green-400"> + Confirmed + </span> + </td> + </tr> + <tr> + <td className="px-6 py-4 whitespace-nowrap">Robert Taylor</td> + <td className="px-6 py-4 whitespace-nowrap">1:00 PM</td> + <td className="px-6 py-4 whitespace-nowrap">Table 8</td> + <td className="px-6 py-4 whitespace-nowrap">2</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-800/20 dark:text-green-400"> + Confirmed + </span> + </td> + </tr> + <tr> + <td className="px-6 py-4 whitespace-nowrap">Maria Rodriguez</td> + <td className="px-6 py-4 whitespace-nowrap">7:00 PM</td> + <td className="px-6 py-4 whitespace-nowrap">Table 12</td> + <td className="px-6 py-4 whitespace-nowrap">6</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800 dark:bg-yellow-800/20 dark:text-yellow-400"> + Pending + </span> + </td> + </tr> + <tr> + <td className="px-6 py-4 whitespace-nowrap">James Wilson</td> + <td className="px-6 py-4 whitespace-nowrap">7:30 PM</td> + <td className="px-6 py-4 whitespace-nowrap">Table 3</td> + <td className="px-6 py-4 whitespace-nowrap">2</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-800/20 dark:text-green-400"> + Confirmed + </span> + </td> + </tr> + <tr> + <td className="px-6 py-4 whitespace-nowrap">Emily Davis</td> + <td className="px-6 py-4 whitespace-nowrap">8:00 PM</td> + <td className="px-6 py-4 whitespace-nowrap">Table 7</td> + <td className="px-6 py-4 whitespace-nowrap">4</td> + <td className="px-6 py-4 whitespace-nowrap"> + <span className="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800 dark:bg-green-800/20 dark:text-green-400"> + Confirmed + </span> + </td> + </tr> + </tbody> + </table> + </div> + </div> + </AdminLayout> + ); +}; + +export default AdminDashboard;
\ No newline at end of file diff --git a/frontend/src/app/favicon.ico b/frontend/src/app/favicon.ico Binary files differnew file mode 100644 index 0000000..718d6fe --- /dev/null +++ b/frontend/src/app/favicon.ico diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css new file mode 100644 index 0000000..dc98be7 --- /dev/null +++ b/frontend/src/app/globals.css @@ -0,0 +1,122 @@ +@import "tailwindcss"; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); +} + +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.556 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/frontend/src/app/layout.js b/frontend/src/app/layout.js new file mode 100644 index 0000000..de45098 --- /dev/null +++ b/frontend/src/app/layout.js @@ -0,0 +1,30 @@ +import { Inter } from "next/font/google"; +import "./globals.css"; +import { ThemeProvider } from "@/context/theme-context"; +import { AuthProvider } from "@/context/auth-context"; +import { CartProvider } from "@/context/cart-context"; +import { Sonner } from "@/components/ui/sonner"; + +const inter = Inter({ subsets: ["latin"] }); + +export const metadata = { + title: "Restaurant Management System", + description: "A full-stack application for restaurant management", +}; + +export default function RootLayout({ children }) { + return ( + <html lang="en" suppressHydrationWarning> + <body className={inter.className}> + <ThemeProvider> + <AuthProvider> + <CartProvider> + {children} + <Sonner /> + </CartProvider> + </AuthProvider> + </ThemeProvider> + </body> + </html> + ); +} diff --git a/frontend/src/app/page.js b/frontend/src/app/page.js new file mode 100644 index 0000000..2c7ec34 --- /dev/null +++ b/frontend/src/app/page.js @@ -0,0 +1,219 @@ +import Link from 'next/link'; +import MainLayout from '@/components/layouts/MainLayout'; + +export default function Home() { + return ( + <MainLayout> + {/* Hero section */} + <section className="py-16 md:py-24"> + <div className="container mx-auto text-center"> + <h1 className="text-4xl md:text-6xl font-bold mb-6"> + Experience the <span className="text-primary">Finest</span> Cuisine + </h1> + <p className="text-lg md:text-xl text-gray-600 dark:text-gray-400 mb-8 max-w-3xl mx-auto"> + Welcome to our restaurant, where we serve delicious meals made with fresh ingredients and a passion for culinary excellence. + </p> + <div className="flex flex-wrap justify-center gap-4"> + <Link + href="/menu" + className="px-6 py-3 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors" + > + View Menu + </Link> + <Link + href="/reservations" + className="px-6 py-3 bg-white dark:bg-slate-800 border border-gray-300 dark:border-slate-700 rounded-md hover:bg-gray-50 dark:hover:bg-slate-700 transition-colors" + > + Book a Table + </Link> + </div> + </div> + </section> + + {/* Featured Menu Items */} + <section className="py-16 bg-gray-50 dark:bg-slate-800/50"> + <div className="container mx-auto"> + <h2 className="text-3xl font-bold mb-12 text-center">Featured Menu Items</h2> + <div className="grid grid-cols-1 md:grid-cols-3 gap-8"> + {/* Item 1 */} + <div className="bg-white dark:bg-slate-800 rounded-lg overflow-hidden shadow-md"> + <div className="h-48 bg-gray-300 dark:bg-gray-700"></div> + <div className="p-6"> + <h3 className="text-xl font-bold mb-2">Signature Pasta</h3> + <p className="text-gray-600 dark:text-gray-400 mb-4"> + Handmade pasta with our special sauce and fresh herbs. + </p> + <div className="flex justify-between items-center"> + <span className="text-lg font-bold">$18.99</span> + <button className="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors"> + Order Now + </button> + </div> + </div> + </div> + + {/* Item 2 */} + <div className="bg-white dark:bg-slate-800 rounded-lg overflow-hidden shadow-md"> + <div className="h-48 bg-gray-300 dark:bg-gray-700"></div> + <div className="p-6"> + <h3 className="text-xl font-bold mb-2">Premium Steak</h3> + <p className="text-gray-600 dark:text-gray-400 mb-4"> + Juicy, tender steak cooked to perfection with seasonal vegetables. + </p> + <div className="flex justify-between items-center"> + <span className="text-lg font-bold">$29.99</span> + <button className="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors"> + Order Now + </button> + </div> + </div> + </div> + + {/* Item 3 */} + <div className="bg-white dark:bg-slate-800 rounded-lg overflow-hidden shadow-md"> + <div className="h-48 bg-gray-300 dark:bg-gray-700"></div> + <div className="p-6"> + <h3 className="text-xl font-bold mb-2">Seafood Delight</h3> + <p className="text-gray-600 dark:text-gray-400 mb-4"> + Fresh seafood mix with special spices and lemon butter sauce. + </p> + <div className="flex justify-between items-center"> + <span className="text-lg font-bold">$24.99</span> + <button className="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors"> + Order Now + </button> + </div> + </div> + </div> + </div> + <div className="text-center mt-12"> + <Link + href="/menu" + className="px-6 py-3 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors" + > + View Full Menu + </Link> + </div> + </div> + </section> + + {/* About Section */} + <section className="py-16"> + <div className="container mx-auto"> + <div className="flex flex-col md:flex-row items-center gap-12"> + <div className="md:w-1/2"> + <div className="h-80 bg-gray-300 dark:bg-gray-700 rounded-lg"></div> + </div> + <div className="md:w-1/2"> + <h2 className="text-3xl font-bold mb-6">Our Story</h2> + <p className="text-gray-600 dark:text-gray-400 mb-4"> + Founded in 2010, our restaurant has been serving the community with delicious meals made from the freshest ingredients. Our chefs are passionate about creating unforgettable dining experiences. + </p> + <p className="text-gray-600 dark:text-gray-400 mb-6"> + We believe in sustainable practices and source our ingredients from local farmers and suppliers whenever possible. + </p> + <Link + href="/about" + className="px-6 py-3 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors" + > + Learn More + </Link> + </div> + </div> + </div> + </section> + + {/* Testimonials */} + <section className="py-16 bg-gray-50 dark:bg-slate-800/50"> + <div className="container mx-auto"> + <h2 className="text-3xl font-bold mb-12 text-center">What Our Customers Say</h2> + <div className="grid grid-cols-1 md:grid-cols-3 gap-8"> + {/* Testimonial 1 */} + <div className="bg-white dark:bg-slate-800 p-6 rounded-lg shadow-md"> + <div className="flex items-center mb-4"> + <div className="w-12 h-12 bg-gray-300 dark:bg-gray-700 rounded-full mr-4"></div> + <div> + <h3 className="font-bold">John Smith</h3> + <div className="flex text-yellow-400"> + <span>★</span> + <span>★</span> + <span>★</span> + <span>★</span> + <span>★</span> + </div> + </div> + </div> + <p className="text-gray-600 dark:text-gray-400"> + "The food was amazing and the service was exceptional. I will definitely be coming back!" + </p> + </div> + + {/* Testimonial 2 */} + <div className="bg-white dark:bg-slate-800 p-6 rounded-lg shadow-md"> + <div className="flex items-center mb-4"> + <div className="w-12 h-12 bg-gray-300 dark:bg-gray-700 rounded-full mr-4"></div> + <div> + <h3 className="font-bold">Sarah Johnson</h3> + <div className="flex text-yellow-400"> + <span>★</span> + <span>★</span> + <span>★</span> + <span>★</span> + <span>★</span> + </div> + </div> + </div> + <p className="text-gray-600 dark:text-gray-400"> + "Perfect place for a special occasion. The ambiance was lovely and the food was delicious." + </p> + </div> + + {/* Testimonial 3 */} + <div className="bg-white dark:bg-slate-800 p-6 rounded-lg shadow-md"> + <div className="flex items-center mb-4"> + <div className="w-12 h-12 bg-gray-300 dark:bg-gray-700 rounded-full mr-4"></div> + <div> + <h3 className="font-bold">Michael Brown</h3> + <div className="flex text-yellow-400"> + <span>★</span> + <span>★</span> + <span>★</span> + <span>★</span> + <span>★</span> + </div> + </div> + </div> + <p className="text-gray-600 dark:text-gray-400"> + "I've tried many restaurants in the area, but this one stands out. The flavors are authentic and the staff is friendly." + </p> + </div> + </div> + </div> + </section> + + {/* Call to Action */} + <section className="py-16 bg-primary text-white"> + <div className="container mx-auto text-center"> + <h2 className="text-3xl font-bold mb-6">Ready to Experience Our Cuisine?</h2> + <p className="text-xl mb-8 max-w-3xl mx-auto"> + Book your table now or order online for pickup or delivery. + </p> + <div className="flex flex-wrap justify-center gap-4"> + <Link + href="/reservations" + className="px-6 py-3 bg-white text-primary font-bold rounded-md hover:bg-gray-100 transition-colors" + > + Book a Table + </Link> + <Link + href="/menu" + className="px-6 py-3 bg-transparent border-2 border-white rounded-md hover:bg-white/10 transition-colors" + > + Order Online + </Link> + </div> + </div> + </section> + </MainLayout> + ); +} |