Compare commits

...

3 Commits

Author SHA1 Message Date
srikanth_M
c9dd89b7b3 updated next config and feature pages 2026-04-06 22:23:12 +05:30
srikanth_M
37c251d7ba updated next config and feature pages 2026-04-04 18:54:47 +05:30
srikanth_M
966a1e0e18 updated next config and feature pages 2026-04-03 18:30:31 +05:30
154 changed files with 2044 additions and 894 deletions

View File

@ -1,36 +1,42 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: "export", // for static export
trailingSlash: true,
images: {
unoptimized: true, // required for static export
remotePatterns: [
{
protocol: 'https',
hostname: 'images.unsplash.com',
protocol: "https",
hostname: "images.unsplash.com",
},
{
protocol: 'https',
hostname: 'www.transparenttextures.com',
protocol: "https",
hostname: "www.transparenttextures.com",
},
{
protocol: 'https',
hostname: 'png.pngtree.com',
protocol: "https",
hostname: "png.pngtree.com",
},
{
protocol: 'https',
hostname: 'purepng.com',
protocol: "https",
hostname: "purepng.com",
},
{
protocol: 'https',
hostname: 'cdn-icons-png.flaticon.com',
protocol: "https",
hostname: "cdn-icons-png.flaticon.com",
},
{
protocol: 'https',
hostname: 'images.pexels.com',
}, {
protocol: 'https',
hostname: 'randomuser.me',
}, ],
protocol: "https",
hostname: "images.pexels.com",
},
{
protocol: "https",
hostname: "randomuser.me",
},
],
},
};
export default nextConfig;
export default nextConfig;

50
package-lock.json generated
View File

