FÖRSTÅ KODEN

MANUAL DEL 4 // VAD SOM HÄNDER UNDER YTAN

VARFÖR DET HÄR SPELAR ROLL

Du behöver inte skriva kod — men du behöver förstå den

Du har nu byggt saker som faktiskt fungerar. Du kan få AI att producera kod som gör vad du vill. Men det finns ett mönster du troligen känner igen: när något går fel vet du inte var felet är. När AI ger dig två olika lösningar vet du inte vilken som är bättre. När projektet växer vet du inte hur delarna hänger ihop.

Det beror inte på att du saknar färdigheter. Det beror på att du saknar en mental modell — en bild i huvudet av vad som faktiskt händer när din sida laddas, när en knapp klickas, när data sparas.

Den här guiden bygger den modellen. Inga kodsnuttar du ska memorera. Ingen syntax. Bara koncept — förklarade på ett sätt som faktiskt förändrar hur du tänker när du bygger.

MÅL: EN MENTAL MODELL
INTE MÅL: ATT LÄRA SIG PROGRAMMERA

KONCEPT 01

Vad händer när du öppnar en webbsida?

Du skriver en adress i webbläsaren och trycker enter. En halv sekund senare ser du en sida. Det verkar enkelt. Det är det inte — men konceptet är.

Webbläsaren skickar en förfrågan till en server någonstans i världen. Servern svarar med en fil — vanligtvis en HTML-fil. Webbläsaren läser filen och ritar upp sidan.

Om HTML-filen refererar till en CSS-fil och en JavaScript-fil skickar webbläsaren ytterligare förfrågningar och hämtar dem också. Sedan sätts allt ihop och du ser resultatet.

DU → WEBBLÄSARE → SERVER → HTML-FIL
HTML REFERERAR TILL CSS OCH JS
WEBBLÄSAREN HÄMTAR ALLA DELAR → RITAR UP SIDAN

Det förklarar varför en lokal fil du öppnar med dubbelklick fungerar annorlunda än en publicerad sida — och varför du ibland ser en tom sida om en fil inte hittas.

KONCEPT 02

HTML — skelettets struktur

HTML beskriver vad som finns på sidan — inte hur det ser ut, inte vad som händer när du klickar, bara vad som finns.

Tänk på det som ett dokument med märkningar. En rubrik är märkt som rubrik. En paragraf är märkt som paragraf. En knapp är märkt som knapp. Webbläsaren läser märkningarna och vet vad varje del är.

Det viktigaste konceptet i HTML är nästling — att element befinner sig inuti andra element. En knapp inuti en sektion inuti en sida. Det skapar en trädstruktur, och den strukturen är grunden för allt annat.

SIDA
└── SEKTION
    ├── RUBRIK
    ├── TEXT
    └── KNAPP

När AI skriver HTML och något hamnar fel på sidan — till exempel en knapp som dyker upp på fel ställe — är det nästan alltid ett nästlingsproblem. Något element har hamnat inuti fel förälder.

KONCEPT 03

CSS — reglerna för utseendet

CSS är en samling regler. Varje regel säger: "det här elementet ska se ut såhär." Bakgrundsfärg, typsnitt, storlek, position — allt det bestäms av CSS.

Det viktigaste konceptet i CSS är specificitet — vilken regel som vinner när flera regler försöker bestämma samma sak. En regel som gäller en specifik knapp slår en regel som gäller alla knappar. En regel som läggs till direkt på ett element slår en regel i en separat fil.

Det förklarar ett fenomen du säkert stött på: du ber AI ändra en färg, den ändrar den, men sidan ser ändå likadan ut. Det beror nästan alltid på att en annan, mer specifik regel fortfarande vinner.

REGEL FÖR ALLA KNAPPAR: blå
REGEL FÖR DEN HÄR KNAPPEN: röd
RESULTAT: röd — den specifika regeln vinner

Det andra viktiga konceptet: CSS ärvs nedåt i trädet. Sätter du ett typsnitt på hela sidan ärver alla element det, om de inte har en egen regel som säger något annat.

KONCEPT 04

JavaScript — det som händer

Om HTML är vad som finns och CSS är hur det ser ut, är JavaScript vad som händer. Det är det enda av de tre som kan reagera på tid och på vad användaren gör.

JavaScript fungerar genom händelser. Något händer — en klickning, en knapptryckning, att sidan laddats färdigt, att en timer gått ut — och JavaScript svarar på det. Det är hela modellen.

Det viktigaste konceptet: JavaScript kan läsa och ändra HTML och CSS i realtid. Det är därför en knapp kan lägga till ett nytt element på sidan, ändra en färg eller dölja en sektion — utan att sidan laddas om. JavaScript manipulerar trädet direkt i webbläsarens minne.

