import type { Metadata } from "next"; import { Analytics } from "@vercel/analytics/next"; import { AtprotoSessionProvider } from "@/components/AtprotoSessionProvider"; import { PreferencesProvider } from "@/components/PreferencesProvider"; import { KeyboardShortcutsProvider } from "@/components/KeyboardShortcutsProvider"; import Footer from "@/components/Footer"; import PageTransition from "@/components/PageTransition"; import ThemeSync from "@/components/ThemeSync"; import FontScaleSync from "@/components/FontScaleSync"; import A11ySync from "@/components/A11ySync"; import { DEFAULT_THEME, THEME_INIT_SCRIPT } from "@/lib/theme"; import { FONT_SCALE_INIT_SCRIPT } from "@/lib/fontScale"; import { A11Y_INIT_SCRIPT } from "@/lib/a11y"; import { getSiteUrl } from "@/lib/config"; import "./globals.css"; export const metadata: Metadata = { title: "aturi.to: Tour the Atmosphere", description: "Travel between clients with the browser extension, share universal Atmosphere links, and explore any account's PDS data.", // Use the deploy's actual origin (testing.aturi.to on staging, a preview // URL on Vercel previews) so OG image URLs resolve against THIS deploy // and not production. Without this, embeds on staging would render // whatever OG image production happened to have built. metadataBase: new URL(getSiteUrl()), manifest: '/site.webmanifest', openGraph: { title: "aturi.to: Tour the Atmosphere", description: "Travel between clients with the browser extension, share universal Atmosphere links, and explore any account's PDS data.", type: "website", images: [ { url: '/og-images/aturi-home.png', width: 1200, height: 672, alt: 'aturi.to: three tools for one Atmosphere', }, ], }, twitter: { card: "summary_large_image", title: "aturi.to: Tour the Atmosphere", description: "Travel between clients with the browser extension, share universal Atmosphere links, and explore any account's PDS data.", images: ['/og-images/aturi-home.png'], }, }; export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { return ( {/* Apple TN3156 requires an `application/activity+json` link element on social-network post pages for rich previews in Messages. Bluesky's bskyweb base template emits this with an empty href on EVERY page; we mirror that exactly. */} {/* Apply the saved theme before first paint to avoid a dark/light flash on cold loads. The script reads from localStorage and sets data-theme on synchronously. */}