Alt tre punktene er nå live og verifisert:

1. ADR-037-frontend (individuelle turneringer) — rullet ut, med et reelt backend-hull (list_tournaments manglet de nye kolonnene) funnet og fikset underveis.

2. Stepper-overlapp i Chip/Bunker/Straffeslag — root cause var at wizardens innholdskolonne er fast 384px bred, mens gridet byttet til 3 kolonner basert på viewport-bredde (640px), ikke containerens egen bredde. Enhver skjerm bredere enn 640px (som din) fikk dermed tre steppere som kolliderte inni en for smal kolonne. Fikset ved å alltid stable dem i én kolonne.

3. Favikon — det viste seg at selve nettleser-faneikonet (icon.svg + 32×32-variantene) fortsatt var V0s egen logo, aldri byttet ut da appen ble bygget — mens PWA-ikonene og Apple-ikonet allerede var korrekt TeeCup-merket (grønt golfflagg) siden en tidligere runde. Byttet faneikonet til samme golfflagg-design.

Alt er verifisert (typesjekket build, browserverifisering av stepper-fiksen, direkte innholdssjekk av favikon-filene) og redeployet — teecup_api/teecup_frontend booter rent, teeoff.no upåvirket.
This commit is contained in:
Erol Haagenrud 2026-07-30 08:16:40 +02:00
parent 007588fbbf
commit bcb98a8625
5 changed files with 76 additions and 29 deletions

View file

