Jackson & Coil

2026 · AI-assistert webapp
Skjermbilde av Jackson & Coil, Website 1 forside
Website 1
Next.js 16 · Fraunces serif · cream + terracotta
1 av 2

Jeg ga Claude Code og Codex samme brand-brief for en fiktiv krøll-salong og bygde to parallelle Next.js-prototyper. Booking-flyt og butikk på 36 produkter, deployet.

Jackson & Coil er en fiktiv frisørsalong i Oslo som spesialiserer seg på krøllete hår. Jeg brukte den som case for å se hvor langt to AI-agenter kan ta meg fra brand-brief til ferdig, deployet nettside.

Problem

Jeg trengte et porteføljeprosjekt der jeg kunne styre Claude Code og Codex hele veien fra brand-brief til deployet kode. Caset ble en fiktiv krøll-salong på Grünerløkka som jeg kalte Jackson & Coil.

Krøllete hår er underrepresentert i norske salonger. Mange norske frisører er ikke trent på naturmønster, og kunder med krøller reiser ofte til London eller Stockholm for tørrklipp. Krølltyper måles fra 2A til 4C på Andre Walker-skalaen, og den skalaen ble nyttig kontekst da jeg skrev brand-briefen.

Forsiden. Vanessa Jackson sin grunderhistorie tett under heroen på Website 1, Website 2 holder seg fotografisk.

Løsning

Jeg startet med research. Leste teardowns av krøll-salonger jeg likte (Hair Rules i New York, Curl Bar i London, Curl Up i Amsterdam, Hare & Bone i London, Capella i LA), noterte design-mønstre verdt å låne og noen anti-mønstre, og skrev en brand-brief som dekket personas, tone-of-voice, fotografi-regler og tjenestemeny. Den briefen ble grunnlaget begge agentene fikk å jobbe fra.

Deretter bygde jeg to Next.js-prototyper av samme salong side om side i samme prosjektmappe. Begge fikk samme brand-brief og samme målgruppe, forskjellen lå i hvordan agentene tolket den. Website 1 ble cream og terracotta, Fraunces-serif, en redaksjonell stil med Vanessa Jackson sin grunderhistorie fremme. Website 2 ble paper og clay med dyp blågrønn for booking, IBM Plex, et strammere fotografisk uttrykk og en snarvei der returnerende kunder kan rebooke samme klipp på ett trykk.

Begge har ti ruter, en full booking-flyt i fem steg (tjeneste, stylist, tid, krølltype-intake og bekreftelse), og en butikk med 36 produkter filtrerbare på krølltype, porositet og pris. Booking-staten lever i nettleserens sessionStorage, og e-postbekreftelsen bruker en EmailJS-stub med mailto-fallback. Dette er en prototype, så ingenting går mot en faktisk backend.

Claude Code var hovedagent for kode og struktur. Codex tok bilde-genereringen, og Playwright via MCP gjorde skjermbilder og ytelsesmålinger. Jeg dispatchet typisk tre til fem subagenter parallelt, hver med sin avgrensede oppgave: én for hjemmesiden, én for booking, én for butikken. Det halverte ventetiden på de fleste oppgaver.

Beslutninger jeg tok

Parallelle prototyper. Det opprinnelige alternativet var å bygge én versjon ferdig polert. Jeg kjørte to Claude Code-sessions mot to ulike design-retninger samtidig, så jeg kunne se hvor agentene lander når de har frihet, og hvor mye divergens som faktisk oppstår i tone, typografi og bilde-valg.

Butikken. Sidebar-filter med checkboxes på Website 1, kompakt toggle-rad på Website 2.

For å holde tonen i sjakk la jeg en PORTFOLIO-CONTEXT.md i prosjektroten med en liste over forbudte ord, fraser og mønstre, og spurte hver subagent om å sjekke outputen sin mot lista før den leverte. Selv da måtte jeg redigere manuelt, men det fjernet det meste av det AI-aktige før jeg så det.

Produktdetalj. Website 1 vier mest plass til galleri og redaksjonell prosa, Website 2 til ingredienser og kjøp.

All booking-state i nettleseren. Dette er en prototype uten ekte salong å booke hos, så Supabase eller Postgres ville tatt en dag uten å demonstrere noe ekstra. State lever i sessionStorage, e-postbekreftelsen sendes via EmailJS-stub som faller tilbake til mailto hvis nøklene mangler, og kalender-invitasjonen er en .ics-fil generert i nettleseren.

