Karakterportalen sier at karakterene dine aldri forlater enheten din. Dette repoet finnes for at du skal kunne kontrollere den påstanden selv, i stedet for å tro på den.
Her ligger all koden som rører vitnemålet ditt: filen leses, teksten hentes ut, karakterene tolkes, og snitt og poeng regnes ut. 1 836 linjer. Resten av nettsiden (datapipelines, sidegenerering, statistikkdatasettene) ligger i et privat repo og rører aldri karakterene dine.
At det ikke finnes noe nettverkskall her. Ingen fetch, ingen XMLHttpRequest,
ingen FormData. Filen din leses inn i minnet i nettleserfanen og blir der.
grep -rn "fetch\|XMLHttpRequest\|FormData\|navigator.sendBeacon" lib/Det skal ikke gi treff.
For å være helt presis: koden laster to ting fra vårt eget domene når den kjører, nemlig PDF.js-workeren og (ved skannede PDF-er) OCR-motoren. Begge er programkode som lastes ned til deg. Ingen av dem sender noe fra deg.
| Fil | Hva den gjør |
|---|---|
lib/pdf/extract-text.ts |
Leser PDF-ens tekstlag med PDF.js (Mozillas bibliotek, det samme Firefox bruker). Setter sammen linjer og kolonner ut fra koordinatene til hvert tekstelement. |
lib/pdf/render-pdf.ts |
Tegner sider til bilde. Brukes bare når PDF-en er skannet og mangler tekstlag, så OCR må til. |
lib/pdf/detect-level.ts |
Kjenner igjen om dokumentet er fra ungdomsskole, videregående eller universitet. |
lib/pdf/parse-transcript.ts |
Tolker teksten til emnekode, emnenavn, studiepoeng, karakter og semester. Den største filen, og der de fleste særtilfellene bor. |
lib/grades/calc.ts |
Regner ut snitt, karakterfordeling og semestergruppering. |
lib/grades/admission-points.ts |
Regner ut skolepoeng og konkurransepoeng etter Samordna opptaks regler. |
lib/grades/constants.ts |
Karakterskalaer og poengverdier. |
- Flymodus. Last inn karakterportalen.no, skru så på flymodus. Dra inn vitnemålet. Du får fortsatt snittet og poengene dine. Man kan ikke laste opp noe uten nett.
- DevTools. F12, Network-fanen, dra inn PDF-en. Ingen request bærer fila.
- CSP-headeren. Siden kjører med en
Content-Security-Policyderconnect-srcer låst til en kort liste med hoster. Selv om koden ville sendt data et annet sted, ville nettleseren blokkert det.
For å være presis, ikke absolutt:
- Emnekode og lærested (for eksempel
TDT4100ogntnu) når du ber om nasjonal karakterstatistikk for et emne. Altså koden, aldri karakteren din. - Anonym, cookiefri besøksstatistikk. Sidevisninger, ingen sporing på tvers av sider.
Leser vi fødselsnummer fra et vitnemål, brukes kun fødselsåret til alderspoeng. Nummeret lagres aldri.
Er PDF-en skannet, brukes Tesseract.js,
som er Tesseract kompilert til WebAssembly. Den kjører også lokalt i fanen.
Worker, WASM-kjerne og språkmodellene serveres fra vårt eget domene og ikke fra
et CDN, slik at CSP-en kan stå på script-src 'self'.
Filene er kopiert uendret fra det private repoet, med tools/sync-revisjon.mjs.
SYNKET.txt viser dato og hvilken commit kopien kom fra. Finner du avvik
mellom det som står her og det som faktisk kjører, er det en feil vi vil vite om.
Koden er TypeScript og importerer noen typer og hjelpefunksjoner som ikke ligger her. Den er publisert for å leses og kontrolleres, ikke for å bygges frittstående.
Publisert for innsyn og kontroll. Ikke en åpen kildekode-lisens: du har lov til å lese, sitere og revidere koden, men ikke til å gjenbruke den i egne produkter.
Vi valgte det bevisst framfor en permissiv lisens, fordi en lisens alltid kan løsnes senere, men aldri strammes inn igjen.
Åpne et issue, eller send en e-post. Gjelder det sikkerhet eller personvern, setter vi ekstra pris på at du sier fra før du publiserer det.