fe9a95c60d
Replaces the centered single-column of full-width cards with a proper application layout: a persistent left sidebar (Trees, and per-tree People/Sources/Media, with the tree name and sign-out) and a constrained content column. Marketing landing and auth pages are split out (own header/footer; centered auth with the logo). Adds a Media gallery (upload + image thumbnails / file tiles, served via the backend content endpoint). Events are no longer free-text: a curated event-type list (+ custom) and a structured date (qualifier + day/month/year) that composes a proper genealogical date. Regenerated the OpenAPI client. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Justin Paul <justin@jpaul.me>
28 lines
859 B
TypeScript
28 lines
859 B
TypeScript
import type { Metadata } from "next";
|
|
import { Fraunces, Inter } from "next/font/google";
|
|
|
|
import "./globals.css";
|
|
|
|
const serif = Fraunces({
|
|
subsets: ["latin"],
|
|
variable: "--font-fraunces",
|
|
display: "swap",
|
|
axes: ["opsz"],
|
|
});
|
|
const sans = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Provenance — where it came from matters",
|
|
description:
|
|
"Trace your family and your land in one place — every fact linked to the record it came from. Self-hosted, sourced, and yours to keep.",
|
|
icons: { icon: "/favicon.svg" },
|
|
};
|
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="en" className={`${serif.variable} ${sans.variable}`}>
|
|
<body className="min-h-screen antialiased">{children}</body>
|
|
</html>
|
|
);
|
|
}
|