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 { JsonLd } from "@/components/seo/json-ld"; import { Printer, Wifi, Settings, CheckCircle2, ChevronRight, AlertCircle, Zap, FileText, ChefHat, Receipt, BarChart3, Smartphone, } from "lucide-react"; const BASE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? "https://meezi.ir"; export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { const { locale } = await params; const t = await getTranslations({ locale, namespace: "meta" }); return { title: t("printerGuideTitle"), description: t("printerGuideDesc"), alternates: { canonical: `${BASE_URL}/${locale}/printer-guide`, languages: { fa: `${BASE_URL}/fa/printer-guide`, en: `${BASE_URL}/en/printer-guide` }, }, openGraph: { title: t("printerGuideTitle"), description: t("printerGuideDesc"), url: `${BASE_URL}/${locale}/printer-guide` }, }; } // ── Receipt Mockups ────────────────────────────────────────────────────────── function CustomerReceiptMockup({ locale }: { locale: string }) { const isEn = locale === "en"; return (
{/* Tear edge */}

{isEn ? "☕ Café Dorná" : "☕ کافه درنا"}

{isEn ? "Tehran, Valiasr St." : "تهران، خ ولیعصر"}

{isEn ? "021-88001234" : "۰۲۱-۸۸۰۰۱۲۳۴"}

{isEn ? "Table 7 · Order #1042" : "میز ۷ · سفارش #۱۰۴۲"}

{isEn ? "14 Oct 2025 · 15:32" : "۱۴۰۴/۰۷/۲۲ · ۱۵:۳۲"}

{isEn ? "Double Espresso ×2" : "اسپرسو دوبل ×۲"} {isEn ? "90,000" : "۹۰,۰۰۰"}
{isEn ? "Chocolate Cake ×1" : "کیک شکلاتی ×۱"} {isEn ? "58,000" : "۵۸,۰۰۰"}
{isEn ? "Caramel Latte ×1" : "لاته کارامل ×۱"} {isEn ? "65,000" : "۶۵,۰۰۰"}
{isEn ? "Subtotal" : "جمع"} {isEn ? "213,000" : "۲۱۳,۰۰۰"}
{isEn ? "Tax (9%)" : "مالیات (۹٪)"} {isEn ? "19,170" : "۱۹,۱۷۰"}
{isEn ? "TOTAL" : "مجموع"} {isEn ? "232,170 T" : "۲۳۲,۱۷۰ ت"}

{isEn ? "💳 Card Payment" : "💳 پرداخت کارتی"}

{/* WiFi QR placeholder */}

{isEn ? "📶 WiFi: Cafe_Dorna" : "📶 WiFi: Cafe_Dorna"}

{isEn ? "Pass: 12345678" : "پسورد: ۱۲۳۴۵۶۷۸"}

{isEn ? "Thank you! Visit again 🙏" : "ممنون از انتخاب شما 🙏"}

