Files
meezi/web/website/src/app/[locale]/contact/page.tsx
T
soroush.asadi 35494d8b32 fix(i18n): keep locale on website->dashboard links; dashboard defaults to fa
Marketing-site login/register/dashboard links were locale-less (app.meezi.ir/login), so the dashboard auto-detected locale from the browser Accept-Language (en-US) and redirected Persian users to /en. Links now carry the current locale, and the dashboard sets localeDetection:false so any locale-less entry defaults to fa (Iran-first) instead of guessing from the browser.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 23:23:09 +03:30

183 lines
6.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { Metadata } from "next";
import { getTranslations } from "next-intl/server";
import { Navbar } from "@/components/layout/navbar";
import { Footer } from "@/components/layout/footer";
import { Phone, Mail, MapPin, Clock, MessageSquare, ArrowLeft, ArrowRight } from "lucide-react";
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "meta" });
return { title: t("contactTitle") };
}
const fa = {
badge: "ارتباط با ما",
title: "چطور می‌توانیم کمک کنیم؟",
subtitle: "تیم پشتیبانی ما آماده است. از طریق هر کانالی که راحت‌تری با ما در ارتباط باش.",
channels: [
{
icon: Phone,
title: "تلفن پشتیبانی",
desc: "شنبه تا چهارشنبه، ۹ تا ۱۸",
value: "۰۲۱-XXXX-XXXX",
cta: "تماس بگیر",
href: "tel:+9821XXXXXXXX",
},
{
icon: Mail,
title: "ایمیل",
desc: "پاسخ در کمتر از ۲۴ ساعت",
value: "support@meezi.ir",
cta: "ارسال ایمیل",
href: "mailto:support@meezi.ir",
},
{
icon: MessageSquare,
title: "چت آنلاین",
desc: "از داشبورد میزی در دسترس است",
value: "چت زنده",
cta: "ورود به داشبورد",
href: "https://app.meezi.ir/fa",
},
],
officeTitle: "دفتر مرکزی",
officeAddress: "تهران، ایران",
officeHours: "شنبه تا چهارشنبه — ۹:۰۰ تا ۱۸:۰۰",
demoTitle: "دمو رایگان می‌خواهی؟",
demoDesc: "اگر می‌خواهی میزی را قبل از خرید امتحان کنی، یک جلسه دمو ۳۰ دقیقه‌ای رایگان بگیر.",
demoBtn: "درخواست دمو رایگان",
};
const en = {
badge: "Get in touch",
title: "How can we help?",
subtitle: "Our support team is ready. Reach us through whichever channel is most convenient for you.",
channels: [
{
icon: Phone,
title: "Phone Support",
desc: "SaturdayWednesday, 9 AM 6 PM",
value: "+98 21 XXXX XXXX",
cta: "Call us",
href: "tel:+9821XXXXXXXX",
},
{
icon: Mail,
title: "Email",
desc: "Response within 24 hours",
value: "support@meezi.ir",
cta: "Send email",
href: "mailto:support@meezi.ir",
},
{
icon: MessageSquare,
title: "Live Chat",
desc: "Available inside the Meezi dashboard",
value: "Live chat",
cta: "Go to dashboard",
href: "https://app.meezi.ir/en",
},
],
officeTitle: "Head Office",
officeAddress: "Tehran, Iran",
officeHours: "SaturdayWednesday — 9:00 AM to 6:00 PM",
demoTitle: "Want a free demo?",
demoDesc: "If you'd like to try Meezi before signing up, book a free 30-minute demo session.",
demoBtn: "Request Free Demo",
};
export default async function ContactPage({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
const c = locale === "fa" ? fa : en;
const Arrow = locale === "fa" ? ArrowLeft : ArrowRight;
const base = `/${locale}`;
return (
<>
<Navbar />
<main className="pt-16">
{/* Hero */}
<div className="bg-gradient-to-br from-brand-900 to-brand-700 pb-20 pt-16 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">
{c.badge}
</span>
<h1 className="mt-4 text-3xl font-extrabold text-white sm:text-4xl">{c.title}</h1>
<p className="mx-auto mt-3 max-w-lg text-lg text-white/60">{c.subtitle}</p>
</div>
<div className="mx-auto max-w-5xl px-4 pb-24 sm:px-6 lg:px-8">
{/* Channel cards */}
<div className="-mt-10 grid gap-6 sm:grid-cols-3">
{c.channels.map(({ icon: Icon, title, desc, value, cta, href }) => (
<div
key={title}
className="flex flex-col rounded-2xl border border-gray-100 bg-white p-7 shadow-xl shadow-gray-200/60"
>
<div className="mb-4 flex h-12 w-12 items-center justify-center rounded-xl bg-brand-50">
<Icon className="h-6 w-6 text-brand-700" />
</div>
<h2 className="mb-1 font-bold text-gray-900">{title}</h2>
<p className="mb-1 text-xs text-gray-400">{desc}</p>
<p className="mb-5 text-sm font-semibold text-gray-700">{value}</p>
<a
href={href}
className="mt-auto inline-flex items-center gap-2 rounded-xl bg-brand-700 px-5 py-2.5 text-center text-sm font-semibold text-white transition-colors hover:bg-brand-800"
>
{cta}
<Arrow className="h-4 w-4" />
</a>
</div>
))}
</div>
{/* Office info */}
<div className="mt-12 grid gap-6 sm:grid-cols-2">
<div className="flex gap-4 rounded-2xl border border-gray-100 bg-white p-6 shadow-sm">
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-brand-50">
<MapPin className="h-5 w-5 text-brand-700" />
</div>
<div>
<h3 className="mb-1 font-semibold text-gray-900">{c.officeTitle}</h3>
<p className="text-sm text-gray-500">{c.officeAddress}</p>
</div>
</div>
<div className="flex gap-4 rounded-2xl border border-gray-100 bg-white p-6 shadow-sm">
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-brand-50">
<Clock className="h-5 w-5 text-brand-700" />
</div>
<div>
<h3 className="mb-1 font-semibold text-gray-900">
{locale === "fa" ? "ساعات کاری" : "Working Hours"}
</h3>
<p className="text-sm text-gray-500">{c.officeHours}</p>
</div>
</div>
</div>
{/* Demo CTA */}
<div className="mt-12 rounded-2xl bg-gradient-to-br from-brand-900 to-brand-700 p-10 text-center">
<h2 className="mb-3 text-2xl font-extrabold text-white">{c.demoTitle}</h2>
<p className="mb-6 text-white/60">{c.demoDesc}</p>
<a
href={`${base}/demo`}
className="inline-flex items-center gap-2 rounded-xl bg-white px-7 py-3.5 text-sm font-semibold text-brand-700 transition-colors hover:bg-brand-50"
>
{c.demoBtn}
<Arrow className="h-4 w-4" />
</a>
</div>
</div>
</main>
<Footer />
</>
);
}