Jeg hadde Claude, ChatGPT og Gemini til å lage den samme Chrome-utvidelsen, og bare én fungerte faktisk


Vibe-koding er overalt nå. Når de fleste hører begrepet, går tankene deres derimot umiddelbart til å bygge full-stack CRUD-apper, polerte nettsider du kan lage på få minutter, eller porteføljesider som på en eller annen måte alle har den samme hero-seksjonen (og gradient-bakgrunnen). Nå, som noen som alltid har dusinvis av ideer flytende rundt i hodet mitt, har jeg gjort en versjon av "vibe-koding" siden OpenAI lanserte ChatGPT offentlig.

Når det er sagt, var det aller første jeg vibe-kodet ikke et nettsted, en landingsside eller en app. I stedet var det en Chrome-utvidelse. Jeg husker ikke helt hva den skulle gjøre, men jeg husker at den fungerte. Så jeg bestemte meg for å gå tilbake til starten og sette de tre største LLM-ene (Claude, ChatGPT og Gemini) gjennom den samme testen: lag en Chrome-utvidelse fra bunnen av.

Chrome-utvidelser er den enkleste vibe-koding stress testen

Last det, klikk på det, be

Når du bruker en LLM til å kode en fullverdig app eller nettside, er sjansen stor for at du til slutt vil nå et punkt hvor du må finne ut av hosting, distribusjon, miljøvariabler, databaser og et dusin andre infrastrukturproblemer. For å være rettferdig, avhenger dette av verktøyet du bruker, siden verktøy som Replit og Lovable lar deg distribuere direkte fra plattformen med ett enkelt klikk. Men selv da tester du fortsatt plattformen like mye som modellen. Chrome-utvidelser, derimot, krever ingen av delene. Det er ingen backend, hosting eller databaser du egentlig trenger å bekymre deg for. Du laster bare en mappe inn i Extensions-delen av nettleseren din, og den fungerer enten eller ikke.

Chrome-utvidelser består av bare noen få filer: en manifest.json som forteller Chrome nøyaktig hva utvidelsen gjør, og deretter HTML-, JavaScript- og CSS-filer. Dette er tre språk som LLM-er pleier å håndtere ganske godt. Siden Chrome-utvidelser er designet for å løse ett spesifikt problem, utgjør de den perfekte småtesten ettersom det er et klart mål. Når jeg gjør denne typen tester, foretrekker jeg å velge en idé jeg virkelig har hatt lyst til å bygge selv. Det gir meg ikke bare den perfekte unnskyldningen for faktisk å begynne å bygge den, men det utgjør også en svært rettferdig test.

Ærlig advarsel, utvidelsen jeg har i tankene kan høres litt... dum og ukonvensjonell ut, så ha tålmodighet med meg. Jeg ønsket en utvidelse som lar meg søke gjennom mine Instagram-story-seere. Jeg er ikke sikker på hvorfor dette ikke er en innebygd funksjon ennå, men hvis du noen gang har hatt hundrevis (og noen ganger tusenvis) av personer som har sett din Instagram-story og prøvd å finne én bestemt person i den listen, vet du allerede smerten. I teorien visste jeg at en Chrome-utvidelse ville gjøre susen, så det er det jeg bestemte meg for å kaste på alle tre modellene for å se hvem som faktisk kunne klare det. Jeg brukte en ekstremt vag prompt — jeg fortalte bare hver modell hva jeg ønsket og ga ikke mange detaljer. Igjen, målet her er å se hvor godt hver modell kan ta en enkel idé og finne ut resten på egen hånd.

ChatGPT laget en anstendig utvidelse

Det fungerte, men jeg tror ikke jeg ville brukt det






Før jeg går videre, brukte jeg ikke Claude Code, Codex eller Antigravity (Googles agentiske IDE som fungerer med Gemini) til å bygge dette. I stedet brukte jeg standard chattegrensesnitt for hver med deres nyeste modeller og betalte abonnementer over hele linjen. Jeg brukte GPT-5.5 Thinking for denne, og satte tenkeinnsatsen til Forlenget. Jeg begynte med en grunnleggende prompt, og den satte sammen en Manifest V3-utvidelse på under to minutter. Utvidelsen heter IG Story Viewer Search, og ga meg direkte en ZIP-fil som jeg kunne laste ned og legge rett inn i Chrome. Så langt, så bra. Basert på beskrivelsen, skulle utvidelsen legge til en flytende søkeboks når listen over mine Instagram-historikkvisere er åpen.

Så snart jeg lastet utvidelsen, kunne jeg ikke engang klikke på den! GPT-5.5 innså deretter at den første versjonen den hadde laget, ikke hadde noen verktøylinje-popup, og det var derfor klikk på utvidelsen ikke gjorde noe. Den fikset det og ga meg en ny ZIP-fil. Når jeg testet den, innså jeg at utvidelsen fungerte, men den ville bare fungere med noen få seere om gangen. LLM forklarte at dette skjedde fordi Instagram «laster inn» seerlisten gradvis. Etter dette bygde GPT-5.5 utvidelsen på nytt på riktig måte for lange seerlistene. Med denne nye versjonen hevdet ChatGPT at den hadde lagt til en ny «Indekser alle seere»-knapp som automatisk ruller gjennom historielisten og bygger en lokal søkbar indeks. Når jeg testet den, fungerte utvidelsen fortsatt ikke slik jeg ønsket, og ville bare fungere med de seerne som vises på skjermen.

