Skip to main content

Blogg

Om webbutveckling, prestanda, verktyg — och då och då något större.

JavaScriptAnalyticsEvent DelegationServer ComponentsPerformance

En lyssnare i stället för en klientkomponent per knapp

I samma ögonblick som du lägger till klick-analys på en komponent blir den en klientkomponent som skickar med JavaScript. Gör det över en hel webbplats och enbart spårningen sväller upp din bundle. Här är alternativet som funnits i plattformen sedan urminnes tider: en delegerad lyssnare, deklarativa data-attribut och komponenter som förblir ren serverrenderad HTML.

28 juli 202610 min läsning
Läs artikeln
CSSHTMLAccordionFrontendPerformance

En mjuk dragspelsmeny helt utan JavaScript

Alla griper efter React-state och en höjdmätande hook för att bygga en dragspelsmeny. Webbläsaren har levererat en inbyggd variant i åratal — och sedan 2024 animeras den öppen och stängd med ren CSS. Här är hela tekniken: details[name], ::details-content, interpolate-size, och den enda egenskap som gör att även stängningen animeras.

28 juli 20269 min läsning
Läs artikeln
JavaScriptWebThird-Party ScriptsFrontendPatterns

Fånga ett tredjepartsvärde i samma sekund det landar på window

Ett skript du inte kontrollerar skriver sitt resultat till en global variabel på window vid en tidpunkt du inte kan förutsäga. Det mesta av koden tävlar mot det med en timeout eller belastar main thread med onödig polling. Här är accessor-property-tricket som förvandlar skrivningen till en händelse — plus gettern du aldrig får glömma, och hur du helt kan ersätta värdet.

27 juli 20269 min läsning
Läs artikeln
CSSContainer QueriesTypographyFrontendPerformance

Anpassa text till sin container med ren CSS — utan JavaScript

Alla skriver en JavaScript-hook som krymper font-size tills texten får plats i en container. Här är ett fullt fungerande alternativ helt utan JS — med container query-enheter, clamp() och språkmedveten avstavning, inklusive kaskadfällan som får folk att ge upp.

24 juli 202611 min läsning
Läs artikeln
Next.jsPerformanceCode SplittingTurbopackReact Server Components

next/dynamic räddar dig inte: därför levererar CMS-drivna Next.js-sidor varje chunk

Våra CMS-drivna Next.js-sidor levererade alla ~100 sektionskomponenter på varje route — trots läroboksmässig användning av next/dynamic. Vi uttömde varenda fix på bundler-nivå (direkt import(), filuppdelning, Turbopack-konfiguration, webpack splitChunks) innan vi hittade den verkliga orsaken: nåbarhet, inte chunkning. Kodgenerering vid byggtid + rewrites skar bort 53 % av first-load JS.

18 juli 202614 min läsning
Läs artikeln
obsidianmiroautomationtoolsopen-source

Jag drar ut mina boards ur Miro och in i Obsidian

Export-knappen i Miro ger dig en PNG eller en PDF — ett foto av datan, inte datan. Om dina boards är load-bearing maps of thinking byggda över år hör de hemma i Obsidian: editable, searchable, i ett lokalt vault. Så här drog jag ut boards ur Miro via REST API och konverterade till Excalidraw / Obsidian Canvas — med positioner, färger, fonts, curved connectors, mindmap nodes — och lärdomen sträcker sig längre än Miro: varje SaaS bör mötas med en exit plan INNAN du öppnar den första gången.

30 juni 20266 min läsning
Läs artikeln
ailearningcareermethodology

CRAFT: en metod för att använda AI utan att tappa skärpan

En diagnos utan botemedel är bara ångest. Efter inlägget om AI-driven kompetensurhålkning kommer nu receptet: CRAFT — fem principer (Challenge First, Review Adversarially, Ask Why Not What, Friction on Purpose, Test Your Understanding) under ett enda axiom: AI gör det du redan behärskar, du gör det du fortfarande håller på att lära dig. En praktisk och lättminnbar metod för att använda AI varje dag utan att tyst förlora kompetens.

23 juni 20266 min läsning
Läs artikeln
ailearningcareerengineering

Tystnaden som AI:n stängde av

