feat: dark theme foundation, new header/footer, shared site primitives
Adds dark design tokens, Inter + JetBrains Mono, a header with Notes, Process, About and a Book a call button, and a footer with the availability line driven by the tested domain core. Shared primitives live in src/components/site, site constants in src/content/site.ts. Legacy pages (blog, legal, contact, tags, technologies) keep a light surface via LegacyLightSurface. Stub routes for /notes, /process and /book. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Inter, Newsreader } from "next/font/google";
|
||||
import { Inter, JetBrains_Mono, Newsreader } from "next/font/google";
|
||||
import { Analytics } from "@/src/components/Analytics";
|
||||
import { Footer } from "@/src/components/Footer";
|
||||
import { Header } from "@/src/components/Header";
|
||||
@@ -7,6 +7,11 @@ import { InteractiveElements } from "@/src/components/InteractiveElements";
|
||||
import "./globals.css";
|
||||
|
||||
const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });
|
||||
const jetbrainsMono = JetBrains_Mono({
|
||||
subsets: ["latin"],
|
||||
variable: "--font-jetbrains-mono",
|
||||
display: "swap",
|
||||
});
|
||||
const newsreader = Newsreader({
|
||||
subsets: ["latin"],
|
||||
variable: "--font-newsreader",
|
||||
@@ -14,14 +19,25 @@ const newsreader = Newsreader({
|
||||
display: "swap",
|
||||
});
|
||||
|
||||
const DESCRIPTION =
|
||||
"Senior engineer for teams that build fast with AI and don't want chaos. Strong in design and frontend, provably clean in architecture and tests. Remote, booked in weekly capacity blocks.";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: {
|
||||
default: "Marc Mintel — Professionelle Websites für Unternehmen",
|
||||
default: "Marc Mintel — Senior engineer for AI-built software",
|
||||
template: "%s | Marc Mintel",
|
||||
},
|
||||
description:
|
||||
"Professionelle Websites zum Fixpreis. Ein Entwickler, ein Ansprechpartner — von der Idee bis zum fertigen Ergebnis. Inklusive Sorglos-Paket: Änderungen, Wartung und Sicherheit komplett abgedeckt.",
|
||||
description: DESCRIPTION,
|
||||
metadataBase: new URL("https://mintel.me"),
|
||||
openGraph: {
|
||||
type: "website",
|
||||
siteName: "Marc Mintel",
|
||||
title: "Marc Mintel — Senior engineer for AI-built software",
|
||||
description: DESCRIPTION,
|
||||
url: "https://mintel.me",
|
||||
locale: "en_US",
|
||||
},
|
||||
twitter: { card: "summary_large_image" },
|
||||
icons: {
|
||||
icon: "/favicon.svg",
|
||||
},
|
||||
@@ -33,8 +49,11 @@ export default function RootLayout({
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<html lang="de" className={`${inter.variable} ${newsreader.variable}`}>
|
||||
<body className="min-h-screen bg-white">
|
||||
<html
|
||||
lang="en"
|
||||
className={`${inter.variable} ${jetbrainsMono.variable} ${newsreader.variable}`}
|
||||
>
|
||||
<body className="min-h-screen bg-bg font-sans text-fg antialiased">
|
||||
<Header />
|
||||
<main>{children}</main>
|
||||
<Footer />
|
||||
|
||||
Reference in New Issue
Block a user