Fyra buggar dödade textmarkeringen på iOS — och varje bugg gömde nästa
En Lexical-editor i en vaul-drawer fungerade överallt utom på en riktig iPhone: markeringshandtagen gick inte att dra, skrollningen låste sig vid kanterna, verktygsfältet dök under tangentbordet. Att gissa hjälpte inte, för det fanns ingen ensam skyldig — det var fyra oberoende, och var och en maskerade nästa. Det som fungerade var en bisektionsrigg: samma skelett med en strömbrytare per misstänkt, testad på en fysisk enhet. Här är hela jakten — href som förgiftar markeringen, vauls drag-hanterare, vår egen tap-focus, en container som rör sig under fingret — plus obduktionen av skroll-låset och de tre engångsskrivningarna av scrollTop som fick rubber-band att kännas nativt, inklusive att fånga ett svep mitt i studsen.
En kaskad av agenter: terminalen väljer den som faktiskt lever
När Claude delvis låg nere och vissa modeller slutade svara försökte jag byta till Gemini — och upptäckte att min reserv varit trasig i månader. Så här bygger man en som faktiskt håller.
system-droid: en vakthund som själv kontrollerar och lagar mina system
Mina lokala tjänster dog alltid ljudlöst — morgonrapporten kom inte, tokens gick ut, backupen frös. Så jag byggde en launchd-droid som kontrollerar allt varannan timme, lagar det som riskfritt kan lagas via en Claude-agent och skriver till mig bara när en människa verkligen behövs.
En statisk sida som i hemlighet är ett A/B-test
Ett A/B-test byggs oftast så att sidan faller bort från CDN:en till en rendering per request. Så behöver det inte vara. Håll varje variant helt statisk och låt en proxy (Next.js omdöpta middleware) lösa tilldelningen via en experimentplattform, utifrån ett stabilt device-id — och skriv om bara när besökaren inte är i kontrollgruppen. URL:en ändras aldrig, CDN:en cachar fortfarande, och den vanliga vägen kostar ingenting.
Deploya till Vercel från CI när den som committar inte är teammedlem
Flytta ett repo till en GitHub-organisation och Vercel börjar tyst blockera dina deployer: committen ”kunde inte matchas mot en teammedlem”. Så här deployar jag i stället från GitHub Actions med Vercels CLI — mina committar räknas fortfarande i min egen GitHub-graf, dashboarden visar fortfarande vem som pushade, och jag köper inte en plats per bidragsgivare.
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.
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.
Ladda blogginnehåll lazy i SolidStart utan att förlora SSG
Din blogg levererar förmodligen varje inläggs brödtext i ett enda bundle — mitt hade vuxit till 2,88 MB och laddades även på indexsidan, där du bara behöver titlarna. Så här delade jag upp varje inläggs text i en lazy-chunk som laddas vid behov, medan varje sida förblir helt serverrenderad för SEO.
CRAFT: en metod för att använda AI utan att tappa skärpan
Att peka ut ett problem utan att ge en lösning sår bara oro. 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.
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.
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.
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.
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.
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.