import { CartProvider } from 'components/cart/cart-context'; import { CheckoutProvider } from 'components/checkout/checkout-provider'; import Footer from 'components/layout/footer'; import { Navbar } from 'components/layout/navbar'; import Subscriptions from 'components/layout/subscriptions'; import { NextAuthProvider } from 'components/next-session-provider'; import { WelcomeToast } from 'components/welcome-toast'; import { GeistSans } from 'geist/font/sans'; import { ensureStartsWith } from 'lib/utils'; import { NextIntlClientProvider } from 'next-intl'; import { getLocale, getMessages } from 'next-intl/server'; import { ReactNode } from 'react'; import { Toaster } from 'sonner'; import './globals.css'; const { TWITTER_CREATOR, TWITTER_SITE, SITE_NAME } = process.env; const baseUrl = process.env.NEXT_PUBLIC_VERCEL_URL ? `https://${process.env.NEXT_PUBLIC_VERCEL_URL}` : 'http://localhost:3000'; const twitterCreator = TWITTER_CREATOR ? ensureStartsWith(TWITTER_CREATOR, '@') : undefined; const twitterSite = TWITTER_SITE ? ensureStartsWith(TWITTER_SITE, 'https://') : undefined; export const metadata = { metadataBase: new URL(baseUrl), title: { default: SITE_NAME!, template: `%s | ${SITE_NAME}` }, robots: { follow: true, index: true }, ...(twitterCreator && twitterSite && { twitter: { card: 'summary_large_image', creator: twitterCreator, site: twitterSite } }) }; export default async function RootLayout({ children }: { children: ReactNode }) { const locale = await getLocale(); const messages = await getMessages(); return (