d62bb8d3ad
Marketing website for Meezi platform: - Server-side rendered pages: home, demo, blog, pricing - RTL/Farsi layout with Vazirmatn font - SEO metadata and Open Graph tags - proxy.ts for Next.js 16 middleware convention - MEEZI_API_URL internal Docker network routing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
141 lines
7.2 KiB
TypeScript
141 lines
7.2 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { getTranslations } from "next-intl/server";
|
|
import { Navbar } from "@/components/layout/navbar";
|
|
import { Footer } from "@/components/layout/footer";
|
|
import { CtaBanner } from "@/components/sections/cta-banner";
|
|
import { Coffee, UtensilsCrossed, Building2, Truck, ChevronRight } from "lucide-react";
|
|
|
|
const BASE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? "https://meezi.ir";
|
|
|
|
export async function generateMetadata({ params }: { params: { locale: string } }): Promise<Metadata> {
|
|
const { locale } = await Promise.resolve(params);
|
|
const t = await getTranslations({ locale, namespace: "meta" });
|
|
return {
|
|
title: t("solutionsTitle"),
|
|
description: t("solutionsDesc"),
|
|
alternates: {
|
|
canonical: `${BASE_URL}/${locale}/solutions`,
|
|
languages: { fa: `${BASE_URL}/fa/solutions`, en: `${BASE_URL}/en/solutions` },
|
|
},
|
|
openGraph: { title: t("solutionsTitle"), description: t("solutionsDesc"), url: `${BASE_URL}/${locale}/solutions` },
|
|
};
|
|
}
|
|
|
|
const SOLUTIONS = [
|
|
{
|
|
icon: Coffee,
|
|
titleFa: "کافهها",
|
|
titleEn: "Cafes",
|
|
descFa: "برای کافههای کوچک تا متوسط که میخواهند سرعت سرویسدهی را بالا ببرند و تجربه مشتری را بهبود دهند.",
|
|
descEn: "For small to medium cafes looking to increase service speed and improve customer experience.",
|
|
featuresFa: ["منوی QR روی هر میز", "سفارشگیری آنلاین", "مدیریت صف", "گزارش روزانه فروش"],
|
|
featuresEn: ["QR menu on every table", "Online ordering", "Queue management", "Daily sales report"],
|
|
color: "from-brand-600 to-brand-800",
|
|
light: "bg-brand-50",
|
|
},
|
|
{
|
|
icon: UtensilsCrossed,
|
|
titleFa: "رستورانها",
|
|
titleEn: "Restaurants",
|
|
descFa: "برای رستورانهایی با منوی بزرگتر، آشپزخانههای پیچیدهتر و نیاز به مدیریت چندین ایستگاه آشپزخانه.",
|
|
descEn: "For restaurants with larger menus, complex kitchens, and multiple kitchen station management.",
|
|
featuresFa: ["سیستم KDS آشپزخانه", "مدیریت موجودی مواد اولیه", "رزرو میز", "گزارشهای پیشرفته"],
|
|
featuresEn: ["Kitchen Display System", "Ingredient inventory", "Table reservations", "Advanced reports"],
|
|
color: "from-amber-500 to-amber-700",
|
|
light: "bg-amber-50",
|
|
},
|
|
{
|
|
icon: Building2,
|
|
titleFa: "زنجیرههای چند شعبهای",
|
|
titleEn: "Multi-Branch Chains",
|
|
descFa: "برای برندهایی با چندین شعبه که میخواهند از یک داشبورد مرکزی همه شعبهها را مدیریت و مقایسه کنند.",
|
|
descEn: "For brands with multiple branches who want to manage and compare all locations from one central dashboard.",
|
|
featuresFa: ["داشبورد مرکزی چند شعبه", "مقایسه عملکرد شعبهها", "منوی مشترک با override شعبه", "مدیریت کارکنان متمرکز"],
|
|
featuresEn: ["Central multi-branch dashboard", "Branch performance comparison", "Shared menu with branch overrides", "Centralized staff management"],
|
|
color: "from-blue-600 to-blue-800",
|
|
light: "bg-blue-50",
|
|
},
|
|
{
|
|
icon: Truck,
|
|
titleFa: "کافههای ابری",
|
|
titleEn: "Cloud Kitchens",
|
|
descFa: "برای کافههای ابری و ghost kitchenهایی که بدون فضای فیزیکی سفارشها را مدیریت میکنند.",
|
|
descEn: "For cloud kitchens and ghost kitchens managing orders without a physical dining space.",
|
|
featuresFa: ["مدیریت سفارشهای آنلاین", "یکپارچگی با پلتفرمهای تحویل", "گزارش سود و زیان", "مدیریت پیکها"],
|
|
featuresEn: ["Online order management", "Delivery platform integration", "P&L reports", "Courier management"],
|
|
color: "from-purple-600 to-purple-800",
|
|
light: "bg-purple-50",
|
|
},
|
|
];
|
|
|
|
export default async function SolutionsPage({ params }: { params: { locale: string } }) {
|
|
const { locale } = await Promise.resolve(params);
|
|
const isEn = locale === "en";
|
|
const base = `/${locale}`;
|
|
|
|
return (
|
|
<>
|
|
<Navbar />
|
|
<main className="pt-16">
|
|
{/* Hero */}
|
|
<div className="bg-gradient-to-br from-brand-900 to-brand-700 py-20 text-center">
|
|
<span className="inline-flex items-center gap-1.5 rounded-full border border-white/20 bg-white/10 px-3 py-1 text-xs font-semibold text-white/80">
|
|
{isEn ? "Solutions" : "راهکارها"}
|
|
</span>
|
|
<h1 className="mt-4 text-3xl font-extrabold text-white sm:text-4xl">
|
|
{isEn ? "Built for every food business" : "برای هر نوع کسبوکار غذایی"}
|
|
</h1>
|
|
<p className="mx-auto mt-4 max-w-2xl text-lg text-white/60">
|
|
{isEn
|
|
? "Whether you run a single cafe or a chain of 20 restaurants — Meezi scales with you."
|
|
: "چه یک کافه داشته باشید چه یک زنجیره ۲۰ شعبهای — میزی با شما رشد میکند."}
|
|
</p>
|
|
</div>
|
|
|
|
{/* Solutions */}
|
|
<section className="mx-auto max-w-7xl px-4 py-16 sm:px-6 lg:px-8">
|
|
<div className="space-y-12">
|
|
{SOLUTIONS.map((sol, i) => (
|
|
<div key={sol.titleFa} className={`grid items-center gap-8 lg:grid-cols-2 ${i % 2 === 1 ? "lg:grid-flow-dense" : ""}`}>
|
|
{/* Visual */}
|
|
<div className={i % 2 === 1 ? "lg:col-start-2" : ""}>
|
|
<div className={`flex h-56 items-center justify-center rounded-2xl bg-gradient-to-br ${sol.color}`}>
|
|
<sol.icon className="h-20 w-20 text-white/60" />
|
|
</div>
|
|
</div>
|
|
{/* Text */}
|
|
<div>
|
|
<div className={`mb-4 inline-flex h-12 w-12 items-center justify-center rounded-xl ${sol.light}`}>
|
|
<sol.icon className="h-6 w-6 text-gray-700" />
|
|
</div>
|
|
<h2 className="mb-3 text-2xl font-bold text-gray-900">
|
|
{isEn ? sol.titleEn : sol.titleFa}
|
|
</h2>
|
|
<p className="mb-5 text-gray-500 leading-relaxed">
|
|
{isEn ? sol.descEn : sol.descFa}
|
|
</p>
|
|
<ul className="mb-6 space-y-2">
|
|
{(isEn ? sol.featuresEn : sol.featuresFa).map((f) => (
|
|
<li key={f} className="flex items-center gap-2 text-sm text-gray-700">
|
|
<div className="h-1.5 w-1.5 rounded-full bg-brand-700" />
|
|
{f}
|
|
</li>
|
|
))}
|
|
</ul>
|
|
<a href={`${base}/demo`} className="inline-flex items-center gap-1.5 rounded-xl bg-brand-700 px-5 py-2.5 text-sm font-semibold text-white hover:bg-brand-800 transition-colors">
|
|
{isEn ? "Request Demo" : "درخواست دمو"}
|
|
<ChevronRight className="h-4 w-4" />
|
|
</a>
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</section>
|
|
|
|
<CtaBanner />
|
|
</main>
|
|
<Footer />
|
|
</>
|
|
);
|
|
}
|