Skip to main content

Blogg

Om webutvikling, ytelse, verktøy — og nå og da noe større.

iOSSafariWebKitLexicalcontenteditableDebugging

Fire feil drepte tekstmarkering på iOS — og hver av dem skjulte den neste

En Lexical-editor i en vaul-drawer fungerte overalt unntatt på en ekte iPhone: markeringshåndtakene lot seg ikke dra, rullingen låste seg ved kantene, verktøylinjen dukket under tastaturet. Gjetting fikset ingenting, for det fantes ingen enkelt skyldig — det var fire uavhengige, og hver maskerte den neste. Det som fungerte var en biseksjonsrigg: samme skjelett med én bryter per mistenkt, testet på en fysisk enhet. Her er hele jakten — href som forgifter markeringen, vauls drag-håndterere, vår egen tap-focus, en beholder som flytter seg under fingeren — pluss obduksjonen av rulle-låsen og de tre engangsskrivingene av scrollTop som fikk rubber-band til å føles naturlig, inkludert å fange et sveip midt i spretten.

5. september 202615 min lesing
Les artikkelen
Claude CodeAICLIBashAutomationResilience

En kaskade av agenter: terminalen velger den som faktisk virker

Da Claude delvis gikk ned og noen modeller sluttet å svare, prøvde jeg å bytte til Gemini — og oppdaget at reserven min hadde vært ødelagt i månedsvis. Slik bygger du en som faktisk holder.

29. august 20269 min lesing
Les artikkelen
Claude CodeAIAutomationMonitoringlaunchdResilience

system-droid: en vakthund som selv sjekker og reparerer systemene mine

De lokale tjenestene mine døde alltid lydløst — morgenrapporten kom ikke, tokens utløp, backupen frøs. Så jeg bygde en launchd-droid som sjekker alt annenhver time, reparerer det som trygt kan fikses via en Claude-agent, og skriver til meg bare når et menneske virkelig trengs.

17. august 202610 min lesing
Les artikkelen
Next.jsA/B TestingProxyPerformanceSSG

En statisk side som i hemmelighet er en A/B-test

En A/B-test bygges vanligvis slik at siden faller bort fra CDN-en til en rendering per forespørsel. Slik trenger det ikke være. Hold hver variant helt statisk og la en proxy (Next.js sitt omdøpte middleware) løse tildelingen via en eksperimentplattform, ut fra en stabil device-id — og skriv bare om når besøkende ikke er i kontrollgruppen. URL-en endres aldri, CDN-en cacher fortsatt, og den vanlige veien koster ingenting.

14. august 20268 min lesing
Les artikkelen
VercelGitHub ActionsCI/CDDeploymentMonorepo

Deploy til Vercel fra CI når den som committer ikke er teammedlem

Flytt et repo inn i en GitHub-organisasjon, og Vercel begynner stille å blokkere deployene dine: committen «kunne ikke matches mot et teammedlem». Slik deployer jeg i stedet fra GitHub Actions med Vercel-CLI-en — committene mine teller fortsatt i min egen GitHub-graf, dashbordet viser fortsatt hvem som pushet, og jeg kjøper ikke én plass per bidragsyter.

10. august 20268 min lesing
Les artikkelen
Next.jsMemory LeakDockerAWS LambdaNode.js

Next.js Memory Leak: Fetch + Standalone-modus — 2 år uten fiks

Next.js patcher den globale fetch og legger til et cache-lag som lekker minne ved hver forespørsel. I Docker/K8s fører dette til OOM-krasj hver par timer. Buggen har eksistert siden Next.js 14 og er fortsatt uløst i 16.2.x.

Oppdatert 10. august 202610 min lesing
Les artikkelen
claude-codeproductivityclidevtools

Flere Claude Code-kontoer på én enhet

Hvordan bruke to (eller flere) Claude Code-kontoer parallelt — personlig og bedrift — med full isolasjon ved hjelp av én enkelt miljøvariabel.

Oppdatert 9. august 20264 min lesing
Les artikkelen
SolidJSSolidStartPerformanceSSGCode Splitting

Lazy-last blogginnhold i SolidStart uten å miste SSG

