Skip to main content

05 — Texter

Blogg

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

06 okt. 2026Deploya till Vercel från en git pre-push-hook: org-repo, Hobby-plan, inga CI-hemligheterVercels Git-integration vägrar koppla ett privat repo som ägs av en GitHub-organisation på Hobby-planen, och CI-vägen kräver repo-hemligheter som du kanske inte får lägga till. Här är det lättare alternativet: en lokal pre-push-hook som deployar exakt den pushade committen med Vercels CLI, medan alla fortsätter pusha under sitt eget namn.Vercel · Git Hooks · CI/CD
7 min läsning
06 okt. 2026UppdateradDeploya till Vercel från CI när den som committar inte är teammedlemFlytta 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.Vercel · GitHub Actions · CI/CD
8 min läsning
05 sep. 2026Fyra buggar dödade textmarkeringen på iOS — och varje bugg gömde nästaEn 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.iOS · Safari · WebKit
15 min läsning
29 aug. 2026En kaskad av agenter: terminalen väljer den som faktiskt leverNä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.Claude Code · AI · CLI
9 min läsning
17 aug. 2026system-droid: en vakthund som själv kontrollerar och lagar mina systemMina 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.Claude Code · AI · Automation
10 min läsning
14 aug. 2026En statisk sida som i hemlighet är ett A/B-testEtt 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.Next.js · A/B Testing · Proxy
8 min läsning
10 aug. 2026UppdateradNext.js Memory Leak: Fetch + Standalone-läge — 2 år utan fixNext.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.Next.js · Memory Leak · Docker
10 min läsning
09 aug. 2026UppdateradFlera Claude Code-konton på en enhetHur du använder två (eller fler) Claude Code-konton parallellt — personligt och företag — med fullständig isolation med en enda miljövariabel.claude-code · productivity · cli
4 min läsning
05 aug. 2026Ladda blogginnehåll lazy i SolidStart utan att förlora SSGDin 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.SolidJS · SolidStart · Performance
8 min läsning
05 aug. 2026UppdateradCRAFT: en metod för att använda AI utan att tappa skärpanAtt 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.ai · learning · career
6 min läsning
28 juli 2026En lyssnare i stället för en klientkomponent per knappI 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.JavaScript · Analytics · Event Delegation
10 min läsning
28 juli 2026En mjuk dragspelsmeny helt utan JavaScriptAlla 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.CSS · HTML · Accordion
9 min läsning
27 juli 2026Fånga ett tredjepartsvärde i samma sekund det landar på windowEtt 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.JavaScript · Web · Third-Party Scripts
9 min läsning
24 juli 2026Anpassa text till sin container med ren CSS — utan JavaScriptAlla 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.CSS · Container Queries · Typography
11 min läsning
18 juli 2026next/dynamic räddar dig inte: därför levererar CMS-drivna Next.js-sidor varje chunkVå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.Next.js · Performance · Code Splitting
14 min läsning
30 juni 2026Jag drar ut mina boards ur Miro och in i ObsidianExport-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.obsidian · miro · automation
6 min läsning
23 juni 2026UppdateradClaude Code Multi-Profile, v2: en ren XDG-arkitekturEfter 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.claude-code · productivity · cli
9 min läsning
22 juni 2026Tystnaden 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.ai · learning · career
8 min läsning
29 maj 2026Hur man skriver Claude Code-agenter som inte ljuger för digTvå 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.claude-code · agents · ai
6 min läsning
03 maj 2026Hur man ansluter Claude Desktop till Obsidian — En resa genom 4 MCP-servrarEn 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.Obsidian · Claude · MCP
9 min läsning
17 apr. 2026Svarta hål som rekursiva universum: från fysik till existensens syfteTänk om varje svart hål är en Big Bang för ett nytt universum? En utforskning av rekursiv kosmologi och kognitiv stängning.physics · philosophy · consciousness
10 min läsning
17 apr. 2026AI dödade CMS — åtminstone för enkla webbplatserVarför traditionella innehållshanteringssystem blir onödiga för portfolios, bloggar och landningssidor.ai · cms · web-development
8 min läsning
12 apr. 2026Hur man ansluter Perplexity AI till Obsidian via MCP — Anteckningar direkt från chattenKonfigurera 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.Obsidian · Perplexity · MCP
5 min läsning
12 apr. 2026Daglig AI-nyhetsdigest med Claude Code CLI och Obsidian — Noll beroendenHur jag byggde en daglig nyhetsforskningsagent med ett 6-radigt bash-skript, Claude Code headless-läge och macOS launchd.Claude Code · AI · Obsidian
7 min läsning
11 apr. 2026Next.js Dark Mode utan blinkning eller React 19-varningarHur man ersätter next-themes med Zustand + useServerInsertedHTML för flimmerfritt mörkt läge i Next.js 15+.next.js · react-19 · dark-mode
8 min läsning
08 apr. 2026Hur jag eliminerade 94 renderingsblockerande CSS-filer i Next.js 16 med en dåligt dokumenterad Turbopack-funktionEfter 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 · CSS · Performance
12 min läsning

27 poster