Booking-bekreftelse. Roligere kvittering på Website 1, tettere visning på Website 2.

Da subagenten leverte fem ulike filter-bar-design for butikken, laget jeg en HTML-velger med thumbnails av alle fem og valgte den enkleste: en venstre-sidebar med checkboxes for kategori og en pris-slider. De fire andre var pene, men ville krevd ekstra arbeid for å funke responsivt under 480 piksler.

Hva jeg lærte

Bilder er den vanskeligste delen. Codex sin bildegenerering produserer brukbart for de letteste krølltypene, men 4C-krøller får ofte uregelmessige teksturer som ser kunstige ut. Jeg endte med å bruke ekte produktbilder fra Pattern, Innersense og Boucléme for 30 av 36 shop-produkter, og lagde Codex-bilder bare for de seks hus-merkene. Jeg hadde gjerne sluppet, men det var den eneste måten å få en konsekvent katalog på.

Hvordan jeg formulerte prompten bestemte hva subagenten leverte. "Lag en hero-seksjon" ga generisk Tailwind-glansbilde. "Lag hero-seksjonen til en krøll-spesialisert salong, Type 4-først, ingen stock-glamorshots, med disse to bildene som anker" ga noe brukbart i første runde.

En ting jeg tok med meg: agenter behandler ofte URL-er du gir dem som instruks, ikke som data. Da jeg ba en subagent åpne en konkurrent-salongs nettside for tone-of-voice-research, observerte jeg flere ganger at den prøvde å adlyde tekst som lå skjult i HTML-en, som om det var en kommando. Jeg behandler nå all ekstern web-innhold som data og sier det eksplisitt i prompten før jeg sender lenker inn.

Hvor agentene divergerte

Tabellen under viser hvor de to prototypene valgte ulikt: på rammeverk-versjon, typografi, palett, tone, og hva hver enkelt landet på som sin egen vri.

Egenskap
Website 1
Live demo ↗
Website 2
Live demo ↗
Rammeverk
Next.js 16 · Turbopack
Next.js 15
Typografi
Fraunces · Inter Tight · JetBrains Mono
Fraunces · IBM Plex Sans · JetBrains Mono
Palett
Cream #FAF7F2 · Terracotta #B5532A
Paper · Clay · Deep teal for booking
Tone
Editorial luxe · Fraunces SOFT-aksel
Documentary · stram grid · stille
Målgruppe
Hele krølltype-spekteret, første-besøk-pakke fremhevet
Vekt på tette krøller (4A-4C), snarvei for faste kunder
Hva er spesielt
Filter-sidebar på butikk og hele founder-historien fremme
Ett-trykk rebook for faste kunder · krølltype-guide på method-siden

Slik fikk jeg AI-verktøyene til å jobbe sammen

Claude Code var hovedagenten og dispatchet subagentene. Codex laget bildene, og Playwright tok skjermbilder og Lighthouse-målinger.

Brief
PORTFOLIO-CONTEXT.md
↓
Claude Code
Hovedagent (dispatch)
↓
Codex
image_gen
Bilde-prompts
Subagenter
Claude Code
Sider og seksjoner
Playwright MCP
via Claude Code
Screenshots og Lighthouse
↓
To parallelle Next.js-prototyper
website1 + website2

Hvor raskt sidene laster på mobil

Google sin Lighthouse-måling, 0 til 100, høyere er bedre. Målt mot lokal dev-server, ikke et prod-bygg, så dette er et gulv for hva den ferdige siden vil yte.

Side
Website 1
Website 2
Forside
75
55
Butikk
94
51
Booking
97
70
Portefølje
76
55

Technology Stack

  • Frontend:Next.js 16, Next.js 15, React 19, TypeScript, Tailwind v4
  • Animasjon:Motion, Lenis
  • Verktøy:Playwright MCP, Lighthouse, EmailJS
  • Agenter:Claude Code, Codex

Key Features

  • To parallelle prototyper

    Bygget side om side i samme prosjektmappe for å se hvor to Claude Code-sessions lander når de har frihet på typografi, palett og rytme.

  • Booking-flyt i fem steg

    Tjeneste, stylist, tid, krølltype-intake og bekreftelse. Staten lever i nettleseren og bekreftelsen sendes med kalender-fil.

  • Butikk med 36 produkter

    Filter på krølltype, porositet, kategori og pris. Produktdataen ligger som TypeScript i kildekoden uten CMS bak.

Andre prosjekter