Är det fortfarande värt att lära sig programmera när det finns AI? Det högljudda svaret är fel från båda håll. Med evidensunderlaget från 2025–2026 (Nature, Anthropic, AI & Society) är frågan inte "AI eller inte", utan vilka färdigheter du överlåter till AI och vilka du behåller själv — och en sak har faktiskt förändrats: tidigare tvingade verkligheten dig att lära dig genom motstånd, AI stängde tyst av det trycket.

22 juni 20268 min läsning
Läs artikeln
claude-codeproductivityclidevtools

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

Efter en månad med det gamla alias-baserade upplägget byggde jag om mitt multi-profile-setup för Claude Code till en XDG-kompatibel struktur under ~/.config/claude-profiles/. Den verkliga orsaken var inte snyggheten — det var att jag upptäckte att ~/.claude.json är en separat fil i home-roten där MCP-servrarna som lagts till via --scope user tyst levde sitt eget liv.

13 juni 20269 min läsning
Läs artikeln
claude-codeagentsaiprompt-engineeringautomation

Hur man skriver Claude Code-agenter som inte ljuger för dig

Två regler för att bygga tillförlitliga Claude Code-agentpipelines: en agent per specialisering och shell-kommandon istället för prompts överallt där kvantitativa svar är inblandade.

29 maj 20266 min läsning
Läs artikeln
claude-codeproductivityclidevtools

Flera Claude Code-konton på en enhet

Hur du använder två (eller fler) Claude Code-konton parallellt — personligt och företag — med fullständig isolation med en enda miljövariabel.

5 maj 20264 min läsning
Läs artikeln
ObsidianClaudeMCPAutomationAI

Hur man ansluter Claude Desktop till Obsidian — En resa genom 4 MCP-servrar

En verklig historia om att hitta ett stabilt sätt att automatisera refaktorering av Obsidian-vault via Claude. Vad som gick sönder, vad som fungerade, och varför VaultForge visade sig vara det enda fungerande alternativet.

3 maj 20269 min läsning
Läs artikeln
physicsphilosophyconsciousnessblack-holescosmology

Svarta hål som rekursiva universum: från fysik till existensens syfte

Tänk om varje svart hål är en Big Bang för ett nytt universum? En utforskning av rekursiv kosmologi och kognitiv stängning.

17 april 202610 min läsning
Läs artikeln
aicmsweb-developmentopinionworkflow

AI dödade CMS — åtminstone för enkla webbplatser

Varför traditionella innehållshanteringssystem blir onödiga för portfolios, bloggar och landningssidor.

17 april 20268 min läsning
Läs artikeln
ObsidianPerplexityMCPAIProductivity

Hur man ansluter Perplexity AI till Obsidian via MCP — Anteckningar direkt från chatten

Konfigurera Perplexity Desktop för att läsa och skriva ditt Obsidian-vault med MCP filesystem-server. Sök på webben och spara i dina anteckningar i en konversation.

12 april 20265 min läsning
Läs artikeln
Claude CodeAIObsidianAutomationProductivity

Daglig AI-nyhetsdigest med Claude Code CLI och Obsidian — Noll beroenden

Hur jag byggde en daglig nyhetsforskningsagent med ett 6-radigt bash-skript, Claude Code headless-läge och macOS launchd.

12 april 20267 min läsning
Läs artikeln
next.jsreact-19dark-modezustandperformance

Next.js Dark Mode utan blinkning eller React 19-varningar

Hur man ersätter next-themes med Zustand + useServerInsertedHTML för flimmerfritt mörkt läge i Next.js 15+.

11 april 20268 min läsning
Läs artikeln
Next.jsCSSPerformanceTurbopackSCSS

Hur jag eliminerade 94 renderingsblockerande CSS-filer i Next.js 16 med en dåligt dokumenterad Turbopack-funktion

Efter dagar av att prova varje tillvägagångssätt — från experimental.inlineCss till MutationObserver-hack — upptäckte jag Turbopack Import Attributes som löser problemet med renderingsblockerande CSS i Next.js App Router.

8 april 202612 min läsning
Läs artikeln
Next.jsMemory LeakDockerAWS LambdaNode.js

Next.js Memory Leak: Fetch + Standalone-läge — 2 år utan fix

Next.js patchar den globala fetch och lägger till ett cache-lager som läcker minne vid varje förfrågan. I Docker/K8s leder detta till OOM-krascher var några timmar. Buggen har funnits sedan Next.js 14 och är fortfarande olöst i 16.2.x.

19 mars 202610 min läsning
Läs artikeln