teecup/frontend/app/layout.tsx
Erol Haagenrud 6d84aafef8 ADR-018 er nå helt ferdig — backend, begge frontend-skjermer, og nå Open Graph-metadata, alt live samme dag. Oppsummert:
Én reell driftsfeil funnet før den nådde produksjon: generateMetadata() kjører server-side ved forespørselstid — går derfor ikke gjennom next.config.mjs sin rewrites() (som bare gjelder nettleser-trafikk). Den trengte TEECUP_API_ORIGIN direkte, men den variabelen fantes kun i Dockerfile sitt build-steg — ENV fra ett steg arves ikke til det neste i en multi-stage build. Rettet ved å sette den på nytt i runner-steget.

Verifisert presist, ikke bare at det kompilerte: bygget det ekte produksjonsimaget (ikke dev-server), pekte det mot en scratch-backend med ekte data, og hentet den faktiske server-rendrede HTML-en — bekreftet ekte og:title/og:description, og en trygg fallback-tittel for en ukjent turnering.

teeoff.no upåvirket gjennom hele runden.
2026-07-18 10:58:36 +02:00

56 lines
1.5 KiB
TypeScript

import type { Metadata, Viewport } from 'next'
import { Nunito } from 'next/font/google'
import './globals.css'
const nunito = Nunito({
subsets: ['latin'],
variable: '--font-nunito',
display: 'swap',
})
export const metadata: Metadata = {
// Trengs for at relative og:image-URL-er (MinIO-runden, ikke bygget ennå)
// skal løses til en fullstendig URL -- uten denne advarer Next.js ved
// build og faller tilbake til en gjettet verdi.
metadataBase: new URL('https://teecup.teeoff.no'),
title: 'TeeCup — Logg inn',
description: 'Logg inn på TeeCup, din golfturnerings-app. Passordløs innlogging med magisk lenke.',
generator: 'v0.app',
icons: {
icon: [
{
url: '/icon-light-32x32.png',
media: '(prefers-color-scheme: light)',
},
{
url: '/icon-dark-32x32.png',
media: '(prefers-color-scheme: dark)',
},
{
url: '/icon.svg',
type: 'image/svg+xml',
},
],
apple: '/apple-icon.png',
},
}
export const viewport: Viewport = {
colorScheme: 'light dark',
themeColor: [
{ media: '(prefers-color-scheme: light)', color: '#8BC24A' },
{ media: '(prefers-color-scheme: dark)', color: '#1c261d' },
],
}
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode
}>) {
return (
<html lang="no" className={`${nunito.variable} bg-background`}>
<body className="font-sans antialiased">{children}</body>
</html>
)
}