@ -1766,9 +1766,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -1776,13 +1776,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"version": "9.0.9",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
"brace-expansion": "^2.0.2"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@ -2139,9 +2139,9 @@
}
},
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
"integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -2418,9 +2418,9 @@
}
},
"node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
"integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -3565,9 +3565,9 @@
}
},
"node_modules/flatted": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
"integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
"integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true,
"license": "ISC"
},
@ -4916,9 +4916,9 @@
}
},
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"license": "ISC",
"dependencies": {
@ -5327,9 +5327,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@ -6128,9 +6128,9 @@
}
},
"node_modules/tinyglobby/node_modules/picomatch": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"engines": {

View File

@ -1,4 +1,5 @@
User-agent: *
Allow: /
Sitemap: https://dine360.vercel.app/sitemap.xml
Sitemap: https://dine360.vercel.app/sitemap.xml
Host: https://dine360.vercel.app

View File

@ -1,11 +1,369 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<!-- Main Pages -->
<url>
<loc>https://dine360.vercel.app/</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://dine360.vercel.app/</loc>
<lastmod>2026-04-01</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://dine360.vercel.app/about</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dine360.vercel.app/blog</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dine360.vercel.app/contact</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://dine360.vercel.app/faq</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://dine360.vercel.app/pricing</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://dine360.vercel.app/privacy</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://dine360.vercel.app/terms</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>yearly</changefreq>
<priority>0.5</priority>
</url>
<!-- Features Pages -->
<url>
<loc>https://dine360.vercel.app/features/business-dashboard</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/inventory-management</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/invoicing</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/kitchen-management</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/loyalty-management</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/multi-menu-management</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/order-management</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/pos</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/promotion-management</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/promotions</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/qr-code-menu</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/restaurant-website</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/table-reservation</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/team-communication</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://dine360.vercel.app/features/uber-integration</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<!-- Restaurant Types Pages -->
<url>
<loc>https://dine360.vercel.app/restaurant-types</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/bakery</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/bistro</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/buffet</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/cafe-bistro</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/cafeteria</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/casual-dining</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/coffee-house</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/concession</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/contemporary-casual</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/delivery-only</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/destination</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/digital-only</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/diner</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/family-style</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/fast-casual</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/fast-food</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/fine-dine</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/fine-dining</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/food-truck</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/full-service</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/ghost-kitchen</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/ghost-restaurant</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/mongolian-bbq</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/pop-up</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/pub</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/teppanyaki</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://dine360.vercel.app/restaurant-types/theme</loc>
<lastmod>2026-04-04</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
</urlset>

14
src/app/about/layout.tsx Normal file
View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'About Dine360 | Restaurant Management Platform',
description: 'Learn about Dine360 and how we help restaurants manage operations, improve efficiency, and grow with smart technology.',
}
export default function AboutLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -8,6 +8,10 @@ import Footer from '@/components/Footer';
import MarketValuationSection from '@/components/MarketValuationSection';
import { CheckCircle2, TrendingUp, Users, Trophy, ArrowRight } from 'lucide-react';
import aboutUsImg from '@/assets/about_us/about-us.webp';
import howItStartedImg from '@/assets/about_us/how-it-started.webp';
import ourPhilosophyImg from '@/assets/about_us/our-philosophy.webp';
const AboutPage = () => {
return (
<div className="min-h-screen bg-white text-zinc-900 font-sans selection:bg-rose-100 selection:text-rose-900">
@ -63,7 +67,7 @@ const AboutPage = () => {
className="relative h-75 sm:h-100 w-full rounded-[2.5rem] overflow-hidden"
>
<Image
src="https://images.unsplash.com/photo-1497215728101-856f4ea42174?auto=format&fit=crop&q=80&w=1200"
src={aboutUsImg}
alt="Modern Office"
fill
className="object-cover"
@ -79,7 +83,7 @@ const AboutPage = () => {
className="relative h-50 w-full rounded-[2.5rem] overflow-hidden"
>
<Image
src="https://images.unsplash.com/photo-1600880292203-757bb62b4baf?q=80&w=2070&auto=format&fit=crop"
src={ourPhilosophyImg}
alt="Team Collaboration"
fill
className="object-cover"
@ -206,7 +210,7 @@ const AboutPage = () => {
</div>
<Image
src="https://images.unsplash.com/photo-1522071820081-009f0129c71c?q=80&w=2070&auto=format&fit=crop"
src={howItStartedImg}
alt="Founders working"
fill
className="object-cover relative z-10"

14
src/app/blog/layout.tsx Normal file
View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Management Tips & Insights | Dine360',
description: 'Read Dine360 blog for restaurant tips, POS insights, marketing strategies, and industry trends to grow your business.',
}
export default function BlogLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Contact Dine360 | Restaurant Software Support',
description: 'Get in touch with Dine360 for demos, support, or pricing. We\'re here to help you grow your restaurant business.',
}
export default function ContactLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -4,6 +4,7 @@ import { Mail, Phone, MapPin, Facebook, Instagram, Linkedin, Youtube } from 'luc
import Navbar from '@/components/Navbar'
import Footer from '@/components/Footer'
import Image from 'next/image'
import contactImg from '@/assets/contact/contact.webp'
const ContactPage = () => {
return (
@ -117,7 +118,7 @@ const ContactPage = () => {
<div className="space-y-12">
<div className="relative rounded-[32px] overflow-hidden bg-zinc-100 aspect-[4/3] group">
<Image
src="https://images.pexels.com/photos/7703651/pexels-photo-7703651.jpeg"
src={contactImg}
alt="Quick Contact"
fill
className="object-cover transition-transform duration-700 group-hover:scale-105"

14
src/app/faq/layout.tsx Normal file
View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Software FAQs | Dine360',
description: 'Find answers about Dine360 features, pricing, setup, and support. Everything you need to know about our restaurant system.',
}
export default function FAQLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Analytics & Business Dashboard | Dine360',
description: 'Track sales, orders, and performance with Dine360 dashboard. Get real-time insights, reports, and analytics to grow your restaurant business.',
}
export default function BusinessDashboardLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -15,10 +15,15 @@ import {
FileText
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import DashboardOne from '@/assets/features/dashboard/dashboard-1.webp';
import DashboardTwo from '@/assets/features/dashboard/dashboard-2.webp';
const BusinessDashboardPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -74,31 +79,26 @@ const BusinessDashboardPage = () => {
{/* SECTION 2: ANALYTICS & REPORTING */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: Dashboard Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<BarChart3 className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<LineChart className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<Target className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.9 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border-8 border-white bg-white h-[400px] lg:h-[500px]"
>
<Image
src={DashboardOne}
alt="Dine360 Business Dashboard Analysis"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}
{/* Right: Text Content */}
<div className="space-y-6 order-1 lg:order-2">
<span className="inline-block px-5 py-1.5 bg-red-50 text-red-600 rounded-full text-xs font-bold uppercase tracking-wider border border-red-100">
@ -150,7 +150,7 @@ const BusinessDashboardPage = () => {
{/* SECTION 3: REAL-TIME PERFORMANCE (Dark) */}
<section className="py-24 bg-zinc-900 text-white relative overflow-hidden">
<div className="absolute inset-0 opacity-10 bg-[radial-gradient(#ef4444_1px,transparent_1px)] bg-[size:32px_32px]" />
<div className="absolute inset-0 opacity-10 bg-[radial-gradient(#ef4444_1px,transparent_1px)] bg-size-[32px_32px]" />
<div className="max-w-7xl mx-auto px-6 relative z-10">
<div className="text-center mb-16">
<motion.span
@ -285,68 +285,47 @@ const BusinessDashboardPage = () => {
</p>
<div className="space-y-4">
<div className="flex items-center gap-3 p-4 rounded-xl bg-zinc-50 border border-zinc-100 italic transition-all hover:bg-white hover:shadow-sm">
<div className="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 shrink-0 italic">
<div className="flex items-center gap-3 p-4 rounded-xl bg-zinc-50 border border-zinc-100 transition-all hover:bg-white hover:shadow-sm">
<div className="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 shrink-0 ">
<CheckCircle className="w-4 h-4" />
</div>
<span className="font-semibold text-zinc-800 italic">POS Sales Data Integration</span>
<span className="font-semibold text-zinc-800 ">POS Sales Data Integration</span>
</div>
<div className="flex items-center gap-3 p-4 rounded-xl bg-zinc-50 border border-zinc-100 italic transition-all hover:bg-white hover:shadow-sm">
<div className="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 shrink-0 italic">
<div className="flex items-center gap-3 p-4 rounded-xl bg-zinc-50 border border-zinc-100 transition-all hover:bg-white hover:shadow-sm">
<div className="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 shrink-0 ">
<CheckCircle className="w-4 h-4" />
</div>
<span className="font-semibold text-zinc-800 italic">Inventory & Purchase Tracking</span>
<span className="font-semibold text-zinc-800 ">Inventory & Purchase Tracking</span>
</div>
<div className="flex items-center gap-3 p-4 rounded-xl bg-zinc-50 border border-zinc-100 italic transition-all hover:bg-white hover:shadow-sm">
<div className="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 shrink-0 italic">
<div className="flex items-center gap-3 p-4 rounded-xl bg-zinc-50 border border-zinc-100 transition-all hover:bg-white hover:shadow-sm">
<div className="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 shrink-0 ">
<CheckCircle className="w-4 h-4" />
</div>
<span className="font-semibold text-zinc-800 italic">CRM Customer Insights</span>
<span className="font-semibold text-zinc-800 ">CRM Customer Insights</span>
</div>
<div className="flex items-center gap-3 p-4 rounded-xl bg-zinc-50 border border-zinc-100 italic transition-all hover:bg-white hover:shadow-sm">
<div className="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 shrink-0 italic">
<div className="flex items-center gap-3 p-4 rounded-xl bg-zinc-50 border border-zinc-100 transition-all hover:bg-white hover:shadow-sm">
<div className="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 shrink-0 ">
<CheckCircle className="w-4 h-4" />
</div>
<span className="font-semibold text-zinc-800 italic">Order & Delivery Analytics</span>
<span className="font-semibold text-zinc-800 ">Order & Delivery Analytics</span>
</div>
</div>
</div>
{/* Abstract Graphic for Integrations */}
<div className="relative h-[400px] bg-zinc-50 rounded-[40px] border border-zinc-200 overflow-hidden flex items-center justify-center order-1 lg:order-2 shadow-2xl">
<div className="absolute inset-0 opacity-30" style={{ backgroundImage: 'radial-gradient(#cbd5e1 1px, transparent 1px)', backgroundSize: '24px 24px' }}></div>
{/* Central Hub */}
<div className="relative z-10 w-32 h-32 bg-white rounded-full shadow-2xl flex items-center justify-center border-4 border-red-50 group hover:scale-110 transition-transform duration-500">
<div className="text-2xl font-black text-red-600 tracking-tighter uppercase italic">Dashboard</div>
</div>
{/* Connecting Lines */}
<div className="absolute w-[80%] h-[1px] bg-zinc-300"></div>
<div className="absolute w-[1px] h-[80%] bg-zinc-300"></div>
{/* Satellite Nodes */}
<div className="absolute top-10 left-10 w-16 h-16 bg-white rounded-2xl shadow-xl border border-zinc-200 flex items-center justify-center group hover:translate-y-[-5px] transition-transform">
<div className="w-8 h-8 bg-blue-100 rounded-lg flex items-center justify-center text-blue-600">
<LineChart className="w-5 h-5" />
</div>
</div>
<div className="absolute bottom-10 right-10 w-16 h-16 bg-white rounded-2xl shadow-xl border border-zinc-200 flex items-center justify-center group hover:translate-y-[5px] transition-transform">
<div className="w-8 h-8 bg-green-100 rounded-lg flex items-center justify-center text-green-600">
<Zap className="w-5 h-5" />
</div>
</div>
<div className="absolute top-10 right-10 w-16 h-16 bg-white rounded-2xl shadow-xl border border-zinc-200 flex items-center justify-center group hover:translate-y-[-5px] transition-transform">
<div className="w-8 h-8 bg-orange-100 rounded-lg flex items-center justify-center text-orange-600">
<Search className="w-5 h-5" />
</div>
</div>
<div className="absolute bottom-10 left-10 w-16 h-16 bg-white rounded-2xl shadow-xl border border-zinc-200 flex items-center justify-center group hover:translate-y-[5px] transition-transform">
<div className="w-8 h-8 bg-purple-100 rounded-lg flex items-center justify-center text-purple-600">
<PieChart className="w-5 h-5" />
</div>
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative h-[400px] lg:h-[500px] rounded-[40px] overflow-hidden flex items-center justify-center order-1 lg:order-2 shadow-2xl border-8 border-white bg-white"
>
<Image
src={DashboardTwo}
alt="Dine360 Integration Dashboard"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</section>
{/* QUICK NAV */}
@ -377,3 +356,6 @@ const BusinessDashboardPage = () => {
};
export default BusinessDashboardPage;

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Inventory Management Software | Dine360',
description: 'Track ingredient stock, monitor usage, and receive low-stock alerts with Dine360 inventory management to reduce waste and control costs.',
}
export default function InventoryManagementLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -18,10 +18,14 @@ import {
ClipboardList
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import InventoryImage from '@/assets/features/inventory-management/inventory-management.webp';
const InventoryManagementPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -76,31 +80,27 @@ const InventoryManagementPage = () => {
{/* Lower Split Section matching the image */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: Inventory Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Layers className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Layers className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<Menu className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-[40px] overflow-hidden shadow-2xl border border-zinc-200"
>
<Image
src={InventoryImage}
alt="Dine360 Inventory Management System"
className="w-full h-auto object-cover"
/>
</motion.div>
</div>
{/* Right: Text Content */}
{/* Right: Text Content */}
<div className="space-y-6 order-1 lg:order-2">
<span className="inline-block px-5 py-1.5 bg-red-50 text-red-600 rounded-full text-xs font-bold uppercase tracking-wider border border-red-100">
@ -205,7 +205,7 @@ const InventoryManagementPage = () => {
</div>
<div className="mt-12 text-center">
<p className="text-zinc-500 max-w-2xl mx-auto italic">
<p className="text-zinc-500 max-w-2xl mx-auto ">
Calculate the exact cost of every dish on your menu. See how fluctuating supplier prices impact your profit margins in real-time.
</p>
</div>
@ -277,7 +277,7 @@ const InventoryManagementPage = () => {
</div>
<div className="space-y-4">
<p className="text-zinc-600 text-sm italic font-medium">
<p className="text-zinc-600 text-sm font-medium">
"Dine360 Inventory transformed how we manage our food costs. We saved over 15% on monthly supplies just by identifying where our waste was coming from."
</p>
</div>

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Invoicing & Billing Software | Dine360',
description: 'Generate invoices automatically, handle tax calculations, and track payments with Dine360 invoicing built for restaurants.',
}
export default function InvoicingLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -27,10 +27,14 @@ import {
History
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import InvoiceImage from '@/assets/features/invoice/invoice.webp';
const InvoicingPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -88,26 +92,19 @@ const InvoicingPage = () => {
{/* Left: Illustration Graphic */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<FileText className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Receipt className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<CreditCard className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border-8 border-white bg-white h-[400px] lg:h-[500px]"
>
<Image
src={InvoiceImage}
alt="Invoice Management"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Kitchen Display System (KDS) for Restaurants | Dine360',
description: 'Streamline kitchen operations with Dine360 KDS. Sync orders from POS to kitchen screens, reduce mistakes, speed up preparation, and improve service.',
}
export default function KitchenManagementLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -15,10 +15,15 @@ import {
ChefHat
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import KDSOne from '@/assets/features/kds-20260406T072434Z-1-001/kds/kds-1.webp';
import KDSTwo from '@/assets/features/kds-20260406T072434Z-1-001/kds/kds-2.webp';
const KitchenManagementPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -74,31 +79,26 @@ const KitchenManagementPage = () => {
{/* SECTION 2: KITCHEN DISPLAY */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: KDS Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Monitor className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<ChefHat className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<Menu className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, x: -20 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border-8 border-white bg-white h-[400px] lg:h-[500px]"
>
<Image
src={KDSOne}
alt="Dine360 Kitchen Display System"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}
{/* Right: Text Content */}
<div className="space-y-6 order-1 lg:order-2">
<span className="inline-block px-5 py-1.5 bg-red-50 text-red-600 rounded-full text-xs font-bold uppercase tracking-wider border border-red-100">
@ -291,34 +291,23 @@ const KitchenManagementPage = () => {
</div>
</div>
{/* Abstract Graphic for Integrations */}
<div className="relative h-[400px] bg-zinc-50 rounded-3xl border border-zinc-200 overflow-hidden flex items-center justify-center order-1 lg:order-2">
<div className="absolute inset-0 opacity-30" style={{ backgroundImage: 'radial-gradient(#cbd5e1 1px, transparent 1px)', backgroundSize: '24px 24px' }}></div>
{/* Central Hub */}
<div className="relative z-10 w-32 h-32 bg-white rounded-full shadow-xl flex items-center justify-center border-4 border-red-50">
<div className="text-2xl font-black text-red-600">KDS</div>
</div>
{/* Connecting Lines */}
<div className="absolute w-[80%] h-[1px] bg-zinc-300"></div>
<div className="absolute w-[1px] h-[80%] bg-zinc-300"></div>
{/* Satellite Nodes */}
<div className="absolute top-10 left-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<div className="w-8 h-8 bg-blue-100 rounded-full"></div>
</div>
<div className="absolute bottom-10 right-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<div className="w-8 h-8 bg-green-100 rounded-full"></div>
</div>
<div className="absolute top-10 right-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<div className="w-8 h-8 bg-orange-100 rounded-full"></div>
</div>
<div className="absolute bottom-10 left-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<div className="w-8 h-8 bg-purple-100 rounded-full"></div>
</div>
</div>
{/* KDS Integration Image */}
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative h-[400px] lg:h-[500px] rounded-3xl overflow-hidden flex items-center justify-center order-1 lg:order-2 shadow-2xl border-8 border-white bg-white"
>
<Image
src={KDSTwo}
alt="Dine360 KDS Integration"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</section>
{/* QUICK NAV */}
<FeatureQuickNav />

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Management Features | Dine360',
description: 'Explore Dine360\'s powerful POS and restaurant management features including order management, kitchen coordination, loyalty programs, inventory tracking, and more to transform your business.',
}
export default function FeaturesLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant CRM Software for Guest Management | Dine360',
description: 'Track customer profiles, order history, and dining preferences with Dine360 CRM to improve guest experience and increase repeat visits.',
}
export default function LoyaltyManagementLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -30,10 +30,15 @@ import {
Star, RefreshCw, UserPlus
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import CRMOne from '@/assets/features/crm/crm-1.webp';
import CRMTwo from '@/assets/features/crm/crm-2.webp';
const LoyaltyManagementPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -88,29 +93,21 @@ const LoyaltyManagementPage = () => {
{/* Lower Split Section */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: CRM Image One */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Users className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Heart className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<UserPlus className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Star className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border-8 border-white/50 bg-white"
>
<Image
src={CRMOne}
alt="Dine360 Customer Relationship Management"
className="w-full h-auto object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}
@ -165,14 +162,14 @@ const LoyaltyManagementPage = () => {
{/* SECTION 3: CUSTOMER INSIGHTS (Professional Design) */}
<section className="bg-zinc-950 text-white py-32 px-6 relative overflow-hidden">
{/* Decorative background elements */}
<div className="absolute top-0 right-0 w-1/2 h-full bg-gradient-to-l from-red-600/5 to-transparent"></div>
<div className="absolute top-0 right-0 w-1/2 h-full bg-linear-to-l from-red-600/5 to-transparent"></div>
<div className="absolute -bottom-24 -left-24 w-96 h-96 bg-red-600/10 rounded-full blur-[120px]"></div>
<div className="max-w-7xl mx-auto px-6 relative z-10">
<div className="flex flex-col lg:flex-row lg:items-end justify-between mb-20 gap-8">
<div className="max-w-2xl text-left">
<div className="inline-flex items-center gap-2 mb-6 text-red-500">
<span className="w-12 h-[2px] bg-red-600"></span>
<span className="w-12 h-0.5 bg-red-600"></span>
<span className="font-bold uppercase tracking-[0.2em] text-sm">Customer Insights</span>
</div>
<h2 className="text-4xl md:text-5xl font-bold mb-6 uppercase tracking-tight leading-none">
@ -320,13 +317,19 @@ const LoyaltyManagementPage = () => {
</div>
{/* Abstract Graphic area - keeping structure as-is */}
<div className="relative h-[400px] bg-zinc-50 rounded-3xl border border-zinc-200 overflow-hidden flex items-center justify-center order-1 lg:order-2">
<div className="absolute inset-0 opacity-30" style={{ backgroundImage: 'radial-gradient(#cbd5e1 1px, transparent 1px)', backgroundSize: '24px 24px' }}></div>
<div className="relative z-10 w-32 h-32 bg-white rounded-full shadow-xl flex items-center justify-center border-4 border-red-50">
<Users className="w-16 h-16 text-red-600" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative h-[400px] lg:h-[500px] bg-white rounded-3xl border-8 border-white shadow-2xl overflow-hidden flex items-center justify-center order-1 lg:order-2"
>
<Image
src={CRMTwo}
alt="Unified CRM"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</section>
{/* QUICK NAV */}
@ -356,4 +359,6 @@ const LoyaltyManagementPage = () => {
);
};
export default LoyaltyManagementPage;
export default LoyaltyManagementPage;

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Multi-Branch Restaurant Management Software | Dine360',
description: 'Manage multiple restaurant locations from one dashboard. Track performance, control operations, and scale your business with Dine360.',
}
export default function MultiMenuManagementLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -1,4 +1,4 @@
'use client';
'use client';
import {
ArrowRight,
@ -17,10 +17,15 @@ import {
Globe
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import MultiBranchOne from '@/assets/features/multi-branch/multi-branch-1.webp';
import MultiBranchTwo from '@/assets/features/multi-branch/multi-branch-2.webp';
const MultiBranchManagementPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -76,31 +81,27 @@ const MultiBranchManagementPage = () => {
{/* SECTION 2: MULTI-LOCATION MANAGEMENT */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: Multi-Branch Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Network className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Globe className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<Users className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<LayoutDashboard className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border border-zinc-200"
>
<Image
src={MultiBranchOne}
alt="Dine360 Multi-Branch Dashboard"
className="w-full h-auto object-cover"
/>
</motion.div>
</div>
{/* Right: Text Content */}
{/* Right: Text Content */}
<div className="space-y-6 order-1 lg:order-2">
<span className="inline-block px-5 py-1.5 bg-red-50 text-red-600 rounded-full text-xs font-bold uppercase tracking-wider border border-red-100">
@ -293,32 +294,16 @@ const MultiBranchManagementPage = () => {
</div>
</div>
{/* Abstract Graphic for Integrations */}
<div className="relative h-[400px] bg-zinc-50 rounded-3xl border border-zinc-200 overflow-hidden flex items-center justify-center order-1 lg:order-2">
<div className="absolute inset-0 opacity-30" style={{ backgroundImage: 'radial-gradient(#cbd5e1 1px, transparent 1px)', backgroundSize: '24px 24px' }}></div>
{/* Central Hub */}
<div className="relative z-10 w-32 h-32 bg-white rounded-full shadow-xl flex items-center justify-center border-4 border-red-50">
<div className="text-2xl font-black text-red-600 uppercase">HUB</div>
</div>
{/* Connecting Lines */}
<div className="absolute w-[80%] h-[1px] bg-zinc-300"></div>
<div className="absolute w-[1px] h-[80%] bg-zinc-300"></div>
{/* Satellite Nodes */}
<div className="absolute top-10 left-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<Globe className="w-8 h-8 text-blue-500" />
</div>
<div className="absolute bottom-10 right-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<Users className="w-8 h-8 text-green-500" />
</div>
<div className="absolute top-10 right-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<ClipboardList className="w-8 h-8 text-orange-500" />
</div>
<div className="absolute bottom-10 left-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<Layers className="w-8 h-8 text-purple-500" />
</div>
{/* Multi-Branch Integration Image */}
<div className="relative h-[400px] rounded-3xl overflow-hidden flex items-center justify-center order-1 lg:order-2 shadow-2xl border border-zinc-200">
<Image
src={MultiBranchTwo}
alt="Dine360 Multi-Branch Integration"
layout="fill"
objectFit="cover"
className="hover:scale-105 transition-transform duration-700"
/>
<div className="absolute inset-0 bg-gradient-to-tr from-zinc-950/40 to-transparent" />
</div>
</section>

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Sales Analytics & Reports | Dine360',
description: 'Analyze restaurant performance with real-time sales tracking, revenue reports, menu insights, and peak hour analytics using Dine360.',
}
export default function OrderManagementLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -28,10 +28,15 @@ import {
Utensils
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import SalesOne from '@/assets/features/sales/sales-1.webp';
import SalesTwo from '@/assets/features/sales/sales-2.webp';
const OrderManagementPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -89,26 +94,19 @@ const OrderManagementPage = () => {
{/* Left: Illustration Graphic */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<BarChart3 className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<TrendingUp className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<Layers className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border-8 border-white bg-white h-[400px] lg:h-[500px]"
>
<Image
src={SalesOne}
alt="Sales Performance Dashboard"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}
@ -268,13 +266,19 @@ const OrderManagementPage = () => {
</div>
{/* Abstract Graphic area - keeping structure as-is */}
<div className="relative h-[400px] bg-zinc-50 rounded-3xl border border-zinc-200 overflow-hidden flex items-center justify-center order-1 lg:order-2">
<div className="absolute inset-0 opacity-30" style={{ backgroundImage: 'radial-gradient(#cbd5e1 1px, transparent 1px)', backgroundSize: '24px 24px' }}></div>
<div className="relative z-10 w-32 h-32 bg-white rounded-full shadow-xl flex items-center justify-center border-4 border-red-50">
<BarChart3 className="w-16 h-16 text-red-600" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative h-[400px] lg:h-[500px] bg-white rounded-3xl border-8 border-white shadow-2xl overflow-hidden flex items-center justify-center order-1 lg:order-2"
>
<Image
src={SalesTwo}
alt="Unified Sales Hub"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</section>
{/* QUICK NAV */}

View File

@ -463,7 +463,7 @@ const FeaturesPage = () => {
{ type: 'Delivery', count: 8, color: 'text-red-600', bg: 'bg-red-50' },
{ type: 'Takeaway', count: 5, color: 'text-blue-600', bg: 'bg-blue-50' }
].map((stat, idx) => (
<div key={idx} className="flex items-center justify-between p-3 rounded-2xl bg-zinc-50 border border-zinc-100 italic transition-all hover:translate-x-1">
<div key={idx} className="flex items-center justify-between p-3 rounded-2xl bg-zinc-50 border border-zinc-100 transition-all hover:translate-x-1">
<div className="flex items-center gap-3">
<div className={`w-2 h-2 rounded-full ${stat.color === 'text-red-600' ? 'bg-red-600' : stat.color === 'text-amber-600' ? 'bg-amber-600' : 'bg-blue-600'}`}></div>
<span className="text-sm font-bold text-zinc-800">{stat.type}</span>
@ -567,7 +567,7 @@ const FeaturesPage = () => {
{ supplier: 'Fresh Veggies Co.', amount: '$420.00', date: 'Today' },
{ supplier: 'Dairy Best Inc.', amount: '$150.00', date: 'Yesterday' }
].map((po, idx) => (
<div key={idx} className="flex items-center justify-between p-3 rounded-xl bg-zinc-50 border border-zinc-100 italic transition-all hover:translate-x-1">
<div key={idx} className="flex items-center justify-between p-3 rounded-xl bg-zinc-50 border border-zinc-100 transition-all hover:translate-x-1">
<div className="flex flex-col">
<span className="text-sm font-bold text-zinc-900">{po.supplier}</span>
<span className="text-[10px] text-zinc-500">{po.date}</span>
@ -805,7 +805,7 @@ const FeaturesPage = () => {
{ platform: 'DoorDash', status: 'Syncing', color: 'text-amber-500' },
{ platform: 'Zomato', status: 'Connected', color: 'text-emerald-500' }
].map((p, i) => (
<div key={i} className="flex items-center justify-between p-4 rounded-2xl bg-zinc-50 border border-zinc-100 italic">
<div key={i} className="flex items-center justify-between p-4 rounded-2xl bg-zinc-50 border border-zinc-100 ">
<span className="text-sm font-bold text-zinc-900">{p.platform}</span>
<div className="flex items-center gap-2">
<span className={`text-[10px] font-black uppercase ${p.color}`}>{p.status}</span>
@ -863,7 +863,7 @@ const FeaturesPage = () => {
{ label: 'Guests', val: '124', sub: '+8%' },
{ label: 'Wastage', val: '$12', sub: '-12%' }
].map((s, i) => (
<div key={i} className="p-4 rounded-2xl bg-zinc-50 border border-zinc-100 flex flex-col gap-1 italic transition-all hover:scale-105">
<div key={i} className="p-4 rounded-2xl bg-zinc-50 border border-zinc-100 flex flex-col gap-1 transition-all hover:scale-105">
<span className="text-[8px] font-black uppercase text-zinc-400 tracking-widest">{s.label}</span>
<span className="text-xl font-black text-zinc-950">{s.val}</span>
<span className={`text-[8px] font-black ${s.sub.startsWith('+') ? 'text-emerald-500' : 'text-red-600'}`}>{s.sub} vs ly</span>
@ -925,10 +925,10 @@ const FeaturesPage = () => {
<span>Item</span><span>Total</span>
</div>
<div className="h-0.5 w-full bg-zinc-100"></div>
<div className="flex justify-between text-sm font-bold text-zinc-950 italic">
<div className="flex justify-between text-sm font-bold text-zinc-950 ">
<span>Cheese Pizza x2</span><span>$32.00</span>
</div>
<div className="flex justify-between text-sm font-bold text-zinc-950 italic">
<div className="flex justify-between text-sm font-bold text-zinc-950 ">
<span>Garlic Bread</span><span>$8.00</span>
</div>
<div className="h-0.5 w-full bg-zinc-100"></div>
@ -987,7 +987,7 @@ const FeaturesPage = () => {
].map((b, i) => (
<div key={i} className="flex items-center justify-between p-4 rounded-2xl bg-zinc-50 border border-zinc-100 transition-all hover:bg-red-50 group">
<div className="flex flex-col">
<span className="text-sm font-bold text-zinc-900 group-hover:text-red-600 transition-colors uppercase italic">{b.name}</span>
<span className="text-sm font-bold text-zinc-900 group-hover:text-red-600 transition-colors uppercase ">{b.name}</span>
<span className="text-[10px] text-zinc-500 font-bold">{b.sales} Sales</span>
</div>
<span className="text-xs font-black text-emerald-500">{b.growth}</span>
@ -1036,7 +1036,7 @@ const FeaturesPage = () => {
</div>
<div className="relative z-10 lg:order-1 order-2">
<div className="bg-white rounded-4xl p-6 lg:p-8 shadow-3xl border border-zinc-100 space-y-4 text-xs italic">
<div className="bg-white rounded-4xl p-6 lg:p-8 shadow-3xl border border-zinc-100 space-y-4 text-xs ">
<div className="p-3 bg-red-50 text-red-600 rounded-2xl rounded-bl-none max-w-[80%] self-start font-bold">
Order #2483 is ready for pickup!
</div>
@ -1134,7 +1134,7 @@ const FeaturesPage = () => {
<div className="absolute top-0 left-0 w-full h-full bg-[radial-gradient(circle_at_50%_50%,rgba(183,28,28,0.1),transparent)] group-hover:bg-[radial-gradient(circle_at_50%_50%,rgba(183,28,28,0.15),transparent)] transition-all"></div>
<div className="relative z-10 space-y-6">
<h2 className="text-3xl lg:text-4xl font-bold text-white max-w-4xl mx-auto leading-tight">
Turn Your Counter Into a <br /> <span className="text-red-600 italic">Command Center</span>.
Turn Your Counter Into a <br /> <span className="text-red-600 ">Command Center</span>.
</h2>
<p className="text-base text-zinc-400 max-w-2xl mx-auto leading-relaxed">
Join 500+ growing restaurants using Dine360 to streamline dine-in, delivery, reservations, and multi-branch operations all from one powerful system.

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant POS System for Billing & Orders | Dine360',
description: 'Run your restaurant with Dine360 POS. Fast billing, multi-payment support, and real-time order tracking for dine-in, takeaway, and delivery.',
}
export default function POSLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -18,10 +18,14 @@ import {
Target
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import POSImage from '@/assets/features/pos/pos.webp';
const POSPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -79,54 +83,22 @@ const POSPage = () => {
{/* SECTION 2: HARDWARE & MOBILE (Split Layout) */}
<section className="py-32 px-6">
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-20 items-center">
{/* Left: Interactive Graphic */}
{/* Left: POS Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -inset-10 bg-gradient-to-tr from-red-600/20 to-transparent blur-3xl opacity-50 -z-10 rounded-full"></div>
<div className="relative bg-zinc-950 rounded-[40px] p-12 border border-zinc-800 shadow-3xl overflow-hidden aspect-square flex flex-col justify-center">
<div className="absolute top-0 right-0 w-64 h-64 bg-red-600/10 rounded-full -translate-y-1/2 translate-x-1/2 blur-3xl"></div>
{/* POS Screen Simulation */}
<div className="relative z-10 space-y-6">
<div className="flex items-center justify-between border-b border-zinc-800 pb-4">
<div className="flex items-center gap-3">
<div className="w-10 h-10 bg-red-600 rounded-lg flex items-center justify-center text-white font-black text-xs italic">D360</div>
<div>
<div className="text-white font-bold text-sm tracking-tight uppercase">Checkout #4</div>
<div className="text-zinc-500 text-[10px] font-bold">12:45 PM | OPERATOR: SARAH</div>
</div>
</div>
<Wifi className="w-4 h-4 text-green-500" />
</div>
<div className="space-y-3">
{[
{ item: 'Margherita Pizza (Large)', price: '$18.00' },
{ item: 'Garlic Bread Sticks', price: '$6.50' },
{ item: 'Classic Cola', price: '$3.00' }
].map((line, i) => (
<div key={i} className="flex justify-between text-sm py-1 border-b border-zinc-900">
<span className="text-zinc-300">{line.item}</span>
<span className="text-white font-bold font-mono">{line.price}</span>
</div>
))}
</div>
<div className="pt-4 space-y-2">
<div className="flex justify-between text-xs text-zinc-500 font-bold uppercase">
<span>Subtotal</span>
<span>$27.50</span>
</div>
<div className="flex justify-between text-2xl text-white font-black tracking-tighter uppercase pt-2 border-t border-zinc-800">
<span>Total</span>
<span className="text-red-500">$29.84</span>
</div>
</div>
<button className="w-full bg-red-600 text-white font-black py-4 rounded-xl shadow-lg shadow-red-600/20 uppercase tracking-widest text-sm hover:bg-red-500 transition-colors">
Process Payment (F10)
</button>
</div>
</div>
<motion.div
initial={{ opacity: 0, x: -30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.8 }}
className="relative rounded-[40px] overflow-hidden shadow-3xl border border-zinc-200"
>
<Image
src={POSImage}
alt="Dine360 POS System Terminal"
className="w-full h-auto object-cover hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Content */}
@ -327,7 +299,7 @@ const POSPage = () => {
{/* Central Terminal */}
<div className="relative z-10 w-48 h-48 bg-zinc-950 rounded-3xl shadow-3xl rotate-12 flex items-center justify-center p-8 border-4 border-zinc-800">
<div className="w-full text-center space-y-2">
<div className="text-red-600 font-black text-xl italic tracking-tighter uppercase italic">D360</div>
<div className="text-red-600 font-black text-xl tracking-tighter uppercase ">D360</div>
<div className="h-1 bg-zinc-800 w-1/2 mx-auto"></div>
<div className="text-[8px] text-zinc-600 uppercase font-black">Ready to Swipe</div>
</div>

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Promotions & Offers Management | Dine360',
description: 'Create, manage, and track restaurant promotions with Dine360. Boost sales, attract customers, and run targeted offers with real-time insights.',
}
export default function PromotionManagementLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -29,10 +29,14 @@ import {
Truck
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import PromotionImage from '@/assets/features/purchase-promotions/purchase-promotions.webp';
const PromotionManagementPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -87,29 +91,22 @@ const PromotionManagementPage = () => {
{/* SECTION 2: SUPPLY MANAGEMENT */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: Promotion Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Tag className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Users className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<ClipboardList className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, x: -30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.8 }}
className="relative rounded-[40px] overflow-hidden shadow-2xl border border-zinc-200"
>
<Image
src={PromotionImage}
alt="Dine360 Purchase & Promotion Management"
className="w-full h-auto object-cover"
/>
</motion.div>
</div>
{/* Right: Text Content */}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Purchase & Vendor Management | Dine360',
description: 'Manage suppliers, track purchase orders, and update inventory automatically with Dine360 purchase management for restaurants.',
}
export default function PromotionsLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -20,9 +20,14 @@ import {
ArrowUpRight
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
// Visual Assets
import PromotionOne from '@/assets/features/promotions/promotions-1.webp';
import PromotionTwo from '@/assets/features/promotions/promotions-2.webp';
const PromotionsPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -78,29 +83,22 @@ const PromotionsPage = () => {
{/* SECTION 2: PROMOTION ENGINE */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: Promotion Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Megaphone className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<TicketPercent className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<MousePointer2 className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Calendar className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<Sparkles className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, x: -30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.8 }}
className="relative rounded-[40px] overflow-hidden shadow-2xl border border-zinc-200"
>
<Image
src={PromotionOne}
alt="Dine360 Smart Promotions System"
className="w-full h-auto object-cover hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}
@ -295,29 +293,16 @@ const PromotionsPage = () => {
</div>
</div>
{/* Abstract Graphic for Integrations */}
<div className="relative h-[400px] bg-zinc-50 rounded-3xl border border-zinc-200 overflow-hidden flex items-center justify-center order-1 lg:order-2">
<div className="absolute inset-0 opacity-30" style={{ backgroundImage: 'radial-gradient(#cbd5e1 1px, transparent 1px)', backgroundSize: '24px 24px' }}></div>
{/* Central Hub */}
<div className="relative z-10 w-32 h-32 bg-white rounded-full shadow-xl flex items-center justify-center border-4 border-red-50">
<div className="text-2xl font-black text-red-600">OFFER</div>
</div>
{/* Orbiting Elements */}
<div className="absolute w-64 h-64 border border-red-100 rounded-full animate-[spin_20s_linear_infinite]"></div>
<div className="absolute w-80 h-80 border border-zinc-200 rounded-full animate-[spin_30s_linear_infinite_reverse]"></div>
{/* Connection Points */}
<div className="absolute top-1/4 left-1/4 w-12 h-12 bg-white rounded-xl shadow-lg border border-zinc-100 flex items-center justify-center text-red-600 z-20">
<TicketPercent className="w-6 h-6" />
</div>
<div className="absolute bottom-1/4 right-1/4 w-12 h-12 bg-white rounded-xl shadow-lg border border-zinc-100 flex items-center justify-center text-orange-600 z-20">
<Gift className="w-6 h-6" />
</div>
<div className="absolute top-1/2 -right-6 w-12 h-12 bg-white rounded-xl shadow-lg border border-zinc-100 flex items-center justify-center text-blue-600 z-20">
<Users className="w-6 h-6" />
</div>
{/* Promotion Integration Image */}
<div className="relative h-[400px] rounded-[40px] overflow-hidden flex items-center justify-center order-1 lg:order-2 shadow-2xl border border-zinc-200">
<Image
src={PromotionTwo}
alt="Dine360 Promotion Integration"
layout="fill"
objectFit="cover"
className="hover:scale-105 transition-transform duration-700"
/>
<div className="absolute inset-0 bg-gradient-to-tr from-zinc-950/40 to-transparent" />
</div>
</section>
</main>

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'QR Code Menu for Restaurants | Dine360',
description: 'Create digital menus with QR codes for contactless dining. Update menu items instantly and improve customer experience with Dine360.',
}
export default function QRCodeMenuLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -26,10 +26,15 @@ import {
Tags
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import OnlineOrderingOne from '@/assets/features/online-ordering/online-ordering-1.webp';
import OnlineOrderingTwo from '@/assets/features/online-ordering/online-ordering-2.webp';
const QRCodeMenuPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -87,26 +92,19 @@ const QRCodeMenuPage = () => {
{/* Left: Illustration Graphic */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<QrCode className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Smartphone className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<Menu className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border-8 border-white bg-white h-[400px] lg:h-[500px]"
>
<Image
src={OnlineOrderingOne}
alt="QR Code Menu"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}
@ -189,23 +187,19 @@ const QRCodeMenuPage = () => {
</div>
</div>
<div className="relative">
<div className="absolute inset-0 bg-gradient-to-t from-pink-600/20 to-transparent rounded-3xl blur-2xl"></div>
<div className="relative bg-zinc-950 border border-zinc-800 rounded-3xl p-8 shadow-2xl flex flex-col items-center text-center">
<QrCode className="w-32 h-32 text-white mb-6" />
<p className="text-zinc-400 mb-6 font-mono text-sm">SCAN TO VIEW MENU</p>
<div className="w-full bg-zinc-900 rounded-xl p-4 border border-zinc-800">
<div className="flex items-center space-x-3 mb-2">
<div className="w-10 h-10 bg-zinc-800 rounded-md"></div>
<div className="flex-1 h-2 bg-zinc-800 rounded"></div>
</div>
<div className="flex items-center space-x-3">
<div className="w-10 h-10 bg-zinc-800 rounded-md"></div>
<div className="flex-1 h-2 bg-zinc-800 rounded"></div>
</div>
</div>
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative h-[400px] lg:h-[500px] bg-white rounded-3xl border-8 border-white shadow-2xl overflow-hidden flex items-center justify-center p-4"
>
<Image
src={OnlineOrderingTwo}
alt="Dynamic QR Menu"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
</section>

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Website & Online Ordering System | Dine360',
description: 'Build your restaurant website and accept direct online orders with Dine360. Increase revenue, reduce third-party fees, and manage orders easily.',
}
export default function RestaurantWebsiteLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -14,10 +14,15 @@ import {
CreditCard
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import SalesOne from '@/assets/features/sales/sales-1.webp';
import SalesTwo from '@/assets/features/sales/sales-2.webp';
const RestaurantWebsitePage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -76,26 +81,19 @@ const RestaurantWebsitePage = () => {
{/* Left: Illustration Graphic */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Smartphone className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Globe className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<CreditCard className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border-8 border-white bg-white h-[400px] lg:h-[500px]"
>
<Image
src={SalesOne}
alt="Online Ordering System"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}
@ -291,15 +289,19 @@ const RestaurantWebsitePage = () => {
</div>
{/* Abstract Graphic for Integrations */}
<div className="relative h-[400px] bg-zinc-50 rounded-3xl border border-zinc-200 overflow-hidden flex items-center justify-center order-1 lg:order-2">
<div className="absolute inset-0 opacity-30" style={{ backgroundImage: 'radial-gradient(#cbd5e1 1px, transparent 1px)', backgroundSize: '24px 24px' }}></div>
{/* Central Hub */}
<div className="relative z-10 w-32 h-32 bg-white rounded-full shadow-xl flex items-center justify-center border-4 border-red-50">
<div className="text-2xl font-black text-red-600 text-center leading-none">ONLINE<br/>HUB</div>
</div>
{/* Connecting Lines */}
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative h-[400px] lg:h-[500px] bg-white rounded-3xl border-8 border-white shadow-2xl overflow-hidden flex items-center justify-center order-1 lg:order-2"
>
<Image
src={SalesTwo}
alt="Sales Hub"
fill
className="object-contain hover:scale-105 transition-transform duration-700"
/>
</motion.div>
<div className="absolute w-[80%] h-[1px] bg-zinc-300"></div>
<div className="absolute w-[1px] h-[80%] bg-zinc-300"></div>
@ -316,7 +318,7 @@ const RestaurantWebsitePage = () => {
<div className="absolute bottom-10 left-10 w-16 h-16 bg-white rounded-xl shadow-lg border border-zinc-200 flex items-center justify-center">
<div className="w-8 h-8 bg-purple-100 rounded-full"></div>
</div>
</div>
</section>
{/* QUICK NAV */}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Table Reservation System | Dine360',
description: 'Manage reservations, walk-ins, and table availability with Dine360. Visual floor layout, real-time table status, and faster seating for guests.',
}
export default function TableReservationLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -27,10 +27,14 @@ import {
Tags
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import TableReservationImage from '@/assets/features/table-reservation/table-reseravtion.webp';
const TableReservationPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -85,29 +89,25 @@ const TableReservationPage = () => {
{/* SECTION 2: TABLE RESERVATION SPLIT */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: Table Reservation Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Calendar className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<LayoutGrid className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<Users className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, x: -30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.8 }}
className="relative rounded-[40px] overflow-hidden shadow-2xl border border-zinc-200 bg-white"
>
<Image
src={TableReservationImage}
alt="Dine360 Table Reservation System"
className="w-full h-auto object-cover hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}
</div>
{/* Right: Text Content */}
@ -156,7 +156,7 @@ const TableReservationPage = () => {
<ArrowRight className="w-5 h-5 group-hover:translate-x-1 transition-transform" />
</button>
</div>
</div>
</section>
{/* SECTION 3: FLOOR MANAGEMENT (Stats) */}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Team Communication System | Dine360',
description: 'Improve staff coordination with Dine360 team communication. Share updates, sync kitchen and service teams, and reduce operational errors.',
}
export default function TeamCommunicationLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -18,10 +18,14 @@ import {
Flag
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import TeamCommImage from '@/assets/features/team-communiaction/team-communiaction.webp';
const TeamCommunicationPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -80,44 +84,18 @@ const TeamCommunicationPage = () => {
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-20 items-center">
{/* Left Graphics */}
<div className="relative">
<div className="relative w-full max-w-[400px] mx-auto">
{/* Phone Frame mock */}
<div className="bg-zinc-950 rounded-[3rem] p-4 border-[8px] border-zinc-900 shadow-3xl aspect-[9/19] overflow-hidden flex flex-col">
<div className="w-20 h-6 bg-zinc-900 rounded-full mx-auto mb-6"></div>
<div className="flex-1 space-y-4 px-2">
<div className="bg-zinc-900 rounded-2xl p-4 border border-zinc-800">
<div className="text-[10px] text-zinc-500 font-black mb-2 uppercase">Kitchen Station</div>
<div className="text-white text-xs font-bold leading-tight">Order #102 is taking longer than 15 mins. Need assistance?</div>
</div>
<div className="bg-red-600 rounded-2xl p-4 text-white">
<div className="text-[10px] text-red-200 font-black mb-2 uppercase">Manager Alert</div>
<div className="text-xs font-bold leading-tight">Table 12 just ordered a $400 bottle. VIP Protocol active.</div>
</div>
<div className="bg-zinc-800 rounded-2xl p-4">
<div className="text-[10px] text-zinc-400 font-bold mb-2 uppercase tracking-widest">Shift Poll</div>
<div className="text-white text-xs mb-3">Who's available for Sunday brunch double?</div>
<div className="flex gap-2">
<div className="w-6 h-6 bg-zinc-700 rounded-full border border-white"></div>
<div className="w-6 h-6 bg-zinc-600 rounded-full"></div>
<div className="w-6 h-6 bg-red-500 rounded-full flex items-center justify-center text-[10px]">+3</div>
</div>
</div>
</div>
<div className="h-1 bg-zinc-800 w-1/3 mx-auto mt-6 rounded-full mb-2"></div>
</div>
{/* Floating Elements */}
<div className="absolute -top-10 -right-10 w-24 h-24 bg-white rounded-2xl shadow-xl flex items-center justify-center rotate-6 border border-zinc-100">
<MessageCircle className="w-10 h-10 text-red-600" />
</div>
<div className="absolute bottom-20 -left-10 w-20 h-20 bg-zinc-950 rounded-full shadow-2xl flex items-center justify-center -rotate-12 border-4 border-white">
<Zap className="w-8 h-8 text-yellow-400" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-[40px] overflow-hidden shadow-[0_50px_100px_-20px_rgba(0,0,0,0.25)] border border-zinc-200"
>
<Image
src={TeamCommImage}
alt="Dine360 Team Communication Mobile App"
className="w-full h-auto object-cover hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right Content */}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Uber Order Integration for Restaurants | Dine360',
description: 'Sync Uber delivery orders directly with POS and kitchen systems. Manage online orders from one dashboard using Dine360.',
}
export default function UberIntegrationLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -35,10 +35,14 @@ import {
RefreshCw
} from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
import FeatureQuickNav from '@/components/FeatureQuickNav';
// Visual Assets
import UberImage from '@/assets/features/uber/uber.webp';
const UberIntegrationPage = () => {
return (
<div className="bg-white text-zinc-900 font-sans selection:bg-red-600 selection:text-white pt-20">
@ -93,29 +97,21 @@ const UberIntegrationPage = () => {
{/* SECTION 2: DELIVERY PLATFORM INTEGRATION */}
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-16 items-center px-6 mb-24">
{/* Left: Illustration Graphic */}
{/* Left: Uber Image */}
<div className="relative order-2 lg:order-1">
<div className="absolute -top-10 -left-10 w-64 h-64 bg-red-100 rounded-full blur-3xl opacity-50 -z-10"></div>
<div className="relative bg-white p-8 md:p-12 rounded-full border border-zinc-100 shadow-2xl aspect-square flex items-center justify-center max-sm:mx-auto overflow-visible">
{/* Central Icon */}
<div className="w-40 h-40 bg-zinc-50 rounded-full flex items-center justify-center text-red-600 shadow-inner border border-zinc-100">
<Globe className="w-20 h-20" />
</div>
{/* Floating Icons */}
<div className="absolute -top-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-red-500 border border-zinc-50 hover:scale-110 transition-transform">
<Smartphone className="w-7 h-7" />
</div>
<div className="absolute top-1/2 -right-4 -translate-y-1/2 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-blue-500 border border-zinc-50 hover:scale-110 transition-transform">
<Bike className="w-7 h-7" />
</div>
<div className="absolute -bottom-4 right-10 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-orange-500 border border-zinc-50 hover:scale-110 transition-transform">
<Clock className="w-7 h-7" />
</div>
<div className="absolute top-1/4 -left-6 w-14 h-14 bg-white rounded-full shadow-lg flex items-center justify-center text-emerald-500 border border-zinc-50 hover:scale-110 transition-transform">
<CheckCircle className="w-7 h-7" />
</div>
</div>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
whileInView={{ opacity: 1, scale: 1 }}
viewport={{ once: true }}
className="relative rounded-3xl overflow-hidden shadow-2xl border border-zinc-200"
>
<Image
src={UberImage}
alt="Dine360 Uber and Delivery Integration"
className="w-full h-auto object-cover hover:scale-105 transition-transform duration-700"
/>
</motion.div>
</div>
{/* Right: Text Content */}

View File

@ -8,16 +8,22 @@
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-sans: var(--font-inter), var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif;
--font-mono: var(--font-geist-mono);
--color-brand-red: #dc2626;
--color-brand-cream: #f9f9f5;
--animate-infinite-scroll: infinite-scroll 40s linear infinite;
@keyframes infinite-scroll {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
}
body {
background: var(--background);
color: var(--foreground);
font-family: var(--font-sans), Arial, Helvetica, sans-serif;
font-family: var(--font-sans);
}
.custom-scrollbar::-webkit-scrollbar {

View File

@ -1,7 +1,12 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { Inter, Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
const inter = Inter({
variable: "--font-inter",
subsets: ["latin"],
});
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
@ -25,7 +30,7 @@ export default function RootLayout({
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
className={`${inter.variable} ${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
</body>

View File

@ -1,3 +1,9 @@
export const metadata = {
title: "Dine 360 | Best Restaurant POS in Hamilton, GTA & Kitchener | Save 50%",
description:
"Dine 360 is the most affordable POS for 1-3 location restaurants in Southern Ontario. No hardware fees. No hidden costs.",
};
import Navbar from "@/components/Navbar";
import HeroSection from "@/components/HeroSection";
import VideoSection from "@/components/VideoSection";

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant POS Pricing Plans & Packages | Dine360',
description: 'Explore Dine360 pricing plans for restaurants. Flexible, scalable solutions for POS, inventory, and complete restaurant management.',
}
export default function PricingLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -24,7 +24,7 @@ const PricingPageVersionTwo = () => {
<div className="h-[2px] w-8 bg-brand-red"></div>
</div>
<h1 className="text-6xl md:text-8xl font-serif font-bold leading-[1.1] mb-6 tracking-tight">
<h1 className="text-6xl md:text-8xl font-bold leading-[1.1] mb-6 tracking-tight">
Simple Plans for<br />
<span className="text-brand-red italic underline decoration-brand-red/20 underline-offset-8">Every Restaurant</span>
</h1>
@ -43,7 +43,7 @@ const PricingPageVersionTwo = () => {
>
<div className="mb-10">
<span className="text-brand-red font-bold uppercase tracking-widest text-xs mb-4 block">Starter</span>
<h2 className="text-4xl font-serif font-bold mb-3">Single Outlet</h2>
<h2 className="text-4xl font-bold mb-3">Single Outlet</h2>
<p className="text-gray-500 text-sm leading-relaxed max-w-[260px]">
Perfect for independent restaurants getting started with smart POS.
</p>
@ -54,8 +54,8 @@ const PricingPageVersionTwo = () => {
<div className="mb-10">
<span className="text-gray-400 font-bold uppercase tracking-[0.15em] text-[10px] mb-4 block">Starting at</span>
<div className="flex items-start">
<span className="text-3xl font-serif font-bold mt-1">$</span>
<span className="text-8xl font-serif font-black tracking-tighter leading-none">200</span>
<span className="text-3xl font-bold mt-1">$</span>
<span className="text-8xl font-black tracking-tighter leading-none">200</span>
</div>
<p className="text-gray-500 font-medium text-sm mt-4">
per month · flat fee

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Bakery POS System for Orders & Inventory | Dine360',
description: 'Manage bakery operations with Dine360. Handle custom orders, billing, and inventory in real time.',
}
export default function BakeryLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const BakeryPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Manage Your Bakery <br />
<span className="italic font-serif font-light text-zinc-800">Operations Effortlessly</span>
<span className=" font-light text-zinc-800">Operations Effortlessly</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Bistro Restaurant POS & Table Management | Dine360',
description: 'Manage your bistro efficiently with Dine360. Handle orders, tables, and billing while maintaining a cozy dining experience.',
}
export default function BistroLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const BistroPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Bistro with <br />
<span className="italic font-serif font-light text-zinc-800">Ease & Precision</span>
<span className=" font-light text-zinc-800">Ease & Precision</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Buffet Restaurant Management Software | Dine360',
description: 'Manage buffet operations with Dine360. Improve guest flow, billing, and table turnover for high-volume dining.',
}
export default function BuffetLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const BuffetPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Simplify Your <br />
<span className="italic font-serif font-light text-zinc-800">Buffet Restaurant Operations</span>
<span className=" font-light text-zinc-800">Buffet Restaurant Operations</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Cafe & Coffee Shop POS Software | Dine360',
description: 'Streamline café operations with Dine360 POS. Manage orders, billing, tables, and takeaway efficiently during busy hours.',
}
export default function CafeLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -51,7 +51,7 @@ const CafeBistroPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Power Your <br />
<span className="italic font-serif font-light text-zinc-800">Café & Coffee Shop</span>
<span className=" font-light text-zinc-800">Café & Coffee Shop</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Cafeteria POS System for High Volume Orders | Dine360',
description: 'Manage cafeteria operations with Dine360. Fast billing, queue management, and efficient order handling for large crowds.',
}
export default function CafeteriaLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const CafeteriaPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Run Your <br />
<span className="italic font-serif font-light text-zinc-800">Cafeteria Operations Efficiently</span>
<span className=" font-light text-zinc-800">Cafeteria Operations Efficiently</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Casual Dining Restaurant POS Software | Dine360',
description: 'Streamline casual dining operations with Dine360. Manage tables, orders, and billing efficiently for better service and growth.',
}
export default function CasualDiningLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const CasualDiningPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Take Control of Your <br />
<span className="italic font-serif font-light text-zinc-800">Casual Dining Restaurant</span>
<span className=" font-light text-zinc-800">Casual Dining Restaurant</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">
@ -514,4 +514,4 @@ const CasualDiningPage = () => {
)
}
export default CasualDiningPage
export default CasualDiningPage

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Coffee House POS & Order Management | Dine360',
description: 'Improve coffee shop operations with Dine360. Handle orders, billing, and customer flow smoothly during peak hours.',
}
export default function CoffeeHouseLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const CoffeeHousePage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Power Your <br />
<span className="italic font-serif font-light text-zinc-800">Coffee House Operations</span>
<span className=" font-light text-zinc-800">Coffee House Operations</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Concession Stand POS for Events & Stadiums | Dine360',
description: 'Run concession stands smoothly with Dine360. Fast billing, queue management, and high-volume order handling.',
}
export default function ConcessionLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -42,7 +42,7 @@ const ConcessionPage = () => {
</div>
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Power Your <br />
<span className="italic font-serif font-light text-red-600">Concession Stand Operations</span>
<span className=" font-light text-red-600">Concession Stand Operations</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">
Serve customers faster and manage high-volume snack sales with a system built for concession stands. Dine360 helps you handle quick orders, fast billing, and peak-hour rush - all from one simple platform.

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Contemporary Casual Restaurant Software | Dine360',
description: 'Balance speed and experience with Dine360. Manage modern dining operations with smart tools and real-time insights.',
}
export default function ContemporaryCasualLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const ContemporaryCasualPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Contemporary Casual <br />
<span className="italic font-serif font-light text-zinc-800">Restaurant</span>
<span className=" font-light text-zinc-800">Restaurant</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Delivery-Only Restaurant POS Software | Dine360',
description: 'Manage delivery-first restaurants with Dine360. Track orders, optimize delivery flow, and scale easily.',
}
export default function DeliveryOnlyLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const DeliveryOnlyPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Run Your <br />
<span className="italic font-serif font-light text-zinc-800">Delivery-Only Restaurant</span>
<span className=" font-light text-zinc-800">Delivery-Only Restaurant</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Destination Restaurant Management Software | Dine360',
description: 'Deliver premium dining experiences with Dine360. Manage reservations, service flow, and operations effortlessly.',
}
export default function DestinationLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -53,7 +53,7 @@ const DestinationPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Destination Restaurant <br />
<span className="italic font-serif font-light text-zinc-800">Experience</span>
<span className=" font-light text-zinc-800">Experience</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Digital-Only Restaurant & Cloud POS | Dine360',
description: 'Manage online-only restaurants with Dine360. Handle orders, delivery, and multiple brands from one dashboard.',
}
export default function DigitalOnlyLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -42,7 +42,7 @@ const DigitalOnlyPage = () => {
</div>
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Run Your <br />
<span className="italic font-serif font-light text-red-600">Digital-Only Restaurant</span>
<span className=" font-light text-red-600">Digital-Only Restaurant</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">
Operate your restaurant entirely online with a system built for delivery-first, app-driven businesses. Dine360 helps you manage orders, brands, and performance from one centralized platform.

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Diner POS System for All-Day Service | Dine360',
description: 'Manage diner operations with Dine360. Handle breakfast, lunch, and dinner orders efficiently with real-time tracking.',
}
export default function DinerLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const DinerPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Diner Operations <br />
<span className="italic font-serif font-light text-zinc-800">Fast-Paced, All-Day Dining</span>
<span className=" font-light text-zinc-800">Fast-Paced, All-Day Dining</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Family Style Restaurant POS System | Dine360',
description: 'Manage large group dining and table service with Dine360. Simplify billing, seating, and order flow for family restaurants.',
}
export default function FamilyStyleLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const FamilyStylePage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Simplify Your <br />
<span className="italic font-serif font-light text-zinc-800">Family Style Restaurant Operations</span>
<span className=" font-light text-zinc-800">Family Style Restaurant Operations</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Fast Casual Restaurant POS System | Dine360',
description: 'Speed up service and manage high-volume orders with Dine360 POS for fast casual restaurants. Improve efficiency and revenue.',
}
export default function FastCasualLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const FastCasualPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Take Control of Your <br />
<span className="italic font-serif font-light text-zinc-800">Fast Casual Restaurant</span>
<span className=" font-light text-zinc-800">Fast Casual Restaurant</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">
@ -514,4 +514,4 @@ const FastCasualPage = () => {
)
}
export default FastCasualPage
export default FastCasualPage

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Fast Food Restaurant POS & Billing System | Dine360',
description: 'Run fast food operations smoothly with Dine360 POS. Handle high-volume orders, reduce queues, and improve service speed.',
}
export default function FastFoodLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -51,7 +51,7 @@ const FastFoodPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Power Your <br />
<span className="italic font-serif font-light text-zinc-800">Fast Food Restaurant</span>
<span className=" font-light text-zinc-800">Fast Food Restaurant</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Fine Dining POS System for Upscale Restaurants | Dine360',
description: 'Elevate your fine dining experience with Dine360. Manage course timing, wine service, and guest preferences effortlessly.',
}
export default function FineDineLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -40,7 +40,7 @@ const FineDiningPage = () => {
</div>
<h1 className="text-4xl sm:text-6xl font-bold tracking-tight text-zinc-900 leading-[0.95]">
ELEVATE YOUR <br />
<span className="italic font-serif font-light text-red-600">GUEST EXPERIENCE</span>
<span className=" font-light text-red-600">GUEST EXPERIENCE</span>
</h1>
<p className="text-lg text-zinc-500 max-w-lg leading-relaxed text-wrap font-medium">
Dine360 provides the precision and sophistication required for high-end dining, from flawless reservations to elite table service.
@ -108,7 +108,7 @@ const FineDiningPage = () => {
<div className="space-y-4">
<span className="text-red-500 font-bold uppercase tracking-widest text-xs">ORDER MANAGEMENT SECTION</span>
<h2 className="text-5xl font-bold uppercase">Order Clarity</h2>
<h3 className="text-3xl text-zinc-400 font-light tracking-tight italic">Deliver Every Dish Perfectly</h3>
<h3 className="text-3xl text-zinc-400 font-light tracking-tight ">Deliver Every Dish Perfectly</h3>
<p className="text-zinc-500 max-w-md leading-relaxed">Maintain elite standards by tracking every detail of the guest journey from kitchen preparation to final presentation.</p>
</div>
<div className="grid gap-6">
@ -168,7 +168,7 @@ const FineDiningPage = () => {
<div className="space-y-4">
<span className="text-red-600 font-bold uppercase tracking-widest text-xs border-b border-red-600">QR CODE MENU SECTION</span>
<h2 className="text-5xl font-bold uppercase tracking-tighter leading-none">THE QR EXPERIENCE</h2>
<h3 className="text-2xl text-zinc-500 italic">Elegance in Digital Form</h3>
<h3 className="text-2xl text-zinc-500 ">Elegance in Digital Form</h3>
<p className="text-zinc-600 max-w-sm leading-relaxed font-medium">Allow discerning guests to explore your culinary artistry on their terms with our high-end digital menus.</p>
</div>
<div className="grid gap-6">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Fine Dining Restaurant Management Software | Dine360',
description: 'Manage fine dining operations with precision using Dine360. Improve reservations, service flow, and guest experience seamlessly.',
}
export default function FineDiningLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const FineDinePage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Fine Dining Experience <br />
<span className="italic font-serif font-light text-zinc-800">Precision Dining, Elevated</span>
<span className=" font-light text-zinc-800">Precision Dining, Elevated</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Food Truck POS System & Mobile Restaurant Software | Dine360',
description: 'Manage your food truck or street food business with Dine360. Fast billing, order tracking, and mobile-friendly POS system.',
}
export default function FoodTruckLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -51,7 +51,7 @@ const FoodTruckPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Power Your <br />
<span className="italic font-serif font-light text-zinc-800">Food Truck, Cart, or Street Food Stand</span>
<span className=" font-light text-zinc-800">Food Truck, Cart, or Street Food Stand</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Full Service Restaurant POS & Management | Dine360',
description: 'Manage full-service restaurant operations with Dine360. Handle reservations, tableside service, and detailed billing seamlessly.',
}
export default function FullServiceLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -40,7 +40,7 @@ const FullServicePage = () => {
</div>
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Scale Your <br />
<span className="italic font-serif font-light text-red-600 text-nowrap">Service Performance</span>
<span className=" font-light text-red-600 text-nowrap">Service Performance</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed text-wrap">
Dine360 unifies your table service, reservations, and kitchen operations to deliver a premium dining experience.
@ -115,7 +115,7 @@ const FullServicePage = () => {
<span className="text-red-500 font-bold uppercase tracking-widest text-xs">ORDER MANAGEMENT SECTION</span>
<h2 className="text-4xl font-bold uppercase">Order Management</h2>
<h3 className="text-2xl text-zinc-400 font-medium tracking-tight">Track Every Dine-In Order</h3>
<p className="text-zinc-500 italic max-w-sm">Keep service smooth from table to kitchen.</p>
<p className="text-zinc-500 max-w-sm">Keep service smooth from table to kitchen.</p>
</div>
<div className="grid gap-4">
{[
@ -142,7 +142,7 @@ const FullServicePage = () => {
<div className="text-center mb-16">
<span className="text-red-600 font-bold uppercase tracking-widest text-xs tracking-tighter">TABLE / SERVICE SECTION</span>
<h2 className="text-4xl font-bold mt-2 uppercase">Table Seating & Reservation</h2>
<p className="text-zinc-500 mt-4 text-xl font-medium italic max-w-2xl mx-auto">Master Your Floor Management: Organize reservations and walk-ins effortlessly.</p>
<p className="text-zinc-500 mt-4 text-xl font-medium max-w-2xl mx-auto">Master Your Floor Management: Organize reservations and walk-ins effortlessly.</p>
</div>
<div className="grid md:grid-cols-3 gap-8 text-center text-nowrap">
{[
@ -171,7 +171,7 @@ const FullServicePage = () => {
<span className="text-red-600 font-bold uppercase tracking-widest text-xs">DIGITAL MENU SECTION</span>
<h2 className="text-4xl font-bold">QR MENU</h2>
<h3 className="text-2xl text-zinc-600">Elevate Your Dining Experience</h3>
<p className="text-zinc-500 italic max-w-sm">Offer a modern digital menu built for full-service dining.</p>
<p className="text-zinc-500 max-w-sm">Offer a modern digital menu built for full-service dining.</p>
</div>
<div className="grid gap-6">
{[
@ -196,7 +196,7 @@ const FullServicePage = () => {
<span className="text-red-600 font-bold uppercase tracking-widest text-xs">MULTI-BRANCH SECTION</span>
<h2 className="text-4xl md:text-5xl font-bold uppercase">Scale Your Service Brand</h2>
<h3 className="text-2xl text-zinc-600 font-light max-w-xl">Manage Multiple Locations with Centralized Control</h3>
<p className="text-zinc-500 italic max-w-2xl px-4 text-wrap">Monitor sales across locations and handle menus centrally. Track performance and insights from one dashboard.</p>
<p className="text-zinc-500 max-w-2xl px-4 text-wrap">Monitor sales across locations and handle menus centrally. Track performance and insights from one dashboard.</p>
</div>
<div className="grid md:grid-cols-3 gap-8">
{[

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Ghost Kitchen & Cloud Kitchen Software | Dine360',
description: 'Run ghost kitchens efficiently with Dine360. Manage multiple brands, orders, and delivery platforms from one system.',
}
export default function GhostKitchenLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const GhostKitchenPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Take Control of Your <br />
<span className="italic font-serif font-light text-zinc-800">Ghost Kitchen Operations</span>
<span className=" font-light text-zinc-800">Ghost Kitchen Operations</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Ghost Kitchen & Cloud Restaurant Software | Dine360',
description: 'Manage delivery-only restaurants and cloud kitchens with Dine360. Handle multiple brands, orders, and delivery platforms easily.',
}
export default function GhostRestaurantLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const GhostKitchenPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Take Control of Your <br />
<span className="italic font-serif font-light text-zinc-800">Ghost Kitchen Operations</span>
<span className=" font-light text-zinc-800">Ghost Kitchen Operations</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">
@ -514,4 +514,4 @@ const GhostKitchenPage = () => {
)
}
export default GhostKitchenPage
export default GhostKitchenPage

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Restaurant Types We Serve | POS Solutions | Dine360',
description: 'Discover how Dine360 supports all restaurant types including cafes, fast food, fine dining, and cloud kitchens with tailored solutions.',
}
export default function RestaurantTypesLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Mongolian BBQ Restaurant POS System | Dine360',
description: 'Manage high-volume custom dining with Dine360. Handle guest flow, billing, and operations efficiently.',
}
export default function MongolianBBQLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -41,7 +41,7 @@ const MongolianBBQPage = () => {
</div>
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Scale Your <br />
<span className="italic font-serif font-light text-red-600">Mongolian Barbecue Experience</span>
<span className=" font-light text-red-600">Mongolian Barbecue Experience</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">
Manage high-volume, customizable dining with a system built for Mongolian barbecue restaurants. Dine360 helps you handle guest flow, orders, and billing while delivering a smooth and engaging dining experience.
@ -97,7 +97,7 @@ const MongolianBBQPage = () => {
<div className="h-px w-8 bg-red-600" />
</motion.div>
<motion.h2 initial={{ opacity: 0, y: 20 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} transition={{ delay: 0.1 }} className="text-3xl md:text-5xl font-bold mb-6 leading-tight">
Transform Your <span className="text-red-600 font-serif italic">Mongolian Barbecue Restaurant</span> with Dine360 Software.
Transform Your <span className="text-red-600 ">Mongolian Barbecue Restaurant</span> with Dine360 Software.
</motion.h2>
<p className="text-base text-zinc-600 max-w-2xl mx-auto">
Mongolian barbecue restaurants offer a unique, customizable dining experience where guests build their own meals. Managing crowd flow, billing, and kitchen coordination is essential. Dine360 simplifies operations by streamlining guest management, order tracking, and service flow - ensuring a seamless experience for every customer.

View File

@ -2,7 +2,12 @@
import React, { useState } from 'react'
import Image from 'next/image'
import { ArrowUpRight, Zap, RefreshCw, Clock, Target, Truck, Coffee, Cloud, UtensilsCrossed, ChefHat, Gem, Users } from 'lucide-react'
import {
ArrowUpRight, Zap, RefreshCw, Clock, Target, Truck, Coffee, Cloud,
UtensilsCrossed, ChefHat, Gem, Users, Store, Beer, Flame,
Pizza, Sandwich, IceCream, Wine, Soup, Beef, Utensils,
ChevronLeft, ChevronRight, Layers
} from 'lucide-react'
import { motion, AnimatePresence } from 'framer-motion'
import Link from 'next/link'
import Navbar from '@/components/Navbar'
@ -66,6 +71,102 @@ const RESTAURANT_TYPES = [
angle: 315,
href: "/restaurant-types/family-style",
},
{
label: "Fast Casual",
icon: Flame,
description: "Combine speed with quality service. Our POS handles unique workflows for restaurants that bridge the gap between fast food and fine dining.",
href: "/restaurant-types/fast-casual",
},
{
label: "Diner",
icon: Store,
description: "Classic desk service meets modern tech. Manage high-turnover seating, complicated breakfast orders, and multi-staff coordination with ease.",
href: "/restaurant-types/diner",
},
{
label: "Pub",
icon: Beer,
description: "Built for busy bars and pubs. Track open tabs, manage age-restricted items, and handle lightning-fast counter rounds flawlessly.",
href: "/restaurant-types/pub",
},
{
label: "Italian / Pizza",
icon: Pizza,
description: "Specialized for modifiers and toppings. Manage ingredient inventory, delivery zones, and custom modifiers with ease.",
href: "/restaurant-types/italian-pizza",
},
{
label: "Steakhouse",
icon: Beef,
description: "Focus on precision. Manage specific meat aging, cooking temperatures, and premium wine pairings for high-ticket service.",
href: "/restaurant-types/steakhouse",
},
{
label: "Seafood",
icon: Utensils,
description: "Handle fresh catch inventory, fluctuating market pricing, and seasonal menu changes with our flexible management system.",
href: "/restaurant-types/seafood",
},
{
label: "Buffet",
icon: Layers,
description: "Optimized for self-service or staff-assisted buffets. Track wastage, manage entry payments, and monitor kitchen refill rates.",
href: "/restaurant-types/buffet",
},
{
label: "Bistro",
icon: Wine,
description: "Small plates, big impact. Manage cozy seating layouts, rotating wine lists, and intimate guest experiences efficiently.",
href: "/restaurant-types/bistro",
},
{
label: "Cafeteria",
icon: Soup,
description: "Built for institutional or corporate cafeterias. Handle meal plans, quick-tap payments, and large-scale bulk ordering.",
href: "/restaurant-types/cafeteria",
},
{
label: "Teppanyaki",
icon: Flame,
description: "Experience-led dining. Sync chef stations with POS orders and manage theater-style seating arrangements.",
href: "/restaurant-types/teppanyaki",
},
{
label: "Contemporary Casual",
icon: Zap,
description: "Modern tech for modern dining. Integrated QR ordering, mobile payments, and tableside service for trend-setting restaurants.",
href: "/restaurant-types/contemporary-casual",
},
{
label: "Buffet",
icon: UtensilsCrossed,
description: "Manage large scale dining with ticket entry systems, kitchen replenishment notifications, and wastage tracking.",
href: "/restaurant-types/buffet",
},
{
label: "Ghost Restaurant",
icon: Cloud,
description: "Virtual brands, real profits. Manage multiple digital storefronts from one kitchen and sync with all major delivery apps.",
href: "/restaurant-types/ghost-restaurant",
},
{
label: "Delivery Only",
icon: Truck,
description: "Focus on the fleet. Optimize dispatching, track delivery times, and manage third-party integration from a single order screen.",
href: "/restaurant-types/delivery-only",
},
{
label: "Concession",
icon: Sandwich,
description: "Built for stadiums and events. Handle extreme peak waves with offline-readiness and high-speed tap-to-pay processing.",
href: "/restaurant-types/concession",
},
{
label: "Ice Cream Shop",
icon: IceCream,
description: "Cold treats, hot sales. Manage complex modifier chains, seasonal flavors, and high-frequency transactions with ease.",
href: "/restaurant-types/ice-cream-shop",
},
]
const HERO_IMAGES = [
@ -111,6 +212,28 @@ const RESTAURANT_TYPE_EMOJIS: Record<string, string> = {
const RestaurantTypesPage = () => {
const [hoveredIdx, setHoveredIdx] = useState<number | null>(null)
const [hoveredCardIdx, setHoveredCardIdx] = useState<number | null>(null)
const [currentPage, setCurrentPage] = useState(0)
const [direction, setDirection] = useState(1) // 1 for next, -1 for previous
const itemsPerPage = 8
const totalPages = Math.ceil(RESTAURANT_TYPES.length / itemsPerPage)
const nextPage = () => {
setDirection(1)
setCurrentPage((prev) => (prev + 1) % totalPages)
}
const prevPage = () => {
setDirection(-1)
setCurrentPage((prev) => (prev - 1 + totalPages) % totalPages)
}
const currentItems = RESTAURANT_TYPES.slice(
currentPage * itemsPerPage,
(currentPage + 1) * itemsPerPage
)
const diagramItems = RESTAURANT_TYPES.slice(0, 8)
return (
<div className="min-h-screen bg-black font-sans selection:bg-red-600 selection:text-white">
<Navbar />
@ -156,7 +279,7 @@ const RestaurantTypesPage = () => {
<br />
Solution For
<br />
<span className="text-red-600 italic font-serif font-light">Every Type</span>
<span className="text-red-600 font-light">Every Type</span>
<br />
of Restaurant
</motion.h1>
@ -468,8 +591,9 @@ const RestaurantTypesPage = () => {
className="absolute inset-0 w-full h-full pointer-events-none"
viewBox="0 0 580 580"
>
{RESTAURANT_TYPES.map((type, idx) => {
const rad = (type.angle * Math.PI) / 180
{diagramItems.map((type, idx) => {
const angle = type.angle ?? (idx * (360 / diagramItems.length))
const rad = (angle * Math.PI) / 180
const r = 210
const rInner = 90
const x1 = 290 + rInner * Math.sin(rad)
@ -525,10 +649,10 @@ const RestaurantTypesPage = () => {
className="flex flex-col items-center gap-2"
>
<span className="text-red-500 font-black uppercase tracking-[0.18em] text-[10px]">
{RESTAURANT_TYPES[hoveredIdx].label}
{diagramItems[hoveredIdx].label}
</span>
<span className="text-white text-sm leading-snug font-semibold">
{RESTAURANT_TYPES[hoveredIdx].description}
{diagramItems[hoveredIdx].description}
</span>
</motion.div>
)}
@ -537,8 +661,9 @@ const RestaurantTypesPage = () => {
</div>
{/* Nodes */}
{RESTAURANT_TYPES.map((type, idx) => {
const rad = (type.angle * Math.PI) / 180
{diagramItems.map((type, idx) => {
const angle = type.angle ?? (idx * (360 / diagramItems.length))
const rad = (angle * Math.PI) / 180
const r = 210
const cx = 290 + r * Math.sin(rad)
const cy = 290 - r * Math.cos(rad)
@ -591,82 +716,143 @@ const RestaurantTypesPage = () => {
</section>
{/* ─── RESTAURANT TYPES CARD GRID ─────────────────────────────── */}
<section className="py-12 sm:py-16 px-4 sm:px-6 lg:px-8 bg-zinc-100">
<div className="max-w-7xl mx-auto">
<section className="py-20 sm:py-24 px-4 sm:px-6 lg:px-8 bg-white border-t border-white/5 relative">
{/* Subtle noise pattern for texture */}
<div className="absolute inset-0 opacity-[0.03] pointer-events-none" style={{ backgroundImage: 'radial-gradient(#ffffff 1px, transparent 1px)', backgroundSize: '16px 16px' }}></div>
<div className="max-w-7xl mx-auto relative z-10">
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.2 }}
transition={{ duration: 0.45 }}
className="mb-8 sm:mb-10 text-center"
className="mb-12 text-center"
>
<p className="text-red-600 font-bold uppercase tracking-[0.2em] text-[10px] mb-2">View All Types</p>
<h3 className="text-zinc-900 text-2xl sm:text-3xl font-black">Built for All Restaurant Types</h3>
<p className="text-red-600 font-bold uppercase tracking-[0.3em] text-[11px] mb-3">Explore All Models</p>
<h3 className="text-black text-3xl sm:text-4xl md:text-5xl font-black mb-6">Designed For Every Scale</h3>
<div className="flex items-center justify-center gap-6">
<button
onClick={prevPage}
className="group relative flex items-center justify-center w-14 h-14 transition-all active:scale-95"
aria-label="Previous Page"
>
<div className="absolute inset-0 rounded-2xl border border-black/50 bg-white shadow-sm group-hover:border-red-600 transition-colors" />
<div className="absolute inset-0 rounded-2xl bg-red-600 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-90 group-hover:scale-100" />
<ChevronLeft className="relative w-6 h-6 text-black group-hover:text-white transition-colors" />
</button>
<div className="flex gap-2 bg-black/5 px-4 py-3 rounded-2xl">
{[...Array(totalPages)].map((_, i) => (
<button
key={i}
onClick={() => setCurrentPage(i)}
className={`h-2 rounded-full transition-all duration-300 ${
currentPage === i ? 'w-8 bg-red-600 shadow-sm shadow-red-600/30' : 'w-2 bg-black/20 hover:bg-black/40'
}`}
/>
))}
</div>
<button
onClick={nextPage}
className="group relative flex items-center justify-center w-14 h-14 transition-all active:scale-95"
aria-label="Next Page"
>
<div className="absolute inset-0 rounded-2xl border border-black/50 bg-white shadow-sm group-hover:border-red-600 transition-colors" />
<div className="absolute inset-0 rounded-2xl bg-red-600 opacity-0 group-hover:opacity-100 transition-all duration-300 scale-90 group-hover:scale-100" />
<ChevronRight className="relative w-6 h-6 text-black group-hover:text-white transition-colors" />
</button>
</div>
</motion.div>
<div className="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-4 sm:gap-5">
{RESTAURANT_TYPES.map((type, idx) => {
const isHovered = hoveredCardIdx === idx
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 perspective-[2000px]">
<AnimatePresence mode="wait">
<motion.div
key={currentPage}
className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 col-span-full"
style={{ transformStyle: 'preserve-3d' }}
>
{currentItems.map((type, idx) => {
const isHovered = hoveredCardIdx === idx
return (
<motion.div
key={type.label}
initial={{ opacity: 0, y: 24 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, amount: 0.2 }}
transition={{ duration: 0.45, delay: idx * 0.04 }}
whileHover={{ y: -6 }}
>
<Link
href={type.href}
className="group block rounded-2xl border transition-all duration-300 relative overflow-hidden h-full p-5 sm:p-6"
style={{
backgroundColor: isHovered ? '#ffffff' : '#18181b', // White on hover, Black default
borderColor: isHovered ? '#dc2626' : '#27272a', // RED Border on hover
borderWidth: isHovered ? '2px' : '1px', // Thick border on hover
boxShadow: isHovered ? '0 16px 36px rgba(0,0,0,0.1)' : '0 6px 18px rgba(0,0,0,0.3)',
}}
onMouseEnter={() => setHoveredCardIdx(idx)}
onMouseLeave={() => setHoveredCardIdx(null)}
>
{/* Background Glow Effect on Hover - Subtle warm tint */}
<div className={`absolute inset-0 bg-gradient-to-br from-red-50/50 to-transparent transition-opacity duration-300 pointer-events-none ${isHovered ? 'opacity-100' : 'opacity-0'}`} />
<div
className={`w-16 h-16 rounded-full border flex items-center justify-center text-3xl shadow-sm mb-4 transition-all duration-300 group-hover:scale-105 relative z-10 text-white ${
isHovered
? 'bg-red-500 border-red-600'
: 'bg-zinc-800 border-zinc-700'
}`}
>
<type.icon aria-hidden="true" className="w-8 h-8 transition-all duration-300 text-white" />
</div>
<h4 className={`text-2xl leading-tight font-black mb-2 relative z-10 transition-colors duration-300 ${
isHovered ? 'text-red-600' : 'text-white' // Red Title on Hover
}`}>
{type.label}
</h4>
<p className={`text-base leading-relaxed mb-6 relative z-10 transition-colors duration-300 ${
isHovered ? 'text-zinc-600' : 'text-zinc-400'
}`}>
{type.description}
</p>
<span
className="inline-flex items-center justify-center rounded-xl px-4 py-2 font-semibold text-sm transition-all duration-300 relative z-10"
style={{
backgroundColor: '#dc2626',
border: `1px solid #dc2626`,
color: '#ffffff',
return (
<motion.div
key={type.label}
initial={{ opacity: 0, rotateY: 180 * direction, scale: 0.8 }}
animate={{
opacity: 1,
rotateY: 0,
scale: 1,
transition: {
delay: direction === 1 ? idx * 0.1 : (7 - idx) * 0.1,
duration: 0.7,
ease: [0.34, 1.56, 0.64, 1]
}
}}
exit={{
opacity: 0,
rotateY: -180 * direction,
scale: 0.8,
transition: {
delay: direction === 1 ? (7 - idx) * 0.05 : idx * 0.05,
duration: 0.5
}
}}
whileHover={{ y: -8 }}
className="h-full"
style={{ transformStyle: 'preserve-3d', backfaceVisibility: 'hidden' }}
>
Learn More
</span>
</Link>
</motion.div>
)
})}
<Link
href={type.href}
className="group block rounded-3xl border transition-all duration-500 relative overflow-hidden h-full p-7"
style={{
backgroundColor: isHovered ? '#ffffff' : '#111111',
borderColor: isHovered ? '#dc2626' : 'rgba(255,255,255,0.05)',
boxShadow: isHovered ? '0 30px 60px -12px rgba(220,38,38,0.2)' : '0 10px 30px -10px rgba(0,0,0,0.5)',
}}
onMouseEnter={() => setHoveredCardIdx(idx)}
onMouseLeave={() => setHoveredCardIdx(null)}
>
{/* Hover Accent Line */}
<div className={`absolute top-0 left-0 w-full h-1.5 bg-red-600 transition-transform duration-500 ${isHovered ? 'translate-y-0' : '-translate-y-full'}`} />
<div
className={`w-14 h-14 rounded-2xl border flex items-center justify-center mb-6 transition-all duration-500 relative z-10 ${
isHovered
? 'bg-red-600 border-red-600 text-white shadow-lg shadow-red-600/30 rotate-12'
: 'bg-red-600/10 border-red-900/20 text-red-500'
}`}
>
<type.icon aria-hidden="true" className="w-7 h-7" />
</div>
<h4 className={`text-2xl font-black mb-3 leading-tight relative z-10 transition-colors duration-300 ${
isHovered ? 'text-zinc-900' : 'text-white'
}`}>
{type.label}
</h4>
<p className={`text-sm leading-relaxed mb-8 relative z-10 transition-colors duration-300 ${
isHovered ? 'text-zinc-600' : 'text-zinc-400'
}`}>
{type.description}
</p>
<div className="mt-auto flex items-center justify-between relative z-10">
<span
className={`text-xs font-black uppercase tracking-wider flex items-center gap-1 transition-colors duration-300 ${
isHovered ? 'text-red-600' : 'text-white/40'
}`}
>
Learn More <ArrowUpRight className="w-3.5 h-3.5" />
</span>
</div>
</Link>
</motion.div>
)
})}
</motion.div>
</AnimatePresence>
</div>
</div>
</section>

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Pop-Up Restaurant POS & Event System | Dine360',
description: 'Run pop-up restaurants and events with Dine360. Quick setup, fast billing, and flexible operations anywhere.',
}
export default function PopUpLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const PopUpPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Pop-Up Restaurant <br />
<span className="italic font-serif font-light text-zinc-800">with Ease</span>
<span className=" font-light text-zinc-800">with Ease</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Pub & Bar POS System for Order Management | Dine360',
description: 'Run your pub smoothly with Dine360 POS. Manage drink orders, tables, and billing during peak hours efficiently.',
}
export default function PubLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

View File

@ -52,7 +52,7 @@ const PubPage = () => {
<h1 className="text-4xl sm:text-5xl md:text-6xl font-bold tracking-tight text-zinc-900 leading-[1.1]">
Run Your <br />
<span className="italic font-serif font-light text-zinc-800">Pub & Bar Operations Smarter</span>
<span className=" font-light text-zinc-800">Pub & Bar Operations Smarter</span>
</h1>
<p className="text-lg text-zinc-600 max-w-lg leading-relaxed">

View File

@ -0,0 +1,14 @@
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Teppanyaki & Hibachi Restaurant POS | Dine360',
description: 'Manage hibachi-style dining with Dine360. Handle group seating, timing, and billing efficiently.',
}
export default function TeppanyakiLayout({
children,
}: {
children: React.ReactNode
}) {
return <>{children}</>
}

Some files were not shown because too many files have changed in this diff Show More