No description
Find a file
Erol Haagenrud 074e17388b Update Todos
Log in as user in chrome-devtools browser (magic link)

Screenshot scorekort-grid page at mobile viewport

Fix critical sticky-column overlap bug found via real browser test

Verify fix by scrolling grid + re-screenshotting

Assess density and golfscore-language compliance

Update CLAUDE.md/FEATURE_BACKLOG.md with the real bug+fix

Report findings to user
Good thing you asked me to actually look — I found and fixed a real, serious bug.

What was broken: position: sticky on table cells, combined with sticky columns on both the left (player names) and right (Ut/Inn/Sum) at once, rendered completely garbled in Chrome — the sticky right columns got pulled to the visible edge immediately and overlapped/bled into the hole columns underneath (you'd have seen overlapping digits like "436"/"472"). My first fix attempt (border-collapse → border-separate) didn't touch the real cause and the second screenshot still showed the same mess.

Root cause: combining sticky-left and sticky-right in one table wider than the viewport is inherently unstable — at scroll position 0, the sticky-right cells are already pinned to the screen edge, sitting visually on top of whatever hole columns happen to be there in normal document flow, only partially hidden by their translucent background.

Fix: dropped sticky positioning from the Ut/Inn/Sum columns entirely — they now scroll with the rest of the holes, same well-supported pattern as the (correctly-working) sticky name column. Verified for real this time:

Screenshot at scroll-left=0: all numbers clean, correct circle/square/plain-text score marks (bogey/double-bogey/par all visually distinct).
Scrolled the grid all the way right via a script: holes 14-18 plus Ut/Inn/Sum all render cleanly, name column still correctly pinned — Ut 36 / Inn 36 / Sum 72 on the Par row, which is exactly right for an 18-hole par-72 course.
Accessibility tree confirms the golf-term labels ("Bogey", "Dobbel bogey", "Par") are actually present in aria-labels, so §Golfscore-språket's "never color alone" rule holds in practice, not just in code.
No dead space concerns — density looks reasonable against §0.1's tolerance, and green stays reserved for active-state/under-par per §0.2 (no stray "grønt-på-grønt" spotted).

Redeployed twice (once for the failed attempt, once for the real fix); both times /health → 200, teeoff.no unaffected. Docs updated with the full story, since this is the first time this session a real browser was available to verify hand-coded frontend work — worth remembering for anything else built blind this week that you haven't clicked through yet.
2026-07-27 14:34:18 +02:00
.claude Live. Kort oppsummert: 2026-07-26 19:54:18 +02:00
__pycache__ Migrasjonen er kjørt, og jeg har fortsatt helt til et komplett, verifisert API-lag. 2026-07-22 11:31:08 +02:00
app Live. Kort oppsummert: 2026-07-26 15:48:07 +02:00
frontend Update Todos 2026-07-27 14:34:18 +02:00
.dockerignore TeeCup er nå containerisert og live på https://teecup.teeoff.no. Dette var den mest hendelsesrike runden denne økten — første gang noe rørte ekte, permanent infrastruktur, og det viste seg berettiget: 2026-07-16 21:47:34 +02:00
.gitignore Add .gitignore to keep .env (DB secrets) out of version control 2026-07-16 07:39:08 +02:00
.mcp.json Update Todos 2026-07-27 14:34:18 +02:00
001_initial_schema.sql Første commit for teecup 2026-07-16 07:18:01 +02:00
002_roles_and_grants.sql Fix migration 002: psql does not interpolate :'var' inside DO $$ blocks 2026-07-16 08:24:48 +02:00
003_scoring_and_blinddraw.sql Utgangspunktet 2026-07-16 07:26:04 +02:00
004_auth.sql Ekte autentisering er bygget og verifisert. X-Debug-User-Id-stubben er helt fjernet, ingen fallback beholdt. 2026-07-16 15:16:53 +02:00
005_rls_null_guard.sql RLS-tomstreng-buggen er fikset og verifisert grundig. 2026-07-16 15:34:24 +02:00
006_scheduling_and_locale.sql Før kommunikasjon med V0 2026-07-17 21:40:42 +02:00
007_registration_and_player_fields.sql ADR-017 er skrevet inn, og migrasjonen er ferdig og verifisert: 2026-07-18 08:24:55 +02:00
008_link_player_by_email.sql Migrasjon 008 er live på ekte teecup_db, backend er redeployet, alt verifisert (teeoff.no upåvirket gjennom hele prosessen). 2026-07-18 09:03:37 +02:00
009_landing_pages_and_visibility.sql ADR-018 sin backend er ferdig, verifisert og live. Oppsummert: 2026-07-18 09:45:11 +02:00
010_official_course_unique_ref.sql Bygget, og verifisert grundig mot ekte infrastruktur — inkludert et ekte kall mot teeoff_api (søkte opp «Borregaard», importerte Borregaard Golfklubb sin 18-hulls hovedbane med alle hull, 4 tee-farger × kjønn, ratinger, og opprettet faktisk en økt med den importerte banen). Duplikat-import ble korrekt avvist (409), kryss-org-isolasjon holder, test_isolation.sql 12/12. 2026-07-18 12:44:05 +02:00
011_join_code_and_leading_side.sql ackend for the join-code, leading_side, and projected-standings work is fully verified against a fresh scratch database (migrations 001–011, test_isolation.sql 12/12, and live end-to-end checks: join-code generation/uniqueness, code resolution, visibility bypass on both the tournament view and registration — including case-insensitivity and rejection of a wrong code — plus a full hole-by-hole match simulation confirming leading_side/status_text stay in sync through "1 UP" → "AS" → a decided "9&7", with the leaderboard's projected points matching at each stage: 1.0/0.0 while A led, 0.5/0.5 at all-square, and settling to equal actual/projected once decided). 2026-07-19 09:23:35 +02:00
012_password_2fa_and_org_invitations.sql Update Todos 2026-07-19 10:36:50 +02:00
013_messaging.sql Backend, frontend og Caddy-endringen er alle klare og verifisert (Caddy-syntaksen validert OK). Dette er en stor runde — her er full plan for utrulling: 2026-07-19 22:26:45 +02:00
014_tee_gender_to_rating.sql Update Todos 2026-07-20 08:53:53 +02:00
015_user_profile.sql Update Todos 2026-07-20 10:41:30 +02:00
016_profile_contact.sql Live og dokumentert. /dashboard er nå den ene, felles adressen for enhver innlogget bruker — organisator, spiller, eller begge — med personlig profil (inkl. e-post og mobil) redigerbar på /account. 2026-07-20 11:32:10 +02:00
017_secondary_email.sql Update Todos 2026-07-22 06:14:31 +02:00
018_handicap_history.sql Update Todos 2026-07-22 06:31:11 +02:00
019_profile_country_bio.sql Update Todos 2026-07-22 07:53:29 +02:00
020_personal_rounds.sql Andre byggesteg ferdig: databaseskjemaet. 2026-07-22 10:46:10 +02:00
021_round_participant_rating_snapshot.sql Migrasjonen er kjørt, og jeg har fortsatt helt til et komplett, verifisert API-lag. 2026-07-22 11:31:08 +02:00
022_round_stats_and_bag.sql Oppsummering av det som er fikset/bygget i denne runden: 2026-07-24 06:27:35 +02:00
023_round_start_time.sql Update Todos 2026-07-24 11:21:39 +02:00
024_round_name.sql All three changes are implemented and scratch-verified (22/22 checks passed, test_isolation.sql still 12/12, frontend typechecks cleanly). Summary of what's ready to ship: 2026-07-25 06:29:09 +02:00
025_friends.sql Backend for fase 1 (venner-kjernen) er bygget og scratch-verifisert (31/31 sjekker, test_isolation.sql fortsatt 12/12). Ny migrasjon 025_friends.sql, nytt app/routers/friends.py med tiered søk, forespørsel/aksept/fjern, og privat kategorisering — bekreftet at kategoriseringen faktisk er privat (B ser aldri hvilke grupper A har satt B i). 2026-07-25 08:14:48 +02:00
026_notifications.sql Varsler (fra zip 20): in-app varslingssenter er live — bjelle med uleste-tall i dashbord-headeren, /my-notifications-side. Trigges i dag ved venneforespørsel sendt/akseptert; flere hendelser kan kobles på senere. 2026-07-26 06:53:58 +02:00
027_round_participant_user_unique.sql Update Todos 2026-07-26 08:22:41 +02:00
028_round_participant_tee.sql Alt er live. Kort oppsummert: 2026-07-26 09:18:52 +02:00
029_round_participant_guest_email.sql Leaderboard — ikke bygget frontend ennå, kun backend. V0-prompten er skrevet og ligger i FEATURE_BACKLOG.md, klar til å limes inn i v0.app. 2026-07-26 09:42:06 +02:00
ARCHITECTURE_DECISIONS.md Ja, den gir mye mening — og jeg sjekket to av påstandene direkte mot koden i stedet for å ta dem på tro: 2026-07-27 09:03:15 +02:00
CLAUDE.md Update Todos 2026-07-27 14:34:18 +02:00
DESIGN_SYSTEM.md Ja, den gir mye mening — og jeg sjekket to av påstandene direkte mot koden i stedet for å ta dem på tro: 2026-07-27 09:03:15 +02:00
docker-compose.yml MinIO-runden er ferdig, verifisert og live — ADR-018 er nå helt komplett, ingenting utsatt igjen bortsett fra selve opplastings-skjermen i frontend. 2026-07-18 11:25:52 +02:00
Dockerfile TeeCup er nå containerisert og live på https://teecup.teeoff.no. Dette var den mest hendelsesrike runden denne økten — første gang noe rørte ekte, permanent infrastruktur, og det viste seg berettiget: 2026-07-16 21:47:34 +02:00
FEATURE_BACKLOG.md Update Todos 2026-07-27 14:34:18 +02:00
handicap_engine.py Migrasjonen er kjørt, og jeg har fortsatt helt til et komplett, verifisert API-lag. 2026-07-22 11:31:08 +02:00
Live Tourney _ A Guide to Handicap Scoring in Golf for Tournaments.pdf Update Todos 2026-07-20 08:53:53 +02:00
SCGA Club Digest.pdf Update Todos 2026-07-20 08:53:53 +02:00
screen-20260724-133013-1784892586987.mp4 Nytt horisontalt scorekort (/my-rounds/[id]/scorecard) — ekte HTML-tabell med faste kolonnebredder, ingen scroll i det hele tatt. Score-cellene bruker form (sirkel = under par, firkant = over par) + fylt/ufylt i stedet for farge alene, med egen symbolforklaring. Ut/Inn-blokker for 18-hulls runder, én blokk for 9-hulls. Egen dedikert side (ikke sammenslått med statistikk-siden), lenket fra både "Runde fullført"-banneret og fra statistikk-siden. Byttet ut V0s egen forenklede HCP-formel med backends allerede beregnede strokes_received, så det ikke finnes to ulike slagfordelings-implementasjoner i appen. Den gamle vertikale scorekort-tabellen i statistikk-siden er fjernet — nå bor det rå scorekortet kun ett sted. 2026-07-24 23:33:41 +02:00
screen-20260724-152328-1784899395856.mp4 Nytt horisontalt scorekort (/my-rounds/[id]/scorecard) — ekte HTML-tabell med faste kolonnebredder, ingen scroll i det hele tatt. Score-cellene bruker form (sirkel = under par, firkant = over par) + fylt/ufylt i stedet for farge alene, med egen symbolforklaring. Ut/Inn-blokker for 18-hulls runder, én blokk for 9-hulls. Egen dedikert side (ikke sammenslått med statistikk-siden), lenket fra både "Runde fullført"-banneret og fra statistikk-siden. Byttet ut V0s egen forenklede HCP-formel med backends allerede beregnede strokes_received, så det ikke finnes to ulike slagfordelings-implementasjoner i appen. Den gamle vertikale scorekort-tabellen i statistikk-siden er fjernet — nå bor det rå scorekortet kun ett sted. 2026-07-24 23:33:41 +02:00
screen-20260726-152057-1785072037213.mp4 Live. Kort oppsummert: 2026-07-26 15:48:07 +02:00
Screenshot_20260723-113235.png Update Todos 2026-07-23 12:07:40 +02:00
Screenshot_20260723-113302.png Update Todos 2026-07-23 12:07:40 +02:00
Screenshot_20260726-054841.png display_name synkroniseres nå automatisk med for-/etternavn ved profilendring. Rettet også de to eksisterende kontoene som allerede hadde fylt ut profilen sin (erolhaagenrud@gmail.com → "Tore Morell", hei@erol.no → "Erol Haagenrud") — bekreftet med en tørrkjøring først, verifisert med RETURNING etterpå. 2026-07-26 05:58:35 +02:00
Screenshot_20260726-054853.png display_name synkroniseres nå automatisk med for-/etternavn ved profilendring. Rettet også de to eksisterende kontoene som allerede hadde fylt ut profilen sin (erolhaagenrud@gmail.com → "Tore Morell", hei@erol.no → "Erol Haagenrud") — bekreftet med en tørrkjøring først, verifisert med RETURNING etterpå. 2026-07-26 05:58:35 +02:00
spilletyper-og-spilleformer-2023.pdf Update Todos 2026-07-20 08:53:53 +02:00
teecup-scorekort-og-entry-spec.md Ja, den gir mye mening — og jeg sjekket to av påstandene direkte mot koden i stedet for å ta dem på tro: 2026-07-27 09:03:15 +02:00
TeeOff-logo-Retina-1.avif Før kommunikasjon med V0 2026-07-17 21:40:42 +02:00
test_handicap_engine.py Migrasjonen er kjørt, og jeg har fortsatt helt til et komplett, verifisert API-lag. 2026-07-22 11:31:08 +02:00
test_isolation.sql ackend for the join-code, leading_side, and projected-standings work is fully verified against a fresh scratch database (migrations 001–011, test_isolation.sql 12/12, and live end-to-end checks: join-code generation/uniqueness, code resolution, visibility bypass on both the tournament view and registration — including case-insensitivity and rejection of a wrong code — plus a full hole-by-hole match simulation confirming leading_side/status_text stay in sync through "1 UP" → "AS" → a decided "9&7", with the leaderboard's projected points matching at each stage: 1.0/0.0 while A led, 0.5/0.5 at all-square, and settling to equal actual/projected once decided). 2026-07-19 09:23:35 +02:00
WHS_Rules_of_Handicapping_2024.pdf ADR-033 er nå fullt kildebelagt. Kort oppsummert hva som endret seg: 2026-07-22 09:26:08 +02:00