PageSourceSearch

https://alpacasoft.dev/blog

html alpacasoft.dev collected 2026-09-24 14:59:24 UTC 9,528 bytes, 50 lines download raw bytes

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		<link href="./_app/immutable/entry/start.CcoOdvlu.js" rel="modulepreload">
8		<link href="./_app/immutable/chunks/DBL4QOHy.js" rel="modulepreload">
9		<link href="./_app/immutable/chunks/DHLgfP6R.js" rel="modulepreload">
10		<link href="./_app/immutable/entry/app.Bj7Tx2cO.js" rel="modulepreload">
11		<link href="./_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
12		<link href="./_app/immutable/nodes/0.CCFTndY9.js" rel="modulepreload">
13		<link href="./_app/immutable/chunks/f2672_TQ.js" rel="modulepreload">
14		<link href="./_app/immutable/chunks/CLoItuXT.js" rel="modulepreload">
15		<link href="./_app/immutable/chunks/D8uv6hIM.js" rel="modulepreload">
16		<link href="./_app/immutable/chunks/DLbZjFl2.js" rel="modulepreload">
17		<link href="./_app/immutable/nodes/4.Bvnqa76U.js" rel="modulepreload">
18		<link href="./_app/immutable/chunks/C27QR-96.js" rel="modulepreload">
19		<link href="./_app/immutable/chunks/82MaK-jR.js" rel="modulepreload">
20		<!--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="Notes on front-end engineering, product thinking, and the odd tools Will Mitchell builds."/> <link rel="canonical" href="https://alpacasoft.dev/blog"/> <meta property="og:type" content="website"/> <meta property="og:title" content="Blog · Alpaca Software"/> <meta property="og:description" content="Notes on front-end engineering, product thinking, and the odd tools Will Mitchell builds."/> <meta property="og:url" content="https://alpacasoft.dev/blog"/> <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="Blog · Alpaca Software"/> <meta name="twitter:description" content="Notes on front-end engineering, product thinking, and the odd tools Will Mitchell builds."/> <meta name="twitter:image" content="https://alpacasoft.dev/og.png"/><!----><title>Blog · Alpaca Software</title>
21		<link href="./_app/immutable/assets/0.BpXFv3Bq.css" rel="stylesheet">
22	</head>
23	<body data-sveltekit-preload-data="hover"><a href="https://alpacasoft.dev/cdn-cgi/content?id=yvUJ9eWCYZPDyoaQSD69rx64VklywrRDFu9wPCXYoeo-1790261963.4716759-1.2.1.1-f0ALhyP2SuMQu37QX6MQTkDvtXYUoByyB_A4UWm6SR5IiOFD8S3.VGR6cBwp1byR" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a>
24		<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-amber px-4 py-2 font-mono text-sm text-wool 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-ink/80 backdrop-blur supports-[backdrop-filter]:bg-ink/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-wool">alpaca<span class="text-wool-faint">·</span>soft</span></a> <button type="button" class="-mr-1.5 rounded p-1.5 text-wool-dim transition-colors hover:text-amber-deep 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> <nav id="primary-nav" aria-label="Primary" class="font-mono text-[0.8125rem] sm:static 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="/" class="rounded px-2.5 py-1.5 transition-colors hover:text-amber-deep text-wool-dim"><!--[-1--><!--]-->home</a><a href="/work" class="rounded px-2.5 py-1.5 transition-colors hover:text-amber-deep text-wool-dim"><!--[-1--><!--]-->work</a><a href="/resume" class="rounded px-2.5 py-1.5 transition-colors hover:text-amber-deep text-wool-dim"><!--[-1--><!--]-->resume</a><a href="/blog" aria-current="page" class="rounded px-2.5 py-1.5 transition-colors hover:text-amber-deep text-amber-deep"><!--[0--><span class="text-sage-deep">/</span><!--]-->blog</a><a href="/about" class="rounded px-2.5 py-1.5 transition-colors hover:text-amber-deep text-wool-dim"><!--[-1--><!--]-->about</a><!--]--></nav></div></header><!---->
24 <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 ~/notes</p> <h1 class="reveal page-title mt-3">Notes</h1> <p class="reveal mt-4 text-lg text-pretty text-wool-dim">Front-end, product thinking, and whatever I'm tinkering with. <a href="/rss.xml" class="link-anim" data-sveltekit-reload="">RSS ↗</a></p> <!--[-1--><!--]--> <ul class="mt-10 divide-y divide-line/60"><!--[!--><li class="py-8 font-mono text-sm text-wool-faint">No notes published yet. Check back soon.</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-wool-dim">Front-end engineer who came to it the long way round, through product and project management. 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-amber-deep/30 bg-amber/15 px-4 py-1.5 font-mono text-xs text-amber-deep transition-colors hover:bg-amber/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-wool-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-wool-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-wool-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-wool-faint">mail/</span> <a href="#" class="link-anim">email me</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-wool-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--><!--]--><!--]-->
25			
26			
26<script>
27				{
28					__sveltekit_1yogmri = {
29						base: new URL(".", location).pathname.slice(0, -1)
30					};
31
32					const element = document.currentScript.parentElement;
33
34					Promise.all([
35						import("./_app/immutable/entry/start.CcoOdvlu.js"),
36						import("./_app/immutable/entry/app.Bj7Tx2cO.js")
37					]).then(([kit, app]) => {
38						kit.start(app, element, {
39							node_ids: [0, 4],
40							data: [null,null],
41							form: null,
42							error: null
43						});
44					});
45				}
46			</script>
46
47		</div>
48	
48<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:'a402a717b944f337',t:'MTc5MDI2MTk2Mw=='};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>
48<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>
48
49</body>
50</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.