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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
AI dödade CMS — åtminstone för enkla webbplatser
Varför traditionella innehållshanteringssystem blir onödiga för portfolios, bloggar och landningssidor.
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.
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.
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+.
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.
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.