Tilbake til innsikt

· Analyse

Av Kenneth Bæver Bjerke, Diggs.no

Hva det kostet å bygge om diggs.no

Jeg bygde om diggs.no etter doktrinen. Ti av 22 avhengigheter ble byttet eller fjernet på én dag, med minst 500 minutter målt øktid. Det som kostet mest, var ikke koden, men det som lå rundt den.

På metodesiden lovet jeg å bygge om diggs.no etter doktrinen, logge arbeidet og publisere resultatet uansett utfall. Det skulle gi et første tall til spørsmål 3: hva koster en exit i praksis, målt i timer, penger og tapt funksjon, og hvor mye av kostnaden kan forutses før man begynner? Dette er resultatet. Omleggingen ble gjort 31. oktober 2026 kl. 23:06. Noe gjenstår, og det står til slutt.

Hva som ble byttet

Før ombyggingen kartla jeg 24 avhengigheter i et register, med status for hver. To av dem, ubrukte pakker, ble fjernet før start. Av de 22 andre står registeret slik nå:

  • Seks er byttet. Utrullingen gikk fra Laravel Forge (USA) til Kamal fra min egen maskin. E-posten fra skjemaene gikk fra Mailgun (USA, eid av svenske Sinch) til Scaleway (Frankrike). Skriftene ligger på nettstedet i stedet for å hentes fra Google Fonts ved bygging. Rammeverket, kjøremiljøet og bibliotekene gikk fra Next.js, React, Node.js og npm-pakker til ett program skrevet i Rust.
  • Fire er fjernet fra nettstedet. Databasen (MySQL), samtykkebanneret fra CookieYes, Google Analytics og språkmodellen Scorecardet brukte, Gemini.
  • To står. Tjeneren hos Hetzner og webtjeneren foran nettstedet. Programmet kjører i en container bak den samme webtjeneren som før.
  • Ti er ikke rørt. Domenet og DNS hos Domeneshop, sertifikatet fra Let's Encrypt, kodelageret på GitHub, innboksen i Google Workspace, verifiseringen hos Google, språkmodellene jeg arbeider med, og tre poster som hører til den gamle koden: npm og to rester som ikke var i bruk. De tre siste faller trolig bort når den gamle koden slettes, men det er ikke ført i registeret.

Ombyggingen fjernet de fleste amerikanske tjenestene, men ga også to nye bindinger. Grunnbildene hentes fra Docker Hub, og pakkene til nettstedet ligger i GitHubs register (ghcr.io). GitHub brukte jeg fra før, til koden. Nå er også utrullingen avhengig av GitHub. Arkitekten i agentteamet foreslo et register på egen tjener. Jeg valgte GitHub, fordi Diggs Music allerede bruker det. Det er et bevisst valg innenfor pragmatisk patriotisme: begge kan byttes uten å røre selve nettstedet. Docker selv er åpen kildekode som kjører på min egen tjener, og regnes ikke som en avhengighet.

Det som ikke lot seg flytte

Planen var en ny tjener for diggs.no, og så si opp Forge. Tre ting stoppet det.

Den første var at tjeneren hadde flere nettsteder enn jeg visste om. Jeg trodde den hadde tre. Den hadde ni i webtjenerens oppsett. Gjennom årene har jeg prøvd ut ulike løsninger på den samme tjeneren. De fleste var små tester uten betydning, men noen er i bruk og krever en større jobb før de kan flyttes. Forge styrer webtjeneren og sertifikatene for alle, så Forge kan ikke sies opp før de andre nettstedene er flyttet. Det betyr at en amerikansk tjeneste fortsatt står foran nettstedet, selv om den ikke lenger ruller ut koden.

Den andre var at tjenerstørrelsen jeg ville ha (Hetzner CX23), var utsolgt i Helsinki, Falkenstein og Nürnberg. Jeg valgte å bruke den eksisterende tjeneren.

Den tredje var databasen. Scorecardet er på pause og er ikke med i det nye nettstedet, men dataene ligger fortsatt i MySQL på tjeneren. Den tas ut når oppryddingen er gjort.

Tapt funksjon

