Setup const html = `<html lang="en" class="false" data-theme="dark"><head><meta charset="UTF-8"><style>:where(img){height:auto}</style><meta name="viewport" content="width=device-width"><link rel="canonical" href="https://kendsnyder.com/"><meta name="generator" content="Astro v4.3.5"><!-- Favicons --><link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicons/favicon-16x16.png"><link rel="manifest" href="/favicons/site.webmanifest"><link rel="mask-icon" href="/favicons/safari-pinned-tab.svg" color="#436cf6"><meta name="msapplication-TileColor" content="#2d89ef"><meta name="theme-color" content="rgb(20, 20, 30)"><!-- General Meta Tags --><title>Ken Snyder, JavaScript Junkie</title><meta name="title" content="Ken Snyder, JavaScript Junkie"><meta name="description" content="Ken is a JavaScript Junkie who specializes in web technologies such as Remix, React, TypeScript, Node.JS, Bun, Postgres, and MySQL"><meta name="author" content="Ken Snyder"><link rel="sitemap" href="/sitemap-index.xml"><!-- Open Graph / Facebook --><meta property="og:title" content="Ken Snyder, JavaScript Junkie"><meta property="og:description" content="Ken is a JavaScript Junkie who specializes in web technologies such as Remix, React, TypeScript, Node.JS, Bun, Postgres, and MySQL"><meta property="og:url" content="https://kendsnyder.com/"><meta property="og:image" content="https://kendsnyder.com/zions-narrows.jpg"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://kendsnyder.com/"><meta property="twitter:title" content="Ken Snyder, JavaScript Junkie"><meta property="twitter:description" content="Ken is a JavaScript Junkie who specializes in web technologies such as Remix, React, TypeScript, Node.JS, Bun, Postgres, and MySQL"><meta property="twitter:image" content="https://kendsnyder.com/zions-narrows.jpg"><!-- Google Font --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""><link href="https://fonts.googleapis.com/css2?family=Cabin:ital,wght@0,400..700;1,400..700&display=swap" rel="stylesheet"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><!-- Google tag (gtag.js) --><script async="" src="https://www.googletagmanager.com/gtag/js?id=G-0HR286WQ68" data-astro-exec=""></script><script data-astro-exec="">window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-0HR286WQ68");
</script><script src="/toggle-theme.js" data-astro-exec=""></script><link rel="stylesheet" href="/_astro/about.ccB37b0h.css">
<style>#hero:where(.astro-j7pv25f6){padding-top:2rem;padding-bottom:1.5rem}#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:1rem;margin-bottom:1rem;font-size:1.875rem;font-weight:700;line-height:2.25rem;display:inline-block}@media (min-width:640px){#hero:where(.astro-j7pv25f6) h1:where(.astro-j7pv25f6){margin-top:2rem;margin-bottom:2rem;font-size:3rem;line-height:1}}#hero:where(.astro-j7pv25f6) .rss-link:where(.astro-j7pv25f6){margin-bottom:1.5rem}#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skew(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y));fill:rgb(var(--color-accent));width:1.5rem;height:1.5rem;margin-bottom:.5rem}@media (min-width:640px){#hero:where(.astro-j7pv25f6) .rss-icon:where(.astro-j7pv25f6){--tw-scale-x:1.25;--tw-scale-y:1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skew(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y));margin-bottom:.75rem}}#hero:where(.astro-j7pv25f6) p:where(.astro-j7pv25f6){margin-top:.5rem;margin-bottom:.5rem}.social-wrapper:where(.astro-j7pv25f6){flex-direction:column;margin-top:1rem;display:flex}@media (min-width:640px){.social-wrapper:where(.astro-j7pv25f6){flex-direction:row;align-items:center}}.social-links:where(.astro-j7pv25f6){white-space:nowrap;margin-bottom:.25rem;margin-right:.5rem}@media (min-width:640px){.social-links:where(.astro-j7pv25f6){margin-bottom:0}}#featured:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6){padding-top:3rem;padding-bottom:1.5rem}#featured:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6),#recent-posts:where(.astro-j7pv25f6) h2:where(.astro-j7pv25f6){letter-spacing:.025em;font-size:1.5rem;font-weight:600;line-height:2rem}.all-posts-btn-wrapper:where(.astro-j7pv25f6){text-align:center;margin-top:2rem;margin-bottom:2rem}</style><script type="module" src="/_astro/hoisted.o4LUDjyO.js" data-astro-exec=""></script></head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="astro-3ef6ksr2 nav-container"> <div class="astro-3ef6ksr2 top-nav-wrap"> <a href="/" class="astro-3ef6ksr2 logo whitespace-nowrap"> Ken Snyder, JavaScript Junkie </a> <nav id="nav-menu" class="astro-3ef6ksr2"> <button class="astro-3ef6ksr2 focus-outline hamburger-menu" aria-label="Open Menu" aria-expanded="false" aria-controls="menu-items"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="astro-3ef6ksr2 menu-icon"> <line x1="7" y1="12" x2="21" y2="12" class="astro-3ef6ksr2 line"></line> <line x1="3" y1="6" x2="21" y2="6" class="astro-3ef6ksr2 line"></line> <line x1="12" y1="18" x2="21" y2="18" class="astro-3ef6ksr2 line"></line> <line x1="18" y1="6" x2="6" y2="18" class="astro-3ef6ksr2 close"></line> <line x1="6" y1="6" x2="18" y2="18" class="astro-3ef6ksr2 close"></line> </svg> </button> <ul id="menu-items" class="astro-3ef6ksr2 display-none sm:flex"> <li class="astro-3ef6ksr2"> <a href="/posts/" class="astro-3ef6ksr2">
Posts
</a> </li> <li class="astro-3ef6ksr2"> <a href="/tags/" class="astro-3ef6ksr2">
Tags
</a> </li> <li class="astro-3ef6ksr2"> <a href="/talks/" class="astro-3ef6ksr2">
Talks
</a> </li> <li class="astro-3ef6ksr2"> <a href="/about/" class="astro-3ef6ksr2">
Me
</a> </li> <li class="astro-3ef6ksr2"> <a href="/search/" class="astro-3ef6ksr2 focus-outline flex group hover:text-skin-accent inline-block p-3 sm:p-1" aria-label="search" title="Search"> <svg xmlns="http://www.w3.org/2000/svg" class="astro-3ef6ksr2 scale-125 sm:scale-100"><path d="M19.023 16.977a35.13 35.13 0 0 1-1.367-1.384c-.372-.378-.596-.653-.596-.653l-2.8-1.337A6.962 6.962 0 0 0 16 9c0-3.859-3.14-7-7-7S2 5.141 2 9s3.14 7 7 7c1.763 0 3.37-.66 4.603-1.739l1.337 2.8s.275.224.653.596c.387.363.896.854 1.384 1.367l1.358 1.392.604.646 2.121-2.121-.646-.604c-.379-.372-.885-.866-1.391-1.36zM9 14c-2.757 0-5-2.243-5-5s2.243-5 5-5 5 2.243 5 5-2.243 5-5 5z" class="astro-3ef6ksr2"></path> </svg> <span class="astro-3ef6ksr2 sr-only">Search</span> </a> </li> <li class="astro-3ef6ksr2"> <button id="theme-btn" class="astro-3ef6ksr2 focus-outline" title="Toggles light & dark" aria-label="dark" aria-live="polite"> <svg xmlns="http://www.w3.org/2000/svg" id="moon-svg" class="astro-3ef6ksr2"> <path d="M20.742 13.045a8.088 8.088 0 0 1-2.077.271c-2.135 0-4.14-.83-5.646-2.336a8.025 8.025 0 0 1-2.064-7.723A1 1 0 0 0 9.73 2.034a10.014 10.014 0 0 0-4.489 2.582c-3.898 3.898-3.898 10.243 0 14.143a9.937 9.937 0 0 0 7.072 2.93 9.93 9.93 0 0 0 7.07-2.929 10.007 10.007 0 0 0 2.583-4.491 1.001 1.001 0 0 0-1.224-1.224zm-2.772 4.301a7.947 7.947 0 0 1-5.656 2.343 7.953 7.953 0 0 1-5.658-2.344c-3.118-3.119-3.118-8.195 0-11.314a7.923 7.923 0 0 1 2.06-1.483 10.027 10.027 0 0 0 2.89 7.848 9.972 9.972 0 0 0 7.848 2.891 8.036 8.036 0 0 1-1.484 2.059z" class="astro-3ef6ksr2"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" id="sun-svg" class="astro-3ef6ksr2"> <path d="M6.993 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007S14.761 6.993 12 6.993 6.993 9.239 6.993 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2h-3zm17 0h3v2h-3zM4.219 18.363l2.12-2.122 1.415 1.414-2.12 2.122zM16.24 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.342 7.759 4.22 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z" class="astro-3ef6ksr2"></path> </svg> </button> </li> </ul> </nav> </div> </div> <div class="max-w-3xl mx-auto px-4"> <hr class="border-skin-line" aria-hidden="true"> </div> </header> <main id="main-content" class="astro-j7pv25f6"> <section id="hero" class="astro-j7pv25f6"> <h1 class="astro-j7pv25f6">Hello There!</h1> <a target="_blank" href="/rss.xml" class="astro-j7pv25f6 rss-link" aria-label="rss feed" title="RSS Feed"> <svg xmlns="http://www.w3.org/2000/svg" class="astro-j7pv25f6 rss-icon"><path d="M19 20.001C19 11.729 12.271 5 4 5v2c7.168 0 13 5.832 13 13.001h2z" class="astro-j7pv25f6"></path><path d="M12 20.001h2C14 14.486 9.514 10 4 10v2c4.411 0 8 3.589 8 8.001z" class="astro-j7pv25f6"></path><circle cx="6" cy="18" r="2" class="astro-j7pv25f6"></circle> </svg> <span class="astro-j7pv25f6 sr-only">RSS Feed</span> </a> <p class="astro-j7pv25f6">
My name is Ken Snyder. I am a Software Engineer and JavaScript
Enthusiast specializing in web technologies such as Remix, React,
TypeScript, Node.JS, Bun, Postgres, and MySQL.
</p> <p class="astro-j7pv25f6">
I'm am a founder and Principal Engineer of
<a href="https://shoreline.health" class="astro-j7pv25f6">Shoreline</a>, a patient engagement
platform for healthcare providers. We enable clinicians to send
individualized patient education via EHR, email, and text message.
</p> <p class="astro-j7pv25f6">
I am a Co-founder of <a href="https://utahjs.com" class="astro-j7pv25f6">UtahJS</a>, an
educational non-profit aimed at connecting JavaScript Engineers and
promoting JavaScript in Utah. UtahJS has
<a href="https://www.meetup.com/UtahJS/" class="astro-j7pv25f6">monthly meetups</a> and
<a href="https://utahjs.com/conference" class="astro-j7pv25f6">annual conferences</a>.
</p> <div class="astro-j7pv25f6 social-wrapper"> <div class="astro-j7pv25f6 social-links">Connect with me:</div> <div class="astro-upu6fzxr social-icons"> <a href="https://github.com/kensnyder" class="inline-block group hover:text-skin-accent astro-upu6fzxr link-button" title="Ken Snyder on GitHub"> <svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5"></path>
</svg> <span class="sr-only astro-upu6fzxr">Ken Snyder on GitHub</span> </a><a href="https://www.npmjs.com/~kensnyder" class="inline-block group hover:text-skin-accent astro-upu6fzxr link-button" title="Ken Snyder on npm"> <svg xmlns="http://www.w3.org/2000/svg" width="540px" height="210px" viewBox="0 0 18 7">
<path d="M0,0h18v6H9v1H5V6H0V0z M1,5h2V2h1v3h1V1H1V5z M6,1v5h2V5h2V1H6z M8,2h1v2H8V2z M11,1v4h2V2h1v3h1V2h1v3h1V1H11z"></path>
<polygon fill="transparent" points="1,5 3,5 3,2 4,2 4,5 5,5 5,1 1,1 "></polygon>
<path fill="transparent" d="M6,1v5h2V5h2V1H6z M9,4H8V2h1V4z"></path>
<polygon fill="transparent" points="11,1 11,5 13,5 13,2 14,2 14,5 15,5 15,2 16,2 16,5 17,5 17,1 "></polygon>
</svg> <span class="sr-only astro-upu6fzxr">Ken Snyder on npm</span> </a><a href="https://linkedin.com/in/kendsnyder" class="inline-block group hover:text-skin-accent astro-upu6fzxr link-button" title="Ken Snyder on LinkedIn"> <svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<rect x="4" y="4" width="16" height="16" rx="2"></rect>
<line x1="8" y1="11" x2="8" y2="16"></line>
<line x1="8" y1="8" x2="8" y2="8.01"></line>
<line x1="12" y1="16" x2="12" y2="11"></line>
<path d="M16 16v-3a2 2 0 0 0 -4 0"></path>
</svg> <span class="sr-only astro-upu6fzxr">Ken Snyder on LinkedIn</span> </a> </div> </div> </section> <div class="max-w-3xl mx-auto px-4"> <hr class="border-skin-line" aria-hidden="true"> </div> <section id="recent-posts" class="astro-j7pv25f6"> <h2 class="astro-j7pv25f6">Recent Posts</h2> <ul class="astro-j7pv25f6"> <li class="my-6"><a href="/ecss-recommendations-for-finding-zen-in-css/" class="inline-block decoration-dashed focus-visible:no-underline focus-visible:underline-offset-0 font-medium text-lg text-skin-accent underline-offset-4"><h3 style="view-transition-name:ecss-recommendations-for-finding-zen-in-css" class="decoration-dashed font-medium text-lg hover:underline">ECSS: Recommendations for Finding Zen in CSS</h3></a><div class="flex items-center opacity-80 pubdate space-x-2 undefined"><svg xmlns="http://www.w3.org/2000/svg" class="inline-block fill-skin-base h-6 min-w-[1.375rem] scale-90 w-6" aria-hidden="true"><path d="M7 11h2v2H7zm0 4h2v2H7zm4-4h2v2h-2zm0 4h2v2h-2zm4-4h2v2h-2zm0 4h2v2h-2z"></path><path d="M5 22h14c1.103 0 2-.897 2-2V6c0-1.103-.897-2-2-2h-2V2h-2v2H9V2H7v2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2zM19 8l.001 12H5V8h14z"></path></svg><span class="sr-only">Published:</span><span class="italic text-sm"><time datetime="2024-03-22T14:37:39.101Z">Mar 22, 2024</time><span aria-hidden="true"> | </span><span class="sr-only"> at </span><span class="text-nowrap">02:37 PM</span></span></div><p>No more naming everything, no more technological dependencies. Only intentional, consistent, simple, expressive, predictable, sustainable CSS.</p></li><li class="my-6"><a href="/will-devin-take-my-job/" class="inline-block decoration-dashed focus-visible:no-underline focus-visible:underline-offset-0 font-medium text-lg text-skin-accent underline-offset-4"><h3 style="view-transition-name:will-devin-take-my-job" class="decoration-dashed font-medium text-lg hover:underline">Will Devin take my job?</h3></a><div class="flex items-center opacity-80 pubdate space-x-2 undefined"><svg xmlns="http://www.w3.org/2000/svg" class="inline-block fill-skin-base h-6 min-w-[1.375rem] scale-90 w-6" aria-hidden="true"><path d="M7 11h2v2H7zm0 4h2v2H7zm4-4h2v2h-2zm0 4h2v2h-2zm4-4h2v2h-2zm0 4h2v2h-2z"></path><path d="M5 22h14c1.103 0 2-.897 2-2V6c0-1.103-.897-2-2-2h-2V2h-2v2H9V2H7v2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2zM19 8l.001 12H5V8h14z"></path></svg><span class="sr-only">Published:</span><span class="italic text-sm"><time datetime="2024-03-12T23:37:46.127Z">Mar 12, 2024</time><span aria-hidden="true"> | </span><span class="sr-only"> at </span><span class="text-nowrap">11:37 PM</span></span></div><p>Devin can make plans, read documentation, run and debug code. It currently outperforms all other current AI models on the SWE-Bench coding benchmark which analyzes how well a model can resolve real-world GitHub issues.</p></li><li class="my-6"><a href="/should-i-use-jsr-the-answer-might-be-no/" class="inline-block decoration-dashed focus-visible:no-underline focus-visible:underline-offset-0 font-medium text-lg text-skin-accent underline-offset-4"><h3 style="view-transition-name:should-i-use-jsr-the-answer-might-be-no" class="decoration-dashed font-medium text-lg hover:underline">Should I use JSR? The answer might be no.</h3></a><div class="flex items-center opacity-80 pubdate space-x-2 undefined"><svg xmlns="http://www.w3.org/2000/svg" class="inline-block fill-skin-base h-6 min-w-[1.375rem] scale-90 w-6" aria-hidden="true"><path d="M7 11h2v2H7zm0 4h2v2H7zm4-4h2v2h-2zm0 4h2v2h-2zm4-4h2v2h-2zm0 4h2v2h-2z"></path><path d="M5 22h14c1.103 0 2-.897 2-2V6c0-1.103-.897-2-2-2h-2V2h-2v2H9V2H7v2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2zM19 8l.001 12H5V8h14z"></path></svg><span class="sr-only">Published:</span><span class="italic text-sm"><time datetime="2024-03-06T22:23:33.582Z">Mar 6, 2024</time><span aria-hidden="true"> | </span><span class="sr-only"> at </span><span class="text-nowrap">10:23 PM</span></span></div><p>JSR arguably does what npm should. It is innovative and compelling, but it raises a lot of questions you should consider.</p></li><li class="my-6"><a href="/vue-vapor-aims-to-make-vue-rendering-work-more-like-solidjs/" class="inline-block decoration-dashed focus-visible:no-underline focus-visible:underline-offset-0 font-medium text-lg text-skin-accent underline-offset-4"><h3 style="view-transition-name:vue-vapor-aims-to-make-vue-rendering-work-more-like-solidjs" class="decoration-dashed font-medium text-lg hover:underline">Vue Vapor aims to make Vue rendering work more like SolidJS</h3></a><div class="flex items-center opacity-80 pubdate space-x-2 undefined"><svg xmlns="http://www.w3.org/2000/svg" class="inline-block fill-skin-base h-6 min-w-[1.375rem] scale-90 w-6" aria-hidden="true"><path d="M7 11h2v2H7zm0 4h2v2H7zm4-4h2v2h-2zm0 4h2v2h-2zm4-4h2v2h-2zm0 4h2v2h-2z"></path><path d="M5 22h14c1.103 0 2-.897 2-2V6c0-1.103-.897-2-2-2h-2V2h-2v2H9V2H7v2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2zM19 8l.001 12H5V8h14z"></path></svg><span class="sr-only">Published:</span><span class="italic text-sm"><time datetime="2024-03-05T21:26:31.325Z">Mar 5, 2024</time><span aria-hidden="true"> | </span><span class="sr-only"> at </span><span class="text-nowrap">09:26 PM</span></span></div><p>Vue Vapor is a new compilation strategy that relies on signals to re-render only the affected html nodes when a signal changes, avoiding a virtual DOM altogether</p></li> </ul> </section> <div class="astro-j7pv25f6 all-posts-btn-wrapper"> <a href="/posts/" class="inline-block group hover:text-skin-accent undefined">
All Posts
<svg xmlns="http://www.w3.org/2000/svg" class="astro-j7pv25f6"><path d="m11.293 17.293 1.414 1.414L19.414 12l-6.707-6.707-1.414 1.414L15.586 11H6v2h9.586z" class="astro-j7pv25f6"></path> </svg> </a> </div> </main> <footer class="astro-sz7xmlte mt-auto"> <div class="max-w-3xl mx-auto px-0"> <hr class="border-skin-line" aria-hidden="true"> </div> <div class="astro-sz7xmlte footer-wrapper"> <div class="astro-upu6fzxr social-icons flex"> <a href="https://github.com/kensnyder" class="inline-block group hover:text-skin-accent astro-upu6fzxr link-button" title="Ken Snyder on GitHub"> <svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5"></path>
</svg> <span class="sr-only astro-upu6fzxr">Ken Snyder on GitHub</span> </a><a href="https://www.npmjs.com/~kensnyder" class="inline-block group hover:text-skin-accent astro-upu6fzxr link-button" title="Ken Snyder on npm"> <svg xmlns="http://www.w3.org/2000/svg" width="540px" height="210px" viewBox="0 0 18 7">
<path d="M0,0h18v6H9v1H5V6H0V0z M1,5h2V2h1v3h1V1H1V5z M6,1v5h2V5h2V1H6z M8,2h1v2H8V2z M11,1v4h2V2h1v3h1V2h1v3h1V1H11z"></path>
<polygon fill="transparent" points="1,5 3,5 3,2 4,2 4,5 5,5 5,1 1,1 "></polygon>
<path fill="transparent" d="M6,1v5h2V5h2V1H6z M9,4H8V2h1V4z"></path>
<polygon fill="transparent" points="11,1 11,5 13,5 13,2 14,2 14,5 15,5 15,2 16,2 16,5 17,5 17,1 "></polygon>
</svg> <span class="sr-only astro-upu6fzxr">Ken Snyder on npm</span> </a><a href="https://linkedin.com/in/kendsnyder" class="inline-block group hover:text-skin-accent astro-upu6fzxr link-button" title="Ken Snyder on LinkedIn"> <svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<rect x="4" y="4" width="16" height="16" rx="2"></rect>
<line x1="8" y1="11" x2="8" y2="16"></line>
<line x1="8" y1="8" x2="8" y2="8.01"></line>
<line x1="12" y1="16" x2="12" y2="11"></line>
<path d="M16 16v-3a2 2 0 0 0 -4 0"></path>
</svg> <span class="sr-only astro-upu6fzxr">Ken Snyder on LinkedIn</span> </a> </div> <div class="astro-sz7xmlte copyright-wrapper"> <span class="astro-sz7xmlte">Copyright © 2024 Ken Snyder</span> <span class="astro-sz7xmlte separator"> | </span> <span class="astro-sz7xmlte">All rights reserved.</span> </div> </div> </footer> </body></html>` \n Hello There! RSS Feed \nMy name is Ken Snyder. I am a Software Engineer and JavaScript\n Enthusiast specializing in web technologies such as Remix, React,\n TypeScript, Node.JS, Bun, Postgres, and MySQL.\n
\nI'm am a founder and Principal Engineer of\nShoreline , a patient engagement\n platform for healthcare providers. We enable clinicians to send\n individualized patient education via EHR, email, and text message.\n
\nI am a Co-founder of UtahJS , an\n educational non-profit aimed at connecting JavaScript Engineers and\n promoting JavaScript in Utah. UtahJS has\nmonthly meetups and\nannual conferences .\n
Recent Posts ECSS: Recommendations for Finding Zen in CSS Published: Mar 22, 2024 | at 02:37 PM No more naming everything, no more technological dependencies. Only intentional, consistent, simple, expressive, predictable, sustainable CSS.
Will Devin take my job? Published: Mar 12, 2024 | at 11:37 PM Devin can make plans, read documentation, run and debug code. It currently outperforms all other current AI models on the SWE-Bench coding benchmark which analyzes how well a model can resolve real-world GitHub issues.
Should I use JSR? The answer might be no. Published: Mar 6, 2024 | at 10:23 PM JSR arguably does what npm should. It is innovative and compelling, but it raises a lot of questions you should consider.
Vue Vapor aims to make Vue rendering work more like SolidJS Published: Mar 5, 2024 | at 09:26 PM Vue Vapor is a new compilation strategy that relies on signals to re-render only the affected html nodes when a signal changes, avoiding a virtual DOM altogether
`"}