Bloggen din leverer sannsynligvis hvert innleggs brødtekst i én enkelt bundle — min hadde vokst til 2,88 MB og ble lastet ned selv på indekssiden, der du bare trenger titlene. Slik delte jeg hvert innleggs tekst i en lazy-chunk som lastes ved behov, mens hver side forblir fullstendig serverrendret for SEO.

5. august 20268 min lesing
Les artikkelen
ailearningcareermethodology

CRAFT: en metode for å bruke AI uten å miste faglig skarphet

Å påpeke et problem uten å gi en løsning sår bare uro. Etter innlegget om AI-drevet avlæring kommer her resepten: CRAFT — fem prinsipper (Challenge First, Review Adversarially, Ask Why Not What, Friction on Purpose, Test Your Understanding) under ett enkelt aksiomet: AI gjør det du allerede mestrer, du gjør det du fortsatt lærer deg. En praktisk og letthugsket metode for å bruke AI hver dag uten å miste ferdigheter i det stille.

Oppdatert 5. august 20266 min lesing
Les artikkelen
JavaScriptAnalyticsEvent DelegationServer ComponentsPerformance

Én lytter i stedet for én klientkomponent per knapp

I det øyeblikket du legger klikk-analyse på en komponent, blir den en klientkomponent som sender med JavaScript. Gjør det på tvers av et helt nettsted, og sporingen alene blåser opp bundelen din. Her er alternativet som har ligget i plattformen fra tidenes morgen: én delegert lytter, deklarative data-attributter og komponenter som forblir ren, tjenerrendret HTML.

28. juli 202610 min lesing
Les artikkelen
CSSHTMLAccordionFrontendPerformance

En jevn trekkspillmeny helt uten JavaScript

Alle griper etter React-state og en høydemålende hook for å bygge en trekkspillmeny. Nettleseren har levert en innebygd variant i årevis — og fra og med 2024 animeres den åpen og lukket med ren CSS. Her er hele teknikken: details[name], ::details-content, interpolate-size, og den ene egenskapen som gjør at også lukkingen animeres.

28. juli 20269 min lesing
Les artikkelen
JavaScriptWebThird-Party ScriptsFrontendPatterns

Fang en tredjepartsverdi i det den lander på window

Et skript du ikke kontrollerer skriver resultatet sitt til en window-global på et tidspunkt du ikke kan forutsi. Det meste av koden kjører om kapp med det via et timeout eller sløser med main thread ved polling. Her er accessor-property-trikset som gjør skrivingen om til en hendelse — pluss getteren du ikke må glemme, og hvordan du kan erstatte verdien helt.

27. juli 20269 min lesing
Les artikkelen
CSSContainer QueriesTypographyFrontendPerformance

Tilpass tekst til containeren med ren CSS — uten JavaScript

Alle skriver en JavaScript-hook som krymper font-size til teksten får plass i en container. Her er et fullt fungerende alternativ helt uten JS — med container query-enheter, clamp() og språkbevisst orddeling, inkludert kaskadefellen som får folk til å gi opp.

24. juli 202611 min lesing
Les artikkelen
Next.jsPerformanceCode SplittingTurbopackReact Server Components

next/dynamic redder deg ikke: Hvorfor CMS-drevne Next.js-sider sender hver eneste chunk

Våre CMS-drevne Next.js-sider sendte alle ~100 seksjonskomponentene på hver eneste route — til tross for lærebokriktig bruk av next/dynamic. Vi uttømte alle fikser på bundler-nivå (direkte import(), oppdeling i filer, Turbopack-config, webpack splitChunks) før vi fant den egentlige årsaken: nåbarhet, ikke chunking. Kodegenerering ved byggetid + rewrites kuttet first-load JS med 53%.

18. juli 202614 min lesing
Les artikkelen
obsidianmiroautomationtoolsopen-source

Jeg drar boardene mine ut av Miro og inn i Obsidian

Export-knappen i Miro gir deg en PNG eller en PDF — et bilde av dataene, ikke dataene. Hvis boardene dine er load-bearing maps of thinking bygget opp gjennom år, hører de hjemme i Obsidian: editable, searchable, i et lokalt vault. Sånn dro jeg boards ut av Miro via REST API og konverterte til Excalidraw / Obsidian Canvas — med posisjoner, farger, fonts, curved connectors, mindmap nodes — og lærdommen strekker seg lenger enn Miro: enhver SaaS bør møtes med en exit plan FØR du åpner den for første gang.

