initial commit
Some checks failed
build / lint (push) Failing after 36s
build / build (push) Has been skipped

This commit is contained in:
2026-01-29 16:13:04 +00:00
commit a32badd025
31 changed files with 6256 additions and 0 deletions

76
app/layout.tsx Normal file
View File

@@ -0,0 +1,76 @@
import type { Metadata } from "next";
import { headers } from "next/headers";
import type { ReactNode } from "react";
import de from "@/locales/de.json";
import en from "@/locales/en.json";
import es from "@/locales/es.json";
import fr from "@/locales/fr.json";
import it from "@/locales/it.json";
import sv from "@/locales/sv.json";
import "./globals.css";
type Locale = "en" | "es" | "fr" | "de" | "it" | "sv";
const descriptions: Record<Locale, string> = {
en: en.hero.lede,
es: es.hero.lede,
fr: fr.hero.lede,
de: de.hero.lede,
it: it.hero.lede,
sv: sv.hero.lede,
};
async function pickLocaleFromHeaders(): Promise<Locale> {
const hdrs = await headers();
const accept = hdrs.get("accept-language") || "";
const entries = accept.split(",").map((entry) => entry.trim().toLowerCase());
const match = entries.find((entry) =>
["es", "fr", "de", "it", "sv", "en"].some((code) => entry.startsWith(code))
);
if (!match) return "en";
if (match.startsWith("es")) return "es";
if (match.startsWith("fr")) return "fr";
if (match.startsWith("de")) return "de";
if (match.startsWith("it")) return "it";
if (match.startsWith("sv")) return "sv";
return "en";
}
export async function generateMetadata(): Promise<Metadata> {
const locale = await pickLocaleFromHeaders();
return {
title: "PolyNote",
description: descriptions[locale] ?? descriptions.en,
metadataBase: new URL("https://polynote.wittrail.com"),
openGraph: {
title: "PolyNote",
description: descriptions[locale] ?? descriptions.en,
url: "https://polynote.wittrail.com",
siteName: "PolyNote",
images: [
{
url: "/logo.svg",
width: 256,
height: 256,
alt: "PolyNote logo",
},
],
locale,
type: "website",
},
icons: {
icon: "/favicon.ico",
shortcut: "/favicon.ico",
apple: "/favicon.png",
},
};
}
export default async function RootLayout({ children }: { children: ReactNode }) {
const locale = await pickLocaleFromHeaders();
return (
<html lang={locale}>
<body>{children}</body>
</html>
);
}