HÄNDELSE: KNAPP KLICKAD
JAVASCRIPT: LÄS TEXTFÄLTET
JAVASCRIPT: SKAPA ETT NYTT ELEMENT
JAVASCRIPT: LÄGG TILL DET I LISTAN
RESULTAT: LISTAN UPPDATERAS UTAN SIDLADDNING

Det förklarar varför din anteckningsapp fungerar utan att ladda om sidan — och varför allt i listan försvinner när du väl laddar om. JavaScript-minnet töms vid sidladdning. Det är där localStorage kommer in.

KONCEPT 05

Data — vad kod egentligen hanterar

All kod handlar i grunden om data. Ta emot data, omvandla data, visa data. Det är allt. Förstår du hur data flödar genom ett system förstår du systemet.

Data har typer. En text är en text. Ett tal är ett tal. En lista är en lista av saker. Sant/falskt är ett eget värde. Det verkar självklart — men det är källan till en av de vanligaste typerna av buggar: att behandla en text som ett tal, eller ett tal som en lista.

TEXT: "42"
TAL: 42
"42" + 1 = "421"   ← text + tal = text
42  + 1 = 43    ← tal + tal = tal

En variabel är ett namn för ett värde. Istället för att använda värdet direkt — texten "Anna", talet 42 — ger du det ett namn och använder namnet. Det gör det möjligt att byta ut värdet utan att ändra allt annat som använder det.

När AI namnger variabler data, temp eller x är det ett tecken på att du inte specificerat vad variabeln representerar. Be explicit om beskrivande namn — userInputText, savedEntries, isFormValid.

KONCEPT 06

Funktioner — återanvändbara instruktioner

En funktion är ett namngivet block av instruktioner som du kan anropa hur många gånger du vill. Istället för att skriva samma tio rader kod på fem olika ställen samlar du dem i en funktion och anropar den fem gånger.

Det viktigaste konceptet: en funktion tar emot data (input), gör något med den och returnerar ett resultat (output). Precis som en maskin.

FUNKTION: beräknaTotal
INPUT: pris, antal
GÖR: multiplicera pris med antal
OUTPUT: totalsumman

Det förklarar varför kod som "fungerar på ett ställe men inte ett annat" ofta är ett funktionsproblem — antingen anropas den inte på rätt ställe, eller får den fel data som input.

När du ber AI lägga till en funktion — tänk alltid i termer av input och output. "En funktion som tar en text, kontrollerar att den är längre än fem tecken, och returnerar sant eller falskt." Det ger AI precis vad den behöver för att skriva rätt.

KONCEPT 07

Flöde — hur kod bestämmer vad som händer

Kod körs uppifrån och ner, rad för rad, i ordning. Men det finns tre saker som kan bryta den ordningen: villkor, loopar och asynkronitet.

Villkor — om något är sant, gör det här. Annars, gör det där. Det är hela logiken bakom validering, felhantering och alla "om-så"-beteenden i din kod.

Loopar — gör det här för varje sak i listan. Det är därför en lista med tio anteckningar visas med tio rader utan att du skrivit tio separata rader kod.

Asynkronitet — det här är det svåraste konceptet och källan till en stor del av mystiska buggar. Vissa saker tar tid: ett API-anrop, att läsa en fil, att vänta på ett svar. Kod kan inte bara stanna och vänta — den fortsätter köra medan den väntar. Det betyder att svaret kan komma när koden redan gått vidare.

KOD: "HÄMTA DATA FRÅN API"
KOD: "VISA DATA" ← KÖR DIREKT, INNAN API:T SVARAT
RESULT: INGENTING ATT VISA ÄN

RÄTT: VÄNTA PÅ SVARET → VISA DATA SEDAN

Det förklarar varför AI-kod för API-anrop ofta innehåller ord som async och await — det är instruktioner till koden att faktiskt vänta innan den går vidare.

FLÖDE

KONCEPT 08

Webbläsaren — en dator i din dator

Webbläsaren är inte bara ett fönster för att titta på sidor. Den är en komplett körmiljö — ett program som kan köra JavaScript-kod, hantera minne, kommunicera med servrar och rita upp grafik.

Det förklarar tre saker du säkert märkt:

Varför saker fungerar olika i olika webbläsare. Chrome, Firefox och Safari är tre olika program med tre olika implementationer. De stöder nästan samma saker — men inte exakt samma saker.

Varför localStorage försvinner. localStorage är minne i webbläsaren på din dator. Öppnar du sidan i en annan webbläsare, på en annan dator, i ett inkognito-fönster — annat minne, annan data.