Etter 2 minutter og 11 sekunder med tenking, ga det meg versjon 1.4, som la til to nye moduser for å omgå Instagrams irriterende oppførsel med seerlisten. Den første var Auto-indekser alt, som skulle automatisk bla gjennom seerlisten og samle inn navn etter hvert som Instagram lastet dem. Men GPT-5.5 innrømmet også at Instagram kan blokkere eller avbryte programmerbar rulling, så denne modusen kan fortsatt være upålitelig. Den andre, mer viktige modusen var Start live-opptak. I stedet for å prøve å tvinge Instagram til å laste inn alle automatisk, overvåker denne modusen seerlisten i sanntid og fanger brukernavn etter hvert som de vises mens jeg manuelt blar fra topp til bunn. Jeg testet dette på en historie som hadde rundt 400 visninger, og som GPT forutså, fungerte ikke knappen for automatisk indeksering av alle. Jeg prøvde knappen for direkte opptak og rullet deretter sakte gjennom hele seerlisten selv. Dette fungerte bedre, men det var fortsatt ikke den sømløse «søk hvem som helst med en gang»-opplevelsen jeg opprinnelig hadde i tankene.

Det gjorde i praksis utvidelsen om til et verktøy for å fange mens man blar. Utvidelsen kunne huske seere etter at de hadde dukket opp på skjermen, men den kunne fortsatt ikke magisk få tilgang til hele seerlisten før Instagram lastet den. Merkelig nok listet den noen brukere som separate oppføringer, og det totale antallet visninger ble vist som 700+ brukere. Noen brukere fungerte fint, mens andre ble delt opp i separate oppføringer avhengig av navnet deres. Når det er sagt, fungerte søkefunksjonen denne gangen, men det var tydelig at det fortsatt var en uferdig prototype fremfor et polert verktøy. Det løste det opprinnelige problemet i den løseste forstand: hvis jeg først rullet gjennom listen manuelt, kunne jeg deretter søke etter personer som hadde blitt fanget. Men indekseringen var rotete, noen oppføringer ble duplisert, deler av visningsnavn ble misforstått som separate brukere, og antall seere ble blåst opp langt over det faktiske antallet visninger av historien.

Så mens GPT-5.5 til slutt fikk kjernefunksjonaliteten til å fungere, tok det flere runder med feilsøking og endte fortsatt med en ganske klossete løsning.

Geminys første instinkt var å gi meg en prompt

Utvidelsen fungerte aldri

Jeg har vært en stor fan av Googles AI-innsats en stund nå, men jeg får stadig nye grunner til å bli skuffet. Etter at jeg var ferdig med å teste GPT-5.5s utvidelse, var det på tide å sette Gemini på prøve, og det den produserte var rett og slett... pinlig. Med en gang skrev den ikke engang utvidelsen. I stedet ga den meg en fullstendig arkitekturgjennomgang, en forelesning om DOM-traversering, og... vent på det... et masterprompt som jeg skulle lime inn i et agentbasert IDE. Gemini, hvorfor skulle jeg komme til deg i utgangspunktet hvis jeg ønsket å lime inn et prompt i et annet verktøy?

Jeg spurte deretter om det faktisk kunne lage utvidelsen for meg, og det begynte å jobbe. I motsetning til GPT eller Claude, ga det meg ikke en ZIP-fil jeg kunne pakke ut og laste direkte inn i Chrome. I stedet ga det meg hver fil separat (manifest.json, content.js og styles.css) og sa at jeg måtte opprette en mappe og lagre dem selv. Det gjorde jeg, og utvidelsen fungerte ikke i det hele tatt. Geminis versjon tok en helt annen tilnærming enn GPT sin.

I stedet for et verktøylinje-popup, prøvde det å injisere en søkefelt rett inn i Instagrams brukergrensesnitt, direkte inne i visningsmodalen selv. Søkefeltet dukket aldri opp. Jeg fortalte Gemini, og det som fulgte var seks runder med stadig mer selvsikre løsninger som alle feilet på forskjellige måter. Ved slutten av runde fire dukket søkefeltet endelig opp, men det kunne ikke finne en eneste visning. Jeg hadde litt mer frem og tilbake og ga til slutt bare opp samtalen.

Claude tok tre meldinger for å få det riktig

Den som faktisk ble sendt

Etter utvidelsene GPT og Gemini hadde produsert, hadde forventningene mine falt betydelig. Nå fungerte ikke Claude sin første versjon heller. Claude undersøkte deretter Instagrams nåværende DOM-struktur og bygde utvidelsen på nytt ved å bruke Instagrams interne API-endepunkter i stedet (som det forklarte er mye mer pålitelige siden jeg allerede er logget inn på kontoen min). Og voilà, det fungerte endelig.

Når jeg klikket på ikonet, var det en fungerende søkefelt og en fullstendig seerliste hentet direkte fra Instagrams API. Det eneste problemet var at den samlet alle mine historikkseere i én stor liste, i stedet for å la meg søke gjennom seere for hver enkelt historie. Jeg fortalte Claude, og etter en melding til ga den meg v3. Denne versjonen la til en visuell historielinje øverst med miniatyrbilder, tidsstempler og antall visninger. Jeg kunne trykke på en hvilken som helst historie for å laste bare seerne for den historien, og deretter søke innenfor den. Og det var det. Det fungerte, og trengte ingen flere oppfølgingsmeldinger. Endelig!

Neste gang starter jeg med Claude

Claude bygde utvidelsen raskest, med færrest meldinger nødvendig, og det er det eneste verktøyet som klarte å bygge noe fullt funksjonelt til slutt. ChatGPT bygde noe fungerende, og Gemini gjorde det rett og slett ikke.

Relaterte artikler