meezi.ir

); } function KitchenSlipMockup({ locale }: { locale: string }) { const isEn = locale === "en"; return (

{isEn ? "— KITCHEN —" : "— آشپزخانه —"}

{isEn ? "Table 7" : "میز ۷"} #۱۰۴۲

{isEn ? "15:32:44" : "۱۵:۳۲:۴۴"}

{isEn ? "2× Double Espresso" : "۲× اسپرسو دوبل"}
{isEn ? "1× Chocolate Cake" : "۱× کیک شکلاتی"}
{isEn ? "1× Caramel Latte" : "۱× لاته کارامل"}
{isEn ? " ↳ less sugar" : " ↳ کم‌شیرین"}

{isEn ? "Printed by Meezi POS" : "چاپ شده توسط میزی"}

); } // ── Feature cards ──────────────────────────────────────────────────────────── const PRINT_FEATURES = [ { icon: Zap, titleFa: "چاپ خودکار سفارش", titleEn: "Auto-Print on Order", descFa: "به محض ثبت سفارش، فیش آشپزخانه بدون دخالت کسی به پرینتر ارسال می‌شود. صفر تأخیر، صفر خطا.", descEn: "The moment an order is placed, the kitchen slip auto-prints with zero intervention. Zero delay, zero errors.", color: "bg-brand-50 text-brand-700", }, { icon: ChefHat, titleFa: "پرینتر KDS آشپزخانه", titleEn: "Kitchen Station Printer", descFa: "چند ایستگاه آشپزخانه؟ هر ایستگاه پرینتر جداگانه می‌تواند داشته باشد. نوشیدنی به بار، غذای گرم به گریل.", descEn: "Multiple kitchen stations? Each station gets its own printer. Drinks to bar, hot food to grill.", color: "bg-orange-50 text-orange-700", }, { icon: Receipt, titleFa: "فیش مشتری سفارشی", titleEn: "Customizable Customer Receipt", descFa: "لوگو، سرتیتر، پاورقی، پسورد WiFi، لینک نظرسنجی و پیام‌های دلخواه را روی فیش مشتری قرار دهید.", descEn: "Logo, header, footer, WiFi password, survey link, and custom messages on the customer receipt.", color: "bg-blue-50 text-blue-700", }, { icon: FileText, titleFa: "تقسیم صورت‌حساب", titleEn: "Bill Splitting", descFa: "صورت‌حساب را بین مشتریان تقسیم کنید. هر بخش فیش جداگانه دارد — نقد، کارت یا ترکیبی.", descEn: "Split the bill among guests. Each portion prints separately — cash, card, or mixed payment.", color: "bg-purple-50 text-purple-700", }, { icon: BarChart3, titleFa: "گزارش پایان شیفت", titleEn: "End-of-Shift Report", descFa: "با بستن شیفت، خلاصه فروش نقد/کارت و جمع سفارش‌ها به‌صورت خودکار چاپ می‌شود.", descEn: "When a shift closes, a summary of cash/card sales and total orders prints automatically.", color: "bg-amber-50 text-amber-700", }, { icon: Smartphone, titleFa: "چاپ دستی از اپ گارسون", titleEn: "Manual Print from Waiter App", descFa: "گارسون می‌تواند در هر لحظه از اپ موبایل فیش مشتری یا فیش آشپزخانه را برای یک سفارش مجدداً چاپ کند.", descEn: "The waiter can reprint the customer receipt or kitchen slip for any order directly from the mobile app.", color: "bg-teal-50 text-teal-700", }, ]; const CONNECTION_STEPS_FA = [ { step: "۱", title: "اتصال پرینتر به شبکه WiFi", desc: "پرینتر را به همان WiFi کافه وصل کنید. از دکمه Feed روی پرینتر برای چاپ صفحه تنظیمات استفاده کنید — آدرس IP در آن چاپ شده.", note: "پرینترهای رایج: Epson TM-T88, XPrinter XP-58, Bixolon SRP-350", }, { step: "۲", title: "وارد کردن IP و پورت در میزی", desc: "در داشبورد میزی، بخش تنظیمات → پرینتر را باز کنید. آدرس IP (مثلاً 192.168.1.105) و پورت (معمولاً 9100) را وارد کنید.", note: "پورت پیش‌فرض اکثر پرینترهای ESC/POS از جمله Epson و XPrinter برابر ۹۱۰۰ است.", }, { step: "۳", title: "تست چاپ", desc: "دکمه «چاپ تست» را بزنید. یک صفحه تست با عنوان «میزی» چاپ می‌شود و اتصال تأیید می‌شود.", note: "در صورت عدم چاپ: مطمئن شوید پرینتر و دستگاهی که داشبورد روی آن باز است روی یک شبکه هستند.", }, { step: "۴", title: "تنظیم عرض کاغذ و قالب", desc: "عرض کاغذ (۵۸ یا ۸۰ میلی‌متر)، سرتیتر، پاورقی، پسورد WiFi و برش خودکار را از همان صفحه تنظیم کنید.", note: "در صورت داشتن پرینتر آشپزخانه جداگانه، برای هر ایستگاه IP جداگانه وارد کنید.", }, ]; const CONNECTION_STEPS_EN = [ { step: "1", title: "Connect the printer to WiFi", desc: "Connect the printer to the same WiFi as your cafe. Press the Feed button to print a self-test page — the IP address is printed on it.", note: "Common printers: Epson TM-T88, XPrinter XP-58, Bixolon SRP-350", }, { step: "2", title: "Enter IP and port in Meezi", desc: "In the Meezi dashboard, go to Settings → Printer. Enter the IP address (e.g. 192.168.1.105) and port (usually 9100).", note: "Default port for most ESC/POS printers including Epson and XPrinter is 9100.", }, { step: "3", title: "Test print", desc: "Click the 'Test Print' button. A test page with the 'Meezi' header will print, confirming the connection.", note: "If nothing prints: make sure the printer and the device running the dashboard are on the same network.", }, { step: "4", title: "Configure paper width and template", desc: "Set paper width (58mm or 80mm), header, footer, WiFi password, and auto-cut from the same settings page.", note: "For a separate kitchen printer, enter a separate IP for each station.", }, ]; export default async function PrinterGuidePage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params; const isEn = locale === "en"; const base = `/${locale}`; const steps = isEn ? CONNECTION_STEPS_EN : CONNECTION_STEPS_FA; return ( <>
{/* Hero */}
{isEn ? "Printer Guide" : "راهنمای پرینتر"}