Nettstedet har ikke lenger besøksstatistikk. Google Analytics er fjernet, og ingenting har erstattet det. Samtykkebanneret trengs ikke lenger, fordi nettstedet ikke setter informasjonskapsler og ikke henter noe fra andre. Scorecardet og administrasjonssiden er bevisst ikke bygget om. Kontaktskjemaene virker som før, med ny avsender.

For å kontrollere at ingenting annet forsvant, tok jeg et bilde av hele det gamle nettstedet før start: alle sider, svarhoder, lenker, strukturerte data og videresendinger. Det nye nettstedet ble sammenlignet med det bildet før omleggingen. Sammenligningen etterpå fant 4 197 avvik. Alle hører inn under 20 punkter med avvik jeg hadde godkjent på forhånd, som ny design, nye skrifter og at sporingen er borte. Ingen avvik var feil.

Tid

All tid er hentet fra loggen og er målt, enten med klokken i økten eller med tidspunktet for en commit. Ombyggingen gikk over seks økter, fem av dem 31. oktober.

  • Økt 1 og 2 er målt fra start til slutt: 182 og 69 minutter.
  • Økt 3, 4 og 5 har ikke målt start. Fra første målepunkt til slutt er de 50, 41 og 158 minutter.
  • Økt 6, da koden ble flettet inn 1. november, er ikke målt.

Summen for økt 1–5 er 500 minutter. Det er en nedre grense, fordi tre av øktene mangler start. Tallet er tid økten varte, ikke tid jeg arbeidet. I deler av øktene var jeg borte fra maskinen mens agentene arbeidet. For økt 5 og 6 har jeg oppgitt at jeg ikke brukte tid utenfor øktene. For økt 2 og 3 fant loggen ingen spor av arbeid utenfor, men det er en slutning, ikke et tall jeg har oppgitt. For økt 1 og 4 finnes det ikke noe tall.

Penger

De løpende kostnadene endret seg lite.

  • Hetzner-tjeneren koster det samme som før: €8,49 i måneden uten mva (tjeneren €7,99 og IPv4-adressen €0,50), og €10,61 med norsk mva, ifølge fakturaen for september 2026.
  • Forge Hobby koster fortsatt 12 dollar i måneden, fordi Forge står.
  • Scaleway koster ingenting så lenge skjemaene sender færre enn 300 e-poster i måneden, deretter 0,25 euro per 1 000.
  • Et øyeblikksbilde av tjeneren, tatt før den ble endret, koster omtrent 0,13 euro i måneden.
  • Sikkerhetskopi av tjeneren hos Hetzner koster 20 prosent av tjenerprisen, omtrent €1,60 i måneden uten mva. Den ble slått på dagen etter omleggingen.
  • Registeret hos GitHub har ikke gitt noen kostnad jeg har sett, men det er ikke kontrollert mot fakturaen.

Mailgun sies opp tidligst 30 dager etter omleggingen. Prisen sto ikke i loggen, så besparelsen kan jeg ikke oppgi. Den største besparelsen, Forge, kommer først når de andre nettstedene er flyttet.

Dagen etter

Før ombyggingen fantes det ingen sikkerhetskopi av tjeneren. Dagen etter omleggingen slo jeg på sikkerhetskopi hos Hetzner, og agentene installerte Monit på tjeneren. Monit sjekker hvert annet minutt at tjeneren har nok minne og disk, at nettstedet svarer og at sertifikatet ikke er i ferd med å gå ut. Hvert tiende minutt sjekker den at skjemaet ikke har feilet når det skulle sende e-post. Varslene kommer på e-post, sendt gjennom Scaleway som skjemaene. Monit er åpen kildekode og kjører på min egen tjener, så det er ingen ny leverandør.

Hvordan arbeidet ble gjort

Nesten alt arbeidet ble gjort av et team av språkmodellagenter i Claude Code: en arkitekt, en UX-forsker, en designer, en utvikler og en kvalitetssikrer, og en jurist for personvernet. Alle 88 commits i perioden er laget av agentene. Jeg tok beslutningene, logget inn der det trengtes, og leste det som skulle publiseres.

Kvalitetssikreren sendte arbeidet tilbake flere ganger. Tre eksempler: bildet av det gamle nettstedet manglet lenker og tekst utenfor hovedinnholdet. Den første versjonen av det nye nettstedet hadde en åpen videresending, der en lenke kunne sende besøkende videre til et annet domene. Oppskriften for å sette opp tjeneren ville gitt brukeren som eier alle nettstedene full kontroll over tjeneren, og kunne ha startet databasen og webtjeneren på nytt uten varsel. Ved omleggingen gjaldt tilbakesendingene bare dokumentasjonen. Alle funnene ble rettet før noe gikk i produksjon.

