import { getProducts, filterOutBundles } from "@/lib/saleor"; import { getTranslations, setRequestLocale } from "next-intl/server"; import Header from "@/components/layout/Header"; import Footer from "@/components/layout/Footer"; import HeroVideo from "@/components/home/HeroVideo"; import ProductCard from "@/components/product/ProductCard"; import TrustBadges from "@/components/home/TrustBadges"; import AsSeenIn from "@/components/home/AsSeenIn"; import ProductReviews from "@/components/product/ProductReviews"; import BeforeAfterGallery from "@/components/home/BeforeAfterGallery"; import ProblemSection from "@/components/home/ProblemSection"; import HowItWorks from "@/components/home/HowItWorks"; import { getPageMetadata } from "@/lib/i18n/pageMetadata"; import { isValidLocale, DEFAULT_LOCALE, getSaleorLocale, type Locale } from "@/lib/i18n/locales"; import { getPageKeywords, getBrandKeywords } from "@/lib/seo/keywords"; import { Metadata } from "next"; import Image from "next/image"; export const revalidate = 3600; const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://manoonoils.com"; export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { const { locale } = await params; const validLocale = isValidLocale(locale) ? locale : DEFAULT_LOCALE; const metadata = getPageMetadata(validLocale as Locale); const keywords = getPageKeywords(validLocale as Locale, 'home'); const brand = getBrandKeywords(validLocale as Locale); setRequestLocale(validLocale); // Build canonical URL const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${validLocale}`; const canonicalUrl = `${baseUrl}${localePrefix || '/'}`; return { title: metadata.home.title, description: metadata.home.description, keywords: [...keywords.primary, ...keywords.secondary].join(', '), alternates: { canonical: canonicalUrl, }, openGraph: { title: metadata.home.title, description: metadata.home.description, type: 'website', url: canonicalUrl, images: [{ url: `${baseUrl}/og-image.jpg`, width: 1200, height: 630, alt: brand.tagline, }], locale: validLocale, }, twitter: { card: 'summary_large_image', title: metadata.home.title, description: metadata.home.description, images: [`${baseUrl}/og-image.jpg`], }, }; } export default async function Homepage({ params }: { params: Promise<{ locale: string }> }) { const { locale } = await params; const validLocale = isValidLocale(locale) ? locale : DEFAULT_LOCALE; setRequestLocale(validLocale); const t = await getTranslations("Home"); const tBenefits = await getTranslations("Benefits"); const metadata = getPageMetadata(validLocale as Locale); const saleorLocale = getSaleorLocale(validLocale as Locale); let products: any[] = []; try { products = await getProducts(saleorLocale); } catch (e) { console.log("Failed to fetch products during build"); } const filteredProducts = filterOutBundles(products); const featuredProducts = filteredProducts.slice(0, 4); const hasProducts = featuredProducts.length > 0; const basePath = `/${validLocale}`; return ( <>
{hasProducts && (
{t("collection")}

{t("premiumOils")}

{t("oilsDescription")}

{featuredProducts.map((product, index) => ( ))}
)}
{t("ourStory")}

{t("handmadeWithLove")}

{t("storyText1")}

{t("storyText2")}

{t("learnMore")}
{metadata.home.productionAlt}
{t("whyChooseUs")}

{t("manoonDifference")}

{[ { title: tBenefits("natural"), description: tBenefits("naturalDesc"), icon: ( ), }, { title: tBenefits("handcrafted"), description: tBenefits("handcraftedDesc"), icon: ( ), }, { title: tBenefits("sustainable"), description: tBenefits("sustainableDesc"), icon: ( ), }, ].map((benefit, index) => (
{benefit.icon}

{benefit.title}

{benefit.description}

))}
{t("stayConnected")}

{t("joinCommunity")}

{t("newsletterText")}