2026-04-24 17:12:51 +02:00
|
|
|
import type { Metadata, Viewport } from 'next'
|
2026-04-26 02:04:42 +02:00
|
|
|
import { Inter, Plus_Jakarta_Sans, JetBrains_Mono } from 'next/font/google'
|
2026-04-24 17:12:51 +02:00
|
|
|
import { Analytics } from '@vercel/analytics/next'
|
|
|
|
|
import './globals.css'
|
|
|
|
|
|
|
|
|
|
const inter = Inter({
|
|
|
|
|
subsets: ['latin'],
|
|
|
|
|
variable: '--font-inter',
|
|
|
|
|
display: 'swap',
|
|
|
|
|
})
|
|
|
|
|
|
2026-04-26 02:04:42 +02:00
|
|
|
const plusJakartaSans = Plus_Jakarta_Sans({
|
2026-04-24 17:12:51 +02:00
|
|
|
subsets: ['latin'],
|
2026-04-26 02:04:42 +02:00
|
|
|
variable: '--font-plus-jakarta-sans',
|
2026-04-24 17:12:51 +02:00
|
|
|
display: 'swap',
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const jetbrainsMono = JetBrains_Mono({
|
|
|
|
|
subsets: ['latin'],
|
|
|
|
|
variable: '--font-jetbrains-mono',
|
|
|
|
|
display: 'swap',
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
export const metadata: Metadata = {
|
2026-04-24 22:43:16 +02:00
|
|
|
title: 'Jamulix | 50 Jahre Code',
|
|
|
|
|
description: 'Seit 50 Jahren Code. Von Fortran IV bis Python, Rust und KI-Projekten. Erfahrener Programmierer, Linux-Veteran und KI-Entwickler.',
|
2026-04-24 17:12:51 +02:00
|
|
|
keywords: ['Programmierung', 'Linux', 'KI', 'Python', 'Rust', 'Software-Entwicklung', 'AI', 'Fortran', 'Unix'],
|
|
|
|
|
authors: [{ name: 'Jamulix' }],
|
|
|
|
|
creator: 'Jamulix',
|
|
|
|
|
openGraph: {
|
|
|
|
|
type: 'website',
|
|
|
|
|
locale: 'de_DE',
|
|
|
|
|
url: 'https://jamulix.de',
|
|
|
|
|
siteName: 'Jamulix',
|
2026-04-24 22:43:16 +02:00
|
|
|
title: 'Jamulix | 50 Jahre Code',
|
|
|
|
|
description: 'Seit 50 Jahren Code. Von Fortran IV bis Python, Rust und KI-Projekten.',
|
2026-04-24 17:12:51 +02:00
|
|
|
},
|
|
|
|
|
twitter: {
|
|
|
|
|
card: 'summary_large_image',
|
2026-04-24 22:43:16 +02:00
|
|
|
title: 'Jamulix | 50 Jahre Code',
|
|
|
|
|
description: 'Seit 50 Jahren Code. Von Fortran IV bis Python, Rust und KI-Projekten.',
|
2026-04-24 17:12:51 +02:00
|
|
|
},
|
|
|
|
|
robots: {
|
|
|
|
|
index: true,
|
|
|
|
|
follow: true,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const viewport: Viewport = {
|
|
|
|
|
themeColor: [
|
|
|
|
|
{ media: '(prefers-color-scheme: light)', color: '#faf9f7' },
|
|
|
|
|
{ media: '(prefers-color-scheme: dark)', color: '#1a1a1f' },
|
|
|
|
|
],
|
|
|
|
|
width: 'device-width',
|
|
|
|
|
initialScale: 1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function RootLayout({
|
|
|
|
|
children,
|
|
|
|
|
}: Readonly<{
|
|
|
|
|
children: React.ReactNode
|
|
|
|
|
}>) {
|
|
|
|
|
return (
|
|
|
|
|
<html
|
|
|
|
|
lang="de"
|
2026-04-26 02:04:42 +02:00
|
|
|
className={`${inter.variable} ${plusJakartaSans.variable} ${jetbrainsMono.variable} dark bg-background`}
|
2026-04-24 17:12:51 +02:00
|
|
|
suppressHydrationWarning
|
|
|
|
|
>
|
|
|
|
|
<head>
|
|
|
|
|
<script
|
|
|
|
|
dangerouslySetInnerHTML={{
|
|
|
|
|
__html: `
|
|
|
|
|
(function() {
|
|
|
|
|
const stored = localStorage.getItem('theme');
|
|
|
|
|
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
|
|
|
const theme = stored || (prefersDark ? 'dark' : 'light');
|
|
|
|
|
document.documentElement.classList.toggle('dark', theme === 'dark');
|
|
|
|
|
})();
|
|
|
|
|
`,
|
|
|
|
|
}}
|
|
|
|
|
/>
|
2026-04-25 19:16:48 +02:00
|
|
|
<noscript>
|
|
|
|
|
<style dangerouslySetInnerHTML={{
|
|
|
|
|
__html: `
|
|
|
|
|
[style*="opacity:0"], [style*="opacity: 0"] { opacity: 1 !important; }
|
|
|
|
|
[style*="transform:translate"], [style*="transform: translate"] { transform: none !important; }
|
|
|
|
|
`
|
|
|
|
|
}} />
|
|
|
|
|
</noscript>
|
2026-04-24 17:12:51 +02:00
|
|
|
</head>
|
|
|
|
|
<body className="font-sans antialiased min-h-screen">
|
|
|
|
|
{children}
|
|
|
|
|
{process.env.NODE_ENV === 'production' && <Analytics />}
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
)
|
|
|
|
|
}
|