2026-07-17 21:40:42 +02:00
|
|
|
import type { Metadata, Viewport } from 'next'
|
|
|
|
|
import { Nunito } from 'next/font/google'
|
2026-08-19 07:54:07 +02:00
|
|
|
import { NextIntlClientProvider } from 'next-intl'
|
|
|
|
|
import { getLocale } from 'next-intl/server'
|
PWA er bygget og scratch/build-verifisert. Status:
Bygget:
Installerbar app: app/manifest.ts, appleWebApp-metadata for iOS, service worker (public/sw.js, håndskrevet — ingen next-pwa-avhengighet), public/offline.html.
Ikoner: enkelt grønt golf-flagg generert programmatisk (måtte omgå at verken PIL, rsvg-convert eller ImageMagick fantes i miljøet — løste det med et scratch npm-oppsett av sharp). Midlertidig, notert i FEATURE_BACKLOG.md for senere erstatning, slik du ba om. Erstattet samtidig den gamle apple-icon.png som faktisk var v0.app sin generiske plassholderlogo, ikke TeeCup-merkevare.
Full offline scoreregistrering: ny lib/offline-queue.ts (IndexedDB-kø) koblet inn i scorekort-skjermen. Slag/hull-resultat registrert offline vises umiddelbart som "Lagret lokalt · venter på synk", synkes automatisk når nettet er tilbake (pluss en manuell "Synkroniser nå"-knapp). Se ADR-028 for alle designvalgene (bl.a. hvorfor køen ligger i klientkoden og ikke i service workeren, og hvorfor jeg bevisst unngikk Background Sync API — iOS Safari støtter den ikke).
Viktig å være ærlig om: jeg har ingen nettleser-verktøy tilgjengelig i denne økten, så offline-flyten er verifisert med typesjekket produksjonsbuild + en kort container-boot (curl mot manifest/service worker/ikoner — alle svarer riktig), men ikke faktisk testet i en ekte nettleser (Chrome DevTools sin Offline-bryter, ordentlig "Legg til på hjemskjerm"). Anbefaler sterkt at du selv tester scorekort-siden med DevTools offline-modus før dere stoler på det i skarp bruk.
De fire UI-hullene du meldte inn er dokumentert i FEATURE_BACKLOG.md/CLAUDE.md med root cause (ikke bare notert som klager) — den mest presserende er /orgs/{id}/members, som er en reell rewrite/dynamisk-rute-kollisjon: siden er helt utilgjengelig i dag fordi Next.js sin /orgs/:path*-proxy-regel fanger kallet før selve siden noensinne nås.
Ingen migrasjon i denne runden — kun teecup_frontend trenger redeploy.
2026-07-19 23:51:08 +02:00
|
|
|
import { SwRegister } from '@/components/sw-register'
|
2026-08-19 07:54:07 +02:00
|
|
|
import { LocaleBootstrap } from '@/components/locale-bootstrap'
|
2026-07-17 21:40:42 +02:00
|
|
|
import './globals.css'
|
|
|
|
|
|
|
|
|
|
const nunito = Nunito({
|
|
|
|
|
subsets: ['latin'],
|
|
|
|
|
variable: '--font-nunito',
|
|
|
|
|
display: 'swap',
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
export const metadata: Metadata = {
|
2026-07-18 10:58:36 +02:00
|
|
|
// 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.
|
2026-08-05 13:35:19 +02:00
|
|
|
metadataBase: new URL('https://teecup.golf'),
|
2026-07-17 21:40:42 +02:00
|
|
|
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 er bygget og scratch/build-verifisert. Status:
Bygget:
Installerbar app: app/manifest.ts, appleWebApp-metadata for iOS, service worker (public/sw.js, håndskrevet — ingen next-pwa-avhengighet), public/offline.html.
Ikoner: enkelt grønt golf-flagg generert programmatisk (måtte omgå at verken PIL, rsvg-convert eller ImageMagick fantes i miljøet — løste det med et scratch npm-oppsett av sharp). Midlertidig, notert i FEATURE_BACKLOG.md for senere erstatning, slik du ba om. Erstattet samtidig den gamle apple-icon.png som faktisk var v0.app sin generiske plassholderlogo, ikke TeeCup-merkevare.
Full offline scoreregistrering: ny lib/offline-queue.ts (IndexedDB-kø) koblet inn i scorekort-skjermen. Slag/hull-resultat registrert offline vises umiddelbart som "Lagret lokalt · venter på synk", synkes automatisk når nettet er tilbake (pluss en manuell "Synkroniser nå"-knapp). Se ADR-028 for alle designvalgene (bl.a. hvorfor køen ligger i klientkoden og ikke i service workeren, og hvorfor jeg bevisst unngikk Background Sync API — iOS Safari støtter den ikke).
Viktig å være ærlig om: jeg har ingen nettleser-verktøy tilgjengelig i denne økten, så offline-flyten er verifisert med typesjekket produksjonsbuild + en kort container-boot (curl mot manifest/service worker/ikoner — alle svarer riktig), men ikke faktisk testet i en ekte nettleser (Chrome DevTools sin Offline-bryter, ordentlig "Legg til på hjemskjerm"). Anbefaler sterkt at du selv tester scorekort-siden med DevTools offline-modus før dere stoler på det i skarp bruk.
De fire UI-hullene du meldte inn er dokumentert i FEATURE_BACKLOG.md/CLAUDE.md med root cause (ikke bare notert som klager) — den mest presserende er /orgs/{id}/members, som er en reell rewrite/dynamisk-rute-kollisjon: siden er helt utilgjengelig i dag fordi Next.js sin /orgs/:path*-proxy-regel fanger kallet før selve siden noensinne nås.
Ingen migrasjon i denne runden — kun teecup_frontend trenger redeploy.
2026-07-19 23:51:08 +02:00
|
|
|
// 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',
|
|
|
|
|
},
|
2026-07-17 21:40:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const viewport: Viewport = {
|
|
|
|
|
colorScheme: 'light dark',
|
|
|
|
|
themeColor: [
|
2026-08-10 09:07:33 +02:00
|
|
|
{ media: '(prefers-color-scheme: light)', color: '#f3f6ec' },
|
|
|
|
|
{ media: '(prefers-color-scheme: dark)', color: '#131a0f' },
|
2026-07-17 21:40:42 +02:00
|
|
|
],
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-19 07:54:07 +02:00
|
|
|
export default async function RootLayout({
|
2026-07-17 21:40:42 +02:00
|
|
|
children,
|
|
|
|
|
}: Readonly<{
|
|
|
|
|
children: React.ReactNode
|
|
|
|
|
}>) {
|
2026-08-19 07:54:07 +02:00
|
|
|
// i18n (ADR-094) -- locale kommer fra en cookie (se i18n/request.ts),
|
|
|
|
|
// ALDRI fra URL-en. LocaleBootstrap synker inn brukerens preferred_locale
|
|
|
|
|
// fra /auth/me på klienten dersom ingen cookie er satt ennå.
|
|
|
|
|
const locale = await getLocale()
|
|
|
|
|
|
2026-07-17 21:40:42 +02:00
|
|
|
return (
|
2026-08-19 07:54:07 +02:00
|
|
|
<html lang={locale} className={`${nunito.variable} bg-background`}>
|
PWA er bygget og scratch/build-verifisert. Status:
Bygget:
Installerbar app: app/manifest.ts, appleWebApp-metadata for iOS, service worker (public/sw.js, håndskrevet — ingen next-pwa-avhengighet), public/offline.html.
Ikoner: enkelt grønt golf-flagg generert programmatisk (måtte omgå at verken PIL, rsvg-convert eller ImageMagick fantes i miljøet — løste det med et scratch npm-oppsett av sharp). Midlertidig, notert i FEATURE_BACKLOG.md for senere erstatning, slik du ba om. Erstattet samtidig den gamle apple-icon.png som faktisk var v0.app sin generiske plassholderlogo, ikke TeeCup-merkevare.
Full offline scoreregistrering: ny lib/offline-queue.ts (IndexedDB-kø) koblet inn i scorekort-skjermen. Slag/hull-resultat registrert offline vises umiddelbart som "Lagret lokalt · venter på synk", synkes automatisk når nettet er tilbake (pluss en manuell "Synkroniser nå"-knapp). Se ADR-028 for alle designvalgene (bl.a. hvorfor køen ligger i klientkoden og ikke i service workeren, og hvorfor jeg bevisst unngikk Background Sync API — iOS Safari støtter den ikke).
Viktig å være ærlig om: jeg har ingen nettleser-verktøy tilgjengelig i denne økten, så offline-flyten er verifisert med typesjekket produksjonsbuild + en kort container-boot (curl mot manifest/service worker/ikoner — alle svarer riktig), men ikke faktisk testet i en ekte nettleser (Chrome DevTools sin Offline-bryter, ordentlig "Legg til på hjemskjerm"). Anbefaler sterkt at du selv tester scorekort-siden med DevTools offline-modus før dere stoler på det i skarp bruk.
De fire UI-hullene du meldte inn er dokumentert i FEATURE_BACKLOG.md/CLAUDE.md med root cause (ikke bare notert som klager) — den mest presserende er /orgs/{id}/members, som er en reell rewrite/dynamisk-rute-kollisjon: siden er helt utilgjengelig i dag fordi Next.js sin /orgs/:path*-proxy-regel fanger kallet før selve siden noensinne nås.
Ingen migrasjon i denne runden — kun teecup_frontend trenger redeploy.
2026-07-19 23:51:08 +02:00
|
|
|
<body className="font-sans antialiased">
|
2026-08-19 07:54:07 +02:00
|
|
|
<NextIntlClientProvider>
|
|
|
|
|
<SwRegister />
|
|
|
|
|
<LocaleBootstrap />
|
|
|
|
|
{children}
|
|
|
|
|
</NextIntlClientProvider>
|
PWA er bygget og scratch/build-verifisert. Status:
Bygget:
Installerbar app: app/manifest.ts, appleWebApp-metadata for iOS, service worker (public/sw.js, håndskrevet — ingen next-pwa-avhengighet), public/offline.html.
Ikoner: enkelt grønt golf-flagg generert programmatisk (måtte omgå at verken PIL, rsvg-convert eller ImageMagick fantes i miljøet — løste det med et scratch npm-oppsett av sharp). Midlertidig, notert i FEATURE_BACKLOG.md for senere erstatning, slik du ba om. Erstattet samtidig den gamle apple-icon.png som faktisk var v0.app sin generiske plassholderlogo, ikke TeeCup-merkevare.
Full offline scoreregistrering: ny lib/offline-queue.ts (IndexedDB-kø) koblet inn i scorekort-skjermen. Slag/hull-resultat registrert offline vises umiddelbart som "Lagret lokalt · venter på synk", synkes automatisk når nettet er tilbake (pluss en manuell "Synkroniser nå"-knapp). Se ADR-028 for alle designvalgene (bl.a. hvorfor køen ligger i klientkoden og ikke i service workeren, og hvorfor jeg bevisst unngikk Background Sync API — iOS Safari støtter den ikke).
Viktig å være ærlig om: jeg har ingen nettleser-verktøy tilgjengelig i denne økten, så offline-flyten er verifisert med typesjekket produksjonsbuild + en kort container-boot (curl mot manifest/service worker/ikoner — alle svarer riktig), men ikke faktisk testet i en ekte nettleser (Chrome DevTools sin Offline-bryter, ordentlig "Legg til på hjemskjerm"). Anbefaler sterkt at du selv tester scorekort-siden med DevTools offline-modus før dere stoler på det i skarp bruk.
De fire UI-hullene du meldte inn er dokumentert i FEATURE_BACKLOG.md/CLAUDE.md med root cause (ikke bare notert som klager) — den mest presserende er /orgs/{id}/members, som er en reell rewrite/dynamisk-rute-kollisjon: siden er helt utilgjengelig i dag fordi Next.js sin /orgs/:path*-proxy-regel fanger kallet før selve siden noensinne nås.
Ingen migrasjon i denne runden — kun teecup_frontend trenger redeploy.
2026-07-19 23:51:08 +02:00
|
|
|
</body>
|
2026-07-17 21:40:42 +02:00
|
|
|
</html>
|
|
|
|
|
)
|
|
|
|
|
}
|