Bygg PWA-installasjonsoppfordring (Android beforeinstallprompt + iOS instruksjonsbanner) Design og bygg flere flighter i én frittstående runde (løs gruppering, retning 1) Design og bygg scramble/greensome-statistikk (valgt utslag per spiller) Bygg push-varsler til telefonens OS (VAPID, push_subscription, service worker) Scratch-verifiser backend for alle fire (27/27 sjekker gjort) Browserverifiser alle fire i nettleser mot scratch-backend Rull ut mot ekte systemer (migrasjoner + containere), med bekreftelse Oppdater CLAUDE.md/FEATURE_BACKLOG.md/ARCHITECTURE_DECISIONS.md Alle fire er ferdigstilt, verifisert og live. Kort oppsummert: PWA-installasjonsoppfordring — ekte beforeinstallprompt-fanging, Android-knapp + iOS-instruksjonsbanner, vist på dashbordet. Bekreftet at Chrome faktisk fyrte eventet i testøkten. Flere flighter i én frittstående runde — løs gruppering av separate runder (delt UUID), "+ Legg til en flight til" gjenbruker hele opprett-flyten forhåndsutfylt, nytt kombinert leaderboard på tvers av flighter. Testet fra knappetrykk til ferdig runde, bekreftet i database. Scramble/greensome: valgt utslag per spiller — nytt felt i hull-registreringen (helt valgfritt), "Utslag brukt"-oppsummering på statistikksiden. Bygget for frittstående runder; org-turneringer bevisst utenfor omfang denne runden (notert i backloggen). Push-varsler til telefonens OS — Web Push/VAPID, ny av/på-bryter i kontoinnstillinger, dekker alle fire varseltyper automatisk. VAPID-nøkler generert og lagt i .env uten å vises i chatten. Én ærlig begrensning: ekte OS-varsel-levering med innvilget tillatelse kunne ikke testes i denne automatiserte nettleserøkten (tillatelsen var forhåndsblokkert av miljøet) — verdt å teste selv på en ekte enhet. 27/27 scratch-sjekker, full nettleser-gjennomgang uten konsollfeil, migrasjoner 035–037 kjørt mot ekte teecup_db, begge containere redeployet og verifisert, teeoff.no upåvirket. Alle tre .md-filene er oppdatert med full detalj.
21 lines
762 B
TypeScript
21 lines
762 B
TypeScript
"use client"
|
|
|
|
import { useEffect } from "react"
|
|
import { initInstallPromptCapture } from "@/lib/pwa-install"
|
|
|
|
// Registrerer service workeren (ADR-028). Stille no-op i nettlesere uten
|
|
// støtte -- appen skal fungere helt uendret uten SW, bare uten
|
|
// installasjon/offline-cache.
|
|
//
|
|
// Fanger i tillegg "beforeinstallprompt" så tidlig som mulig (samme
|
|
// mountpunkt på ALLE sider, se lib/pwa-install.ts) -- eventet fyres kun én
|
|
// gang per side-liv, og InstallPrompt-komponenten på dashbordet kan mountes
|
|
// for sent til å fange det selv.
|
|
export function SwRegister() {
|
|
useEffect(() => {
|
|
initInstallPromptCapture()
|
|
if (!("serviceWorker" in navigator)) return
|
|
navigator.serviceWorker.register("/sw.js").catch(() => {})
|
|
}, [])
|
|
return null
|
|
}
|