Skip to main content

05 — Tekster

Blog

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

06. okt. 2026Deploy til Vercel fra en git pre-push-hook: org-repo, Hobby-plan, ingen CI-secretsPå Hobby-planen afviser Vercels Git-integration et privat repo, der ejes af en GitHub-organisation, og CI-vejen kræver repo-secrets, som du måske ikke må tilføje. Her er den lettere løsning: en lokal pre-push-hook, der deployer præcis den pushede commit med Vercel-CLI'en, mens alle fortsat pusher under eget navn.Vercel · Git Hooks · CI/CD
7 min læsning
06. okt. 2026OpdateretDeploy til Vercel fra CI, når den der committer, ikke er teammedlemFlyt 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.Vercel · GitHub Actions · CI/CD
8 min læsning
05. sep. 2026Fire fejl dræbte tekstmarkering på iOS — og hver af dem skjulte den næsteEn 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.iOS · Safari · WebKit
15 min læsning
29. aug. 2026En kaskade af agenter: terminalen vælger den, der faktisk virkerDa 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.Claude Code · AI · CLI
9 min læsning
17. aug. 2026system-droid: en vagthund der selv tjekker og reparerer mine systemerMine 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.Claude Code · AI · Automation
10 min læsning
14. aug. 2026En statisk side, der i hemmelighed er en A/B-testEn 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.Next.js · A/B Testing · Proxy
8 min læsning
10. aug. 2026OpdateretNext.js Memory Leak: Fetch + Standalone-tilstand — 2 år uden fixNext.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.Next.js · Memory Leak · Docker
10 min læsning
09. aug. 2026OpdateretFlere Claude Code-konti på én enhedSådan bruger du to (eller flere) Claude Code-konti parallelt — personlig og virksomhed — med fuld isolation ved hjælp af én enkelt miljøvariabel.claude-code · productivity · cli
4 min læsning
05. aug. 2026Lazy-load blogindhold i SolidStart uden at miste SSGDin 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.SolidJS · SolidStart · Performance
8 min læsning
05. aug. 2026OpdateretCRAFT: en metode til at bruge AI uden at miste sit faglige fodfæsteAt 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.ai · learning · career
6 min læsning
28. jul. 2026Én listener i stedet for én klientkomponent pr. knapI 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.JavaScript · Analytics · Event Delegation
10 min læsning
28. jul. 2026En jævn accordion helt uden JavaScriptAlle 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.CSS · HTML · Accordion
9 min læsning
27. jul. 2026Fang en tredjeparts-værdi i det øjeblik den lander på windowEt 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.JavaScript · Web · Third-Party Scripts
9 min læsning
24. jul. 2026Tilpas tekst til dens container med ren CSS — uden JavaScriptAlle 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.CSS · Container Queries · Typography
11 min læsning
18. jul. 2026next/dynamic redder dig ikke: Hvorfor CMS-drevne Next.js-sider sender hver eneste chunkVores 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%.Next.js · Performance · Code Splitting
14 min læsning
30. jun. 2026Jeg trækker mine boards ud af Miro og ind i ObsidianExport-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.obsidian · miro · automation
6 min læsning
23. jun. 2026OpdateretClaude Code Multi-Profile, v2: en ren XDG-arkitekturEfter 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.claude-code · productivity · cli
9 min læsning
22. jun. 2026Stilheden, som AI'en slukkedeEr 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.ai · learning · career
8 min læsning
29. maj 2026Sådan skriver du Claude Code-agenter, der ikke lyver for digTo 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.claude-code · agents · ai
6 min læsning
03. maj 2026Sådan forbinder du Claude Desktop med Obsidian — En rejse gennem 4 MCP-servereEn 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.Obsidian · Claude · MCP
9 min læsning
17. apr. 2026Sorte huller som rekursive universer: fra fysik til eksistensens formålHvad hvis hvert sort hul er et Big Bang for et nyt univers? En udforskning af rekursiv kosmologi og kognitiv lukning.physics · philosophy · consciousness
10 min læsning
17. apr. 2026AI dræbte CMS — i hvert fald for simple hjemmesiderHvorfor traditionelle indholdsstyringssystemer bliver unødvendige for portfolioer, blogs og landingssider.ai · cms · web-development
8 min læsning
12. apr. 2026Sådan forbinder du Perplexity AI med Obsidian via MCP — Noter direkte fra chattenOpsæ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.Obsidian · Perplexity · MCP
5 min læsning
12. apr. 2026Daglig AI-nyhedsdigest med Claude Code CLI og Obsidian — Nul afhængighederHvordan jeg byggede en daglig nyhedsforskningsagent med et 6-linjers bash-script, Claude Code headless-tilstand og macOS launchd.Claude Code · AI · Obsidian
7 min læsning
11. apr. 2026Next.js Dark Mode uden blink eller React 19-advarslerSådan erstattes next-themes med Zustand + useServerInsertedHTML til flimmerfri mørk tilstand i Next.js 15+.next.js · react-19 · dark-mode
8 min læsning
08. apr. 2026Hvordan jeg eliminerede 94 render-blokerende CSS-filer i Next.js 16 med en dårligt dokumenteret Turbopack-funktionEfter 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.Next.js · CSS · Performance
12 min læsning

27 poster