I´m picking up good vibrations, sang The Beach Boys i 1966. Litt sånn har jeg hatt det etter at jeg startet med vibe code. Uten å kunne kode har jeg laget et titalls prosjekter, både private og til bruk i klasserommet, og her skal jeg gå litt i dybden på tre av dem. Først en nettside som hjelper ukrainske elever å kommunisere, så en app som fanger de gode øyeblikkene i klasserommet og til sist en bot som er trent på og henter svar fra egne tekster. Jeg har brukt mange ulike verktøy i dette arbeidet, så legger med en kort begrepsforklaring til slutt.
Hva er vibe coding?
Begrepet Vibe code er relativt nytt. Det ble lansert av Andrej Karpathy, en av grunnleggerne bak OpenAI, og handler om å la seg rive med i en kreativ prosess der man kan konstruerer spill, apper og nettsider uten å kunne kode. Store språkmodeller gjør dette mulig, og på den måten får man en rolle som kreativ leder mens generativ kunstig intelligens utfører kodejobben. Det har åpnet for muligheter som tidligere kun var forbehold utviklere og programmerere.
Jeg startet egentlig med vibe code før Karpathy definerte det i februar. Tidlig så jeg den enorme programmeringsstøtten språkmodellene gir, og før jul vibet jeg for første gang en nettside som trekker hemmelige nissevenner for elever eller kolleger. La oss si du har 10 kolleger eller 30 elever. Du skriver inn navnene, legger inn at Kari og Ola ikke kan være nissevenner, så klikker du Trekk. Listen lastes ned, musikken og julemotivet på nettsiden setter stemningen.
I dette enkle Nissevenn-prosjektet brukte jeg GitHub Copilot pro, som er gratis om du registrerer at du er lærer. Githubs Copilot koster egentlig 10 Dollar per måned, og du bruker den som en vanlig chatbot. Velg språkmodell, for eksempel GPT-5, Claude eller Gemini. GPT-5 er god på generelle oppgaver og tekstskaping, Claude er kjent for tydelig språk og lange sammenhenger, mens Gemini kombinerer Googles dataressurser med samtaleflyt og integrasjon mot andre verktøy.
Eksempel 1: Kommunikasjonsverktøy
Å flytte til et fremmed land er tøft for alle. Uten språk og nettverk er det lett å føle seg utenfor. Det ville jeg gjøre noe med, så jeg startet et prosjekt i Github. Først opprettet jeg et repository, som er et rammeverk og lagringsted for koden. Her er en superkort forklaring på GitHub-termiologi (som selvsagt er laget med vibe code). Deretter brukte jeg ChatGPT til å jobbe med koden.
Fra idé til GitHub-repo og nettside
Målet var en nettside elevene kunne bruke for å kommunisere muntlig med læreren. GPT ble et digitalt verksted: jeg spurte hva som burde være med, fikk forslag, testet underveis og ga tilbakemeldinger. Til slutt landet jeg et ferdig resultat som ble lastet opp til GitHub. Nettsiden Grunnleggende kommunikasjon på norsk gir enkle fraser sortert i temaer som behov, følelser, skole, høflighet og aktiviteter. Hver setning kan leses opp med norsk stemme, og emojier gjør innholdet lett å forstå. Det gjør siden til et praktisk verktøy for rask og tydelig kommunikasjon.
Vibing av nettsiden gjorde at jeg kunne tilpasse funksjonene til akkurat den elevgruppa jeg jobbet med. Jeg slapp å betale for dyre løsninger eller lære meg et nytt system som kanskje ikke hadde det jeg trengte. Her kommer vibe code virkelig til sin rett!
Å lage nettsider med akkurat den funksjonen du behøver, er enkelt når man driver med vibe code. Språkmodeller er trent på store datakorpus, og samtalene foregår på et muntlig og lite teknisk språk: “Gjør volumknappen større, og legg til en emoji som passer til temaet.” Etter hvert ønsket jeg noe mer avansert, og da en fullkommen app som kan brukes på PC og mobil.
Eksempel 2: Observasjonsapp
Når man står i et klasserom er det mye å passe på. Elever har gode og dårlige dager, og du må holde oversikt for å tilpasse fagstoffet. Ofte husker du de dårlige øyeblikkene best. Derfor ønsket jeg en app som var lett å bruker og rask å åpne.
Resultatet ble Et blikk for eleven, en observasjonsapp for positive situasjoner. Den lar meg registrere øyeblikk i kategorier jeg selv har definert, og alt lagres lokalt for å ivareta personvernet. Dermed får jeg oversikt over elevenes styrker over tid i stedet for bare magefølelsen eller gule lapper etter timene.
Fra skisse til struktur
Jeg startet med en skisse. Hva skulle med, og hvordan balansere funksjonalitet og personvern? Etter noen runder landa jeg på fem hovedkategorier med fire underkategorier. For enkelhetens skyld velger man kun mellom hovedkategoriene. Jeg ville også ha et dashboard og et sted å administrere klassene. I idémyldringsfasen brukte jeg ChatGPT med canvas-funksjonen. I diskusjonen var jeg tydelige på sikkerheten og fikk forslag om funksjoner som personvernside, PIN-innlogging og en innstillingsside, og jeg beholdt alle disse forslagene.
Valg av verktøy
Så kom kodinga. Jeg prøvde først Replit, men siden det er serverbasert og lagrer data eksternt passet det dårlig når jeg ville ha full kontroll over personvernet. Derfor byttet jeg til Visual Studio Code lokalt, og brukte GitHub til versjonering og trygg lagring. Å bruke Copilot direkte i VS Code gjorde at jeg både kunne få kodehjelp og laste opp endringene direkte til Git. For å bruke appen både på PC og mobil måtte jeg skrive om koden til en PWA-løsning. Da kunne jeg lagre nettsiden som ikon på mobilen, mens data lagres lokalt i nettleser eller mobil uten å sendes til servere.
Nå har jeg en fullverdig app som gjør det jeg ønsket. Jeg brukte også vibe code på et kort program som starter appen automatisk på PC-en om morgenen. Da åpnes en fane med innlogging via PIN og jeg kommer rett inn i appen. På mobil fungerer den like godt så lenge jeg er på samme nettverk. Resultatet er en sikker og praktisk app som registrerer de gode øyeblikkene sømløst uansett plattform.
Eksempel 3: Bloggbot
Jeg har publisert 84 artikler og to bøker siden 2012. Utfordringen den siste tiden har vært å huske alt jeg selv har skrevet. Derfor ville jeg lage en bot som kunne svare på spørsmål ut fra tekstene mine og kun det. Det skulle være en slags kunnskapsassistent med full oversikt over hva jeg noen sinne har skrevet, og som jeg kunne chatte med, hente ideer fra og få oppfølging til nye prosjekter.
Frontend og backend
Jeg startet med idémyldring i ChatGPT og om skulle boten kjøre lokalt eller på nett? Jeg valgte nett, siden bloggen allerede driftes av WordPress. For å vise boten på nettsiden, altså i frontend, laget jeg et lite skript i programmeringsspråkene HTML og JSON som ble limt inn som element på siden. I backend, altså alt som skjer i bakgrunnen, laget jeg en PHP‑handler på serveren. PHP-koden mottar spørsmål fra bruker, sender dem til databasen og henter svar tilbake til brukeren.
Som database brukte jeg Supabase med vektorsøk. Det betyr at alle artikler og bøker først ble gjort om til tallverdier, såkalte embeddings, som gjør søk mulig. En vektor kan du se for deg som en liste med tall som representerer meningsinnholdet i teksten, og som gjør at lignende spørsmål og avsnitt havner nær hverandre i søket. Alle bloggtekstene ble renset og lastet opp i Supabase, og jeg la også til utdrag fra bøkene. På den måten kunne boten koble spørsmål til riktige avsnitt. Selve svarene ble skrevet av GPT-modeller, mens all drift skjer gjennom WordPress kombinert med Supabase og API‑tilgang til OpenAI.
API-er og RAG-funksjonalitet
Underveis måtte jeg også lære meg å bruke API-er. Et API er et grensesnitt som lar to programmer snakke sammen. Her ble det brukt til å sende spørsmål fra bloggen til språkmodellen og hente svar tilbake. Jeg prøvde meg fram med ulike modeller gjennom API-et, sammenlignet svarene og fant ut hvilken som fungerte best til formålet. Noen av API-modellene var både trege og dyre, og det er viktig å huske på. Man betaler for trafikk inn og ut, derfor lurt å legge inn noen begrensninger i bruk. Det er også viktig å beskytte innsyn i API-nøklene, som er
Neste på lista var RAG-funksjonaliteten (Retrieval-Augmented Generation). Det betyr at språkmodellen ikke bare gjetter ut fra generell trening, men får tilført fakta fra en egen database før den svarer. Hos meg betyr det at boten først søkte i Supabase etter avsnitt som matcher spørsmålet. Disse tekstbitene sendes videre til modellen sammen med selve spørsmålet, slik at svaret bygger på både kunnskap og kontekst. Hvis treffene er for svake eller at jeg faktisk ikke har skrevet om temaet, går boten videre til nettsøk gjennom Brave sin nettleser. Dermed får jeg alltid et svar som er relevant, enten basert på egne tekster eller hentet utenfra.
Andre utfordringer som dukket opp
Det var også andre problemer som dukket opp. Chunk-størrelsene i embeddings avgjør hvor presise treffene blir i databasen. Med chunk mener jeg at teksten deles opp i mindre biter før den gjøres om til embeddings, og embeddings er tallrepresentasjoner av tekst som gjør det mulig å sammenligne innhold. Små chunks kan gi mer presise svar, men snevre treff. Store chunks derimot, fanger bredere sammenheng, men kan bli mer upresise. Jeg brukte mye tid på å eksperimentere både med ulike API‑modeller og med systemledetekster som styrer hvordan modellen skal svare for å finne fram til best mulige resultater.
I tillegg til dette jobbet jeg med fallback og caching for å få bedre flyt. Fallback betyr at systemet prøver en alternativ løsning hvis det første ikke fungerer, for eksempel å hente svar fra nettet når databasen ikke gir noe godt treff. Caching handler om å lagre tidligere svar midlertidig slik at de kan hentes raskere neste gang, og det sparer både tid og ressurser. Alt ble først testet i staging, en skyggeside i WordPress, før jeg til slutt publiserte den live. Bloggbot er nå fullt funksjonell og kan testes direkte på Lærerliv nederst på hovedsiden.
Fra knot til mestring
Jeg har brukt noen måneder på å fikle, knote og ha endeløse samtaler med en bot. Uten kodeerfaring er det vanskelig å vite om forslagene faktisk fungerer eller bare lager rot. Ofte ble sistnevnte resultatet, og jeg måtte ta to steg tilbake. Når jeg ikke er presis nok i det jeg ber om, og heller ikke har forståelsen for at element X alltid må komme før element Y i programmering, øker frustrasjonen betraktelig.
Etter en stund merker du likevel at noe skjer. Du begynner å forstå strukturen bak, du lærer syntaks og kodespråk og at det er en logikk som må følges. Da åpner det seg et større rom du kan utfolde deg i, og du stiller bedre og mer presise prompts til språkmodellen du bruker. Resultatet blir at du kan utvikle større og mer kompliserte prosjekter, og det er akkurat i det øyeblikket du driver med vibe code i koden. Du flyter avgårde ledet av dine egne kreative innfall med en effektiv kodeagent på laget. Mestringsfølelsen er enorm, det er morsomt og utrolig lærerikt.
Fra frustrasjon til flow
Vibe code gjør det enklere å starte med koding fordi du kan bruke naturlig språk i stedet for å pugge vanskelige regler. Jeg ser for meg vibing i klasserommet der elever får raske resultater, får innblikk i hvordan koden virker og opplever mestring som gir motivasjon til å prøve mer. Samtidig lærer de å forstå struktur, logikk og grunnleggende prinsipper i programmering på samme måte som jeg gjorde.
Denne måten å jobbe på kan også kobles til ulike fag og virkelighetsnære prosjekter. Elever kan lage små apper, nettsider eller verktøy som de faktisk får bruk for i skolehverdagen. Det gir rom for samarbeid, kreativitet og trygg læring, samtidig som løsningene kan være GDPR‑vennlige og tilpasset elevgruppen.
- API (Application Programming Interface): Et grensesnitt som gjør at to programmer kan snakke sammen, for eksempel mellom en blogg og en språkmodell.
- API-nøkkel: En personlig kode som gir tilgang til en tjeneste via API. Den må beskyttes slik at ikke andre får bruke eller misbruke din tilgang.
- Backend: Koden som kjører i bakgrunnen, styrer logikken og kobler til databaser.
- Caching: Midlertidig lagring av data for raskere tilgang neste gang du spør om det samme.
- Canvas-funksjonen: Et teststed i språkmodeller til å strukturere, kode og teste ideer direkte i et lerret.
- Chunk-størrelse: Hvor store tekstbiter som lages ved embeddings, avgjør hvor presist søketreffet blir.
- Datakorpus: Store mengder tekst som språkmodeller er trent på.
- Embeddings: Tallrepresentasjoner av tekst som gjør det mulig å søke og koble spørsmål til relevante avsnitt.
- Fallback: Når en løsning går videre til et alternativ, for eksempel at boten søker på web hvis databasen ikke gir gode nok treff.
- Frontend: Den synlige delen av en app eller nettside som brukeren ser og bruker.
- GitHub: Nettsted for å lagre kode, samarbeide og bruke verktøy som GitHub Copilot.
- GitHub Copilot: KI-assistent som foreslår og skriver kode direkte i editoren.
- GitHub Pages: Funksjon for å publisere enkle nettsider gratis rett fra et GitHub-repo.
- Google Colab: Tjeneste for å skrive og kjøre Python-kode rett i nettleseren, ofte brukt til dataanalyse og maskinlæring.
- HTML: Kodespråket som strukturerer innholdet på nettsider.
- JSON: Et lettvektsformat for utveksling av data mellom systemer, ofte brukt i webutvikling.
- PHP-handler: Lite program på serversiden som tar imot forespørsler og sender svar tilbake.
- PWA (Progressive Web App): En type app som ser ut og oppfører seg som en mobilapp, men som kan lages som en vanlig nettside.
- RAG (Retrieval-Augmented Generation): Teknikk der en språkmodell henter relevant informasjon fra en database før den skriver svaret.
- Repository: Lagringssted for kodeprosjekter i GitHub, der alle endringer versjoneres.
- Staging: Testområde der man prøver ut nye funksjoner før de legges ut på hovedsiden.
- Supabase: Plattform som gir database, innlogging og lagring til apper uten at du må sette opp servere selv.
- Systemledetekst: En instruksjon som gis til en språkmodell før brukeren stiller spørsmål, og som styrer hvordan modellen skal svare.
- Token: Minste enhet en språkmodell teller når den prosesserer tekst. Ett token tilsvarer omtrent ett ord eller en del av et ord.
- Vektor/vektorisering: En matematisk representasjon av tekst eller data som lister med tall. Brukes til å sammenligne meningsinnhold og gjøre søk mer presist.
- Vibe code: Skape apper, spill eller nettsider uten å kunne kode, ved hjelp av språkmodeller som skriver koden for deg.
- Visual Studio Code (VS Code): Populær kodeeditor som fungerer for mange språk og kan utvides med egne tillegg.





Legg igjen en kommentar