Varför konsolen är så användbar. Konsolen är webbläsarens inbyggda felsökningsverktyg. Den ser koden köras i realtid och rapporterar allt som går fel — inklusive saker som misslyckas tyst och aldrig visar ett synligt felmeddelande.

WEBBLÄSARE = KÖRMILJÖ
KONSOL = FÖNSTER IN I KÖRMILJÖN
NÄR NÅGOT GÅR FEL → ÖPPNA KONSOLEN ALLTID

KONCEPT 09

Klient och server — den viktigaste skiljelinjen

Det är en distinktion som förklarar mer om hur webben fungerar än nästan något annat: vad som körs hos dig, och vad som körs på en server någonstans.

Klienten är din webbläsare. Allt som körs där — HTML, CSS, JavaScript — är synligt och tillgängligt för alla som öppnar sidan. Det kan inte hållas hemligt. Det är därför du aldrig kan lägga en API-nyckel i frontend-kod.

Servern är en dator någon annan stans som kör kod som aldrig syns utanför. Den tar emot förfrågningar, kör logik, pratar med databaser och skickar tillbaka svar. Det är här känslig information kan hanteras på ett säkert sätt.

KLIENT (DIN WEBBLÄSARE):
HTML + CSS + JS → ALLA KAN SE DET

SERVER (ANNAN DATOR):
LOGIK + DATABAS + NYCKLAR → INGEN KAN SE DET

Det förklarar varför enkla statiska sidor inte behöver en server — det finns inget hemligt att skydda och inget som kräver kontinuerlig körning. Det förklarar också varför ett inloggningssystem alltid kräver en server — lösenord och användardata kan aldrig hanteras säkert i webbläsaren.

ARKITEKTUR

KONCEPT 10

Databaser — organiserad permanent lagring

localStorage lagrar data i webbläsarens minne — snabbt och enkelt, men begränsat till en enhet och en webbläsare. En databas lagrar data på en server — tillgänglig från var som helst, av vem som helst med rätt behörighet, och i nästan obegränsad mängd.

Tänk på en databas som ett extremt välorganiserat kalkylark. Det finns tabeller (som flikar i ett kalkylark), rader (poster) och kolumner (egenskaper). En tabell för användare, en för anteckningar, en för beställningar.

TABELL: anteckningar
┌──────────┬──────────────┬────────────┐
│ id       │ text         │ skapad     │
├──────────┼──────────────┼────────────┤
│ 1        │ "Handla mjölk" │ 2025-04-01 │
│ 2        │ "Ring mamma"  │ 2025-04-02 │
└──────────┴──────────────┴────────────┘

Den viktigaste operationen i en databas är att söka: ge mig alla anteckningar för den här användaren, sorterade efter datum, de tio senaste. Det är vad som händer varje gång du öppnar en app och ser ditt innehåll — databasen frågas och svarar.

Det förklarar varför Supabase fungerar som det gör — det är en databas med ett lager ovanpå som gör att din JavaScript-kod kan ställa frågor och få svar utan att du behöver hantera servern.

KONCEPT 11

API — ett språk för att prata med andra system

I del tre förklarades API som "ett sätt att prata med en annan tjänst". Nu kan vi gå lite djupare.

Ett API är ett kontrakt. Det säger: skicka en förfrågan på det här formatet, till den här adressen, med den här informationen — och du får ett svar på det här formatet tillbaka. Det är en överenskommelse mellan din kod och en annan tjänst.

De flesta moderna API:er använder ett format som kallas JSON för att skicka och ta emot data. JSON ser ut ungefär som en lista med nyckel-värde-par:

{
  "namn": "Anna",
  "ålder": 32,
  "aktiv": true
}

Det förklarar varför Claude-kod för API-anrop ofta innehåller JSON.parse och JSON.stringify — det är konvertering mellan JSON-text och JavaScript-data i båda riktningarna.

Det förklarar också felmeddelanden som "unexpected token" eller "cannot read property of undefined" — svaret kom inte i det förväntade formatet, och koden visste inte hur den skulle hantera det.

KONCEPT 12

Felmeddelanden — kod som berättar vad som gick fel

Felmeddelanden ser skrämmande ut. De är inte det. De är det mest hjälpsamma systemet i hela programmering — kod som explicit säger vad som gick fel, på vilken rad, och ibland varför.

De vanligaste typerna du möter som vibe-coder:

Cannot read properties of undefined. Du försöker använda data som inte finns. Koden förväntade sig ett objekt men fick ingenting — ofta för att ett API-svar inte kom i tid, eller för att en variabel aldrig sattes.