@ -5676,9 +5676,68 @@ Ferdig og verifisert:
konsollfeil (`list_console_messages`) gjennom hele økten. Ekte konsollfeil (`list_console_messages`) gjennom hele økten. Ekte
typesjekket produksjonsbuild (samme `Dockerfile` som deployes) kompilerte typesjekket produksjonsbuild (samme `Dockerfile` som deployes) kompilerte
rent til slutt, med begge fiksene inne. rent til slutt, med begge fiksene inne.
**IKKE rullet ut mot ekte systemer ennå** -- venter på brukerens **Rullet ut mot ekte systemer 2026-07-30**, bruker bekreftet eksplisitt:
eksplisitte bekreftelse (både `teecup_api`, for `list_tournaments`- ingen migrasjon, `docker compose up -d --build teecup_api
fiksen, og `teecup_frontend`, ingen migrasjon). teecup_frontend`. Begge containere boot-et rent, `/health`/`/dashboard`
→ 200, `teeoff.no` upåvirket, `GET /orgs/.../tournaments` (den fikset
ruten) bekreftet nåbar med korrekt `401` gjennom hele produksjonsstacken.
**ADR-037 er dermed live, backend + frontend** (grunnstruktur — de fem
konkrete formatene og Order of Merit fortsatt ikke designet, se
FEATURE_BACKLOG.md).
- **To reelle punkter fra bruker, BEGGE FIKSET OG LIVE, samme dag
(2026-07-30):** rapportert med et vedlagt skjermbilde av
Chip/Bunker/Straffeslag-stepperne som gled over i hverandre på
`/my-rounds/{id}`, pluss en forespørsel om et TeeCup-relatert favikon.
1. **Stepper-overlapp, root cause presist identifisert:** `ScoringWizard`
sin "flere detaljer"-seksjon (`round-detail.tsx`) er fast begrenset
til `max-w-sm` (384px) UANSETT hvor bred selve viewporten er -- men
Chip/Bunker/Straffeslag-gridet brukte et VIEWPORT-basert
`sm:grid-cols-3`-brudd (640px). Enhver skjerm bredere enn 640px
(dvs. de fleste telefoner i liggende modus, nettbrett, og skjermbildet
brukeren delte) trigget dermed 3-kolonne-modus INNI en 384px-bred
kolonne -- hver Stepper har to faste 44px-knapper (tilgjengelighets-
kravet, kan ikke krympes) + verdi + padding, som aldri kan bli
smalere enn ca. 190px, så tre av dem kolliderte alltid. Samme
klasse feil som de tidligere sticky-kolonne- og match-identitets-
boks-overlappene i prosjektet (fast innholdsbredde møter et
viewport-basert, ikke container-basert, brudd). Fikset ved å fjerne
`sm:grid-cols-3` helt -- alltid stablet i én kolonne, som uansett var
den eneste bredden som noensinne hadde plass i en 384px-container.
2. **Favikon var faktisk V0s egen logo, ikke TeeCup:** `icon.svg` og
`icon-light-32x32.png`/`icon-dark-32x32.png` (selve nettleser-fane-
ikonet, styrt av `layout.tsx` sin `metadata.icons`) viste seg -- ved
faktisk å åpne og se på filene, ikke anta -- å fortsatt være en
ubrukt "V0"-logo (sort/hvit v0.app-merke) helt siden V0-eksporten,
aldri erstattet. `apple-icon.png` og selve PWA-ikonsettet
(`public/icons/icon-192.png` m.fl.) var derimot ALLEREDE korrekt
TeeCup-merket (grønt golf-flagg, fra PWA-runden 2026-07-19) -- kun
favikon-stien var glemt. Fikset ved å gjenbruke SAMME etablerte
golf-flagg-design: `icon-light-32x32.png`/`icon-dark-32x32.png`
regenerert (nedskalert fra `icon-512.png` via en engangs
`sharp`-scratch, samme verktøy som PWA-runden brukte) og `icon.svg`
skrevet på nytt som en ren vektor av samme flagg (grønn `#8BC24A`-
bakgrunn, hvit flaggstang+flagg -- appens egen merkevarefarge, ikke
funnet på).
**Verifisert:** ekte typesjekket produksjonsbuild (samme `Dockerfile`
som deployes) kompilerte rent BEGGE ganger (én mislykket 404-test mot
kun `--target builder`-imaget, som IKKE har `public/`-mappen kopiert inn
ved siden av `server.js` ennå -- forventet byggestrenge-artefakt, ikke en
reell bug -- rettet ved å bygge og teste det FULLE, faktiske
produksjonsimaget i stedet, som ga korrekt `200`/riktig `content-type`
for alle tre ikonfilene). Stepper-fiksen browserverifisert grundig i en
isolert scratch-økt (ekte innlogging, en fersk `full`-stat_level-runde
seedet via API, veiviseren kjørt gjennom Slag→Putter→Avstand→Detaljer):
bekreftet INGEN overlapp ved 800px viewport (der bugen reprodusertes
presist, matcher brukerens skjermbilde) OG ingen regresjon ved 390px
(alltid stablet der uansett, uendret oppførsel). Ingen konsollfeil.
**Rullet ut live 2026-07-30**, bruker bekreftet eksplisitt (samme
"redeploy begge"-godkjenning som ADR-037): ingen migrasjon,
`docker compose up -d --build teecup_frontend` (gjenskapte også
`teecup_api` som vanlig bivirkning, ingen backend-kode rørt). Begge
containere boot-et rent, `/health`/`/dashboard` → 200, favikon-filene
bekreftet nåbare over ekte https med riktig `content-type`, `teeoff.no`
upåvirket.
Neste steg: Neste steg:
0a. **Spillerliste-redesign — nå FAKTISK nettleser-bekreftet 0a. **Spillerliste-redesign — nå FAKTISK nettleser-bekreftet

View file

@ -1748,7 +1748,15 @@ function ScoringWizard({
readOnly={readOnly} readOnly={readOnly}
/> />
<div className="grid grid-cols-1 gap-3 sm:grid-cols-3"> {/* Alltid stablet, ALDRI et sm:grid-cols-3-sprang: denne wizard-
seksjonen er fast begrenset til max-w-sm (384px, se
containeren over) uansett hvor bred selve VIEWPORTET er --
et viewport-basert grid-cols-3-brudd ved 640px trigges
derfor skjermer godt over 640px bredde mens
innholdskolonnen fortsatt kun er 384px, som får de tre
stepperne (hver ~190px minimum pga. faste 44px-knapper) til
å overlappe hverandre i stedet for å faktisk ha plass. */}
<div className="grid grid-cols-1 gap-3">
<Stepper label="Chip" value={stat.chip} onChange={(v) => onUpdate({ chip: v })} readOnly={readOnly} max={stat.strokes ?? undefined} /> <Stepper label="Chip" value={stat.chip} onChange={(v) => onUpdate({ chip: v })} readOnly={readOnly} max={stat.strokes ?? undefined} />
<Stepper label="Bunker" value={stat.bunker} onChange={(v) => onUpdate({ bunker: v })} readOnly={readOnly} max={stat.strokes ?? undefined} /> <Stepper label="Bunker" value={stat.bunker} onChange={(v) => onUpdate({ bunker: v })} readOnly={readOnly} max={stat.strokes ?? undefined} />
<Stepper label="Straffeslag" value={stat.penalty} onChange={(v) => onUpdate({ penalty: v })} readOnly={readOnly} max={stat.strokes ?? undefined} /> <Stepper label="Straffeslag" value={stat.penalty} onChange={(v) => onUpdate({ penalty: v })} readOnly={readOnly} max={stat.strokes ?? undefined} />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 B

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 B

After

Width:  |  Height:  |  Size: 939 B

View file

@ -1,26 +1,6 @@
<svg width="180" height="180" viewBox="0 0 180 180" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="180" height="180" viewBox="0 0 180 180" fill="none" xmlns="http://www.w3.org/2000/svg">
<style> <rect width="180" height="180" rx="37" fill="#8BC24A" />
@media (prefers-color-scheme: light) { <ellipse cx="90" cy="132" rx="26" ry="6" fill="white" fill-opacity="0.35" />
.background { fill: black; } <rect x="85" y="42" width="7" height="90" rx="3.5" fill="white" />
.foreground { fill: white; } <path d="M92 48 L134 66 L92 84 Z" fill="white" />
}
@media (prefers-color-scheme: dark) {
.background { fill: white; }
.foreground { fill: black; }
}
</style>
<g clip-path="url(#clip0_7960_43945)">
<rect class="background" width="180" height="180" rx="37" />
<g style="transform: scale(95%); transform-origin: center">
<path class="foreground"
d="M101.141 53H136.632C151.023 53 162.689 64.6662 162.689 79.0573V112.904H148.112V79.0573C148.112 78.7105 148.098 78.3662 148.072 78.0251L112.581 112.898C112.701 112.902 112.821 112.904 112.941 112.904H148.112V126.672H112.941C98.5504 126.672 86.5638 114.891 86.5638 100.5V66.7434H101.141V100.5C101.141 101.15 101.191 101.792 101.289 102.422L137.56 66.7816C137.255 66.7563 136.945 66.7434 136.632 66.7434H101.141V53Z" />
<path class="foreground"
d="M65.2926 124.136L14 66.7372H34.6355L64.7495 100.436V66.7372H80.1365V118.47C80.1365 126.278 70.4953 129.958 65.2926 124.136Z" />
</g>
</g>
<defs>
<clipPath id="clip0_7960_43945">
<rect width="180" height="180" fill="white" />
</clipPath>
</defs>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 366 B