Fire fejl dræbte tekstmarkering på iOS — og hver af dem skjulte den næste
En Lexical-editor i en vaul-drawer virkede overalt undtagen på en rigtig iPhone: markeringshåndtagene kunne ikke trækkes, scrollingen låste ved kanterne, værktøjslinjen dykkede under tastaturet. Gætteri fiksede ingenting, for der var ingen enkelt skyldig — der var fire uafhængige, og hver maskerede den næste. Det, der virkede, var en bisektionsrig: samme skelet med én kontakt per mistænkt, testet på en fysisk enhed. Her er hele jagten — href der forgifter markeringen, vauls drag-handlers, vores egen tap-focus, en container der flytter sig under fingeren — plus obduktionen af scroll-låsen og de tre engangsskrivninger af scrollTop, der fik rubber-band til at føles naturligt, inklusive at fange et swipe midt i hoppet.
En kaskade af agenter: terminalen vælger den, der faktisk virker
Da Claude delvist gik ned, og nogle modeller holdt op med at svare, forsøgte jeg at skifte til Gemini — og opdagede, at min reserve havde været i stykker i månedsvis. Sådan bygger du en, der faktisk holder.
system-droid: en vagthund der selv tjekker og reparerer mine systemer
Mine lokale tjenester døde altid lydløst — morgenrapporten udeblev, tokens udløb, backuppen frøs. Så jeg byggede en launchd-droid, der tjekker alt hver anden time, reparerer det, der trygt kan rettes, via en Claude-agent og kun skriver til mig, når der virkelig er brug for et menneske.
En statisk side, der i hemmelighed er en A/B-test
En A/B-test bygges som regel sådan, at siden falder væk fra CDN'en til en rendering per forespørgsel. Sådan behøver det ikke være. Hold hver variant fuldt statisk og lad en proxy (Next.js' omdøbte middleware) løse tildelingen via en eksperimentplatform, ud fra et stabilt device-id — og skriv kun om, når den besøgende ikke er i kontrolgruppen. URL'en ændres aldrig, CDN'en cacher stadig, og den almindelige vej koster ingenting.
Deploy til Vercel fra CI, når den der committer, ikke er teammedlem
Flyt et repo ind i en GitHub-organisation, og Vercel begynder stille at blokere dine deploys: committen «kunne ikke matches med et teammedlem». Sådan deployer jeg i stedet fra GitHub Actions med Vercel-CLI'en — mine commits tæller stadig i min egen GitHub-graf, dashboardet viser stadig, hvem der pushede, og jeg køber ikke en plads pr. bidragyder.
Next.js Memory Leak: Fetch + Standalone-tilstand — 2 år uden fix
Next.js patcher den globale fetch og tilføjer et cache-lag, der lækker hukommelse ved hver anmodning. I Docker/K8s fører dette til OOM-nedbrud hver par timer. Buggen har eksisteret siden Next.js 14 og er stadig uløst i 16.2.x.
Flere Claude Code-konti på én enhed
Sådan bruger du to (eller flere) Claude Code-konti parallelt — personlig og virksomhed — med fuld isolation ved hjælp af én enkelt miljøvariabel.
Lazy-load blogindhold i SolidStart uden at miste SSG
Din blog leverer sandsynligvis hvert indlægs brødtekst i ét enkelt bundle — mit var vokset til 2,88 MB og blev hentet selv på indekssiden, hvor du kun har brug for titlerne. Sådan delte jeg hvert indlægs tekst op i en lazy-chunk, der indlæses efter behov, mens hver side forbliver fuldt serverrenderet for SEO.
CRAFT: en metode til at bruge AI uden at miste sit faglige fodfæste
At udpege et problem uden at give en løsning sår kun uro. Efter indlægget om AI-drevet afkvalificering kommer her recepten: CRAFT — fem principper (Challenge First, Review Adversarially, Ask Why Not What, Friction on Purpose, Test Your Understanding) under ét aksiomet: AI gør det, du allerede mestrer; du gør det, du stadig er ved at lære. En praktisk og lettilgængelig metode til at bruge AI hver dag uden stille at miste sine kompetencer.
Én listener i stedet for én klientkomponent pr. knap
I det øjeblik du tilføjer klik-analytics til en komponent, bliver den til en klientkomponent, der sender JavaScript med. Gør det på tværs af et helt website, og tracking alene puster dit bundle op. Her er alternativet, der har ligget i platformen hele tiden: én delegeret listener, deklarative data-attributter og komponenter, der forbliver ren server-renderet HTML.
En jævn accordion helt uden JavaScript
Alle griber efter React-state og en højdemålende hook for at bygge en accordion. Browseren har haft en indbygget af slagsen i årevis — og siden 2024 animerer den både åbning og lukning med ren CSS. Her er hele teknikken: details[name], ::details-content, interpolate-size og den ene egenskab, der også får lukningen til at animere.
Fang en tredjeparts-værdi i det øjeblik den lander på window
Et script du ikke kontrollerer, skriver sit resultat til en global variabel på window på et tidspunkt du ikke kan forudsige. Det meste kode kører om kap med det via en timeout eller spilder main thread på polling. Her er accessor-property-tricket, der gør skrivningen til en event — plus den getter du ikke må glemme, og hvordan du helt kan substituere værdien.
Tilpas tekst til dens container med ren CSS — uden JavaScript
Alle skriver en JavaScript-hook, der skrumper font-size, indtil teksten passer i en container. Her er et fuldt fungerende alternativ helt uden JS — med container query-enheder, clamp() og sprogbevidst orddeling, inklusive kaskadefælden, der får folk til at give op.
next/dynamic redder dig ikke: Hvorfor CMS-drevne Next.js-sider sender hver eneste chunk
Vores CMS-drevne Next.js-sider sendte alle ~100 sektionskomponenter på hver rute — på trods af lærebogsagtig brug af next/dynamic. Vi udtømte alle bundler-niveau-fixes (direkte import(), fildeling, Turbopack-konfiguration, webpack splitChunks), før vi fandt den egentlige årsag: nåbarhed, ikke chunking. Codegen på build-tidspunkt + rewrites skar first-load JS med 53%.
Jeg trækker mine boards ud af Miro og ind i Obsidian
Export-knappen i Miro giver dig en PNG eller en PDF — et foto af dataene, ikke dataene selv. Hvis dine boards er load-bearing maps of thinking bygget op gennem år, hører de hjemme i Obsidian: editable, searchable, i et lokalt vault. Sådan trak jeg boards ud af Miro via REST API og konverterede til Excalidraw / Obsidian Canvas — med positioner, farver, fonts, curved connectors, mindmap nodes — og lektien rækker længere end Miro: enhver SaaS skal mødes med en exit plan FØR du åbner den første gang.
Claude Code Multi-Profile, v2: en ren XDG-arkitektur
Efter en måned med den gamle alias-baserede tilgang byggede jeg mit Claude Code multi-profile-setup om til en XDG-kompatibel struktur under ~/.config/claude-profiles/. Den egentlige grund var ikke ryddelighed — det var opdagelsen af, at ~/.claude.json er en separat fil i home-roden, hvor MCP-serverne tilføjet via --scope user stille boede.
Stilheden, som AI'en slukkede
Er det stadig værd at lære programmering, når der findes AI? Det højlydte svar er forkert fra begge sider. Med evidensgrundlaget fra 2025–2026 (Nature, Anthropic, AI & Society) er spørgsmålet ikke "AI eller ej", men hvilke færdigheder du overlader til AI, og hvilke du beholder selv — og én ting har faktisk ændret sig: før tvang virkeligheden dig til at lære gennem modstand, AI slukkede stille det pres.
Sådan skriver du Claude Code-agenter, der ikke lyver for dig
To regler for at bygge pålidelige Claude Code-agentpipelines: én agent pr. specialisering, og shell-kommandoer i stedet for prompts overalt, hvor kvantitative svar er involveret.
Sådan forbinder du Claude Desktop med Obsidian — En rejse gennem 4 MCP-servere
En virkelig historie om at finde en stabil måde at automatisere refaktorering af Obsidian-vault via Claude. Hvad der gik i stykker, hvad der virkede, og hvorfor VaultForge viste sig at være den eneste fungerende mulighed.
Sorte huller som rekursive universer: fra fysik til eksistensens formål
Hvad hvis hvert sort hul er et Big Bang for et nyt univers? En udforskning af rekursiv kosmologi og kognitiv lukning.
AI dræbte CMS — i hvert fald for simple hjemmesider
Hvorfor traditionelle indholdsstyringssystemer bliver unødvendige for portfolioer, blogs og landingssider.
Sådan forbinder du Perplexity AI med Obsidian via MCP — Noter direkte fra chatten
Opsæt Perplexity Desktop til at læse og skrive dit Obsidian-vault ved hjælp af MCP filesystem-server. Søg på nettet og gem i dine noter i én samtale.
Daglig AI-nyhedsdigest med Claude Code CLI og Obsidian — Nul afhængigheder
Hvordan jeg byggede en daglig nyhedsforskningsagent med et 6-linjers bash-script, Claude Code headless-tilstand og macOS launchd.
Next.js Dark Mode uden blink eller React 19-advarsler
Sådan erstattes next-themes med Zustand + useServerInsertedHTML til flimmerfri mørk tilstand i Next.js 15+.
Hvordan jeg eliminerede 94 render-blokerende CSS-filer i Next.js 16 med en dårligt dokumenteret Turbopack-funktion
Efter dage med at prøve enhver tilgang — fra experimental.inlineCss til MutationObserver-hacks — opdagede jeg Turbopack Import Attributes, der løser problemet med render-blokerende CSS i Next.js App Router.