{isEn ? "Connect your printer in 4 steps" : "پرینتر را در ۴ مرحله وصل کنید"}

{isEn ? "Meezi supports any ESC/POS thermal printer over WiFi. No drivers, no USB — just the IP address and you're done." : "میزی با هر پرینتر حرارتی ESC/POS از طریق WiFi کار می‌کند. بدون درایور، بدون USB — فقط آدرس IP وارد کنید."}

{/* Connection Steps */}

{isEn ? "Setup in 4 steps" : "راه‌اندازی در ۴ مرحله"}

{/* Vertical connector line */}
{steps.map((s, i) => (
{/* Step bubble */}
{s.step}

{s.title}

{s.desc}

{s.note}

))}
{/* Receipt examples */}

{isEn ? "Receipt examples" : "نمونه فیش‌های چاپی"}

{isEn ? "This is what your receipts will look like — fully customizable." : "این شکل فیش‌های شما خواهد بود — کاملاً قابل سفارشی‌سازی."}

{/* Customer receipt */}

{isEn ? "Customer receipt" : "فیش مشتری"}

{isEn ? "80mm · ESC/POS" : "۸۰ میلیمتر · ESC/POS"}

    {(isEn ? [ "Cafe name, address, phone", "Table number and order ID", "All items with quantity and price", "Subtotal, tax, total", "Payment method (cash/card/mixed)", "WiFi password QR code", "Custom footer message", "Meezi.ir branding (optional)", ] : [ "نام کافه، آدرس، تلفن", "شماره میز و شناسه سفارش", "تمام آیتم‌ها با تعداد و قیمت", "جمع جزء، مالیات، مجموع", "روش پرداخت (نقد/کارت/ترکیبی)", "QR کد پسورد WiFi", "پیام پاورقی دلخواه", "برندینگ میزی (اختیاری)", ]).map((item) => (
  • {item}
  • ))}
{/* Kitchen slip */}

{isEn ? "Kitchen slip" : "فیش آشپزخانه"}

{isEn ? "58mm or 80mm · Large bold font" : "۵۸ یا ۸۰ میلیمتر · فونت درشت"}

    {(isEn ? [ "Table number prominent at top", "Exact order time (hh:mm:ss)", "All items in large bold font", "Per-item notes (less sugar, no onion…)", "Order ID for tracking", "Separate slip per kitchen station", "Auto-print on order confirmation", "Reprint via waiter app anytime", ] : [ "شماره میز برجسته در بالا", "زمان دقیق سفارش (ثانیه:دقیقه:ساعت)", "تمام آیتم‌ها با فونت درشت", "یادداشت هر آیتم (کم‌شیرین، بدون پیاز…)", "شناسه سفارش برای پیگیری", "فیش جداگانه برای هر ایستگاه", "چاپ خودکار پس از تأیید سفارش", "چاپ مجدد از اپ گارسون در هر زمان", ]).map((item) => (
  • {item}
  • ))}
{/* All printing features */}

