Files
claudemesh/apps/web/src/app/[locale]/layout.tsx
Alejandro Gutiérrez 533dcc11f6
Some checks failed
CI / Tests / 🧪 Test (push) Has been cancelled
fix(web): remove turbostarter CTA popup + ship claudemesh OG image
Two visible launch-polish issues:

1. BuyCtaDialog popup was firing on an exponential backoff schedule
   (15s, 30s, 60s, …) pushing users toward turbostarter.dev/#pricing +
   Discord. Wrong product, wrong audience. Fully removed: mount point
   in [locale]/layout.tsx + the component file + localStorage keys will
   self-prune on next visit.

2. WhatsApp/Slack/Twitter link previews were pulling the TurboStarter
   boilerplate opengraph-image.png (from Jan 8). Replaced with a 1200×630
   claudemesh OG: "CLAUDEMESH" pixel wordmark left side, hero mesh
   composition (6 Claude Code terminals + pixel-crab hub + orange
   energy lattice + vaporwave grid floor) right side, "peer mesh for
   Claude Code sessions" tagline in mono beneath wordmark.

3. Default metadata description swapped from the dangling
   `common:product.description` i18n key (which rendered as the key
   itself because the key doesn't exist in our trimmed translations)
   to a hardcoded claudemesh description.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 23:11:34 +01:00

40 lines
996 B
TypeScript

import { notFound } from "next/navigation";
import { config, isLocaleSupported } from "@turbostarter/i18n";
import { getMetadata } from "~/lib/metadata";
import { Providers } from "~/lib/providers/providers";
import { ImpersonatingBanner } from "~/modules/admin/users/user/impersonating-banner";
import { BaseLayout } from "~/modules/common/layout/base";
import { Toaster } from "~/modules/common/toast";
export function generateStaticParams() {
return config.locales.map((locale) => ({ locale }));
}
export const generateMetadata = getMetadata();
export default async function RootLayout({
children,
params,
}: {
children: React.ReactNode;
params: Promise<{ locale: string }>;
}) {
const locale = (await params).locale;
if (!isLocaleSupported(locale)) {
return notFound();
}
return (
<BaseLayout locale={locale}>
<Providers locale={locale}>
<ImpersonatingBanner />
{children}
<Toaster />
</Providers>
</BaseLayout>
);
}