404 Not Found. En fil eller resurs hittades inte. Antingen fel URL, fel filnamn eller en fil som inte publicerats.

CORS error. En säkerhetsregel i webbläsaren blockerade ett API-anrop. Din sida på domän A försökte prata med en tjänst på domän B utan tillstånd. Det löses vanligtvis på server-sidan — be Claude förklara exakt vad som behöver ändras.

Uncaught SyntaxError. Koden är skriven fel — ett saknat tecken, en parentes som inte stängs, ett komma på fel ställe. AI gör det här ibland. Det är alltid ett litet fel och alltid enkelt att fixa.

FELMEDDELANDE = EN LEDTRÅD, INTE EN DOM
KOPIERA DET → KLISTRA I CLAUDE → FÅ FÖRKLARING

FELSÖK

HELHETSBILD

Sätt ihop allt — ett exempel från slut till slut

Du har byggt en anteckningsapp med ett formulär som skickar till Supabase. En användare fyller i ett textfält och klickar spara. Det här händer, i ordning:

1. HÄNDELSE: KLICK PÅ SPARA-KNAPPEN
2. JAVASCRIPT LÄSER TEXTFÄLTETS VÄRDE (DATA)
3. JAVASCRIPT VALIDERAR: ÄR TEXTEN LÄNGRE ÄN 0? (VILLKOR)
4. JAVASCRIPT SKICKAR EN FÖRFRÅGAN TILL SUPABASE (API-ANROP)
5. WEBBLÄSAREN VÄNTAR PÅ SVAR (ASYNKRONITET)
6. SUPABASE TAR EMOT → SPARAR I DATABASTABELLEN (SERVER)
7. SUPABASE SVARAR MED BEKRÄFTELSE (JSON)
8. JAVASCRIPT TAR EMOT SVARET
9. JAVASCRIPT UPPDATERAR LISTAN PÅ SIDAN (DOM-MANIPULATION)
10. ANVÄNDAREN SER DEN NYA ANTECKNINGEN

Tio steg för ett knapptryck. Varje steg är ett ställe där något kan gå fel. Förstår du stegen vet du var du ska leta.

Det är vad en mental modell ger dig: inte förmågan att skriva koden, utan förmågan att förstå vad som händer — och att ställa rätt frågor till AI när något av stegen misslyckas.

TILLÄMPA DET HÄR

Hur du använder den här förståelsen i praktiken

Den mentala modellen förändrar tre saker i hur du jobbar med AI:

Du ställer bättre frågor. Istället för "det funkar inte" kan du nu säga "steg 4 misslyckas — API-anropet ger ett CORS-fel". Det är en instruktion AI kan agera på direkt.

Du förstår svaren bättre. När Claude förklarar vad ett kodblock gör känner du igen koncepten — händelse, funktion, API-anrop, validering. Du kan bedöma om förklaringen är rimlig.

Du designar bättre system. Innan du ber om kod kan du tänka igenom flödet: vad ska hända i vilket steg, var ska data sparas, vad ska hända om ett steg misslyckas. Det ger AI en bättre specifikation och dig ett bättre resultat.

MENTAL MODELL + VIBE CODING
= FÖRMÅGAN ATT BYGGA OCH FÖRSTÅ VAD DU BYGGT

SYSTEM ACTIVE

SAMMANFATTNING

Koncepten du nu har

01. WEBBLÄSARE HÄMTAR FILER FRÅN SERVER → RITAR SIDAN
02. HTML = STRUKTUR OCH NÄSTLING
03. CSS = REGLER OCH SPECIFICITET
04. JS = HÄNDELSER OCH DOM-MANIPULATION
05. DATA HAR TYPER — BLANDA DEM INTE
06. FUNKTIONER = INPUT → GÖR NÅGOT → OUTPUT
07. ASYNKRONITET = VÄNTA PÅ SVAR INNAN DU GÅR VIDARE
08. KONSOLEN = FÖNSTER IN I KÖRMILJÖN
09. KLIENT = SYNLIGT FÖR ALLA / SERVER = SKYDDAT
10. DATABAS = ORGANISERAT KALKYLARK PÅ SERVER
11. API = KONTRAKT FÖR ATT PRATA MED ANDRA SYSTEM
12. FELMEDDELANDEN = LEDTRÅDAR, INTE DOMAR

Du behöver inte memorera det här. Du behöver ha det som en bakgrund när du bygger — och komma tillbaka hit när något beter sig oväntat.

DU FÖRSTÅR NU VAD SOM HÄNDER

KONCEPTEN ÄR DINA // LÄS VIDARE