{isEn ? "All printing features" : "تمام ویژگی‌های چاپ"}

{isEn ? "Everything you need for a paperless-by-choice, not paperless-by-force cafe." : "همه‌چیزی که برای یک کافه با مدیریت کاغذی کارآمد نیاز دارید."}

{PRINT_FEATURES.map((f) => (

{isEn ? f.titleEn : f.titleFa}

{isEn ? f.descEn : f.descFa}

))}
{/* Supported printers table */}

{isEn ? "Supported printers" : "پرینترهای پشتیبانی‌شده"}

{[ { model: "Epson TM-T88VI/VII", width: "80mm", conn: "WiFi / LAN", status: "✅" }, { model: "Epson TM-T20III", width: "80mm", conn: "WiFi / LAN", status: "✅" }, { model: "XPrinter XP-58IIH", width: "58mm", conn: "WiFi", status: "✅" }, { model: "XPrinter XP-80C", width: "80mm", conn: "WiFi / LAN", status: "✅" }, { model: "Bixolon SRP-350plusV", width: "80mm", conn: "LAN", status: "✅" }, { model: "Star TSP143IV", width: "80mm", conn: "LAN / CloudPRNT", status: "✅" }, { model: isEn ? "Any ESC/POS (port 9100)" : "هر ESC/POS (پورت ۹۱۰۰)", width: "58 / 80mm", conn: "WiFi / LAN", status: isEn ? "✅ Compatible" : "✅ سازگار" }, ].map((row) => ( ))}
{isEn ? "Model" : "مدل"} {isEn ? "Width" : "عرض"} {isEn ? "Connection" : "اتصال"} {isEn ? "Status" : "وضعیت"}
{row.model} {row.width} {row.conn} {row.status}

{isEn ? "USB printing requires the device running the dashboard to have the printer driver installed." : "چاپ USB نیاز به نصب درایور روی دستگاهی دارد که داشبورد روی آن اجرا می‌شود."}

{/* Dashboard settings screenshot guide */}

{isEn ? "Where to find printer settings" : "کجا تنظیمات پرینتر را پیدا کنم؟"}

{isEn ? "In your Meezi dashboard: Settings (تنظیمات) → Printer (پرینتر). You'll find sections for: Receipt Printer, Kitchen Printer, Paper Width, Auto Cut, Receipt Header, Receipt Footer, WiFi on Receipt, and Test Print." : "در داشبورد میزی: تنظیمات → پرینتر. بخش‌های زیر را پیدا می‌کنید: پرینتر رسید، پرینتر آشپزخانه، عرض کاغذ، برش خودکار، سرتیتر رسید، پاورقی رسید، رمز WiFi روی رسید و تست پرینت."}

{(isEn ? [ "Receipt Printer IP + Port", "Kitchen Printer IP + Port", "Paper Width: 58mm / 80mm", "Auto-cut after each receipt", "Header text (cafe name, address)", "Footer text (thank you message)", "WiFi SSID + password on receipt", "Test print button", ] : [ "IP + پورت پرینتر رسید", "IP + پورت پرینتر آشپزخانه", "عرض کاغذ: ۵۸ یا ۸۰ میلیمتر", "برش خودکار پس از هر فیش", "سرتیتر (نام کافه، آدرس)", "پاورقی (پیام تشکر)", "SSID + پسورد WiFi روی فیش", "دکمه تست پرینت", ]).map((item) => (
{item}
))}
{isEn ? "Open Printer Settings" : "باز کردن تنظیمات پرینتر"}