Admin · Dashbord
Banekatalog & drift
Ekte tall fra databasen — kontoer, baner, bidrag, AI-bruk, kasteanalyse og innmeldte feil
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
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()motprofiles.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
userautomatisk. 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_LIMITiparse-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 …