30. juni 20266 min lesing
Les artikkelen
claude-codeproductivityclidevtools

Claude Code Multi-Profile, v2: en ren XDG-arkitektur

Etter en måned med den gamle alias-baserte tilnærmingen bygde jeg om Claude Code multi-profile-oppsettet mitt til en XDG-kompatibel struktur under ~/.config/claude-profiles/. Den egentlige grunnen var ikke ryddighet — det var oppdagelsen av at ~/.claude.json er en separat fil i home-roten der MCP-servere lagt til via --scope user stille bodde.

Oppdatert 23. juni 20269 min lesing
Les artikkelen
ailearningcareerengineering

Stillheten som AI-en slo av

Er det fortsatt verdt å lære programmering når det finnes AI? Det høylytte svaret er feil fra begge sider. Med evidensgrunnlaget fra 2025–2026 (Nature, Anthropic, AI & Society) er spørsmålet ikke "AI eller ikke", men hvilke ferdigheter du overlater til AI og hvilke du holder for deg selv — og én ting har faktisk endret seg: før tvang virkeligheten deg til å lære gjennom motstand, AI slo det presset stille av.

22. juni 20268 min lesing
Les artikkelen
claude-codeagentsaiprompt-engineeringautomation

Slik skriver du Claude Code-agenter som ikke lyver til deg

To regler for å bygge pålitelige Claude Code-agentpipelines: én agent per spesialisering, og shell-kommandoer i stedet for prompts overalt der svaret må være kvantitativt.

29. mai 20266 min lesing
Les artikkelen
ObsidianClaudeMCPAutomationAI

Hvordan koble Claude Desktop til Obsidian — En reise gjennom 4 MCP-servere

En virkelig historie om å finne en stabil måte å automatisere refaktorering av Obsidian-vault via Claude. Hva som gikk i stykker, hva som fungerte, og hvorfor VaultForge viste seg å være det eneste fungerende alternativet.

3. mai 20269 min lesing
Les artikkelen
physicsphilosophyconsciousnessblack-holescosmology

Svarte hull som rekursive universer: fra fysikk til eksistensens formål

Hva om hvert svart hull er et Big Bang for et nytt univers? En utforskning av rekursiv kosmologi og kognitiv lukking.

17. april 202610 min lesing
Les artikkelen
aicmsweb-developmentopinionworkflow

AI drepte CMS — i hvert fall for enkle nettsider

Hvorfor tradisjonelle innholdshåndteringssystemer blir unødvendige for porteføljer, blogger og landingssider.

17. april 20268 min lesing
Les artikkelen
ObsidianPerplexityMCPAIProductivity

Hvordan koble Perplexity AI til Obsidian via MCP — Notater direkte fra chatten

Sett opp Perplexity Desktop til å lese og skrive til Obsidian-vaultet ditt med MCP filesystem-server. Søk på nettet og lagre i notatene dine i én samtale.

12. april 20265 min lesing
Les artikkelen
Claude CodeAIObsidianAutomationProductivity

Daglig AI-nyhetsdigest med Claude Code CLI og Obsidian — Null avhengigheter

Hvordan jeg bygde en daglig nyhetsforskningsagent med et 6-linjers bash-skript, Claude Code headless-modus og macOS launchd.

12. april 20267 min lesing
Les artikkelen
next.jsreact-19dark-modezustandperformance

Next.js Dark Mode uten blinking eller React 19-advarsler

Hvordan erstatte next-themes med Zustand + useServerInsertedHTML for flimmerfri mørk modus i Next.js 15+.

11. april 20268 min lesing
Les artikkelen
Next.jsCSSPerformanceTurbopackSCSS

Hvordan jeg eliminerte 94 render-blokkerende CSS-filer i Next.js 16 med en dårlig dokumentert Turbopack-funksjon

Etter dager med å prøve hver tilnærming — fra experimental.inlineCss til MutationObserver-hacks — oppdaget jeg Turbopack Import Attributes som løser problemet med render-blokkerende CSS i Next.js App Router.

8. april 202612 min lesing
Les artikkelen