PageSourceSearch

https://eliasson.me/articles

html eliasson.me collected 2026-10-03 23:19:57 UTC 20,874 bytes, 34 lines download raw bytes

1<!DOCTYPE html><html class="h-full antialiased" lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=16&amp;q=75 16w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=32&amp;q=75 32w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=48&amp;q=75 48w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=64&amp;q=75 64w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=96&amp;q=75 96w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=128&amp;q=75 128w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=256&amp;q=75 256w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=384&amp;q=75 384w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=640&amp;q=75 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=750&amp;q=75 750w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=828&amp;q=75 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=3840&amp;q=75 3840w" imageSizes="2.25rem"/><title>Articles - Johan Eliasson</title><meta name="description" content="All of my long-form thoughts on programming, leadership, product design, and more, collected in chronological order."/><meta name="next-head-count" content="5"/>
1<script>
2  let darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
3
4  updateMode()
5  darkModeMediaQuery.addEventListener('change', updateModeWithoutTransitions)
6  window.addEventListener('storage', updateModeWithoutTransitions)
7
8  function updateMode() {
9    let isSystemDarkMode = darkModeMediaQuery.matches
10    let isDarkMode = window.localStorage.isDarkMode === 'true' || (!('isDarkMode' in window.localStorage) && isSystemDarkMode)
11
12    if (isDarkMode) {
13      document.documentElement.classList.add('dark')
14    } else {
15      document.documentElement.classList.remove('dark')
16    }
17
18    if (isDarkMode === isSystemDarkMode) {
19      delete window.localStorage.isDarkMode
20    }
21  }
22
23  function disableTransitionsTemporarily() {
24    document.documentElement.classList.add('[&_*]:!transition-none')
25    window.setTimeout(() => {
26      document.documentElement.classList.remove('[&_*]:!transition-none')
27    }, 0)
28  }
29
30  function updateModeWithoutTransitions() {
31    disableTransitionsTemporarily()
32    updateMode()
33  }
34</script>
34<link rel="alternate" type="application/rss+xml" href="undefined/rss/feed.xml"/><link rel="alternate" type="application/feed+json" href="undefined/rss/feed.json"/><link rel="preload" href="/_next/static/css/905267a224157097.css" as="style"/><link rel="stylesheet" href="/_next/static/css/905267a224157097.css" data-n-g=""/><noscript data-n-css=""></noscript>
34<script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script>
34<script src="/_next/static/chunks/webpack-59c5c889f52620d6.js" defer=""></script>
34<script src="/_next/static/chunks/framework-8d78bf989db74c8f.js" defer=""></script>
34<script src="/_next/static/chunks/main-2cab5af8f8131229.js" defer=""></script>
34<script src="/_next/static/chunks/pages/_app-3372f64cd9b0c5e4.js" defer=""></script>
34<script src="/_next/static/chunks/pages/articles-9563df84394e99ed.js" defer=""></script>
34<script src="/_next/static/9_ac7XriA5rLzJTsuLUcD/_buildManifest.js" defer=""></script>
34<script src="/_next/static/9_ac7XriA5rLzJTsuLUcD/_ssgManifest.js" defer=""></script>
34</head><body class="flex h-full flex-col bg-zinc-50 dark:bg-black"><div id="__next"><div class="fixed inset-0 flex justify-center sm:px-8"><div class="flex w-full max-w-7xl lg:px-8"><div class="w-full bg-white ring-1 ring-zinc-100 dark:bg-zinc-900 dark:ring-zinc-300/20"></div></div></div><div class="relative"><header class="pointer-events-none relative z-50 flex flex-col" style="height:var(--header-height);margin-bottom:var(--header-mb)"><div class="top-0 z-10 h-16 pt-6" style="position:var(--header-position)"><div class="sm:px-8 top-[var(--header-top,theme(spacing.6))] w-full" style="position:var(--header-inner-position)"><div class="mx-auto max-w-7xl lg:px-8"><div class="relative px-4 sm:px-8 lg:px-12"><div class="mx-auto max-w-2xl lg:max-w-5xl"><div class="relative flex gap-4"><div class="flex flex-1"><div class="h-10 w-10 rounded-full bg-white/90 p-0.5 shadow-lg shadow-zinc-800/5 ring-1 ring-zinc-900/5 backdrop-blur dark:bg-zinc-800/90 dark:ring-white/10"><a aria-label="Home" class="pointer-events-auto" href="/"><img alt="" sizes="2.25rem" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=16&amp;q=75 16w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=32&amp;q=75 32w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=48&amp;q=75 48w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=64&amp;q=75 64w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=96&amp;q=75 96w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=128&amp;q=75 128w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=256&amp;q=75 256w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=384&amp;q=75 384w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=640&amp;q=75 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=750&amp;q=75 750w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=828&amp;q=75 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=3840&amp;q=75 3840w" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fprofile.e5e9a714.jpeg&amp;w=3840&amp;q=75" width="800" height="800" decoding="async" data-nimg="1" class="rounded-full bg-zinc-100 object-cover dark:bg-zinc-800 h-9 w-9" style="color:transparent"/></a></div></div><div class="flex flex-1 justify-end md:justify-center"><div class="pointer-events-auto md:hidden" data-headlessui-state=""><button class="group flex items-center rounded-full bg-white/90 px-4 py-2 text-sm font-medium text-zinc-800 shadow-lg shadow-zinc-800/5 ring-1 ring-zinc-900/5 backdrop-blur dark:bg-zinc-800/90 dark:text-zinc-200 dark:ring-white/10 dark:hover:ring-white/20" type="button" aria-expanded="false" data-headlessui-state="">Menu<svg viewBox="0 0 8 6" aria-hidden="true" class="ml-3 h-auto w-2 stroke-zinc-500 group-hover:stroke-zinc-700 dark:group-hover:stroke-zinc-400"><path d="M1.75 1.75 4 4.25l2.25-2.5" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div><nav class="pointer-events-auto hidden md:block"><ul class="flex rounded-full bg-white/90 px-3 text-sm font-medium text-zinc-800 shadow-lg shadow-zinc-800/5 ring-1 ring-zinc-900/5 backdrop-blur dark:bg-zinc-800/90 dark:text-zinc-200 dark:ring-white/10"><li><a class="relative block px-3 py-2 transition hover:text-blue-500 dark:hover:text-blue-400" href="/">Home</a></li><li><a class="relative block px-3 py-2 transition text-blue-500 dark:text-blue-400" href="/articles">Articles<span class="absolute inset-x-1 -bottom-px h-px bg-gradient-to-r from-blue-500/0 via-blue-500/40 to-blue-500/0 dark:from-blue-400/0 dark:via-blue-400/40 dark:to-blue-400/0"></span></a></li><li><a class="relative block px-3 py-2 transition hover:text-blue-500 dark:hover:text-blue-400" href="/speaking">
34Speaking</a></li></ul></nav></div><div class="flex justify-end md:flex-1"><div class="pointer-events-auto"><button type="button" aria-label="Toggle dark mode" class="group rounded-full bg-white/90 px-3 py-2 shadow-lg shadow-zinc-800/5 ring-1 ring-zinc-900/5 backdrop-blur transition dark:bg-zinc-800/90 dark:ring-white/10 dark:hover:ring-white/20"><svg viewBox="0 0 24 24" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="h-6 w-6 fill-zinc-100 stroke-zinc-500 transition group-hover:fill-zinc-200 group-hover:stroke-zinc-700 dark:hidden [@media(prefers-color-scheme:dark)]:fill-blue-50 [@media(prefers-color-scheme:dark)]:stroke-blue-500 [@media(prefers-color-scheme:dark)]:group-hover:fill-blue-50 [@media(prefers-color-scheme:dark)]:group-hover:stroke-blue-600"><path d="M8 12.25A4.25 4.25 0 0 1 12.25 8v0a4.25 4.25 0 0 1 4.25 4.25v0a4.25 4.25 0 0 1-4.25 4.25v0A4.25 4.25 0 0 1 8 12.25v0Z"></path><path d="M12.25 3v1.5M21.5 12.25H20M18.791 18.791l-1.06-1.06M18.791 5.709l-1.06 1.06M12.25 20v1.5M4.5 12.25H3M6.77 6.77 5.709 5.709M6.77 17.73l-1.061 1.061" fill="none"></path></svg><svg viewBox="0 0 24 24" aria-hidden="true" class="hidden h-6 w-6 fill-zinc-700 stroke-zinc-500 transition dark:block [@media(prefers-color-scheme:dark)]:group-hover:stroke-zinc-400 [@media_not_(prefers-color-scheme:dark)]:fill-blue-400/10 [@media_not_(prefers-color-scheme:dark)]:stroke-blue-500"><path d="M17.25 16.22a6.937 6.937 0 0 1-9.47-9.47 7.451 7.451 0 1 0 9.47 9.47ZM12.75 7C17 7 17 2.75 17 2.75S17 7 21.25 7C17 7 17 11.25 17 11.25S17 7 12.75 7Z" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div></div></div></div></div></div></div></div></header><main><div class="sm:px-8 mt-16 sm:mt-32"><div class="mx-auto max-w-7xl lg:px-8"><div class="relative px-4 sm:px-8 lg:px-12"><div class="mx-auto max-w-2xl lg:max-w-5xl"><header class="max-w-2xl"><h1 class="text-4xl font-bold tracking-tight text-zinc-800 dark:text-zinc-100 sm:text-5xl">Articles</h1><p class="mt-6 text-base text-zinc-600 dark:text-zinc-400"></p></header><div class="mt-16 sm:mt-20"><div class="md:border-l md:border-zinc-100 md:pl-6 md:dark:border-zinc-700/40"><div class="flex max-w-3xl flex-col space-y-16"><article class="md:grid md:grid-cols-4 md:items-baseline"><div class="md:col-span-3 group relative flex flex-col items-start"><h2 class="text-base font-semibold tracking-tight text-zinc-800 dark:text-zinc-100"><div class="absolute -inset-y-6 -inset-x-4 z-0 scale-95 bg-zinc-50 opacity-0 transition group-hover:scale-100 group-hover:opacity-100 dark:bg-zinc-800/50 sm:-inset-x-6 sm:rounded-2xl"></div><a href="/articles/the-artifact-is-no-longer-proof-of-competence"><span class="absolute -inset-y-6 -inset-x-4 z-20 sm:-inset-x-6 sm:rounded-2xl"></span><span class="relative z-10">The Artifact Is No Longer Proof of Competence</span></a></h2><time class="md:hidden relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500 pl-3.5" dateTime="2026-08-17"><span class="absolute inset-y-0 left-0 flex items-center" aria-hidden="true"><span class="h-4 w-0.5 rounded-full bg-zinc-200 dark:bg-zinc-500"></span></span>August 17, 2026</time><p class="relative z-10 mt-2 text-sm text-zinc-600 dark:text-zinc-400">The artifact still matters. It just can&#x27;t carry the whole signal anymore.</p><div aria-hidden="true" class="relative z-10 mt-4 flex items-center text-sm font-medium text-blue-500">Read article<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" class="ml-1 h-4 w-4 stroke-current"><path d="M6.75 5.75 9.25 8l-2.5 2.25" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div><time class="mt-1 hidden md:block relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500" dateTime="2026-08-17">August 17, 2026</time></article><article class="md:grid md:grid-cols-4 md:items-baseline"><div class="md:col-span-3 group relative flex flex-col items-start"><h2 class="text-base font-semibold tracking-tight text-zinc-800 dark:text-zinc-100">
34<div class="absolute -inset-y-6 -inset-x-4 z-0 scale-95 bg-zinc-50 opacity-0 transition group-hover:scale-100 group-hover:opacity-100 dark:bg-zinc-800/50 sm:-inset-x-6 sm:rounded-2xl"></div><a href="/articles/my-brain-doesnt-have-git-worktrees"><span class="absolute -inset-y-6 -inset-x-4 z-20 sm:-inset-x-6 sm:rounded-2xl"></span><span class="relative z-10">My Brain Doesn’t Have Git Worktrees</span></a></h2><time class="md:hidden relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500 pl-3.5" dateTime="2026-08-09"><span class="absolute inset-y-0 left-0 flex items-center" aria-hidden="true"><span class="h-4 w-0.5 rounded-full bg-zinc-200 dark:bg-zinc-500"></span></span>August 9, 2026</time><p class="relative z-10 mt-2 text-sm text-zinc-600 dark:text-zinc-400">How I made it easy to run eight coding agents at once—and discovered that my attention was the next bottleneck.</p><div aria-hidden="true" class="relative z-10 mt-4 flex items-center text-sm font-medium text-blue-500">Read article<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" class="ml-1 h-4 w-4 stroke-current"><path d="M6.75 5.75 9.25 8l-2.5 2.25" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div><time class="mt-1 hidden md:block relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500" dateTime="2026-08-09">August 9, 2026</time></article><article class="md:grid md:grid-cols-4 md:items-baseline"><div class="md:col-span-3 group relative flex flex-col items-start"><h2 class="text-base font-semibold tracking-tight text-zinc-800 dark:text-zinc-100"><div class="absolute -inset-y-6 -inset-x-4 z-0 scale-95 bg-zinc-50 opacity-0 transition group-hover:scale-100 group-hover:opacity-100 dark:bg-zinc-800/50 sm:-inset-x-6 sm:rounded-2xl"></div><a href="/articles/crafting-the-perfect-t3-stack-my-journey-with-kysely-atlas-and-clerk"><span class="absolute -inset-y-6 -inset-x-4 z-20 sm:-inset-x-6 sm:rounded-2xl"></span><span class="relative z-10">Crafting the Perfect T3 Stack: My Journey with Kysely, Atlas, and Clerk</span></a></h2><time class="md:hidden relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500 pl-3.5" dateTime="2023-03-31"><span class="absolute inset-y-0 left-0 flex items-center" aria-hidden="true"><span class="h-4 w-0.5 rounded-full bg-zinc-200 dark:bg-zinc-500"></span></span>March 31, 2023</time><p class="relative z-10 mt-2 text-sm text-zinc-600 dark:text-zinc-400"></p><div aria-hidden="true" class="relative z-10 mt-4 flex items-center text-sm font-medium text-blue-500">Read article<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" class="ml-1 h-4 w-4 stroke-current"><path d="M6.75 5.75 9.25 8l-2.5 2.25" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div><time class="mt-1 hidden md:block relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500" dateTime="2023-03-31">March 31, 2023</time></article><article class="md:grid md:grid-cols-4 md:items-baseline"><div class="md:col-span-3 group relative flex flex-col items-start"><h2 class="text-base font-semibold tracking-tight text-zinc-800 dark:text-zinc-100"><div class="absolute -inset-y-6 -inset-x-4 z-0 scale-95 bg-zinc-50 opacity-0 transition group-hover:scale-100 group-hover:opacity-100 dark:bg-zinc-800/50 sm:-inset-x-6 sm:rounded-2xl"></div><a href="/articles/what-are-the-differences-between-the-json-and-jsonb-data-types-in-postgresql"><span class="absolute -inset-y-6 -inset-x-4 z-20 sm:-inset-x-6 sm:rounded-2xl"></span><span class="relative z-10">What are the differences between the JSON and JSONB data types in PostgreSQL?</span></a></h2><time class="md:hidden relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500 pl-3.5" dateTime="2023-01-07"><span class="absolute inset-y-0 left-0 flex items-center" aria-hidden="true"><span class="h-4 w-0.5 rounded-full bg-zinc-200 dark:bg-zinc-500"></span></span>January 7, 2023</time><p class="relative z-10 mt-2 text-sm text-zinc-600 dark:text-zinc-400"></p><div aria-hidden="true" class="relative z-10 mt-4 flex items-center text-sm font-medium text-blue-500">Read article<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" class="ml-1 h-4 w-4 stroke-current"><path d="M6.75 5.75 9.25 8l-2.5 2.25" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div><time class="mt-1 hidden md:block relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500" dateTime="2023-01-07">January 7, 2023</time></article><article class="md:grid md:grid-cols-4 md:items-baseline"><div class="md:col-span-3 group relative flex flex-col items-start"><h2 class="text-base font-semibold tracking-tight text-zinc-800 dark:text-zinc-100">
34<div class="absolute -inset-y-6 -inset-x-4 z-0 scale-95 bg-zinc-50 opacity-0 transition group-hover:scale-100 group-hover:opacity-100 dark:bg-zinc-800/50 sm:-inset-x-6 sm:rounded-2xl"></div><a href="/articles/hello-world"><span class="absolute -inset-y-6 -inset-x-4 z-20 sm:-inset-x-6 sm:rounded-2xl"></span><span class="relative z-10">Hello World</span></a></h2><time class="md:hidden relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500 pl-3.5" dateTime="2022-12-10"><span class="absolute inset-y-0 left-0 flex items-center" aria-hidden="true"><span class="h-4 w-0.5 rounded-full bg-zinc-200 dark:bg-zinc-500"></span></span>December 10, 2022</time><p class="relative z-10 mt-2 text-sm text-zinc-600 dark:text-zinc-400">Hello world is a common phrase used in programming to test the functionality of a new code or application.</p><div aria-hidden="true" class="relative z-10 mt-4 flex items-center text-sm font-medium text-blue-500">Read article<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" class="ml-1 h-4 w-4 stroke-current"><path d="M6.75 5.75 9.25 8l-2.5 2.25" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div><time class="mt-1 hidden md:block relative z-10 order-first mb-3 flex items-center text-sm text-zinc-400 dark:text-zinc-500" dateTime="2022-12-10">December 10, 2022</time></article></div></div></div></div></div></div></div></main><footer class="mt-32"><div class="sm:px-8"><div class="mx-auto max-w-7xl lg:px-8"><div class="border-t border-zinc-100 pt-10 pb-16 dark:border-zinc-700/40"><div class="relative px-4 sm:px-8 lg:px-12"><div class="mx-auto max-w-2xl lg:max-w-5xl"><div class="flex flex-col items-center justify-between gap-6 sm:flex-row"><div class="flex gap-6 text-sm font-medium text-zinc-800 dark:text-zinc-200"><a class="transition hover:text-blue-500 dark:hover:text-blue-400" href="/">Home</a><a class="transition hover:text-blue-500 dark:hover:text-blue-400" href="/speaking">Speaking</a></div><p class="text-sm text-zinc-400 dark:text-zinc-500">© <!-- -->2026<!-- --> Johan Eliasson. All rights reserved.</p></div></div></div></div></div></div></footer></div></div>
34<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"articles":[{"slug":"the-artifact-is-no-longer-proof-of-competence","author":"Johan Eliasson","date":"2026-08-17","title":"The Artifact Is No Longer Proof of Competence","description":"The artifact still matters. It just can't carry the whole signal anymore."},{"slug":"my-brain-doesnt-have-git-worktrees","author":"Johan Eliasson","date":"2026-08-09","title":"My Brain Doesn’t Have Git Worktrees","description":"How I made it easy to run eight coding agents at once—and discovered that my attention was the next bottleneck."},{"slug":"crafting-the-perfect-t3-stack-my-journey-with-kysely-atlas-and-clerk","author":"Johan Eliasson","date":"2023-03-31","title":"Crafting the Perfect T3 Stack: My Journey with Kysely, Atlas, and Clerk","description":""},{"slug":"what-are-the-differences-between-the-json-and-jsonb-data-types-in-postgresql","author":"Johan Eliasson","date":"2023-01-07","title":"What are the differences between the JSON and JSONB data types in PostgreSQL?"},{"slug":"hello-world","author":"Johan Eliasson","date":"2022-12-10","title":"Hello World","description":"Hello world is a common phrase used in programming to test the functionality of a new code or application."}]},"__N_SSG":true},"page":"/articles","query":{},"buildId":"9_ac7XriA5rLzJTsuLUcD","isFallback":false,"gsp":true,"scriptLoader":[]}</script>
34</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.