<!DOCTYPE html><html lang="en-us" class="__variable_dd5b2f scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/36966cca54120369-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/51ff4ab09cd9a322.css?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/353025b7e707a2ff.css?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-af24fb31267d6e11.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU"/><script src="/_next/static/chunks/4bd1b696-5100ffb4d6775e5e.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script src="/_next/static/chunks/684-26e3d0bb4bb23cf2.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script src="/_next/static/chunks/main-app-70f3fd67bd0c0bda.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script src="/_next/static/chunks/c16f53c3-5b47b7f1ae12d8f6.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script src="/_next/static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script src="/_next/static/chunks/277-b9e7a963d9beba01.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script src="/_next/static/chunks/app/layout-ac37df6142c77070.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script src="/_next/static/chunks/63-4d0d4c241eaac2a3.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script src="/_next/static/chunks/app/page-2969ef1d9492914e.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><link rel="preload" href="https://analytics.umami.is/script.js" as="script"/><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-5KXGNH453R" as="script"/><meta name="next-size-adjust" content=""/><link rel="apple-touch-icon" sizes="76x76" href="/static/favicons/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="/static/favicons/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/static/favicons/favicon-16x16.png"/><link rel="manifest" href="/static/favicons/site.webmanifest"/><link rel="mask-icon" href="/static/favicons/safari-pinned-tab.svg" color="#5bbad5"/><meta name="msapplication-TileColor" content="#000000"/><meta name="theme-color" media="(prefers-color-scheme: light)" content="#fff"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#000"/><link rel="alternate" type="application/rss+xml" href="/feed.xml"/><title>Ben Glasser</title><meta name="description" content="A blog about the trials and tribulations of software development with a few side projects thrown in for good measure"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"/><link rel="canonical" href="https://benglasser.com"/><link rel="alternate" type="application/rss+xml" href="https://benglasser.com/feed.xml"/><meta name="google-site-verification" content="72HlL5aNeTStJZwQFi2zWsixXF8yzeRimQNI9sPTWGk"/><meta property="og:title" content="Ben Glasser"/><meta property="og:description" content="A blog about the trials and tribulations of software development with a few side projects thrown in for good measure"/><meta property="og:url" content="https://benglasser.com"/><meta property="og:site_name" content="Ben Glasser"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="https://benglasser.com/static/images/BG-512x512.png"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Ben Glasser"/><meta name="twitter:description" content="A blog about the trials and tribulations of software development with a few side projects thrown in for good measure"/><meta name="twitter:image" content="https://benglasser.com/static/images/BG-512x512.png"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" noModule=""></script></head><body class="bg-white pl-[calc(100vw-100%)] text-black antialiased dark:bg-gray-950 dark:text-white"><script>((e,t,r,n,o,i,a,u)=>{let l=document.documentElement,s=["light","dark"];function c(t){var r;(Array.isArray(e)?e:[e]).forEach(e=>{let r="class"===e,n=r&&i?o.map(e=>i[e]||e):o;r?(l.classList.remove(...n),l.classList.add(i&&i[t]?i[t]:t)):l.setAttribute(e,t)}),r=t,u&&s.includes(r)&&(l.style.colorScheme=r)}if(n)c(n);else try{let e=localStorage.getItem(t)||r,n=a&&"system"===e?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e;c(n)}catch(e){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><section class="mx-auto max-w-3xl px-4 sm:px-6 xl:max-w-5xl xl:px-0"><header class="flex items-center w-full bg-white dark:bg-gray-950 justify-between py-10"><a class="break-words" aria-label="Ben Glasser" href="/"><div class="flex items-center justify-between"><div class="hidden h-6 text-2xl font-semibold sm:block">Ben Glasser</div></div></a><div class="flex items-center space-x-4 leading-5 sm:-mr-6 sm:space-x-6"><div class="no-scrollbar hidden max-w-40 items-center gap-x-4 overflow-x-auto sm:flex md:max-w-72 lg:max-w-96"><a class="hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100" href="/blog/resume">Resume</a><a class="hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100" href="/blog">Blog</a><a class="hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100" href="/projects">Projects</a><a class="hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100" href="/tags">Tags</a></div><button aria-label="Search"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="hover:text-primary-500 dark:hover:text-primary-400 h-6 w-6 text-gray-900 dark:text-gray-100"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"></path></svg></button><div class="flex items-center"><div class="relative inline-block text-left" data-headlessui-state=""><div class="hover:text-primary-500 dark:hover:text-primary-400 flex items-center justify-center"><button aria-label="Theme switcher" id="headlessui-menu-button-«Rtpkulb»" type="button" aria-haspopup="menu" aria-expanded="false" data-headlessui-state=""><svg class="h-6 w-6"></svg></button></div></div></div><button aria-label="Toggle Menu" class="sm:hidden"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="hover:text-primary-500 dark:hover:text-primary-400 h-8 w-8 text-gray-900 dark:text-gray-100"><path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"></path></svg></button><span hidden="" style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></span></div></header><main class="mb-auto"><div class="divide-y divide-gray-200 dark:divide-gray-700"><div class="items-start space-y-2 xl:grid xl:grid-cols-3 xl:gap-x-8 xl:space-y-0"><div class="flex flex-col items-center space-x-2 pt-8"><img alt="avatar" loading="lazy" width="192" height="192" decoding="async" data-nimg="1" class="h-48 w-48 rounded-full" style="color:transparent" srcSet="/_next/image?url=%2Fstatic%2Fimages%2Fme.png&amp;w=256&amp;q=75 1x, /_next/image?url=%2Fstatic%2Fimages%2Fme.png&amp;w=384&amp;q=75 2x" src="/_next/image?url=%2Fstatic%2Fimages%2Fme.png&amp;w=384&amp;q=75"/><h3 class="pt-4 pb-2 text-2xl leading-8 font-bold tracking-tight">Ben Glasser</h3><div class="text-gray-500 dark:text-gray-400">Code Slinger</div><div class="text-gray-500 dark:text-gray-400">Fullcast</div><div class="flex space-x-3 pt-6"><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="mailto:ben@benglasser.com"><span class="sr-only">mail</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-8 w-8"><title>Mail</title><path d="M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z"></path><path d="M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://github.com/benglasser"><span class="sr-only">github</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-8 w-8"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/benglasser"><span class="sr-only">linkedin</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-8 w-8"><title>Linkedin</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="http://benglasser.com/blog/resume"><span class="sr-only">resume</span><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-8 w-8"><title>Resume</title><path d="M14.727 6.727H14V0H4.91c-.905 0-1.637.732-1.637 1.636v20.728c0 .904.732 1.636 1.636 1.636h14.182c.904 0 1.636-.732 1.636-1.636V6.727h-6zm-.545 10.455H7.09v-1.364h7.09v1.364zm2.727-3.273H7.091v-1.364h9.818v1.364zm0-3.273H7.091V9.273h9.818v1.363zM14.727 6h6l-6-6v6z"></path></svg></a></div></div><div class="prose dark:prose-invert prose-p:text-justify max-w-none pt-8 pb-8 xl:col-span-2"><p>Ben is a versatile full-stack engineer who has journeyed across the technical landscape—from backend to frontend and even DevOps. Today, he juggles an Elixir LiveView application while crafting features in Node.js and React.</p><p>With a career built on adaptability, Ben approaches software development with a holistic perspective. He thrives on complex challenges and builds robust, maintainable solutions that stand the test of time.</p><p>When not immersed in code, Ben can be found exploring the outdoors with his loyal companion Rocky, or embracing the beautiful chaos of parenting his 8-year-old son and 5-year-old daughter. Their energy and curiosity constantly remind him why he loves building things that matter.</p></div></div></div><hr class="mt-20 divide-y divide-gray-200 dark:divide-gray-700"/><ul class="divide-y divide-gray-200 dark:divide-gray-700"><li class="py-12"><article><div class="space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0"><dl><dt class="sr-only">Published on</dt><dd class="text-base leading-6 font-medium text-gray-500 dark:text-gray-400"><time dateTime="2026-01-08T00:00:00.000Z">January 8, 2026</time></dd></dl><div class="space-y-5 xl:col-span-3"><div class="space-y-6"><div><h2 class="text-2xl leading-8 font-bold tracking-tight"><a class="text-gray-900 dark:text-gray-100" href="/blog/20260108-settimeout-react-code-smell">Why setTimeout(..., 0) Is (Almost Always) a React Code Smell</a></h2><div class="flex flex-wrap"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/react">react</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/javascript">javascript</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/frontend">frontend</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/react-18">react-18</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/performance">performance</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/best-practices">best-practices</a></div></div><div class="prose max-w-none text-gray-500 dark:text-gray-400">Using setTimeout(..., 0) to &quot;fix&quot; React timing issues often hides real data-flow bugs, introduces leaks and race conditions, and can break during React 18+ migrations due to batching and concurrent rendering.</div></div><div class="text-base leading-6 font-medium"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400" aria-label="Read more: &quot;Why setTimeout(..., 0) Is (Almost Always) a React Code Smell&quot;" href="/blog/20260108-settimeout-react-code-smell">Read more →</a></div></div></div></article></li><li class="py-12"><article><div class="space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0"><dl><dt class="sr-only">Published on</dt><dd class="text-base leading-6 font-medium text-gray-500 dark:text-gray-400"><time dateTime="2025-08-22T00:00:00.000Z">August 22, 2025</time></dd></dl><div class="space-y-5 xl:col-span-3"><div class="space-y-6"><div><h2 class="text-2xl leading-8 font-bold tracking-tight"><a class="text-gray-900 dark:text-gray-100" href="/blog/20250822-AI-in-the-developers-toolkit">AI in the Developer&#x27;s Toolkit</a></h2><div class="flex flex-wrap"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/ai">AI</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/development">development</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/productivity">productivity</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/tools">tools</a></div></div><div class="prose max-w-none text-gray-500 dark:text-gray-400">Practical insights on integrating AI into development workflows, from code agents to MCPs, and how to optimize codebases for effective AI collaboration.</div></div><div class="text-base leading-6 font-medium"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400" aria-label="Read more: &quot;AI in the Developer&#x27;s Toolkit&quot;" href="/blog/20250822-AI-in-the-developers-toolkit">Read more →</a></div></div></div></article></li><li class="py-12"><article><div class="space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0"><dl><dt class="sr-only">Published on</dt><dd class="text-base leading-6 font-medium text-gray-500 dark:text-gray-400"><time dateTime="2025-07-15T00:00:00.000Z">July 15, 2025</time></dd></dl><div class="space-y-5 xl:col-span-3"><div class="space-y-6"><div><h2 class="text-2xl leading-8 font-bold tracking-tight"><a class="text-gray-900 dark:text-gray-100" href="/blog/20250715-time-with-me">Building Timewith.me</a></h2><div class="flex flex-wrap"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/github">github</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/projects">projects</a></div></div><div class="prose max-w-none text-gray-500 dark:text-gray-400">A web app that analyzes your Google Calendar to find and share your free time with friends. TimeWith.me features a modern, responsive UI with easy sharing options. Built to explore serverless, real-time architectures, it supports multiple calendars, custom date ranges.</div></div><div class="text-base leading-6 font-medium"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400" aria-label="Read more: &quot;Building Timewith.me&quot;" href="/blog/20250715-time-with-me">Read more →</a></div></div></div></article></li><li class="py-12"><article><div class="space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0"><dl><dt class="sr-only">Published on</dt><dd class="text-base leading-6 font-medium text-gray-500 dark:text-gray-400"><time dateTime="2025-06-06T00:00:00.000Z">June 6, 2025</time></dd></dl><div class="space-y-5 xl:col-span-3"><div class="space-y-6"><div><h2 class="text-2xl leading-8 font-bold tracking-tight"><a class="text-gray-900 dark:text-gray-100" href="/blog/20250606-creating-exblock">Building a Simple Blockchain in Elixir</a></h2><div class="flex flex-wrap"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/blockchain">blockchain</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/elixir">elixir</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/projects">projects</a></div></div><div class="prose max-w-none text-gray-500 dark:text-gray-400">A straightforward implementation of basic blockchain concepts for learning purposes.</div></div><div class="text-base leading-6 font-medium"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400" aria-label="Read more: &quot;Building a Simple Blockchain in Elixir&quot;" href="/blog/20250606-creating-exblock">Read more →</a></div></div></div></article></li><li class="py-12"><article><div class="space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0"><dl><dt class="sr-only">Published on</dt><dd class="text-base leading-6 font-medium text-gray-500 dark:text-gray-400"><time dateTime="2025-05-16T00:00:00.000Z">May 16, 2025</time></dd></dl><div class="space-y-5 xl:col-span-3"><div class="space-y-6"><div><h2 class="text-2xl leading-8 font-bold tracking-tight"><a class="text-gray-900 dark:text-gray-100" href="/blog/20250516-StarfieldVisualizer">Building an Audio-Reactive Starfield Visualizer in Unity</a></h2><div class="flex flex-wrap"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/unity">unity</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/shaders">shaders</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/hlsl">HLSL</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/projects">projects</a><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase" href="/tags/vizualization">vizualization</a></div></div><div class="prose max-w-none text-gray-500 dark:text-gray-400">A deep dive into the development of a real-time audio visualization project in Unity, featuring custom HLSL shaders and ripple effects.</div></div><div class="text-base leading-6 font-medium"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400" aria-label="Read more: &quot;Building an Audio-Reactive Starfield Visualizer in Unity&quot;" href="/blog/20250516-StarfieldVisualizer">Read more →</a></div></div></div></article></li></ul><div class="flex justify-end text-base leading-6 font-medium"><a class="text-primary-500 hover:text-primary-600 dark:hover:text-primary-400" aria-label="All posts" href="/blog">All Posts →</a></div><div class="flex items-center justify-center pt-4"><div><div class="pb-1 text-lg font-semibold text-gray-800 dark:text-gray-100">Subscribe to the newsletter</div><form class="flex flex-col sm:flex-row"><div><label for="email-input"><span class="sr-only">Email address</span><input autoComplete="email" class="focus:ring-primary-600 w-72 rounded-md px-4 focus:border-transparent focus:outline-none focus:ring-2 dark:bg-black" id="email-input" placeholder="Enter your email" required="" type="email" name="email"/></label></div><div class="mt-2 flex w-full rounded-md shadow-sm sm:mt-0 sm:ml-3"><button class="bg-primary-500 w-full rounded-md py-2 px-4 font-medium text-white sm:py-0 hover:bg-primary-700 dark:hover:bg-primary-400 focus:ring-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 dark:ring-offset-black" type="submit">Sign up</button></div></form></div></div></main><footer><div class="mt-16 flex flex-col items-center"><div class="mb-3 flex space-x-4"><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="mailto:Ben@BenGlasser.com"><span class="sr-only">mail</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6"><title>Mail</title><path d="M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z"></path><path d="M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://github.com/benglasser"><span class="sr-only">github</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/benglasser"><span class="sr-only">linkedin</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6"><title>Linkedin</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://twitter.com/benglasser"><span class="sr-only">x</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6"><title>X</title><path d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"></path></svg></a></div><div class="mb-2 flex space-x-2 text-sm text-gray-500 dark:text-gray-400"><div>Ben Glasser</div><div> • </div><div>© 2026</div><div> • </div><a class="break-words" href="/">Ben Glasser</a></div><div class="mb-8 text-sm text-gray-500 dark:text-gray-400"></div></div></footer></section><script src="/_next/static/chunks/webpack-af24fb31267d6e11.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[1478,[\"545\",\"static/chunks/c16f53c3-5b47b7f1ae12d8f6.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"277\",\"static/chunks/277-b9e7a963d9beba01.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"177\",\"static/chunks/app/layout-ac37df6142c77070.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"ThemeProviders\"]\n3:I[3774,[\"545\",\"static/chunks/c16f53c3-5b47b7f1ae12d8f6.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"277\",\"static/chunks/277-b9e7a963d9beba01.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"177\",\"static/chunks/app/layout-ac37df6142c77070.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"Analytics\"]\n4:I[9243,[\"545\",\"static/chunks/c16f53c3-5b47b7f1ae12d8f6.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"277\",\"static/chunks/277-b9e7a963d9beba01.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"177\",\"static/chunks/app/layout-ac37df6142c77070.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"\"]\n5:I[7392,[\"545\",\"static/chunks/c16f53c3-5b47b7f1ae12d8f6.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"277\",\"static/chunks/277-b9e7a963d9beba01.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"177\",\"static/chunks/app/layout-ac37df6142c77070.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"KBarSearchProvider\"]\n6:I[6874,[\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"63\",\"static/chunks/63-4d0d4c241eaac2a3.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"974\",\"static/chunks/app/page-2969ef1d9492914e.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"\"]\n7:I[4159,[\"545\",\"static/chunks/c16f53c3-5b47b7f1ae12d8f6.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"277\",\"static/chunks/277-b9e7a963d9beba01.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"177\",\"static/chunk"])</script><script>self.__next_f.push([1,"s/app/layout-ac37df6142c77070.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"KBarButton\"]\n8:I[1762,[\"545\",\"static/chunks/c16f53c3-5b47b7f1ae12d8f6.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"277\",\"static/chunks/277-b9e7a963d9beba01.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"177\",\"static/chunks/app/layout-ac37df6142c77070.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"default\"]\n9:I[7298,[\"545\",\"static/chunks/c16f53c3-5b47b7f1ae12d8f6.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"277\",\"static/chunks/277-b9e7a963d9beba01.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"177\",\"static/chunks/app/layout-ac37df6142c77070.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"default\"]\na:I[7555,[],\"\"]\nb:I[1295,[],\"\"]\nd:I[9665,[],\"OutletBoundary\"]\n10:I[9665,[],\"ViewportBoundary\"]\n12:I[9665,[],\"MetadataBoundary\"]\n14:I[6614,[],\"\"]\n:HL[\"/_next/static/media/36966cca54120369-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/51ff4ab09cd9a322.css?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"style\"]\n:HL[\"/_next/static/css/353025b7e707a2ff.css?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"QloqMTwphcUppuF5HuXdx\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/51ff4ab09cd9a322.css?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/353025b7e707a2ff.css?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en-us\",\"className\":\"__variable_dd5b2f scroll-smooth\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"sizes\":\"76x76\",\"href\":\"/static/favicons/apple-touch-icon.png\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/png\",\"sizes\":\"32x32\",\"href\":\"/static/favicons/favicon-32x32.png\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/png\",\"sizes\":\"16x16\",\"href\":\"/static/favicons/favicon-16x16.png\"}],[\"$\",\"link\",null,{\"rel\":\"manifest\",\"href\":\"/static/favicons/site.webmanifest\"}],[\"$\",\"link\",null,{\"rel\":\"mask-icon\",\"href\":\"/static/favicons/safari-pinned-tab.svg\",\"color\":\"#5bbad5\"}],[\"$\",\"meta\",null,{\"name\":\"msapplication-TileColor\",\"content\":\"#000000\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: light)\",\"content\":\"#fff\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: dark)\",\"content\":\"#000\"}],[\"$\",\"link\",null,{\"rel\":\"alternate\",\"type\":\"application/rss+xml\",\"href\":\"/feed.xml\"}],[\"$\",\"body\",null,{\"className\":\"bg-white pl-[calc(100vw-100%)] text-black antialiased dark:bg-gray-950 dark:text-white\",\"children\":[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"$L3\",null,{}],[\"$undefined\",\"$undefined\",\"$undefined\",[\"$\",\"$L4\",null,{\"async\":true,\"defer\":true,\"src\":\"https://analytics.umami.is/script.js\"}],[[\"$\",\"$L4\",null,{\"strategy\":\"afterInteractive\",\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-5KXGNH453R\"}],[\"$\",\"$L4\",null,{\"strategy\":\"afterInteractive\",\"id\":\"ga-script\",\"children\":\"\\n            window.dataLayer = window.dataLayer || [];\\n            function gtag(){dataLayer.push(arguments);}\\n            gtag('js', new Date());\\n            gtag('config', 'G-5KXGNH453R');\\n        \"}]],\"$undefined\"],[\"$\",\"section\",null,{\"className\":\"mx-auto max-w-3xl px-4 sm:px-6 xl:max-w-5xl xl:px-0\",\"children\":[[\"$\",\"$L5\",null,{\"kbarConfig\":{\"searchDocumentsPath\":\"/search.json\"},\"children\":[[\"$\",\"header\",null,{\"className\":\"flex items-center w-full bg-white dark:bg-gray-950 justify-between py-10\",\"children\":[[\"$\",\"$L6\",null,{\"className\":\"break-words\",\"href\":\"/\",\"aria-label\":\"Ben Glasser\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between\",\"children\":[\"$\",\"div\",null,{\"className\":\"hidden h-6 text-2xl font-semibold sm:block\",\"children\":\"Ben Glasser\"}]}]}],[\"$\",\"div\",null,{\"className\":\"flex items-center space-x-4 leading-5 sm:-mr-6 sm:space-x-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"no-scrollbar hidden max-w-40 items-center gap-x-4 overflow-x-auto sm:flex md:max-w-72 lg:max-w-96\",\"children\":[[\"$\",\"$L6\",\"Resume\",{\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100\",\"href\":\"/blog/resume\",\"children\":\"Resume\"}],[\"$\",\"$L6\",\"Blog\",{\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100\",\"href\":\"/blog\",\"children\":\"Blog\"}],[\"$\",\"$L6\",\"Projects\",{\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100\",\"href\":\"/projects\",\"children\":\"Projects\"}],[\"$\",\"$L6\",\"Tags\",{\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 m-1 font-medium text-gray-900 dark:text-gray-100\",\"href\":\"/tags\",\"children\":\"Tags\"}]]}],[\"$\",\"$L7\",null,{\"aria-label\":\"Search\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":1.5,\"stroke\":\"currentColor\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 h-6 w-6 text-gray-900 dark:text-gray-100\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z\"}]}]}],[\"$\",\"$L8\",null,{}],[\"$\",\"$L9\",null,{}]]}]]}],[\"$\",\"main\",null,{\"className\":\"mb-auto\",\"children\":[\"$\",\"$La\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Lb\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col items-start justify-start md:mt-24 md:flex-row md:items-center md:justify-center md:space-x-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"space-x-2 pt-6 pb-8 md:space-y-5\",\"children\":[\"$\",\"h1\",null,{\"className\":\"text-6xl leading-9 font-extrabold tracking-tight text-gray-900 md:border-r-2 md:px-6 md:text-8xl md:leading-14 dark:text-gray-100\",\"children\":\"404\"}]}],[\"$\",\"div\",null,{\"className\":\"max-w-md\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mb-4 text-xl leading-normal font-bold md:text-2xl\",\"children\":\"Sorry we couldn't find this page.\"}],[\"$\",\"p\",null,{\"className\":\"mb-8\",\"children\":\"But dont worry, you can find plenty of other things on our homepage.\"}],[\"$\",\"$L6\",null,{\"className\":\"focus:shadow-outline-blue inline rounded-lg border border-transparent bg-blue-600 px-4 py-2 text-sm leading-5 font-medium text-white shadow-xs transition-colors duration-150 hover:bg-blue-700 focus:outline-hidden dark:hover:bg-blue-500\",\"href\":\"/\",\"children\":\"Back to homepage\"}]]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],[\"$\",\"footer\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"mt-16 flex flex-col items-center\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-3 flex space-x-4\",\"children\":[[\"$\",\"a\",null,{\"className\":\"text-sm text-gray-500 transition hover:text-gray-600\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"href\":\"mailto:Ben@BenGlasser.com\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"mail\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6\",\"children\":[[\"$\",\"title\",null,{\"children\":\"Mail\"}],[\"$\",\"path\",null,{\"d\":\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\"}],[\"$\",\"path\",null,{\"d\":\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\"}]]}]]}],[\"$\",\"a\",null,{\"className\":\"text-sm text-gray-500 transition hover:text-gray-600\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"href\":\"https://github.com/benglasser\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"github\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6\",\"children\":[[\"$\",\"title\",null,{\"children\":\"GitHub\"}],[\"$\",\"path\",null,{\"d\":\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"}]]}]]}],[\"$\",\"a\",null,{\"className\":\"text-sm text-gray-500 transition hover:text-gray-600\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"href\":\"https://www.linkedin.com/in/benglasser\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"linkedin\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6\",\"children\":[[\"$\",\"title\",null,{\"children\":\"Linkedin\"}],[\"$\",\"path\",null,{\"d\":\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"}]]}]]}],[\"$\",\"a\",null,{\"className\":\"text-sm text-gray-500 transition hover:text-gray-600\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"href\":\"https://twitter.com/benglasser\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"x\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-6 w-6\",\"children\":[[\"$\",\"title\",null,{\"children\":\"X\"}],[\"$\",\"path\",null,{\"d\":\"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z\"}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mb-2 flex space-x-2 text-sm text-gray-500 dark:text-gray-400\",\"children\":[[\"$\",\"div\",null,{\"children\":\"Ben Glasser\"}],[\"$\",\"div\",null,{\"children\":\" • \"}],[\"$\",\"div\",null,{\"children\":\"© 2026\"}],[\"$\",\"div\",null,{\"children\":\" • \"}],[\"$\",\"$L6\",null,{\"className\":\"break-words\",\"href\":\"/\",\"children\":\"Ben Glasser\"}]]}],[\"$\",\"div\",null,{\"className\":\"mb-8 text-sm text-gray-500 dark:text-gray-400\"}]]}]}]]}]]}]}]]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$Lc\",\"$undefined\",null,[\"$\",\"$Ld\",null,{\"children\":[\"$Le\",\"$Lf\",null]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$1\",\"7Zkl5rXZZVafnVoGi_7dB\",{\"children\":[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],[\"$\",\"$L12\",null,{\"children\":\"$L13\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$14\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"15:I[3063,[\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"63\",\"static/chunks/63-4d0d4c241eaac2a3.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"974\",\"static/chunks/app/page-2969ef1d9492914e.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"Image\"]\n16:I[4302,[\"874\",\"static/chunks/874-efe6736574b279d5.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"63\",\"static/chunks/63-4d0d4c241eaac2a3.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\",\"974\",\"static/chunks/app/page-2969ef1d9492914e.js?dpl=dpl_9PAhAMPHUxbWZSvSozcWeGnLnqGU\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"div\",null,{\"className\":\"divide-y divide-gray-200 dark:divide-gray-700\",\"children\":[\"$\",\"div\",null,{\"className\":\"items-start space-y-2 xl:grid xl:grid-cols-3 xl:gap-x-8 xl:space-y-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col items-center space-x-2 pt-8\",\"children\":[[\"$\",\"$L15\",null,{\"src\":\"/static/images/me.png\",\"alt\":\"avatar\",\"width\":192,\"height\":192,\"className\":\"h-48 w-48 rounded-full\"}],[\"$\",\"h3\",null,{\"className\":\"pt-4 pb-2 text-2xl leading-8 font-bold tracking-tight\",\"children\":\"Ben Glasser\"}],[\"$\",\"div\",null,{\"className\":\"text-gray-500 dark:text-gray-400\",\"children\":\"Code Slinger\"}],[\"$\",\"div\",null,{\"className\":\"text-gray-500 dark:text-gray-400\",\"children\":\"Fullcast\"}],[\"$\",\"div\",null,{\"className\":\"flex space-x-3 pt-6\",\"children\":[[\"$\",\"a\",null,{\"className\":\"text-sm text-gray-500 transition hover:text-gray-600\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"href\":\"mailto:ben@benglasser.com\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"mail\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-8 w-8\",\"children\":[[\"$\",\"title\",null,{\"children\":\"Mail\"}],[\"$\",\"path\",null,{\"d\":\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\"}],[\"$\",\"path\",null,{\"d\":\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\"}]]}]]}],[\"$\",\"a\",null,{\"className\":\"text-sm text-gray-500 transition hover:text-gray-600\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"href\":\"https://github.com/benglasser\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"github\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-8 w-8\",\"children\":[[\"$\",\"title\",null,{\"children\":\"GitHub\"}],[\"$\",\"path\",null,{\"d\":\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"}]]}]]}],[\"$\",\"a\",null,{\"className\":\"text-sm text-gray-500 transition hover:text-gray-600\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"href\":\"https://www.linkedin.com/in/benglasser\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"linkedin\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-8 w-8\",\"children\":[[\"$\",\"title\",null,{\"children\":\"Linkedin\"}],[\"$\",\"path\",null,{\"d\":\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"}]]}]]}],null,null,[\"$\",\"a\",null,{\"className\":\"text-sm text-gray-500 transition hover:text-gray-600\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"href\":\"http://benglasser.com/blog/resume\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"resume\"}],[\"$\",\"svg\",null,{\"role\":\"img\",\"viewBox\":\"0 0 24 24\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"className\":\"hover:text-primary-500 dark:hover:text-primary-400 fill-current text-gray-700 dark:text-gray-200 h-8 w-8\",\"children\":[[\"$\",\"title\",null,{\"children\":\"Resume\"}],[\"$\",\"path\",null,{\"d\":\"M14.727 6.727H14V0H4.91c-.905 0-1.637.732-1.637 1.636v20.728c0 .904.732 1.636 1.636 1.636h14.182c.904 0 1.636-.732 1.636-1.636V6.727h-6zm-.545 10.455H7.09v-1.364h7.09v1.364zm2.727-3.273H7.091v-1.364h9.818v1.364zm0-3.273H7.091V9.273h9.818v1.363zM14.727 6h6l-6-6v6z\"}]]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose dark:prose-invert prose-p:text-justify max-w-none pt-8 pb-8 xl:col-span-2\",\"children\":[[\"$\",\"p\",null,{\"children\":\"Ben is a versatile full-stack engineer who has journeyed across the technical landscape—from backend to frontend and even DevOps. Today, he juggles an Elixir LiveView application while crafting features in Node.js and React.\"}],[\"$\",\"p\",null,{\"children\":\"With a career built on adaptability, Ben approaches software development with a holistic perspective. He thrives on complex challenges and builds robust, maintainable solutions that stand the test of time.\"}],[\"$\",\"p\",null,{\"children\":\"When not immersed in code, Ben can be found exploring the outdoors with his loyal companion Rocky, or embracing the beautiful chaos of parenting his 8-year-old son and 5-year-old daughter. Their energy and curiosity constantly remind him why he loves building things that matter.\"}]]}]]}]}],[\"$\",\"hr\",null,{\"className\":\"mt-20 divide-y divide-gray-200 dark:divide-gray-700\"}],[\"$\",\"ul\",null,{\"className\":\"divide-y divide-gray-200 dark:divide-gray-700\",\"children\":[false,[[\"$\",\"li\",\"20260108-settimeout-react-code-smell\",{\"className\":\"py-12\",\"children\":[\"$\",\"article\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0\",\"children\":[[\"$\",\"dl\",null,{\"children\":[[\"$\",\"dt\",null,{\"className\":\"sr-only\",\"children\":\"Published on\"}],[\"$\",\"dd\",null,{\"className\":\"text-base leading-6 font-medium text-gray-500 dark:text-gray-400\",\"children\":[\"$\",\"time\",null,{\"dateTime\":\"2026-01-08T00:00:00.000Z\",\"children\":\"January 8, 2026\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-5 xl:col-span-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"space-y-6\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl leading-8 font-bold tracking-tight\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-gray-900 dark:text-gray-100\",\"href\":\"/blog/20260108-settimeout-react-code-smell\",\"children\":\"Why setTimeout(..., 0) Is (Almost Always) a React Code Smell\"}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap\",\"children\":[[\"$\",\"$L6\",\"react\",{\"href\":\"/tags/react\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"react\"}],[\"$\",\"$L6\",\"javascript\",{\"href\":\"/tags/javascript\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"javascript\"}],[\"$\",\"$L6\",\"frontend\",{\"href\":\"/tags/frontend\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"frontend\"}],[\"$\",\"$L6\",\"react-18\",{\"href\":\"/tags/react-18\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"react-18\"}],[\"$\",\"$L6\",\"performance\",{\"href\":\"/tags/performance\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"performance\"}],[\"$\",\"$L6\",\"best-practices\",{\"href\":\"/tags/best-practices\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"best-practices\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose max-w-none text-gray-500 dark:text-gray-400\",\"children\":\"Using setTimeout(..., 0) to \\\"fix\\\" React timing issues often hides real data-flow bugs, introduces leaks and race conditions, and can break during React 18+ migrations due to batching and concurrent rendering.\"}]]}],[\"$\",\"div\",null,{\"className\":\"text-base leading-6 font-medium\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400\",\"href\":\"/blog/20260108-settimeout-react-code-smell\",\"aria-label\":\"Read more: \\\"Why setTimeout(..., 0) Is (Almost Always) a React Code Smell\\\"\",\"children\":\"Read more →\"}]}]]}]]}]}]}],[\"$\",\"li\",\"20250822-AI-in-the-developers-toolkit\",{\"className\":\"py-12\",\"children\":[\"$\",\"article\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0\",\"children\":[[\"$\",\"dl\",null,{\"children\":[[\"$\",\"dt\",null,{\"className\":\"sr-only\",\"children\":\"Published on\"}],[\"$\",\"dd\",null,{\"className\":\"text-base leading-6 font-medium text-gray-500 dark:text-gray-400\",\"children\":[\"$\",\"time\",null,{\"dateTime\":\"2025-08-22T00:00:00.000Z\",\"children\":\"August 22, 2025\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-5 xl:col-span-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"space-y-6\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl leading-8 font-bold tracking-tight\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-gray-900 dark:text-gray-100\",\"href\":\"/blog/20250822-AI-in-the-developers-toolkit\",\"children\":\"AI in the Developer's Toolkit\"}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap\",\"children\":[[\"$\",\"$L6\",\"AI\",{\"href\":\"/tags/ai\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"AI\"}],[\"$\",\"$L6\",\"development\",{\"href\":\"/tags/development\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"development\"}],[\"$\",\"$L6\",\"productivity\",{\"href\":\"/tags/productivity\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"productivity\"}],[\"$\",\"$L6\",\"tools\",{\"href\":\"/tags/tools\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"tools\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose max-w-none text-gray-500 dark:text-gray-400\",\"children\":\"Practical insights on integrating AI into development workflows, from code agents to MCPs, and how to optimize codebases for effective AI collaboration.\"}]]}],[\"$\",\"div\",null,{\"className\":\"text-base leading-6 font-medium\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400\",\"href\":\"/blog/20250822-AI-in-the-developers-toolkit\",\"aria-label\":\"Read more: \\\"AI in the Developer's Toolkit\\\"\",\"children\":\"Read more →\"}]}]]}]]}]}]}],[\"$\",\"li\",\"20250715-time-with-me\",{\"className\":\"py-12\",\"children\":[\"$\",\"article\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0\",\"children\":[[\"$\",\"dl\",null,{\"children\":[[\"$\",\"dt\",null,{\"className\":\"sr-only\",\"children\":\"Published on\"}],[\"$\",\"dd\",null,{\"className\":\"text-base leading-6 font-medium text-gray-500 dark:text-gray-400\",\"children\":[\"$\",\"time\",null,{\"dateTime\":\"2025-07-15T00:00:00.000Z\",\"children\":\"July 15, 2025\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-5 xl:col-span-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"space-y-6\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl leading-8 font-bold tracking-tight\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-gray-900 dark:text-gray-100\",\"href\":\"/blog/20250715-time-with-me\",\"children\":\"Building Timewith.me\"}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap\",\"children\":[[\"$\",\"$L6\",\"github\",{\"href\":\"/tags/github\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"github\"}],[\"$\",\"$L6\",\"projects\",{\"href\":\"/tags/projects\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"projects\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose max-w-none text-gray-500 dark:text-gray-400\",\"children\":\"A web app that analyzes your Google Calendar to find and share your free time with friends. TimeWith.me features a modern, responsive UI with easy sharing options. Built to explore serverless, real-time architectures, it supports multiple calendars, custom date ranges.\"}]]}],[\"$\",\"div\",null,{\"className\":\"text-base leading-6 font-medium\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400\",\"href\":\"/blog/20250715-time-with-me\",\"aria-label\":\"Read more: \\\"Building Timewith.me\\\"\",\"children\":\"Read more →\"}]}]]}]]}]}]}],[\"$\",\"li\",\"20250606-creating-exblock\",{\"className\":\"py-12\",\"children\":[\"$\",\"article\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0\",\"children\":[[\"$\",\"dl\",null,{\"children\":[[\"$\",\"dt\",null,{\"className\":\"sr-only\",\"children\":\"Published on\"}],[\"$\",\"dd\",null,{\"className\":\"text-base leading-6 font-medium text-gray-500 dark:text-gray-400\",\"children\":[\"$\",\"time\",null,{\"dateTime\":\"2025-06-06T00:00:00.000Z\",\"children\":\"June 6, 2025\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-5 xl:col-span-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"space-y-6\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl leading-8 font-bold tracking-tight\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-gray-900 dark:text-gray-100\",\"href\":\"/blog/20250606-creating-exblock\",\"children\":\"Building a Simple Blockchain in Elixir\"}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap\",\"children\":[[\"$\",\"$L6\",\"blockchain\",{\"href\":\"/tags/blockchain\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"blockchain\"}],[\"$\",\"$L6\",\"elixir\",{\"href\":\"/tags/elixir\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"elixir\"}],[\"$\",\"$L6\",\"projects\",{\"href\":\"/tags/projects\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"projects\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose max-w-none text-gray-500 dark:text-gray-400\",\"children\":\"A straightforward implementation of basic blockchain concepts for learning purposes.\"}]]}],[\"$\",\"div\",null,{\"className\":\"text-base leading-6 font-medium\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400\",\"href\":\"/blog/20250606-creating-exblock\",\"aria-label\":\"Read more: \\\"Building a Simple Blockchain in Elixir\\\"\",\"children\":\"Read more →\"}]}]]}]]}]}]}],[\"$\",\"li\",\"20250516-StarfieldVisualizer\",{\"className\":\"py-12\",\"children\":[\"$\",\"article\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-2 xl:grid xl:grid-cols-4 xl:items-baseline xl:space-y-0\",\"children\":[[\"$\",\"dl\",null,{\"children\":[[\"$\",\"dt\",null,{\"className\":\"sr-only\",\"children\":\"Published on\"}],[\"$\",\"dd\",null,{\"className\":\"text-base leading-6 font-medium text-gray-500 dark:text-gray-400\",\"children\":[\"$\",\"time\",null,{\"dateTime\":\"2025-05-16T00:00:00.000Z\",\"children\":\"May 16, 2025\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"space-y-5 xl:col-span-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"space-y-6\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl leading-8 font-bold tracking-tight\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-gray-900 dark:text-gray-100\",\"href\":\"/blog/20250516-StarfieldVisualizer\",\"children\":\"Building an Audio-Reactive Starfield Visualizer in Unity\"}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap\",\"children\":[[\"$\",\"$L6\",\"unity\",{\"href\":\"/tags/unity\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"unity\"}],[\"$\",\"$L6\",\"shaders\",{\"href\":\"/tags/shaders\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"shaders\"}],[\"$\",\"$L6\",\"HLSL\",{\"href\":\"/tags/hlsl\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"HLSL\"}],[\"$\",\"$L6\",\"projects\",{\"href\":\"/tags/projects\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"projects\"}],[\"$\",\"$L6\",\"vizualization\",{\"href\":\"/tags/vizualization\",\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400 mr-3 text-sm font-medium uppercase\",\"children\":\"vizualization\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"prose max-w-none text-gray-500 dark:text-gray-400\",\"children\":\"A deep dive into the development of a real-time audio visualization project in Unity, featuring custom HLSL shaders and ripple effects.\"}]]}],[\"$\",\"div\",null,{\"className\":\"text-base leading-6 font-medium\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400\",\"href\":\"/blog/20250516-StarfieldVisualizer\",\"aria-label\":\"Read more: \\\"Building an Audio-Reactive Starfield Visualizer in Unity\\\"\",\"children\":\"Read more →\"}]}]]}]]}]}]}]]]}],[\"$\",\"div\",null,{\"className\":\"flex justify-end text-base leading-6 font-medium\",\"children\":[\"$\",\"$L6\",null,{\"className\":\"text-primary-500 hover:text-primary-600 dark:hover:text-primary-400\",\"href\":\"/blog\",\"aria-label\":\"All posts\",\"children\":\"All Posts →\"}]}],[\"$\",\"div\",null,{\"className\":\"flex items-center justify-center pt-4\",\"children\":[\"$\",\"$L16\",null,{}]}]]\n"])</script><script>self.__next_f.push([1,"11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\ne:null\n"])</script><script>self.__next_f.push([1,"f:null\n13:[[\"$\",\"title\",\"0\",{\"children\":\"Ben Glasser\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"A blog about the trials and tribulations of software development with a few side projects thrown in for good measure\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"3\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://benglasser.com\"}],[\"$\",\"link\",\"5\",{\"rel\":\"alternate\",\"type\":\"application/rss+xml\",\"href\":\"https://benglasser.com/feed.xml\"}],[\"$\",\"meta\",\"6\",{\"name\":\"google-site-verification\",\"content\":\"72HlL5aNeTStJZwQFi2zWsixXF8yzeRimQNI9sPTWGk\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:title\",\"content\":\"Ben Glasser\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:description\",\"content\":\"A blog about the trials and tribulations of software development with a few side projects thrown in for good measure\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:url\",\"content\":\"https://benglasser.com\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:site_name\",\"content\":\"Ben Glasser\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://benglasser.com/static/images/BG-512x512.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:title\",\"content\":\"Ben Glasser\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:description\",\"content\":\"A blog about the trials and tribulations of software development with a few side projects thrown in for good measure\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:image\",\"content\":\"https://benglasser.com/static/images/BG-512x512.png\"}]]\n"])</script></body></html>