1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <meta name="text-scale" content="scale" /> 7
7<script> 8 // Apply a saved light-theme choice before first paint. Dark is the 9 // default, so a missing or unreadable choice needs no work. 10 try { 11 if (localStorage.getItem('theme') === 'light') 12 document.documentElement.dataset.theme = 'light'; 13 } catch {} 14 </script>
14 15 <link href="./_app/immutable/entry/start.CY_o5TsX.js" rel="modulepreload"> 16 <link href="./_app/immutable/chunks/CwmI773r.js" rel="modulepreload"> 17 <link href="./_app/immutable/chunks/xfE-XCam.js" rel="modulepreload"> 18 <link href="./_app/immutable/chunks/DK3Fl9T5.js" rel="modulepreload"> 19 <link href="./_app/immutable/chunks/BuFlayix.js" rel="modulepreload"> 20 <link href="./_app/immutable/entry/app.Dvkk63p0.js" rel="modulepreload"> 21 <link href="./_app/immutable/chunks/xihTtKlq.js" rel="modulepreload"> 22 <link href="./_app/immutable/nodes/0.CsXU4QIE.js" rel="modulepreload"> 23 <link href="./_app/immutable/chunks/C6jIA3BA.js" rel="modulepreload"> 24 <link href="./_app/immutable/chunks/CLoItuXT.js" rel="modulepreload"> 25 <link href="./_app/immutable/chunks/DrM-6fyx.js" rel="modulepreload"> 26 <link href="./_app/immutable/chunks/Cr94zUSV.js" rel="modulepreload"> 27 <link href="./_app/immutable/chunks/BbhhFIpQ.js" rel="modulepreload"> 28 <link href="./_app/immutable/nodes/9.DscftbI5.js" rel="modulepreload"> 29 <link href="./_app/immutable/chunks/ByK75BNJ.js" rel="modulepreload"> 30 <link href="./_app/immutable/chunks/Dl1r3Lst.js" rel="modulepreload"> 31 <!--12qhfyh--><link rel="icon" href="/_app/immutable/assets/favicon.ClUV8pJY.png"/> <link rel="apple-touch-icon" href="/_app/immutable/assets/favicon.ClUV8pJY.png"/><!----><!--gsrl61--><meta name="description" content="Essays and interactive pieces by Will Mitchell on AI, building software, and the odd things he makes."/> <link rel="canonical" href="https://alpacasoft.dev/writing"/> <meta property="og:type" content="website"/> <meta property="og:title" content="Writing · Alpaca Software"/> <meta property="og:description" content="Essays and interactive pieces by Will Mitchell on AI, building software, and the odd things he makes."/> <meta property="og:url" content="https://alpacasoft.dev/writing"/> <meta property="og:site_name" content="Alpaca Software"/> <meta property="og:image" content="https://alpacasoft.dev/og.png"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:title" content="Writing · Alpaca Software"/> <meta name="twitter:description" content="Essays and interactive pieces by Will Mitchell on AI, building software, and the odd things he makes."/> <meta name="twitter:image" content="https://alpacasoft.dev/og.png"/><!----><title>Writing · Alpaca Software</title> 32 <link href="./_app/immutable/assets/0.DV_VXbU6.css" rel="stylesheet"> 33 </head> 34 <body data-sveltekit-preload-data="hover"><a href="https://alpacasoft.dev/cdn-cgi/content?id=r7ID4KB31bjH.twIssSRPdNbSK1FzvjCkuyGQKrfgy4-1790905929.013317-1.2.1.1-P6Zh4SS6RcxVpdtxrosUajVtvY.T8Jv40_r8lJlF8_2TtPqsV_PQSTTaZFIIvQ2I" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a> 35 <div style="display: contents"><!--[--><!--[0--><!--[--><div class="atmosphere" aria-hidden="true"></div> <div class="grain" aria-hidden="true"></div> <a href="#main" class="sr-only rounded bg-accent-fill px-4 py-2 font-mono text-sm text-on-accent focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50">Skip to content</a> <div class="flex min-h-dvh flex-col"><header class="sticky top-0 z-40 border-b border-line/70 bg-ground/80 backdrop-blur supports-[backdrop-filter]:bg-ground/60"><div class="mx-auto flex max-w-5xl items-center justify-between gap-4 px-5 py-3.5 sm:px-6 lg:px-8"><a href="/" class="group flex items-center gap-2.5" aria-label="Alpaca Software â home"><img src="/_app/immutable/assets/will-avatar.DbinewZQ.jpg" alt="" width="32" height="32" class="rounded-full border border-line-bright transition-transform duration-300 group-hover:-rotate-6"/> <span class="font-mono text-sm font-medium tracking-tight text-fg">alpaca<span class="text-fg-faint">·</span>soft</span></a> <nav id="primary-nav" aria-label="Primary" class="font-mono text-[0.8125rem] sm:static sm:ml-auto sm:flex sm:flex-row sm:items-center sm:gap-1 sm:border-0 sm:bg-transparent sm:p-0 sm:backdrop-blur-none hidden"><!--[--><a href="/work" class="rounded px-2.5 py-1.5 transition-colors hover:text-accent text-fg-dim"><!--[-1--><!--]-->work</a><a href="/writing" aria-current="page" class="rounded px-2.5 py-1.5 transition-colors hover:text-accent text-accent"><!--[0--><span class="text-fg-faint">/</span><!--]-->writing</a><a href="/now" class="rounded px-2.5 py-1.5 transition-colors hover:text-accent text-fg-dim"><!--[-1--><!--]-->now</a><a href="/about" class="rounded px-2.5 py-1.5 transition-colors hover:text-accent text-fg-dim"><!--[-1--><!--]-->about</a><!--]--></nav> <div class="flex items-center gap-1 sm:-mr-1.5"><button type="button" class="group rounded p-1.5 text-fg-dim transition-colors hover:text-accent" aria-label="Switch to light theme" title="Light theme" data-theme-toggle="dark"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" aria-hidden="true" class="transition-transform duration-500 ease-out group-hover:rotate-[20deg]"><!--[0--><circle cx="12" cy="12" r="4"></circle><path d="M12 2.5v2M12 19.5v2M2.5 12h2M19.5 12h2M5.3 5.3l1.4 1.4M17.3 17.3l1.4 1.4M5.3 18.7l1.4-1.4M17.3 6.7l1.4-1.4"></path><!--]--></svg></button><!----> <button type="button" class="-mr-1.5 rounded p-1.5 text-fg-dim transition-colors hover:text-accent sm:hidden" aria-expanded="false" aria-controls="primary-nav" aria-label="Open menu"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" aria-hidden="true"><!--[-1--><path d="M3 7h18M3 12h18M3 17h18"></path><!--]--></svg></button></div></div></header><!---->
35 <main id="main" class="flex-1"><!--[--><!----> <section class="mx-auto max-w-3xl px-5 py-12 sm:px-6 sm:py-16 lg:px-8 lg:py-20"><p class="prompt reveal">tail -f ~/writing</p> <h1 class="reveal page-title mt-3">Writing</h1> <p class="reveal mt-4 text-lg text-pretty text-fg-dim">AI, building software, and whatever I'm tinkering with. Some pieces are interactive and live on 36 their own sites. <a href="/rss.xml" class="link-anim" data-sveltekit-reload="">RSS â</a></p> <!--[0--><div class="mt-8 flex flex-wrap gap-2 font-mono text-xs"><!--[--><button aria-pressed="false" class="rounded-full border px-3 py-1 transition-colors border-line text-fg-dim hover:border-accent/50 hover:text-accent">#ai</button><button aria-pressed="false" class="rounded-full border px-3 py-1 transition-colors border-line text-fg-dim hover:border-accent/50 hover:text-accent">#interactive</button><!--]--></div><!--]--> <ul class="mt-10 divide-y divide-line/60"><!--[--><li><a href="https://paradox.alpacasoft.dev" class="group block py-6" target="_blank" rel="noopener"><div class="flex items-baseline justify-between gap-4"><h2 class="section-title text-fg transition-colors group-hover:text-accent">The Alpaca Paradox<!--[0--><span class="text-fg-faint">â</span><!--]--></h2> <time class="shrink-0 font-mono text-xs text-fg-faint" datetime="2026-09-15">September 15, 2026</time></div> <p class="mt-2 text-pretty text-fg-dim">Taking a 10% AI-extinction forecast literally. An interactive model of the claim where you can change every assumption and watch 10,000 futures respond.</p> <!--[0--><p class="mt-2 font-mono text-xs text-fg-faint">paradox.alpacasoft.dev</p><!--]--></a></li><!--]--></ul></section><!--]--><!----></main> <footer class="mt-16 border-t border-line/70 sm:mt-20"><div class="mx-auto max-w-5xl px-5 py-12 sm:px-6 lg:px-8"><div class="flex flex-col gap-10 sm:flex-row sm:justify-between"><div class="max-w-xs"><p class="prompt">cat ~/about</p> <p class="mt-2 text-sm leading-relaxed text-pretty text-fg-dim">Will Mitchell, TheAlpacalypse most places. Builds fun, usually free software: 40K tools, games, and AI experiments. Founder of Alpaca Software, LLC.</p> <a href="https://www.patreon.com/AlpacaSoftware" target="_blank" rel="noopener" class="mt-5 inline-flex items-center gap-2 rounded-full border border-accent/30 bg-accent-fill/15 px-4 py-1.5 font-mono text-xs text-accent transition-colors hover:bg-accent-fill/25">⥠Support the work</a></div> <nav class="font-mono text-sm" aria-label="Social and contact"><p class="prompt mb-3">ls ~/links</p> <ul class="space-y-2"><!--[--><li class="flex items-baseline gap-3"><span class="w-16 shrink-0 text-fg-faint">git/</span> <a href="https://github.com/wn-mitch" target="_blank" rel="noopener" class="link-anim">@wn-mitch</a></li><li class="flex items-baseline gap-3"><span class="w-16 shrink-0 text-fg-faint">in/</span> <a href="https://www.linkedin.com/in/will--mitch/" target="_blank" rel="noopener" class="link-anim">in/will--mitch</a></li><li class="flex items-baseline gap-3"><span class="w-16 shrink-0 text-fg-faint">bsky/</span> <a href="https://bsky.app/profile/thealpacalypse.bsky.social" target="_blank" rel="noopener" class="link-anim">@thealpacalypse</a></li><!--]--> <li class="flex items-baseline gap-3"><span class="w-16 shrink-0 text-fg-faint">mail/</span> <a href="#" class="link-anim">email me</a><!----></li> <li class="flex items-baseline gap-3"><span class="w-16 shrink-0 text-fg-faint">cv/</span> <a href="/resume" class="link-anim">résumé</a></li></ul></nav></div> <div class="mt-10 flex flex-col gap-2 border-t border-line/50 pt-6 font-mono text-xs text-fg-faint sm:flex-row sm:items-center sm:justify-between"><span>© 2026 Alpaca Software, LLC</span> <span>built with SvelteKit · deployed on Cloudflare</span></div></div></footer><!----></div><!--]--><!--]--> <!--[-1--><!--]--><!--]--> 37 38
38<script> 39 { 40 __sveltekit_96jn9b = { 41 base: new URL(".", location).pathname.slice(0, -1) 42 }; 43 44 const element = document.currentScript.parentElement; 45 46 Promise.all([ 47 import("./_app/immutable/entry/start.CY_o5TsX.js"), 48 import("./_app/immutable/entry/app.Dvkk63p0.js") 49 ]).then(([kit, app]) => { 50 kit.start(app, element, { 51 node_ids: [0, 9], 52 data: [null,null], 53 form: null, 54 error: null 55 }); 56 }); 57 } 58 </script>
58 59 </div> 60
60<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"8d788180add240b895da2ea2e0528eef","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 60
60
61<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a44010e85a0c52ca',t:'MTc5MDkwNTkyOQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
61</body> 62</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.