| Server IP : 35.80.110.71 / Your IP : 216.73.216.221 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64 User : ubuntu ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/philiprehberger-nextjs/.next/server/pages/ |
Upload File : |
<!DOCTYPE html><!--W0sw1Te23_qdM3m55_boa--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/13971731025ec697-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/22a5144ee8d83bca-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/7d4881bb7e1bf84d-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/eaead17c7dbfcd5d-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/fa3e259cafa8f47e-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/c10cdaa068c2318f.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c1dce634b81b10b1.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-a405bd68daaa461d.js"/><script src="/_next/static/chunks/4bd1b696-f6bedae49f0827a5.js" async=""></script><script src="/_next/static/chunks/1255-50ff1313f9e6a9b6.js" async=""></script><script src="/_next/static/chunks/main-app-740b569a66697e6a.js" async=""></script><script src="/_next/static/chunks/2619-3c9e02e22d10480a.js" async=""></script><script src="/_next/static/chunks/2164-6cb73cf7e6a812e7.js" async=""></script><script src="/_next/static/chunks/2343-0af4af0161362040.js" async=""></script><script src="/_next/static/chunks/app/layout-be52da0ced9c8906.js" async=""></script><script src="/_next/static/chunks/app/error-3f3685b5b3943d4c.js" async=""></script><script src="/_next/static/chunks/30a37ab2-845f6621c84e7766.js" async=""></script><script src="/_next/static/chunks/f7333993-8ae23e91986e3475.js" async=""></script><script src="/_next/static/chunks/53c13509-f966587b74eb547b.js" async=""></script><script src="/_next/static/chunks/8e1d74a4-bd7e9720e77d1243.js" async=""></script><script src="/_next/static/chunks/1356-b5d7fc27814cf1c2.js" async=""></script><script src="/_next/static/chunks/2420-5e3161989b1bac29.js" async=""></script><script src="/_next/static/chunks/app/page-d952b0a504cffb09.js" async=""></script><script src="/_next/static/chunks/app/global-error-945453988f9d698d.js" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-HZ8Z4XP611" as="script"/><link rel="preconnect" href="https://api.emailjs.com"/><link rel="dns-prefetch" href="https://api.emailjs.com"/><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>Philip Rehberger</title><meta name="description" content="Personal site of Philip Rehberger — music, books, family games, open source, and web projects."/><meta name="author" content="Philip Rehberger"/><link rel="manifest" href="/site.webmanifest"/><meta name="keywords" content="Philip Rehberger,music,books,games,open source,web projects,Colorado"/><meta name="creator" content="Philip Rehberger"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"/><meta property="og:title" content="Philip Rehberger"/><meta property="og:description" content="Personal site of Philip Rehberger — music, books, family games, open source, and web projects."/><meta property="og:url" content="https://philiprehberger.com"/><meta property="og:site_name" content="Philip Rehberger"/><meta property="og:locale" content="en_US"/><meta property="og:image:alt" content="Philip Rehberger — I make a lot of things."/><meta property="og:image:type" content="image/png"/><meta property="og:image" content="https://philiprehberger.com/opengraph-image?f5d1e7924e1bd2c1"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Philip Rehberger"/><meta name="twitter:description" content="Music, books, family games, open source, and web projects."/><meta name="twitter:image" content="https://philiprehberger.com/og-image.png"/><link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.ico"/><link rel="apple-touch-icon" href="/favicon/apple-touch-icon.png"/><script>(function () {
try {
var stored = null;
try { stored = window.localStorage.getItem('theme'); } catch (e) {}
var theme = (stored === 'light' || stored === 'dark') ? stored : null;
var resolved = theme;
if (!resolved) {
try {
resolved = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
} catch (e) {
resolved = 'light';
}
}
var root = document.documentElement;
root.classList.remove('light', 'dark');
root.classList.add(resolved);
// Phase 4e: mark first paint so the theme-switch transition (200ms cross-
// fade on body bg + color) does NOT fire during initial paint. ThemeContext
// removes this attribute on first effect tick after React hydrates.
root.setAttribute('data-theme-init', '');
} catch (e) {
document.documentElement.classList.add('light');
}
})();</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_246ccd __variable_c29908 __variable_0a80b4 __variable_0d7163 __variable_0e4539 antialiased"><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen flex flex-col bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100"><a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-[100] focus:px-4 focus:py-2 focus:bg-blue-600 focus:text-white focus:rounded-md focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-offset-2">Skip to main content</a><header class="sticky top-0 z-30 border-b border-gray-200 dark:border-gray-800 bg-white/90 dark:bg-gray-950/90 backdrop-blur-md font-heading"><nav aria-label="Main navigation" class="flex min-h-[60px] items-center justify-between px-6 lg:px-12 xl:px-20"><a class="text-[18px] font-logo text-gray-900 dark:text-white" href="/">Philip Rehberger</a><div class="hidden items-center gap-8 text-[14px] lg:flex"><a class="transition-colors text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" href="/">Home</a><a class="transition-colors text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" href="/portfolio">Web Projects</a><a class="transition-colors text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" href="/open-source-packages">Open Source</a><a class="transition-colors text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" href="/music">Music</a><a class="transition-colors text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" href="/games">Games</a><a class="transition-colors text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" href="/achievements">Achievements</a><a class="transition-colors text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" href="/about">About</a><a class="transition-colors text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" href="/contact">Contact</a></div><button type="button" class="flex h-11 w-11 items-center justify-center rounded-lg text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-white lg:hidden touch-target" aria-expanded="false" aria-controls="mobile-menu" aria-label="Open menu"><svg class="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path></svg></button></nav></header><main id="main-content" class="flex-1" tabindex="-1"><div class="min-h-[calc(100vh-70px)] flex items-center justify-center px-6"><div class="text-center max-w-xl relative"><div aria-hidden="true" class="font-playfair italic text-[10rem] md:text-[14rem] leading-none text-brand-600/10 dark:text-brand-600/20 select-none pointer-events-none absolute inset-x-0 -top-12 md:-top-20">404</div><div class="relative flex items-center justify-center gap-3 mb-6"><div class="w-8 h-0.5 bg-brand-600"></div><span class="text-xs font-medium tracking-[0.2em] text-brand-600 uppercase">404</span><div class="w-8 h-0.5 bg-brand-600"></div></div><h1 class="relative font-playfair text-4xl md:text-5xl text-gray-900 dark:text-white">Page <span class="text-brand-600 italic">not found</span></h1><p class="mt-4 text-lg text-gray-600 dark:text-gray-400">Sorry, the page you're looking for doesn't exist or has been moved.</p><div class="mt-8 flex flex-col sm:flex-row gap-4 justify-center"><a class="brand-press inline-flex items-center justify-center gap-2 px-6 py-3 bg-brand-600 text-white text-sm font-medium rounded-sm transition-colors" href="/">Go back home</a><a class="inline-flex items-center justify-center gap-2 px-6 py-3 border border-gray-300 dark:border-gray-700 text-gray-700 dark:text-gray-200 text-sm font-medium rounded-sm hover:border-brand-600 hover:text-brand-600 dark:hover:text-brand-600 transition-colors" href="/contact">Contact me</a></div></div></div><!--$--><!--/$--></main><footer class="border-t border-gray-200 dark:border-gray-800"><div class="hidden lg:grid grid-cols-[1fr_1fr_1fr_1fr] gap-8 px-6 lg:px-12 xl:px-20 py-10"><div><a class="text-[15px] font-logo text-gray-900 dark:text-white" href="/">Philip Rehberger</a><div class="mt-2 text-xs text-gray-400 dark:text-gray-500"><a href="mailto:me@philiprehberger.com" class="hover:text-brand-600 transition-colors">me@philiprehberger.com</a></div><p class="mt-4 text-xs text-gray-400 dark:text-gray-500 max-w-[28ch]">Developer, musician, writer. Based in Colorado.</p></div><div><h3 class="text-[10px] font-medium tracking-[0.2em] text-gray-500 dark:text-gray-400 uppercase mb-4">Recent</h3><ul class="space-y-2"><li class="text-xs"><a class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors line-clamp-1" href="/portfolio/switchyard">Switchyard</a><span class="font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-1">Featured Project</span></li><li class="text-xs"><a class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors line-clamp-1" href="/open-source-packages">Philiprehberger.IdGenerator</a><span class="font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-1">New Package</span></li><li class="text-xs"><a class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors line-clamp-1" href="/open-source-packages">philiprehberger-mask</a><span class="font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-1">New Package</span></li></ul></div><div><h3 class="text-[10px] font-medium tracking-[0.2em] text-gray-500 dark:text-gray-400 uppercase mb-4">Elsewhere</h3><ul class="space-y-2"><li class="text-xs"><a href="https://github.com/philiprehberger" target="_blank" rel="noopener noreferrer" class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors">GitHub<span class="sr-only">(opens in new tab)</span></a></li><li class="text-xs"><a href="https://linkedin.com/in/philiprehberger" target="_blank" rel="noopener noreferrer" class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors">LinkedIn<span class="sr-only">(opens in new tab)</span></a></li><li class="text-xs"><a href="https://scopeforged.com" target="_blank" rel="noopener noreferrer" class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors">ScopeForged<span class="sr-only">(opens in new tab)</span></a></li></ul></div><div class="flex flex-col items-end gap-3"><div class="flex items-center gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-800" role="radiogroup" aria-label="Theme selection"><button role="radio" aria-checked="false" aria-label="Light theme" class="rounded-md p-2 transition-colors text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white"><svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path></svg></button><button role="radio" aria-checked="false" aria-label="Dark theme" class="rounded-md p-2 transition-colors text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white"><svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path></svg></button><button role="radio" aria-checked="true" aria-label="System theme" class="rounded-md p-2 transition-colors bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white"><svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path></svg></button></div><div class="text-right"><p class="text-[10px] text-gray-400 dark:text-gray-500">© <!-- -->2026<!-- --> Philip Rehberger</p><p class="text-[10px] text-gray-400 dark:text-gray-500 mt-1">A<!-- --> <a href="https://scopeforged.com" target="_blank" rel="noopener noreferrer" class="hover:text-brand-600 transition-colors">ScopeForged</a> <!-- -->project</p></div></div></div><div class="lg:hidden px-6 py-8 space-y-7"><div class="text-center"><a class="text-[15px] font-logo text-gray-900 dark:text-white" href="/">Philip Rehberger</a><div class="flex items-center justify-center gap-2 mt-1 text-xs text-gray-400 dark:text-gray-500"><a href="mailto:me@philiprehberger.com" class="hover:text-brand-600 transition-colors">me@philiprehberger.com</a></div></div><div><h3 class="text-[10px] font-medium tracking-[0.2em] text-gray-500 dark:text-gray-400 uppercase mb-3 text-center">Recent</h3><ul class="space-y-2 max-w-sm mx-auto"><li class="text-xs text-center"><a class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors" href="/portfolio/switchyard">Switchyard</a><span class="font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-2">Featured Project</span></li><li class="text-xs text-center"><a class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors" href="/open-source-packages">Philiprehberger.IdGenerator</a><span class="font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-2">New Package</span></li><li class="text-xs text-center"><a class="text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors" href="/open-source-packages">philiprehberger-mask</a><span class="font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-2">New Package</span></li></ul></div><div class="flex items-center justify-center gap-5"><a href="https://github.com/philiprehberger" target="_blank" rel="noopener noreferrer" class="text-sm text-gray-500 dark:text-gray-400 hover:text-brand-600 transition-colors">GitHub<span class="sr-only">(opens in new tab)</span></a><a href="https://linkedin.com/in/philiprehberger" target="_blank" rel="noopener noreferrer" class="text-sm text-gray-500 dark:text-gray-400 hover:text-brand-600 transition-colors">LinkedIn<span class="sr-only">(opens in new tab)</span></a><a href="https://scopeforged.com" target="_blank" rel="noopener noreferrer" class="text-sm text-gray-500 dark:text-gray-400 hover:text-brand-600 transition-colors">ScopeForged<span class="sr-only">(opens in new tab)</span></a></div><div class="flex flex-col items-center gap-3"><div class="flex items-center gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-800" role="radiogroup" aria-label="Theme selection"><button role="radio" aria-checked="false" aria-label="Light theme" class="rounded-md p-2 transition-colors text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white"><svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path></svg></button><button role="radio" aria-checked="false" aria-label="Dark theme" class="rounded-md p-2 transition-colors text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white"><svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path></svg></button><button role="radio" aria-checked="true" aria-label="System theme" class="rounded-md p-2 transition-colors bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white"><svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path></svg></button></div><p class="text-[10px] text-gray-400 dark:text-gray-500">© <!-- -->2026<!-- --> Philip Rehberger ·<!-- --> <a href="https://scopeforged.com" target="_blank" rel="noopener noreferrer" class="hover:text-brand-600 transition-colors">ScopeForged</a> <!-- -->project</p></div></div></footer></div><script src="/_next/static/chunks/webpack-a405bd68daaa461d.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[5173,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"2164\",\"static/chunks/2164-6cb73cf7e6a812e7.js\",\"2343\",\"static/chunks/2343-0af4af0161362040.js\",\"7177\",\"static/chunks/app/layout-be52da0ced9c8906.js\"],\"default\"]\n3:I[7108,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"2164\",\"static/chunks/2164-6cb73cf7e6a812e7.js\",\"2343\",\"static/chunks/2343-0af4af0161362040.js\",\"7177\",\"static/chunks/app/layout-be52da0ced9c8906.js\"],\"ThemeProvider\"]\n4:I[15,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"2164\",\"static/chunks/2164-6cb73cf7e6a812e7.js\",\"2343\",\"static/chunks/2343-0af4af0161362040.js\",\"7177\",\"static/chunks/app/layout-be52da0ced9c8906.js\"],\"default\"]\n6:I[9766,[],\"\"]\n7:I[960,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"8039\",\"static/chunks/app/error-3f3685b5b3943d4c.js\"],\"default\"]\n8:I[8924,[],\"\"]\n9:I[2619,[\"2362\",\"static/chunks/30a37ab2-845f6621c84e7766.js\",\"5760\",\"static/chunks/f7333993-8ae23e91986e3475.js\",\"6446\",\"static/chunks/53c13509-f966587b74eb547b.js\",\"6711\",\"static/chunks/8e1d74a4-bd7e9720e77d1243.js\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"1356\",\"static/chunks/1356-b5d7fc27814cf1c2.js\",\"2164\",\"static/chunks/2164-6cb73cf7e6a812e7.js\",\"2420\",\"static/chunks/2420-5e3161989b1bac29.js\",\"8974\",\"static/chunks/app/page-d952b0a504cffb09.js\"],\"\"]\nd:I[4062,[\"4219\",\"static/chunks/app/global-error-945453988f9d698d.js\"],\"default\"]\n:HL[\"/_next/static/media/13971731025ec697-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/7d4881bb7e1bf84d-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/eaead17c7dbfcd5d-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/fa3e259cafa8f47e-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/c10cdaa068c2318f.css\",\"style\"]\n:HL[\"/_next/static/css/c1dce634b81b10b1.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"W0sw1Te23_qdM3m55_boa\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c10cdaa068c2318f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c1dce634b81b10b1.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function () {\\n try {\\n var stored = null;\\n try { stored = window.localStorage.getItem('theme'); } catch (e) {}\\n var theme = (stored === 'light' || stored === 'dark') ? stored : null;\\n var resolved = theme;\\n if (!resolved) {\\n try {\\n resolved = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\\n } catch (e) {\\n resolved = 'light';\\n }\\n }\\n var root = document.documentElement;\\n root.classList.remove('light', 'dark');\\n root.classList.add(resolved);\\n // Phase 4e: mark first paint so the theme-switch transition (200ms cross-\\n // fade on body bg + color) does NOT fire during initial paint. ThemeContext\\n // removes this attribute on first effect tick after React hydrates.\\n root.setAttribute('data-theme-init', '');\\n } catch (e) {\\n document.documentElement.classList.add('light');\\n }\\n})();\"}}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://api.emailjs.com\"}],[\"$\",\"link\",null,{\"rel\":\"dns-prefetch\",\"href\":\"https://api.emailjs.com\"}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_246ccd __variable_c29908 __variable_0a80b4 __variable_0d7163 __variable_0e4539 antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"footer\":\"$L5\",\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$7\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L8\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"min-h-[calc(100vh-70px)] flex items-center justify-center px-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center max-w-xl relative\",\"children\":[[\"$\",\"div\",null,{\"aria-hidden\":\"true\",\"className\":\"font-playfair italic text-[10rem] md:text-[14rem] leading-none text-brand-600/10 dark:text-brand-600/20 select-none pointer-events-none absolute inset-x-0 -top-12 md:-top-20\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"className\":\"relative flex items-center justify-center gap-3 mb-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-8 h-0.5 bg-brand-600\"}],[\"$\",\"span\",null,{\"className\":\"text-xs font-medium tracking-[0.2em] text-brand-600 uppercase\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"className\":\"w-8 h-0.5 bg-brand-600\"}]]}],[\"$\",\"h1\",null,{\"className\":\"relative font-playfair text-4xl md:text-5xl text-gray-900 dark:text-white\",\"children\":[\"Page \",[\"$\",\"span\",null,{\"className\":\"text-brand-600 italic\",\"children\":\"not found\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-lg text-gray-600 dark:text-gray-400\",\"children\":\"Sorry, the page you're looking for doesn't exist or has been moved.\"}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\",\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/\",\"className\":\"brand-press inline-flex items-center justify-center gap-2 px-6 py-3 bg-brand-600 text-white text-sm font-medium rounded-sm transition-colors\",\"children\":\"Go back home\"}],[\"$\",\"$L9\",null,{\"href\":\"/contact\",\"className\":\"inline-flex items-center justify-center gap-2 px-6 py-3 border border-gray-300 dark:border-gray-700 text-gray-700 dark:text-gray-200 text-sm font-medium rounded-sm hover:border-brand-600 hover:text-brand-600 dark:hover:text-brand-600 transition-colors\",\"children\":\"Contact me\"}]]}]]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":\"$La\",\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",\"$Lb\",{},null,false]},null,false]},null,false],\"$Lc\",false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"e:I[4431,[],\"OutletBoundary\"]\n10:I[5278,[],\"AsyncMetadataOutlet\"]\n12:I[4431,[],\"ViewportBoundary\"]\n14:I[4431,[],\"MetadataBoundary\"]\n15:\"$Sreact.suspense\"\na:[\"$\",\"$L8\",null,{}]\n"])</script><script>self.__next_f.push([1,"b:[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"min-h-[calc(100vh-70px)] flex items-center justify-center px-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center max-w-xl relative\",\"children\":[[\"$\",\"div\",null,{\"aria-hidden\":\"true\",\"className\":\"font-playfair italic text-[10rem] md:text-[14rem] leading-none text-brand-600/10 dark:text-brand-600/20 select-none pointer-events-none absolute inset-x-0 -top-12 md:-top-20\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"className\":\"relative flex items-center justify-center gap-3 mb-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-8 h-0.5 bg-brand-600\"}],[\"$\",\"span\",null,{\"className\":\"text-xs font-medium tracking-[0.2em] text-brand-600 uppercase\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"className\":\"w-8 h-0.5 bg-brand-600\"}]]}],[\"$\",\"h1\",null,{\"className\":\"relative font-playfair text-4xl md:text-5xl text-gray-900 dark:text-white\",\"children\":[\"Page \",[\"$\",\"span\",null,{\"className\":\"text-brand-600 italic\",\"children\":\"not found\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-lg text-gray-600 dark:text-gray-400\",\"children\":\"Sorry, the page you're looking for doesn't exist or has been moved.\"}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex flex-col sm:flex-row gap-4 justify-center\",\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/\",\"className\":\"brand-press inline-flex items-center justify-center gap-2 px-6 py-3 bg-brand-600 text-white text-sm font-medium rounded-sm transition-colors\",\"children\":\"Go back home\"}],[\"$\",\"$L9\",null,{\"href\":\"/contact\",\"className\":\"inline-flex items-center justify-center gap-2 px-6 py-3 border border-gray-300 dark:border-gray-700 text-gray-700 dark:text-gray-200 text-sm font-medium rounded-sm hover:border-brand-600 hover:text-brand-600 dark:hover:text-brand-600 transition-colors\",\"children\":\"Contact me\"}]]}]]}]}],null,[\"$\",\"$Le\",null,{\"children\":[\"$Lf\",[\"$\",\"$L10\",null,{\"promise\":\"$@11\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"c:[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L12\",null,{\"children\":\"$L13\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L14\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$15\",null,{\"fallback\":null,\"children\":\"$L16\"}]}]}]]}]\n"])</script><script>self.__next_f.push([1,"13:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nf:null\n"])</script><script>self.__next_f.push([1,"17:I[622,[],\"IconMark\"]\n"])</script><script>self.__next_f.push([1,"11:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Philip Rehberger\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Personal site of Philip Rehberger — music, books, family games, open source, and web projects.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"Philip Rehberger\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/site.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"Philip Rehberger,music,books,games,open source,web projects,Colorado\"}],[\"$\",\"meta\",\"5\",{\"name\":\"creator\",\"content\":\"Philip Rehberger\"}],[\"$\",\"meta\",\"6\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"7\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"Philip Rehberger\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Personal site of Philip Rehberger — music, books, family games, open source, and web projects.\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://philiprehberger.com\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"Philip Rehberger\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:alt\",\"content\":\"Philip Rehberger — I make a lot of things.\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image\",\"content\":\"https://philiprehberger.com/opengraph-image?f5d1e7924e1bd2c1\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:title\",\"content\":\"Philip Rehberger\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:description\",\"content\":\"Music, books, family games, open source, and web projects.\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:image\",\"content\":\"https://philiprehberger.com/og-image.png\"}],[\"$\",\"link\",\"23\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"24\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"25\",{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon/apple-touch-icon.png\"}],[\"$\",\"$L17\",\"26\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"16:\"$11:metadata\"\n"])</script><script>self.__next_f.push([1,"18:I[2021,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"2164\",\"static/chunks/2164-6cb73cf7e6a812e7.js\",\"2343\",\"static/chunks/2343-0af4af0161362040.js\",\"7177\",\"static/chunks/app/layout-be52da0ced9c8906.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"5:[\"$\",\"footer\",null,{\"className\":\"border-t border-gray-200 dark:border-gray-800\",\"children\":[[\"$\",\"div\",null,{\"className\":\"hidden lg:grid grid-cols-[1fr_1fr_1fr_1fr] gap-8 px-6 lg:px-12 xl:px-20 py-10\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/\",\"className\":\"text-[15px] font-logo text-gray-900 dark:text-white\",\"children\":\"Philip Rehberger\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-xs text-gray-400 dark:text-gray-500\",\"children\":[\"$\",\"a\",null,{\"href\":\"mailto:me@philiprehberger.com\",\"className\":\"hover:text-brand-600 transition-colors\",\"children\":\"me@philiprehberger.com\"}]}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-xs text-gray-400 dark:text-gray-500 max-w-[28ch]\",\"children\":\"Developer, musician, writer. Based in Colorado.\"}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[10px] font-medium tracking-[0.2em] text-gray-500 dark:text-gray-400 uppercase mb-4\",\"children\":\"Recent\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"li\",\"project-Switchyard\",{\"className\":\"text-xs\",\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/portfolio/switchyard\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors line-clamp-1\",\"children\":\"Switchyard\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-1\",\"children\":\"Featured Project\"}]]}],[\"$\",\"li\",\"package-Philiprehberger.IdGenerator\",{\"className\":\"text-xs\",\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/open-source-packages\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors line-clamp-1\",\"children\":\"Philiprehberger.IdGenerator\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-1\",\"children\":\"New Package\"}]]}],[\"$\",\"li\",\"package-philiprehberger-mask\",{\"className\":\"text-xs\",\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/open-source-packages\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors line-clamp-1\",\"children\":\"philiprehberger-mask\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-1\",\"children\":\"New Package\"}]]}]]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[10px] font-medium tracking-[0.2em] text-gray-500 dark:text-gray-400 uppercase mb-4\",\"children\":\"Elsewhere\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"li\",\"https://github.com/philiprehberger\",{\"className\":\"text-xs\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/philiprehberger\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors\",\"children\":[\"GitHub\",[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"(opens in new tab)\"}]]}]}],[\"$\",\"li\",\"https://linkedin.com/in/philiprehberger\",{\"className\":\"text-xs\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://linkedin.com/in/philiprehberger\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors\",\"children\":[\"LinkedIn\",[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"(opens in new tab)\"}]]}]}],[\"$\",\"li\",\"https://scopeforged.com\",{\"className\":\"text-xs\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://scopeforged.com\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors\",\"children\":[\"ScopeForged\",[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"(opens in new tab)\"}]]}]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col items-end gap-3\",\"children\":[[\"$\",\"$L18\",null,{}],[\"$\",\"div\",null,{\"className\":\"text-right\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[10px] text-gray-400 dark:text-gray-500\",\"children\":[\"© \",2026,\" Philip Rehberger\"]}],[\"$\",\"p\",null,{\"className\":\"text-[10px] text-gray-400 dark:text-gray-500 mt-1\",\"children\":[\"A\",\" \",[\"$\",\"a\",null,{\"href\":\"https://scopeforged.com\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"hover:text-brand-600 transition-colors\",\"children\":\"ScopeForged\"}],\" \",\"project\"]}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"lg:hidden px-6 py-8 space-y-7\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-center\",\"children\":[\"$L19\",\"$L1a\"]}],\"$L1b\",\"$L1c\",\"$L1d\"]}]]}]\n"])</script><script>self.__next_f.push([1,"19:[\"$\",\"$L9\",null,{\"href\":\"/\",\"className\":\"text-[15px] font-logo text-gray-900 dark:text-white\",\"children\":\"Philip Rehberger\"}]\n1a:[\"$\",\"div\",null,{\"className\":\"flex items-center justify-center gap-2 mt-1 text-xs text-gray-400 dark:text-gray-500\",\"children\":[\"$\",\"a\",null,{\"href\":\"mailto:me@philiprehberger.com\",\"className\":\"hover:text-brand-600 transition-colors\",\"children\":\"me@philiprehberger.com\"}]}]\n"])</script><script>self.__next_f.push([1,"1b:[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-[10px] font-medium tracking-[0.2em] text-gray-500 dark:text-gray-400 uppercase mb-3 text-center\",\"children\":\"Recent\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2 max-w-sm mx-auto\",\"children\":[[\"$\",\"li\",\"project-Switchyard\",{\"className\":\"text-xs text-center\",\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/portfolio/switchyard\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors\",\"children\":\"Switchyard\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-2\",\"children\":\"Featured Project\"}]]}],[\"$\",\"li\",\"package-Philiprehberger.IdGenerator\",{\"className\":\"text-xs text-center\",\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/open-source-packages\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors\",\"children\":\"Philiprehberger.IdGenerator\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-2\",\"children\":\"New Package\"}]]}],[\"$\",\"li\",\"package-philiprehberger-mask\",{\"className\":\"text-xs text-center\",\"children\":[[\"$\",\"$L9\",null,{\"href\":\"/open-source-packages\",\"className\":\"text-gray-600 dark:text-gray-300 hover:text-brand-600 transition-colors\",\"children\":\"philiprehberger-mask\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[10px] text-gray-400 dark:text-gray-500 ml-2\",\"children\":\"New Package\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1c:[\"$\",\"div\",null,{\"className\":\"flex items-center justify-center gap-5\",\"children\":[[\"$\",\"a\",\"https://github.com/philiprehberger\",{\"href\":\"https://github.com/philiprehberger\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-sm text-gray-500 dark:text-gray-400 hover:text-brand-600 transition-colors\",\"children\":[\"GitHub\",[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"(opens in new tab)\"}]]}],[\"$\",\"a\",\"https://linkedin.com/in/philiprehberger\",{\"href\":\"https://linkedin.com/in/philiprehberger\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-sm text-gray-500 dark:text-gray-400 hover:text-brand-600 transition-colors\",\"children\":[\"LinkedIn\",[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"(opens in new tab)\"}]]}],[\"$\",\"a\",\"https://scopeforged.com\",{\"href\":\"https://scopeforged.com\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-sm text-gray-500 dark:text-gray-400 hover:text-brand-600 transition-colors\",\"children\":[\"ScopeForged\",[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"(opens in new tab)\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"1d:[\"$\",\"div\",null,{\"className\":\"flex flex-col items-center gap-3\",\"children\":[[\"$\",\"$L18\",null,{}],[\"$\",\"p\",null,{\"className\":\"text-[10px] text-gray-400 dark:text-gray-500\",\"children\":[\"© \",2026,\" Philip Rehberger ·\",\" \",[\"$\",\"a\",null,{\"href\":\"https://scopeforged.com\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"hover:text-brand-600 transition-colors\",\"children\":\"ScopeForged\"}],\" \",\"project\"]}]]}]\n"])</script></body></html>