Caddy/DNS/SPF/DKIM/DMARC var allerede live på teecup.golf. Denne committen kobler appen inn: docker-compose.yml sendte til nå ALDRI TEECUP_PUBLIC_BASE_URL/TEECUP_VAPID_SUBJECT inn i teecup_api- containeren (kjørende containere brukte derfor kode-fallbacken, gammelt domene, for magic-link-URL-er til tross for at nettsiden allerede ble servert fra teecup.golf). layout.tsx sin metadataBase og config.py sine to hardkodede fallback-standarder rettet til samme domene. E-post- fra-adresse (TEECUP_FROM_EMAIL/SMTP_USER, ny postkasse teecup@teecup.golf) oppdatert direkte i .env (ikke committet, gitignored). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import type { Metadata, Viewport } from 'next'
|
|
import { Nunito } from 'next/font/google'
|
|
import { SwRegister } from '@/components/sw-register'
|
|
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.golf'),
|
|
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',
|
|
},
|
|
// PWA-installasjon (ADR-028). iOS Safari leser ikke manifest.json for
|
|
// «Legg til på hjemskjerm»-oppførsel -- disse Apple-spesifikke metafeltene
|
|
// trengs i tillegg til selve manifestet (app/manifest.ts).
|
|
appleWebApp: {
|
|
capable: true,
|
|
statusBarStyle: 'default',
|
|
title: 'TeeCup',
|
|
},
|
|
}
|
|
|
|
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">
|
|
<SwRegister />
|
|
{children}
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|