Sikkerhetssjekken i Claude Code stoppet agentene da de skulle slette data i produksjonsdatabasen. Den slettingen kjørte jeg selv. Én gang ba jeg agentene gjøre noe regelen min sier at bare jeg skal gjøre: legge inn DNS-postene for den nye e-posttjenesten. Regelen står, og unntaket er logget.

Et funn om personvern

Kartleggingen av databasen fant at Scorecardet hadde lagret IP-adressen til dem som ba om en evaluering, i noen få rader fra september 2026. Personvernerklæringen lovet sletting etter 30 dager. Slettingen kjørte bare når noen ba om en ny evaluering, og da Scorecardet ble satt på pause 27. september, stoppet den. Adressene ble derfor liggende lenger enn lovet. De er slettet, også fra sikkerhetskopien, og det er skrevet et internt notat. Det nye nettstedet lagrer ikke IP-adresser. Uten ombyggingen hadde jeg ikke funnet dette.

Svaret på spørsmål 3

Dokumentert: ti av 22 avhengigheter er byttet eller fjernet på én dag, med minst 500 minutter målt øktid. De løpende kostnadene er nær uendret. Tapt funksjon er besøksstatistikken og Scorecardet, som allerede var på pause.

Slutning: det dyreste var ikke koden. Det var det som lå rundt den og som ikke sto i noen dokumentasjon: hvilke andre nettsteder som delte tjeneren, hvem som styrte webtjeneren, hvor data faktisk lå og hvor lenge. Det som kunne forutses, var koden og innholdet, fordi de lå i repoet. Det som ikke kunne forutses, var tjeneren, og det var der planen måtte endres. Ingen tidsanslag ble laget før start, så jeg kan ikke måle hvor godt kostnaden kunne forutses i timer. Det bør neste exit gjøre.

Forbehold: dette er ett lite nettsted, bygget og bygget om av samme person, med agenter som gjorde arbeidet. Tallene sier lite om hva en exit koster for en virksomhet med ansatte, kontrakter og brukere som må læres opp. Tiden er øktid, ikke arbeidstid. Og et nettsted uten database og uten innlogging er det enkleste tilfellet som finnes.

Doktrinens vurdering: målt mot pragmatisk patriotisme er nettstedet bedre, men ikke ferdig. Den gjenstående amerikanske avhengigheten med størst betydning er Forge, fordi den har tilgang til tjeneren og styrer webtjeneren foran nettstedet. Den har en vei ut, men ingen frist.

Det som gjenstår

  • Den gamle koden og databasen tas ut, og Forge slutter å rulle ut den gamle versjonen.
  • Mailgun sies opp tidligst 30. november 2026.
  • Forge sies opp når de andre nettstedene på tjeneren er flyttet.
  • En sjekk fra en annen tjener, som varsler hvis hele tjeneren er nede, er ikke satt opp. Det kan ikke Monit se fra innsiden.
  • Nettstedet skal etter planen eies av et aksjeselskap i stedet for mitt enkeltpersonforetak, trolig Diggs FoU AS. Selskapet er ikke stiftet, og avtalene er ikke inngått.

Ombyggingen er en milepæl, ikke et endepunkt. Bindingene som står igjen, vurderes videre etter samme vilkår. Først i køen er GitHub, som nå bærer både koden og utrullingen, og som er i ferd med å bli den største bindingen. GitHub skal erstattes med Forgejo, som er åpen kildekode og som jeg drifter selv på egne tjenere.

Arbeidet logges videre, og tallene oppdateres her når oppryddingen er gjort.

Bindinger

Jeg er produktleder i Akari, som selger Google Workspace. Innboksen for diggs.no ligger i Google Workspace. Koden ligger på GitHub. Agentene som gjorde arbeidet, kjører på Claude fra Anthropic (USA).

Slik ble teksten til

Teksten er skrevet av Claude ut fra loggen, registeret over avhengigheter og git-historikken. Hvert tall kan spores til en av dem. Jeg har lest den før publisering.