Skip to main content

Blog

Om webudvikling, ydeevne, værktøjer — og en gang imellem noget større.

iOSSafariWebKitLexicalcontenteditableDebugging

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.

5. september 202615 min læsning
Læs artiklen
Claude CodeAICLIBashAutomationResilience

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.

29. august 20269 min læsning
Læs artiklen
Claude CodeAIAutomationMonitoringlaunchdResilience

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.

17. august 202610 min læsning
Læs artiklen
Next.jsA/B TestingProxyPerformanceSSG

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.

14. august 20268 min læsning
Læs artiklen
VercelGitHub ActionsCI/CDDeploymentMonorepo

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.

10. august 20268 min læsning
Læs artiklen
Next.jsMemory LeakDockerAWS LambdaNode.js

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.

Opdateret 10. august 202610 min læsning
Læs artiklen
claude-codeproductivityclidevtools

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.

Opdateret 9. august 20264 min læsning
Læs artiklen
SolidJSSolidStartPerformanceSSGCode Splitting

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.

5. august 20268 min læsning
Læs artiklen
ailearningcareermethodology

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.

Opdateret 5. august 20266 min læsning
Læs artiklen
JavaScriptAnalyticsEvent DelegationServer ComponentsPerformance

É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.

28. juli 202610 min læsning
Læs artiklen
CSSHTMLAccordionFrontendPerformance

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.

28. juli 20269 min læsning
Læs artiklen
JavaScriptWebThird-Party ScriptsFrontendPatterns

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.

27. juli 20269 min læsning
Læs artiklen
CSSContainer QueriesTypographyFrontendPerformance

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.

24. juli 202611 min læsning
Læs artiklen
Next.jsPerformanceCode SplittingTurbopackReact Server Components

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%.

18. juli 202614 min læsning
Læs artiklen
obsidianmiroautomationtoolsopen-source

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.

30. juni 20266 min læsning
Læs artiklen
claude-codeproductivityclidevtools

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.

Opdateret 23. juni 20269 min læsning
Læs artiklen
ailearningcareerengineering

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.

22. juni 20268 min læsning
Læs artiklen
claude-codeagentsaiprompt-engineeringautomation

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.

29. maj 20266 min læsning
Læs artiklen
ObsidianClaudeMCPAutomationAI

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.

3. maj 20269 min læsning
Læs artiklen
physicsphilosophyconsciousnessblack-holescosmology

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.

17. april 202610 min læsning
Læs artiklen
aicmsweb-developmentopinionworkflow

AI dræbte CMS — i hvert fald for simple hjemmesider

Hvorfor traditionelle indholdsstyringssystemer bliver unødvendige for portfolioer, blogs og landingssider.

17. april 20268 min læsning
Læs artiklen
ObsidianPerplexityMCPAIProductivity

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.

12. april 20265 min læsning
Læs artiklen
Claude CodeAIObsidianAutomationProductivity

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.

12. april 20267 min læsning
Læs artiklen
next.jsreact-19dark-modezustandperformance

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+.

11. april 20268 min læsning
Læs artiklen
Next.jsCSSPerformanceTurbopackSCSS

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.

8. april 202612 min læsning
Læs artiklen