Admin-innlogging

Logg inn med e-post og passord. Kontoen din må være godkjent som admin i databasen før du får tilgang.

Ingen konto ennå? Registrer deg — en admin må så godkjenne kontoen din i Supabase før du ser data.

← Tilbake til DigitalCaddie.no

Admin · Dashbord

Banekatalog & drift

Ekte tall fra databasen — kontoer, baner, bidrag, AI-bruk, kasteanalyse og innmeldte feil

Kasteanalyse Fasekalibrering
Personvern by design: Statistikken er aggregert — ingen IP-adresser eller individuell sporing. Bidragsyter-navn vises fordi de allerede er offentlige i banekatalogen.

Nye baner

Baner lagt inn per dag, siste 14 dager

AI-tolkninger

Banekort/caddiebok lest av AI per dag, siste 14 dager

Brukere og kontoer

Aggregerte tall — ingen e-poster, navn eller innhold vises her

Kasteanalyse

Bruk og kvote i testperioden

Feillogg

De siste feilene fra serverfunksjonene. Tom liste er et godt tegn.

Gratiskvote for kasteanalyse

Antall gratis analyser hver innlogget bruker får i testperioden. Endringen gjelder umiddelbart for alle, uten ny deploy. Admin er alltid unntatt kvoten.

Katalogens dekning

Hvor komplett banedataen er

Mest aktive bidragsytere

Antall baner lagt inn

Baner per sted

Geografisk fordeling

Alle tall på denne siden hentes direkte fra databasen (baner, innmeldte feil, AI-bruk, kontoer og kasteanalyser), og vises kun aggregert — ingen e-postadresser, bag-innhold eller opplastede videoer er tilgjengelig herfra. Bruksmønster på selve nettsiden — sidevisninger, økter og funksjonsbruk — måles ikke i dag; det krever en egen personvernvennlig analyse-kilde (f.eks. selvhostet Plausible/Umami).

Disk-database

Automatisk synkronisert mot DiscIt-API — nye modeller legges til, eksisterende røres ikke

disker i databasen
produsenter
sist oppdatert
neste kjøring

Når oppdateres den? En GitHub Action (.github/workflows/update-discs.yml) kjører hver mandag kl. 06:00 UTC, og kan startes når som helst manuelt fra Actions-fanen i repoet («Run workflow»).

Hva skjer da? scripts/update-discs.mjs henter hele katalogen fra DiscIt-API, normaliserer felt (type, flight-tall, nivå) til DigitalCaddie-formatet, og legger kun til modeller som ikke finnes fra før. Duplikater og motstridende spesifikasjoner slås sammen. Endres noe, committes discs.js automatisk og Netlify bygger på nytt.

Manuelle rettelser? Endringer du gjør direkte i discs.js overlever synkroniseringen — skriptet overskriver ikke eksisterende disker, det utvider listen.

Systemstatus

Live sjekk av tjenestene siden er avhengig av — oppdateres ved hver sidelast

Sikkerhet & tilgang

Hvordan data er beskyttet

  • Admin-tilgang håndheves i databasen, ikke bare i UI-et — RLS + is_admin() mot profiles.role. En bruker uten admin-rolle får avslag fra API-et selv om hen omgår innloggingsskjermen.
  • Skriveoperasjoner bruker brukerens JWT mot Supabase, ikke anon-nøkkelen.
  • Anon-nøkkelen er offentlig med vilje — det er Supabase sin modell. RLS er sikkerhetsgrensen, ikke nøkkelen.
  • Nye kontoer får rollen user automatisk. Admin må settes manuelt i Supabase — ingen kan gi seg selv admin.
  • Åpen innsending: baner kan legges inn uten innlogging. Vurder å stramme public insert-policyene til innloggede brukere hvis du får spam.

Kostnad & misbruk

Grenser som beskytter API-budsjettet

  • 21 AI-tolkninger per bruker per døgn (DAILY_LIMIT i parse-course.js). En caddiebok teller flere kall — 6 sider per kall.
  • 21 bildetolkninger per IP per time, delt teller i rate_limits-tabellen — overlever kalde starter og flere funksjons-instanser.
  • 8 nye baner og 10 feilmeldinger per IP per minutt.
  • Modellvalg: bildetolkning bruker Sonnet (nøyaktighet på tabeller), chatten bruker Haiku (billig). Bilder koster vesentlig mer enn tekst — hold øye med «AI-tolkninger per dag» over.
  • Rydd i rate_limits: tabellen vokser uten opprydding. Legg til en pg_cron-jobb som sletter rader eldre enn 1 time hvis den blir stor.

Driftshåndbok

De vanligste inngrepene — hva du gjør når noe skjer

Gi noen admin-tilgang

Personen registrerer seg først på denne siden. Kjør så i Supabase SQL Editor:

update profiles set role='admin'
where id=(select id from auth.users
  where lower(email)=lower('ny@epost.no'));

API-et svarer 500

Sjekk miljøvariablene i Netlify: SUPABASE_URL (uten /rest/v1), SUPABASE_ANON_KEY, ANTHROPIC_API_KEY. Etter endring må siten deployes på nytt — variabler leses ved bygg.

«Permission denied for table»

RLS er ikke nok — Postgres-rollen mangler GRANT. Kjør supabase-full-schema.sql på nytt; grants-delen er idempotent.

Endringer vises ikke etter deploy

Service workeren cacher. sw.js bruker network-first for HTML, men bump versjonsnummeret i filen ved større endringer så gamle klienter tvinges til å hente på nytt.

Dårlig banedata lagt inn

Rediger eller slett banen i «Banekatalog · baner» nederst. Spillere kan utvide baner, men aldri slette hull — kun admin overskriver.

Sikkerhetskopi

Supabase tar automatiske daglige backups (7 dagers oppbevaring på gratis-planen). Ta en manuell dump før større skjemaendringer: Supabase → Database → Backups.

Banekatalog · innmeldte feil

Rettelser spillere har foreslått på banekort/caddiebok-data — godkjenn eller avvis

Laster …

Banekatalog · baner

Rediger eller slett baner lagt inn av spillere

Laster …