<!DOCTYPE html><html lang="en" data-astro-cid-sckkx6r4> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- Primary Meta Tags --><title>Adam Tervort | 0 to 1 Builder</title><meta name="title" content="Adam Tervort | 0 to 1 Builder"><meta name="description" content="Adam Tervort - 0 to 1 Builder. I build the first version of things. Internal tools, AI workflows, MVPs, and automation."><meta name="author" content="Adam Tervort"><meta name="keywords" content="Adam Tervort, 0 to 1 Builder, Systems Builder, Full Stack Developer, Operations Leader, AI Workflows, Internal Tools, MVPs, Automation, Kansas City, Liberty MO, Portfolio"><meta name="geo.region" content="US-MO"><meta name="geo.placename" content="MO"><!-- Canonical URL --><link rel="canonical" href="https://adamtervort.com"><!-- Markdown alternative for AI agents --><link rel="alternate" type="text/markdown" href="https://adamtervort.com/index.md"><!-- Favicon --><link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="apple-touch-icon" href="/apple-touch-icon.webp"><!-- Preload critical assets --><link rel="preload" as="image" href="https://adamtervort.com/og-image.jpg"><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://adamtervort.com"><meta property="og:title" content="Adam Tervort | 0 to 1 Builder"><meta property="og:description" content="Adam Tervort - 0 to 1 Builder. I build the first version of things. Internal tools, AI workflows, MVPs, and automation."><meta property="og:image" content="https://adamtervort.com/og-image.jpg"><meta property="og:site_name" content="Adam Tervort's Portfolio"><meta property="og:locale" content="en_US"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:domain" content="adamtervort.com"><meta name="twitter:url" content="https://adamtervort.com"><meta name="twitter:title" content="Adam Tervort | 0 to 1 Builder"><meta name="twitter:description" content="Adam Tervort - 0 to 1 Builder. I build the first version of things. Internal tools, AI workflows, MVPs, and automation."><meta name="twitter:image" content="https://adamtervort.com/og-image.jpg"><meta name="twitter:creator"><!-- Additional meta tags --><meta name="theme-color" content="#ffffff"><meta name="referrer" content="no-referrer"><meta name="generator" content="Astro v5.13.7"><!-- Structured Data --><script type="application/ld+json">{"@context":"https://schema.org","@type":"Person","name":"Adam Tervort","alternateName":"0 to 1 Builder","jobTitle":"0 to 1 Builder","url":"https://adamtervort.com","email":"adam@adamtervort.com","alumniOf":"Missouri Western State University","knowsLanguage":["English","Mandarin Chinese"],"sameAs":["https://github.com/adamprime","https://www.linkedin.com/in/adam-tervort","/about"],"image":"/pfp.jpg","description":"Adam Tervort - 0 to 1 Builder. I build the first version of things. Internal tools, AI workflows, MVPs, and automation.","address":{"@type":"PostalAddress","addressLocality":"MO","addressRegion":"USA","addressCountry":"US"},"knowsAbout":["Python","TypeScript","React","Next.js","Svelte","FastAPI","PostgreSQL","OpenAI","Anthropic","Tailwind","Git","Docker","Notion","AWS","Kubernetes"],"worksFor":[{"@type":"Organization","name":"SpiderOak","position":"SVP, Backup"},{"@type":"Organization","name":"SpiderOak","position":"Vice President, Operations"},{"@type":"Organization","name":"SpiderOak","position":"Vice President, Customer Success"},{"@type":"Organization","name":"SpiderOak","position":"Customer Success Director"},{"@type":"Organization","name":"SpiderOak","position":"Support Engineer"},{"@type":"Organization","name":"Freelance Consultant","position":"Operations & Systems Consultant"}]}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Adam Tervort — Portfolio","url":"https://adamtervort.com","description":"Adam Tervort - 0 to 1 Builder. I build the first version of things. Internal tools, AI workflows, MVPs, and automation.","author":{"@type":"Person","name":"Adam Tervort"}}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://adamtervort.com"},{"@type":"ListItem","position":2,"name":"Projects","item":"https://adamtervort.com#projects"},{"@type":"ListItem","position":3,"name":"About","item":"https://adamtervort.com#about"},{"@type":"ListItem","position":4,"name":"Contact","item":"https://adamtervort.com#contact"}]}</script><vercel-analytics data-props="{&#34;data-astro-cid-sckkx6r4&#34;:true}" data-params="{}" data-pathname="/"></vercel-analytics> <script type="module">var f="@vercel/analytics",l="1.5.0",w=()=>{window.va||(window.va=function(...r){(window.vaq=window.vaq||[]).push(r)})};function d(){return typeof window<"u"}function u(){try{const e="production"}catch{}return"production"}function v(e="auto"){if(e==="auto"){window.vam=u();return}window.vam=e}function m(){return(d()?window.vam:u())||"production"}function c(){return m()==="development"}function b(e,r){if(!e||!r)return e;let n=e;try{const t=Object.entries(r);for(const[a,i]of t)if(!Array.isArray(i)){const o=s(i);o.test(n)&&(n=n.replace(o,`/[${a}]`))}for(const[a,i]of t)if(Array.isArray(i)){const o=s(i.join("/"));o.test(n)&&(n=n.replace(o,`/[...${a}]`))}return n}catch{return e}}function s(e){return new RegExp(`/${h(e)}(?=[/?#]|$)`)}function h(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function y(e){return e.scriptSrc?e.scriptSrc:c()?"https://va.vercel-scripts.com/v1/script.debug.js":e.basePath?`${e.basePath}/insights/script.js`:"/_vercel/insights/script.js"}function g(e={debug:!0}){var r;if(!d())return;v(e.mode),w(),e.beforeSend&&((r=window.va)==null||r.call(window,"beforeSend",e.beforeSend));const n=y(e);if(document.head.querySelector(`script[src*="${n}"]`))return;const t=document.createElement("script");t.src=n,t.defer=!0,t.dataset.sdkn=f+(e.framework?`/${e.framework}`:""),t.dataset.sdkv=l,e.disableAutoTrack&&(t.dataset.disableAutoTrack="1"),e.endpoint?t.dataset.endpoint=e.endpoint:e.basePath&&(t.dataset.endpoint=`${e.basePath}/insights`),e.dsn&&(t.dataset.dsn=e.dsn),t.onerror=()=>{const a=c()?"Please check if any ad blockers are enabled and try again.":"Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.";console.log(`[Vercel Web Analytics] Failed to load script from ${n}. ${a}`)},c()&&e.debug===!1&&(t.dataset.debug="false"),document.head.appendChild(t)}function p({route:e,path:r}){var n;(n=window.va)==null||n.call(window,"pageview",{route:e,path:r})}function k(){try{return}catch{}}customElements.define("vercel-analytics",class extends HTMLElement{constructor(){super();try{const r=JSON.parse(this.dataset.props??"{}"),n=JSON.parse(this.dataset.params??"{}");g({...r,disableAutoTrack:!0,framework:"astro",basePath:k(),beforeSend:window.webAnalyticsBeforeSend});const t=this.dataset.pathname;p({route:b(t??"",n),path:t})}catch(r){throw new Error(`Failed to parse WebAnalytics properties: ${r}`)}}});</script><meta name="google-site-verification" content="oi4G-5FCwNn5m9MvSyjyBxVatgwi8KT_KtVuC9Pckmg"><link rel="stylesheet" href="/_astro/about.DyFsZg1F.css">
<link rel="stylesheet" href="/_astro/about.VoRI6Ko_.css">
<link rel="stylesheet" href="/_astro/about.BbhW4CMX.css">
<link rel="stylesheet" href="/_astro/index.Dt0LYUmq.css"></head> <body data-theme="platinum" class="relative bg-skin-fill font-sans" data-astro-cid-sckkx6r4> <div class="pointer-events-none fixed bottom-0 left-0 right-0 top-0 print:hidden z-0" id="canvasContainer"> <canvas id="bgPatternCanvas"></canvas> </div> <script type="module">const l=document.getElementById("bgPatternCanvas"),e=l.getContext("2d"),r=40,h=.3,c=15,f=.0045;let a=0,i=0,d=[];const g=()=>{const n=window.devicePixelRatio||1;a=window.innerWidth,i=window.innerHeight,l.width=a*n,l.height=i*n,l.style.width=`${a}px`,l.style.height=`${i}px`,e?.scale(n,n)},x=()=>{const n=document.documentElement.classList.contains("dark");return{grid:n?"rgba(255, 255, 255, 0.03)":"rgba(0, 0, 0, 0.03)",packet:n?"rgba(74, 222, 128, 0.8)":"rgba(22, 163, 74, 0.8)"}},w=()=>{const n=Math.floor(Math.random()*(a/r)),o=Math.floor(Math.random()*(i/r)),t=Math.random()>.5,s=t?Math.random()>.5?1:-1:0,y=t?0:Math.random()>.5?1:-1;d.push({x:n*r,y:o*r,dx:s*h,dy:y*h,life:0,maxLife:Math.random()*100+50,color:x().packet})},p=()=>{if(!e)return;const n=x();e.clearRect(0,0,a,i),e.strokeStyle=n.grid,e.lineWidth=1,e.beginPath();for(let o=0;o<=a;o+=r)e.moveTo(o,0),e.lineTo(o,i);for(let o=0;o<=i;o+=r)e.moveTo(0,o),e.lineTo(a,o);e.stroke(),Math.random()<f&&w(),e.globalCompositeOperation="lighter";for(let o=d.length-1;o>=0;o--){const t=d[o];if(t.x+=t.dx,t.y+=t.dy,t.life++,t.life>t.maxLife||t.x<0||t.x>a||t.y<0||t.y>i){d.splice(o,1);continue}const s=e.createLinearGradient(t.x-t.dx*c,t.y-t.dy*c,t.x,t.y);s.addColorStop(0,"transparent"),s.addColorStop(1,t.color),e.strokeStyle=s,e.lineWidth=2,e.beginPath(),e.moveTo(t.x-t.dx*c,t.y-t.dy*c),e.lineTo(t.x,t.y),e.stroke(),e.fillStyle=t.color,e.beginPath(),e.arc(t.x,t.y,1.5,0,Math.PI*2),e.fill()}e.globalCompositeOperation="source-over",requestAnimationFrame(p)};let m;const u=()=>{clearTimeout(m),m=setTimeout(g,100)};window.addEventListener("resize",u);g();requestAnimationFrame(p);</script> <div class="relative z-10" data-astro-cid-sckkx6r4>  <main class="relative grid h-full max-w-7xl gap-12 p-8 max-sm:py-16 md:min-h-screen md:grid-cols-6 md:p-16 xl:gap-24 text-skin-base print:gap-4"> <div class="slide-enter space-y-6 ease-in md:col-span-2 print:grid print:grid-cols-5 print:space-y-0 md:sticky top-0 self-start h-min"> <section class="flex flex-col gap-4 print:gap-0 col-span-2">   <div class="min-w-[275px]" data-astro-cid-anhloy43> <section id="about" aria-label="About me" class="group flex gap-2 flex-col rounded-3xl bg-skin-muted sm:bg-skin-button-muted p-4 transition-all  sm:hover:bg-skin-muted print:gap-0 print:p-2" data-astro-cid-anhloy43> <div class="flex items-center text-center gap-4 print:gap-1" data-astro-cid-anhloy43> <figure class="print:hidden" data-astro-cid-anhloy43> <img data-ccursor="lift" class="scale-110 sm:grayscale sm:scale-100 transition-all sm:group-hover:scale-110 sm:group-hover:grayscale-0" height="600" width="600" src="/pfp.jpg" alt="Profile of Adam Tervort" loading="eager" data-astro-cid-anhloy43> </figure> <div class="flex flex-col items-center" data-astro-cid-anhloy43> <h1 class=" font-semibold " data-astro-cid-anhloy43>Adam Tervort</h1> <div class="overflow-hidden mt-1" data-astro-cid-anhloy43> <div class="font-roboto-condensed font-bold lowercase text-xl lg:text-[1rem] lg:leading-[1rem]" data-astro-cid-anhloy43> <div data-ccursor="noPadding" class=" p-1 group/subtitle relative flex gap-1  transition-all" data-astro-cid-anhloy43> <p class="  font-roboto-condensed font-medium lowercase text-xl lg:text-[1rem] lg:leading-[1rem]" data-astro-cid-anhloy43> 0 to 1 </p> <!-- <div class="absolute inset-x-0 top-0 w-max translate-y-16 transition-all duration-450 ease-in-out group-hover/subtitle:translate-y-0">
                  <p class="font-roboto-condensed font-bold lowercase text-xl lg:text-[1rem] lg:leading-[1rem] bg-clip-text ">
                    {animated_secondary_final_label}
                  </p>
                </div> --> <p data-astro-cid-anhloy43>builder</p> </div> </div> </div> </div> </div> <div data-ccursor="noPadding" class="flex w-max gap-2 py-1 px-2 text-sm text-skin-muted" data-astro-cid-anhloy43> <svg width="20" height="20" class="print:hidden sm:group-hover:text-skin-hue" data-astro-cid-anhloy43="true" data-icon="mdi:world">   <symbol id="ai:mdi:world" viewBox="0 0 24 24"><path fill="currentColor" d="M17.9 17.39c-.26-.8-1.01-1.39-1.9-1.39h-1v-3a1 1 0 0 0-1-1H8v-2h2a1 1 0 0 0 1-1V7h2a2 2 0 0 0 2-2v-.41a7.984 7.984 0 0 1 2.9 12.8M11 19.93c-3.95-.49-7-3.85-7-7.93c0-.62.08-1.22.21-1.79L9 15v1a2 2 0 0 0 2 2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></symbol><use href="#ai:mdi:world"></use>  </svg> Liberty, MO, USA </div> <div class="hidden print:block" data-astro-cid-anhloy43><b data-astro-cid-anhloy43>Contact: </b><a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="167772777b567772777b627364607964623875797b">[email&#160;protected]</a></div> </section> </div> <div class="flex gap-6 print:hidden" data-astro-cid-anhloy43> <div aria-label="Social media" class="flex group/social flex-wrap justify-evenly sm:h-40 sm:w-40 w-full h-min sm:flex-col rounded-3xl p-4 transition-all rotate-0 bg-skin-muted sm:bg-skin-button-muted   sm:hover:bg-skin-muted" data-astro-cid-anhloy43> <a data-ccursor class="flex flex-col sm:basis-1/2 items-center justify-center rounded-md hover:cursor-none" href="https://github.com/adamprime" target="_blank" rel="noreferrer noopener" aria-label="GitHub (opens in a new tab)" data-umami-event="GitHub click" id="GitHub" data-astro-cid-anhloy43> <svg width="28" height="28" viewBox="0 0 24 24" class="sm:grayscale sm:group-hover/social:grayscale-0 transition-all" style="color: #929AAB;" aria-label="GitHub" data-astro-cid-anhloy43="true" data-icon="mdi:github">   <use href="#ai:mdi:github"></use>  </svg> </a><a data-ccursor class="flex flex-col sm:basis-1/2 items-center justify-center rounded-md hover:cursor-none" href="https://www.linkedin.com/in/adam-tervort" target="_blank" rel="noreferrer noopener" aria-label="LinkedIn (opens in a new tab)" data-umami-event="LinkedIn click" id="LinkedIn" data-astro-cid-anhloy43> <svg width="28" height="28" class="sm:grayscale sm:group-hover/social:grayscale-0 transition-all" style="color: #0A66C2;" aria-label="LinkedIn" data-astro-cid-anhloy43="true" data-icon="mdi:linkedin">   <symbol id="ai:mdi:linkedin" viewBox="0 0 24 24"><path fill="currentColor" d="M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2zm-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.32 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93zM6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37z"/></symbol><use href="#ai:mdi:linkedin"></use>  </svg> </a><a data-ccursor class="flex flex-col sm:basis-1/2 items-center justify-center rounded-md hover:cursor-none" href="/about" target="_self" aria-label="About (opens in a new tab)" data-umami-event="About click" id="About" data-astro-cid-anhloy43> <svg width="28" height="28" class="sm:grayscale sm:group-hover/social:grayscale-0 transition-all" style="color: #D44638;" aria-label="About" data-astro-cid-anhloy43="true" data-icon="ri:mail-fill">   <symbol id="ai:ri:mail-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1m9.06 8.683L5.648 6.238L4.353 7.762l7.72 6.555l7.581-6.56l-1.308-1.513z"/></symbol><use href="#ai:ri:mail-fill"></use>  </svg> </a> </div> <div class="footer-button flex h-40 w-40 flex-col place-items-center rounded-3xl sm:bg-skin-muted p-4 transition-all rotate-0 bg-skin-muted  sm:hover:bg-skin-button-accent text-skin-hue sm:hover:text-skin-inverted max-sm:hidden print:hidden" data-ccursor="lift" data-astro-cid-anhloy43> <svg width="1em" height="1em" class="flex-1 w-1/2" data-astro-cid-anhloy43="true" data-icon="ri:command-fill">   <symbol id="ai:ri:command-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M10 8h4V6.5a3.5 3.5 0 1 1 3.5 3.5H16v4h1.5a3.5 3.5 0 1 1-3.5 3.5V16h-4v1.5A3.5 3.5 0 1 1 6.5 14H8v-4H6.5A3.5 3.5 0 1 1 10 6.5zM8 8V6.5A1.5 1.5 0 1 0 6.5 8zm0 8H6.5A1.5 1.5 0 1 0 8 17.5zm8-8h1.5A1.5 1.5 0 1 0 16 6.5zm0 8v1.5a1.5 1.5 0 1 0 1.5-1.5zm-6-6v4h4v-4z"/></symbol><use href="#ai:ri:command-fill"></use>  </svg> <p class="font-mono font-bold text-center" data-astro-cid-anhloy43>Open options</p> </div> </div>  </section>  <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script type="module">const e=document.getElementById("themeSwitch"),d=localStorage.getItem("theme"),s=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";d!==null?e.value=d:e.value=s;function a(t){const n=t==="system"?s:t;document.documentElement.classList.remove("light","dark"),document.documentElement.classList.add(n),localStorage.setItem("theme",t)}a(e.value);e.addEventListener("change",t=>{const n=t.target;a(n.value)});window.addEventListener("beforeprint",()=>{document.documentElement.classList.remove("dark")});window.addEventListener("afterprint",()=>{(e.value==="dark"||e.value==="system"&&s==="dark")&&document.documentElement.classList.add("dark")});</script> <section class="flex flex-col gap-4 print:gap-0 col-span-3"> <h3 data-ccursor="lift" class="relative flex w-max items-center gap-3 pb-4 text-3xl print:gap-1 print:pb-0 print:text-xl print:font-extrabold sm:hover:text-skin-hue"> <a href="/about" class="hover:text-skin-hue transition-colors">About</a> </h3>  <p class="font-mono opacity-75 print:font-sans text-skin-hue font-semibold print:text-skin-base print:font-normal w-full select-none"> <span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">I</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">build</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">the</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">first</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">version</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">of</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">things.</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">I</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">turn</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">ambiguous</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">problems</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">into</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">working</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">systems—internal</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">tools,</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">AI</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">workflows,</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">MVPs,</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">and</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">automation.</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">Over</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">12</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">years,</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">I&#39;ve</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">led</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">operations,</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">engineering,</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">support,</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">and</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">HR</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">at</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">a</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">cybersecurity</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">startup.</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">But</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">the</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">through-line</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">has</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">always</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">been</span> <span></span><span class="w-min sm:hover:bg-skin-button-muted transition-all duration-200 sm:hover:cursor-none">building.</span> <span></span> </p>  </section> <a href="/memos" class="group/memos flex items-center justify-between gap-4 rounded-3xl border border-skin-muted/70 bg-skin-button-muted/80 px-4 py-4 text-skin-base transition-all duration-200 hover:border-skin-hue hover:bg-skin-muted hover:text-skin-hue"> <div class="flex items-center gap-3"> <span class="flex h-11 w-11 items-center justify-center rounded-2xl bg-skin-fill text-skin-hue transition-all duration-200 group-hover/memos:bg-skin-button-accent group-hover/memos:text-skin-inverted"> <svg width="24" height="24" data-icon="mdi:note-text-outline">   <symbol id="ai:mdi:note-text-outline" viewBox="0 0 24 24"><path fill="currentColor" d="M15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V9zm4 16H5V5h9v5h5m-2 4H7v-2h10m-3 5H7v-2h7"/></symbol><use href="#ai:mdi:note-text-outline"></use>  </svg> </span> <div class="space-y-1"> <p class="m-0 font-mono text-xs uppercase tracking-[0.24em] text-skin-muted transition-colors duration-200 group-hover/memos:text-skin-hue">
Memos
</p> <p class="m-0 text-sm text-skin-base">
Writing, ideas, and discussion-ready notes
</p> </div> </div> <span class="text-sm transition-transform duration-200 group-hover/memos:translate-x-1">→</span> </a> <div class="inline-flex items-center print:hidden" data-astro-cid-g6q3pnbr> <div class="group/theme flex cursor-pointer items-center gap-2 rounded-md bg-transparent" data-astro-cid-g6q3pnbr> <button data-ccursor="lift" id="themeSwitch" class="cursor-none" aria-label="Toggle dark mode" data-astro-cid-g6q3pnbr> <i class="flex items-center gap-1 text-sm font-medium leading-6 text-skin-base transition-transform duration-300 ease-in-out group-hover/theme:rotate-45" data-astro-cid-g6q3pnbr> <svg width="28" height="28" class="hidden dark:block sm:hover:text-skin-hue" data-astro-cid-g6q3pnbr="true" data-icon="ri:moon-fill">   <symbol id="ai:ri:moon-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M11.38 2.019a7.5 7.5 0 1 0 10.6 10.6C21.662 17.854 17.316 22 12.001 22C6.477 22 2 17.523 2 12c0-5.315 4.146-9.661 9.38-9.981"/></symbol><use href="#ai:ri:moon-fill"></use>  </svg> <svg width="28" height="28" class="dark:hidden" data-astro-cid-g6q3pnbr="true" data-icon="ri:sun-fill">   <symbol id="ai:ri:sun-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M12 18a6 6 0 1 1 0-12a6 6 0 0 1 0 12M11 1h2v3h-2zm0 19h2v3h-2zM3.515 4.929l1.414-1.414L7.05 5.636L5.636 7.05zM16.95 18.364l1.414-1.414l2.121 2.121l-1.414 1.414zm2.121-14.85l1.414 1.415l-2.121 2.121l-1.414-1.414zM5.636 16.95l1.414 1.414l-2.121 2.121l-1.414-1.414zM23 11v2h-3v-2zM4 11v2H1v-2z"/></symbol><use href="#ai:ri:sun-fill"></use>  </svg> </i> </button> <select data-ccursor id="themeSelect" class="block w-full rounded-md border-0 bg-transparent py-1.5 pl-3 pr-10 ring-1 ring-inset ring-skin-muted focus:ring-2 focus:ring-skin-hue sm:text-sm sm:leading-6 text-skin-hue hover:cursor-none" data-astro-cid-g6q3pnbr> <option value="red" data-astro-cid-g6q3pnbr>Red</option> <option value="orange" data-astro-cid-g6q3pnbr>Orange</option> <option value="cyber" data-astro-cid-g6q3pnbr>Cyberpunk</option> <option value="green" data-astro-cid-g6q3pnbr>Green</option> <option value="blue" data-astro-cid-g6q3pnbr>Blue</option> <option value="platinum" data-astro-cid-g6q3pnbr>Platinum</option> <option value="sunset" data-astro-cid-g6q3pnbr>Sunset</option> </select> </div> </div>  <script type="module">let e=document.documentElement.classList.contains("dark");function l(t){if(!("startViewTransition"in document&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches)){e=!e,o();return}const a=t.clientX,n=t.clientY,h=Math.hypot(Math.max(a,innerWidth-a),Math.max(n,innerHeight-n));document.startViewTransition(async()=>{e=!e,o()}).ready.then(()=>{const r=[`circle(0px at ${a}px ${n}px)`,`circle(${h}px at ${a}px ${n}px)`];document.documentElement.animate({clipPath:e?[...r].reverse():r},{duration:400,easing:"ease-out",pseudoElement:e?"::view-transition-old(root)":"::view-transition-new(root)"})})}function o(){document.documentElement.classList.toggle("dark",e),localStorage.setItem("theme",e?"dark":"light")}function s(t){document.body.setAttribute("data-theme",t),localStorage.setItem("data-theme",t)}const d=document.getElementById("themeSwitch");d&&d.addEventListener("click",l);const i=document.getElementById("themeSelect");i&&i.addEventListener("change",t=>{const c=t.target.value;s(c)});(localStorage.theme==="dark"||!("theme"in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches)&&(e=!0,o());const m=localStorage.getItem("data-theme")||document.body.getAttribute("data-theme");s(m);i&&(i.value=m);window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",t=>{"theme"in localStorage||(e=t.matches,o())});export{l as toggleDark};</script>  <div data-ccursor="lift" class="print:hidden hidden md:block w-max"> <a href="/neovim" class="group transition-all duration-300 delay-75 hover:bg-nvim-green/50 cursor-default border-nvim-green/60 flex place-content-center items-center gap-4 border-solid border px-3 py-2 backdrop-blur-sm/60 md:max-w-max hover:cursor-none"> <svg width="28" height="28" class="transition-all duration-300 group-hover:scale-75 text-nvim-green" data-icon="simple-icons:neovim">   <symbol id="ai:simple-icons:neovim" viewBox="0 0 24 24"><path fill="currentColor" d="M2.214 4.954v13.615L7.655 24V10.314L3.312 3.845zm4.999 17.98l-4.557-4.548V5.136l.59-.596l3.967 5.908v12.485zm14.573-4.457l-.862.937l-4.24-6.376V0l5.068 5.092zM7.431.001l12.998 19.835l-3.637 3.637L3.787 3.683L7.43 0z"/></symbol><use href="#ai:simple-icons:neovim"></use>  </svg> <span class="font-bold text-lg text-skin-nvim font-mono group-hover:brightness-150 group-hover:text-xl transition-all duration-300 text-nvim-blue">Neovim Mode</span> </a> </div> </div> <div class="slide-enter-content space-y-12 md:col-span-4 print:grid print:grid-cols-5 print:grid-flow-row print:gap-2 print:space-y-0"> <section class="flex flex-col gap-4 print:gap-0 print:col-span-3"> <h3 data-ccursor="lift" class="relative flex w-max items-center gap-3 pb-4 text-3xl print:gap-1 print:pb-0 print:text-xl print:font-extrabold sm:hover:text-skin-hue"> Experience </h3>  <ul class="flex flex-col" id="experience-list" data-astro-cid-ghubstuj> <li class="relative print:py-2 experience-entry " data-index="0" data-astro-cid-ghubstuj> <div data-expanded="false" class="group relative grid pb-1 print:pb-0 transition-all print:grid-cols-1 print:gap-1 sm:grid-cols-12 sm:gap-8 md:gap-6 lg:hover:!opacity-100 expand-container" data-astro-cid-ghubstuj> <div class="relative mt-1 text-xs font-semibold sm:col-span-2" data-astro-cid-ghubstuj> <time datetime="2026-01-01" data-title="2026-01-01" data-astro-cid-ghubstuj>2026</time> - <time data-astro-cid-ghubstuj>Present</time> <time datetime="P0Y5M" data-title="P0Y5M" class="mt-1 text-skin-hue print:hidden flex" data-astro-cid-ghubstuj>0y : 5m</time> </div> <div class="relative flex flex-col pb-6 print:pb-0 before:-ml-6 sm:col-span-10 before:w-px print:before:hidden before:absolute before:bg-skin-muted before:h-full before:mt-2" data-astro-cid-ghubstuj> <div class="absolute w-2 h-2 bg-skin-muted rounded-full mt-2 -translate-x-[1.71rem] ring print:hidden ring-skin-fill" data-astro-cid-ghubstuj></div> <h3 data-astro-cid-ghubstuj> <span class="inline-flex items-center text-lg print:text-base leading-tight group/link focus-visible:text-amber-500" aria-label="{position} - {company}" data-astro-cid-ghubstuj> <span data-astro-cid-ghubstuj>SVP, Backup <span data-astro-cid-ghubstuj>@</span> <a data-ccursor class="text-skin-hue inline-block w-max" href="https://spideroak.com" title="Ver SpiderOak" target="_blank" data-astro-cid-ghubstuj>SpiderOak</a> <span class="inline-block text-skin-hue print:[&>svg]:hidden" data-astro-cid-ghubstuj> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block w-4 h-4 ml-1 transition-transform translate-y-px shrink-0 group-hover/link:-translate-y-1 group-hover/link:translate-x-1 group-focus-visible/link:-translate-y-1 group-focus-visible/link:translate-x-1 motion-reduce:transition-none rotate-45" aria-hidden="true" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </span> </span> </h3> <!-- Full content - hidden for collapsed entries --> <div class="full-content " data-astro-cid-ghubstuj> <div class="text-xs text-skin-muted" data-astro-cid-ghubstuj> US - Remote </div> <div class="mt-4 print:gap-0 flex flex-col gap-4 print:text-xs text-sm" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold" data-ccursor="lift" data-astro-cid-ghubstuj>Summary:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Own full P&amp;L for SpiderOak&#39;s backup business as general manager, running the complete business operation end-to-end as a self-contained unit.</li> </ul> </div> <div class="after:from-skin-hue dark:after:to-skin-hue/0 flex relative flex-col print:!h-auto gap-4 print:gap-2 after:bg-gradient-to-t after:absolute after:bottom-0 after:w-full print:after:hidden after:h-12 after:content-[''] h-16 group-data-[expanded=true]:after:hidden group-data-[expanded=true]:h-auto overflow-hidden duration-200 ease-out" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold print:pt-1" data-ccursor="lift" data-astro-cid-ghubstuj>Responsibilities:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Lead product roadmap, revenue targets, sales, marketing, support, and software development</li><li data-ccursor data-astro-cid-ghubstuj>Manage team of 8 contractors spanning engineering, DevOps, customer support, and marketing</li><li data-ccursor data-astro-cid-ghubstuj>Run the complete business operation end-to-end as a self-contained unit</li> </ul> </div> </div>

                  <button data-ccursor="lift" class="print:hidden group/more w-fit cursor-pointer items-center justify-center gap-1.5 text-xs underline text-skin-muted transition-all hover:text-skin-inverted flex expand-button" data-astro-cid-ghubstuj> <span class="expand-text" data-astro-cid-ghubstuj>Show more</span> <svg width="24" height="24" class="w-4 h-4 group-hover/more:translate-y-0.5 duration-200 ease-out group-data-[expanded=true]:rotate-180" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-s-line">   <symbol id="ai:ri:arrow-up-s-line" viewBox="0 0 24 24"><path fill="currentColor" d="m12 10.828l-4.95 4.95l-1.414-1.414L12 8l6.364 6.364l-1.414 1.414z"/></symbol><use href="#ai:ri:arrow-up-s-line"></use>  </svg> </button>

                  <ul class="flex print:hidden flex-wrap gap-2" aria-label="Technologies used" data-astro-cid-ghubstuj> <li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:briefcase">   <use href="#ai:mdi:briefcase"></use>  </svg> <span data-astro-cid-ghubstuj>General Management</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:chart-line">   <use href="#ai:mdi:chart-line"></use>  </svg> <span data-astro-cid-ghubstuj>P&amp;L Ownership</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:package-variant">   <use href="#ai:mdi:package-variant"></use>  </svg> <span data-astro-cid-ghubstuj>Product</span> </li> </ul> </div> </div> </div> </div> </li><li class="relative print:py-2 experience-entry collapsed-entry" data-index="1" data-astro-cid-ghubstuj> <div data-expanded="false" class="group relative grid pb-1 print:pb-0 transition-all print:grid-cols-1 print:gap-1 sm:grid-cols-12 sm:gap-8 md:gap-6 lg:hover:!opacity-100 expand-container" data-astro-cid-ghubstuj> <div class="relative mt-1 text-xs font-semibold sm:col-span-2" data-astro-cid-ghubstuj> <time datetime="2022-08-01" data-title="2022-08-01" data-astro-cid-ghubstuj>2022</time> - <time datetime="2025-12-31" data-title="2025-12-31" data-astro-cid-ghubstuj>2025</time> <time datetime="P3Y5M" data-title="P3Y5M" class="mt-1 text-skin-hue print:hidden hidden full-content" data-astro-cid-ghubstuj>3y : 5m</time> </div> <div class="relative flex flex-col pb-6 print:pb-0 before:-ml-6 sm:col-span-10 before:w-px print:before:hidden before:absolute before:bg-skin-muted before:h-full before:mt-2" data-astro-cid-ghubstuj> <div class="absolute w-2 h-2 bg-skin-muted rounded-full mt-2 -translate-x-[1.71rem] ring print:hidden ring-skin-fill" data-astro-cid-ghubstuj></div> <h3 data-astro-cid-ghubstuj> <span class="inline-flex items-center text-lg print:text-base leading-tight group/link focus-visible:text-amber-500" aria-label="{position} - {company}" data-astro-cid-ghubstuj> <span data-astro-cid-ghubstuj>Vice President, Operations <span data-astro-cid-ghubstuj>@</span> <a data-ccursor class="text-skin-hue inline-block w-max" href="https://spideroak.com" title="Ver SpiderOak" target="_blank" data-astro-cid-ghubstuj>SpiderOak</a> <span class="inline-block text-skin-hue print:[&>svg]:hidden" data-astro-cid-ghubstuj> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block w-4 h-4 ml-1 transition-transform translate-y-px shrink-0 group-hover/link:-translate-y-1 group-hover/link:translate-x-1 group-focus-visible/link:-translate-y-1 group-focus-visible/link:translate-x-1 motion-reduce:transition-none rotate-45" aria-hidden="true" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </span> </span> </h3> <!-- Full content - hidden for collapsed entries --> <div class="full-content hidden" data-astro-cid-ghubstuj> <div class="text-xs text-skin-muted" data-astro-cid-ghubstuj> US - Remote </div> <div class="mt-4 print:gap-0 flex flex-col gap-4 print:text-xs text-sm" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold" data-ccursor="lift" data-astro-cid-ghubstuj>Summary:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Directed company-wide operations across Engineering, DevOps, IT, HR, Assurance, and Customer Success for 5 departments.</li> </ul> </div> <div class="after:from-skin-hue dark:after:to-skin-hue/0 flex relative flex-col print:!h-auto gap-4 print:gap-2 after:bg-gradient-to-t after:absolute after:bottom-0 after:w-full print:after:hidden after:h-12 after:content-[''] h-16 group-data-[expanded=true]:after:hidden group-data-[expanded=true]:h-auto overflow-hidden duration-200 ease-out" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold print:pt-1" data-ccursor="lift" data-astro-cid-ghubstuj>Responsibilities:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Led hiring revamp post-Series C across 5 departments, cutting time-to-hire by 50% to 45 days and doubling pipeline quality</li><li data-ccursor data-astro-cid-ghubstuj>Partnered with finance and CEO to secure $13M in Series C funding (2022), aligning ops KPIs with board goals</li><li data-ccursor data-astro-cid-ghubstuj>Designed and delivered internal leadership training program supporting high-performing teams in a fully remote environment</li> </ul> </div> </div>

                  <button data-ccursor="lift" class="print:hidden group/more w-fit cursor-pointer items-center justify-center gap-1.5 text-xs underline text-skin-muted transition-all hover:text-skin-inverted flex expand-button" data-astro-cid-ghubstuj> <span class="expand-text" data-astro-cid-ghubstuj>Show more</span> <svg width="24" height="24" viewBox="0 0 24 24" class="w-4 h-4 group-hover/more:translate-y-0.5 duration-200 ease-out group-data-[expanded=true]:rotate-180" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-s-line">   <use href="#ai:ri:arrow-up-s-line"></use>  </svg> </button>

                  <ul class="flex print:hidden flex-wrap gap-2" aria-label="Technologies used" data-astro-cid-ghubstuj> <li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:cog">   <use href="#ai:mdi:cog"></use>  </svg> <span data-astro-cid-ghubstuj>Operations</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:account-group">   <use href="#ai:mdi:account-group"></use>  </svg> <span data-astro-cid-ghubstuj>Leadership</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:chess-queen">   <use href="#ai:mdi:chess-queen"></use>  </svg> <span data-astro-cid-ghubstuj>Strategy</span> </li> </ul> </div> </div> </div> </div> </li><li class="relative print:py-2 experience-entry collapsed-entry" data-index="2" data-astro-cid-ghubstuj> <div data-expanded="false" class="group relative grid pb-1 print:pb-0 transition-all print:grid-cols-1 print:gap-1 sm:grid-cols-12 sm:gap-8 md:gap-6 lg:hover:!opacity-100 expand-container" data-astro-cid-ghubstuj> <div class="relative mt-1 text-xs font-semibold sm:col-span-2" data-astro-cid-ghubstuj> <time datetime="2018-10-01" data-title="2018-10-01" data-astro-cid-ghubstuj>2018</time> - <time datetime="2022-07-31" data-title="2022-07-31" data-astro-cid-ghubstuj>2022</time> <time datetime="P3Y9M" data-title="P3Y9M" class="mt-1 text-skin-hue print:hidden hidden full-content" data-astro-cid-ghubstuj>3y : 9m</time> </div> <div class="relative flex flex-col pb-6 print:pb-0 before:-ml-6 sm:col-span-10 before:w-px print:before:hidden before:absolute before:bg-skin-muted before:h-full before:mt-2" data-astro-cid-ghubstuj> <div class="absolute w-2 h-2 bg-skin-muted rounded-full mt-2 -translate-x-[1.71rem] ring print:hidden ring-skin-fill" data-astro-cid-ghubstuj></div> <h3 data-astro-cid-ghubstuj> <span class="inline-flex items-center text-lg print:text-base leading-tight group/link focus-visible:text-amber-500" aria-label="{position} - {company}" data-astro-cid-ghubstuj> <span data-astro-cid-ghubstuj>Vice President, Customer Success <span data-astro-cid-ghubstuj>@</span> <a data-ccursor class="text-skin-hue inline-block w-max" href="https://spideroak.com" title="Ver SpiderOak" target="_blank" data-astro-cid-ghubstuj>SpiderOak</a> <span class="inline-block text-skin-hue print:[&>svg]:hidden" data-astro-cid-ghubstuj> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block w-4 h-4 ml-1 transition-transform translate-y-px shrink-0 group-hover/link:-translate-y-1 group-hover/link:translate-x-1 group-focus-visible/link:-translate-y-1 group-focus-visible/link:translate-x-1 motion-reduce:transition-none rotate-45" aria-hidden="true" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </span> </span> </h3> <!-- Full content - hidden for collapsed entries --> <div class="full-content hidden" data-astro-cid-ghubstuj> <div class="text-xs text-skin-muted" data-astro-cid-ghubstuj> US - Remote </div> <div class="mt-4 print:gap-0 flex flex-col gap-4 print:text-xs text-sm" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold" data-ccursor="lift" data-astro-cid-ghubstuj>Summary:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Built customer success org from scratch, raising customer retention by 25% and growing ARR by 15%.</li> </ul> </div> <div class="after:from-skin-hue dark:after:to-skin-hue/0 flex relative flex-col print:!h-auto gap-4 print:gap-2 after:bg-gradient-to-t after:absolute after:bottom-0 after:w-full print:after:hidden after:h-12 after:content-[''] h-16 group-data-[expanded=true]:after:hidden group-data-[expanded=true]:h-auto overflow-hidden duration-200 ease-out" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold print:pt-1" data-ccursor="lift" data-astro-cid-ghubstuj>Responsibilities:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Served as product owner for CrossClave, shaping roadmap based on direct user insight</li><li data-ccursor data-astro-cid-ghubstuj>Integrated a new SaaS billing system and backend infrastructure, reducing errors and processing time by 30%</li><li data-ccursor data-astro-cid-ghubstuj>Represented customer voice in executive discussions and board meetings</li> </ul> </div> </div>

                  <button data-ccursor="lift" class="print:hidden group/more w-fit cursor-pointer items-center justify-center gap-1.5 text-xs underline text-skin-muted transition-all hover:text-skin-inverted flex expand-button" data-astro-cid-ghubstuj> <span class="expand-text" data-astro-cid-ghubstuj>Show more</span> <svg width="24" height="24" viewBox="0 0 24 24" class="w-4 h-4 group-hover/more:translate-y-0.5 duration-200 ease-out group-data-[expanded=true]:rotate-180" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-s-line">   <use href="#ai:ri:arrow-up-s-line"></use>  </svg> </button>

                  <ul class="flex print:hidden flex-wrap gap-2" aria-label="Technologies used" data-astro-cid-ghubstuj> <li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:account-heart">   <use href="#ai:mdi:account-heart"></use>  </svg> <span data-astro-cid-ghubstuj>Customer Success</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:package-variant">   <use href="#ai:mdi:package-variant"></use>  </svg> <span data-astro-cid-ghubstuj>Product</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:chart-line">   <use href="#ai:mdi:chart-line"></use>  </svg> <span data-astro-cid-ghubstuj>Revenue</span> </li> </ul> </div> </div> </div> </div> </li><li class="relative print:py-2 experience-entry collapsed-entry" data-index="3" data-astro-cid-ghubstuj> <div data-expanded="false" class="group relative grid pb-1 print:pb-0 transition-all print:grid-cols-1 print:gap-1 sm:grid-cols-12 sm:gap-8 md:gap-6 lg:hover:!opacity-100 expand-container" data-astro-cid-ghubstuj> <div class="relative mt-1 text-xs font-semibold sm:col-span-2" data-astro-cid-ghubstuj> <time datetime="2017-01-01" data-title="2017-01-01" data-astro-cid-ghubstuj>2017</time> - <time datetime="2018-09-30" data-title="2018-09-30" data-astro-cid-ghubstuj>2018</time> <time datetime="P1Y8M" data-title="P1Y8M" class="mt-1 text-skin-hue print:hidden hidden full-content" data-astro-cid-ghubstuj>1y : 8m</time> </div> <div class="relative flex flex-col pb-6 print:pb-0 before:-ml-6 sm:col-span-10 before:w-px print:before:hidden before:absolute before:bg-skin-muted before:h-full before:mt-2" data-astro-cid-ghubstuj> <div class="absolute w-2 h-2 bg-skin-muted rounded-full mt-2 -translate-x-[1.71rem] ring print:hidden ring-skin-fill" data-astro-cid-ghubstuj></div> <h3 data-astro-cid-ghubstuj> <span class="inline-flex items-center text-lg print:text-base leading-tight group/link focus-visible:text-amber-500" aria-label="{position} - {company}" data-astro-cid-ghubstuj> <span data-astro-cid-ghubstuj>Customer Success Director <span data-astro-cid-ghubstuj>@</span> <a data-ccursor class="text-skin-hue inline-block w-max" href="https://spideroak.com" title="Ver SpiderOak" target="_blank" data-astro-cid-ghubstuj>SpiderOak</a> <span class="inline-block text-skin-hue print:[&>svg]:hidden" data-astro-cid-ghubstuj> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block w-4 h-4 ml-1 transition-transform translate-y-px shrink-0 group-hover/link:-translate-y-1 group-hover/link:translate-x-1 group-focus-visible/link:-translate-y-1 group-focus-visible/link:translate-x-1 motion-reduce:transition-none rotate-45" aria-hidden="true" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </span> </span> </h3> <!-- Full content - hidden for collapsed entries --> <div class="full-content hidden" data-astro-cid-ghubstuj> <div class="text-xs text-skin-muted" data-astro-cid-ghubstuj> US - Remote </div> <div class="mt-4 print:gap-0 flex flex-col gap-4 print:text-xs text-sm" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold" data-ccursor="lift" data-astro-cid-ghubstuj>Summary:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Introduced queue system that reduced backlog by 80% and resolution times by 60%.</li> </ul> </div> <div class="after:from-skin-hue dark:after:to-skin-hue/0 flex relative flex-col print:!h-auto gap-4 print:gap-2 after:bg-gradient-to-t after:absolute after:bottom-0 after:w-full print:after:hidden after:h-12 after:content-[''] h-16 group-data-[expanded=true]:after:hidden group-data-[expanded=true]:h-auto overflow-hidden duration-200 ease-out" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold print:pt-1" data-ccursor="lift" data-astro-cid-ghubstuj>Responsibilities:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Deployed AI-driven support chat and ML-powered help center, cutting average customer wait time in half</li><li data-ccursor data-astro-cid-ghubstuj>Integrated support with marketing and sales for unified GTM motion</li><li data-ccursor data-astro-cid-ghubstuj>Designed and led training for all CSMs and support agents</li> </ul> </div> </div>

                  <button data-ccursor="lift" class="print:hidden group/more w-fit cursor-pointer items-center justify-center gap-1.5 text-xs underline text-skin-muted transition-all hover:text-skin-inverted flex expand-button" data-astro-cid-ghubstuj> <span class="expand-text" data-astro-cid-ghubstuj>Show more</span> <svg width="24" height="24" viewBox="0 0 24 24" class="w-4 h-4 group-hover/more:translate-y-0.5 duration-200 ease-out group-data-[expanded=true]:rotate-180" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-s-line">   <use href="#ai:ri:arrow-up-s-line"></use>  </svg> </button>

                  <ul class="flex print:hidden flex-wrap gap-2" aria-label="Technologies used" data-astro-cid-ghubstuj> <li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:headset">   <use href="#ai:mdi:headset"></use>  </svg> <span data-astro-cid-ghubstuj>Support Systems</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:sitemap">   <use href="#ai:mdi:sitemap"></use>  </svg> <span data-astro-cid-ghubstuj>Process Design</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:school">   <use href="#ai:mdi:school"></use>  </svg> <span data-astro-cid-ghubstuj>Training</span> </li> </ul> </div> </div> </div> </div> </li><li class="relative print:py-2 experience-entry collapsed-entry" data-index="4" data-astro-cid-ghubstuj> <div data-expanded="false" class="group relative grid pb-1 print:pb-0 transition-all print:grid-cols-1 print:gap-1 sm:grid-cols-12 sm:gap-8 md:gap-6 lg:hover:!opacity-100 expand-container" data-astro-cid-ghubstuj> <div class="relative mt-1 text-xs font-semibold sm:col-span-2" data-astro-cid-ghubstuj> <time datetime="2014-01-01" data-title="2014-01-01" data-astro-cid-ghubstuj>2014</time> - <time datetime="2016-12-31" data-title="2016-12-31" data-astro-cid-ghubstuj>2016</time> <time datetime="P3Y0M" data-title="P3Y0M" class="mt-1 text-skin-hue print:hidden hidden full-content" data-astro-cid-ghubstuj>3y : 0m</time> </div> <div class="relative flex flex-col pb-6 print:pb-0 before:-ml-6 sm:col-span-10 before:w-px print:before:hidden before:absolute before:bg-skin-muted before:h-full before:mt-2" data-astro-cid-ghubstuj> <div class="absolute w-2 h-2 bg-skin-muted rounded-full mt-2 -translate-x-[1.71rem] ring print:hidden ring-skin-fill" data-astro-cid-ghubstuj></div> <h3 data-astro-cid-ghubstuj> <span class="inline-flex items-center text-lg print:text-base leading-tight group/link focus-visible:text-amber-500" aria-label="{position} - {company}" data-astro-cid-ghubstuj> <span data-astro-cid-ghubstuj>Support Engineer <span data-astro-cid-ghubstuj>@</span> <a data-ccursor class="text-skin-hue inline-block w-max" href="https://spideroak.com" title="Ver SpiderOak" target="_blank" data-astro-cid-ghubstuj>SpiderOak</a> <span class="inline-block text-skin-hue print:[&>svg]:hidden" data-astro-cid-ghubstuj> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block w-4 h-4 ml-1 transition-transform translate-y-px shrink-0 group-hover/link:-translate-y-1 group-hover/link:translate-x-1 group-focus-visible/link:-translate-y-1 group-focus-visible/link:translate-x-1 motion-reduce:transition-none rotate-45" aria-hidden="true" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </span> </span> </h3> <!-- Full content - hidden for collapsed entries --> <div class="full-content hidden" data-astro-cid-ghubstuj> <div class="text-xs text-skin-muted" data-astro-cid-ghubstuj> US - Remote </div> <div class="mt-4 print:gap-0 flex flex-col gap-4 print:text-xs text-sm" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold" data-ccursor="lift" data-astro-cid-ghubstuj>Summary:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Delivered high-quality technical support via email and video, managed the billing and account system, and collaborated with marketing to develop technical content and customer onboarding materials.</li> </ul> </div> <div class="after:from-skin-hue dark:after:to-skin-hue/0 flex relative flex-col print:!h-auto gap-4 print:gap-2 after:bg-gradient-to-t after:absolute after:bottom-0 after:w-full print:after:hidden after:h-12 after:content-[''] h-16 group-data-[expanded=true]:after:hidden group-data-[expanded=true]:h-auto overflow-hidden duration-200 ease-out" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold print:pt-1" data-ccursor="lift" data-astro-cid-ghubstuj>Responsibilities:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj>  </ul> </div> </div>

                  <button data-ccursor="lift" class="print:hidden group/more w-fit cursor-pointer items-center justify-center gap-1.5 text-xs underline text-skin-muted transition-all hover:text-skin-inverted flex expand-button" data-astro-cid-ghubstuj> <span class="expand-text" data-astro-cid-ghubstuj>Show more</span> <svg width="24" height="24" viewBox="0 0 24 24" class="w-4 h-4 group-hover/more:translate-y-0.5 duration-200 ease-out group-data-[expanded=true]:rotate-180" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-s-line">   <use href="#ai:ri:arrow-up-s-line"></use>  </svg> </button>

                  <ul class="flex print:hidden flex-wrap gap-2" aria-label="Technologies used" data-astro-cid-ghubstuj> <li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:face-agent">   <use href="#ai:mdi:face-agent"></use>  </svg> <span data-astro-cid-ghubstuj>Technical Support</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:file-document">   <use href="#ai:mdi:file-document"></use>  </svg> <span data-astro-cid-ghubstuj>Documentation</span> </li> </ul> </div> </div> </div> </div> </li><li class="relative print:py-2 experience-entry collapsed-entry" data-index="5" data-astro-cid-ghubstuj> <div data-expanded="false" class="group relative grid pb-1 print:pb-0 transition-all print:grid-cols-1 print:gap-1 sm:grid-cols-12 sm:gap-8 md:gap-6 lg:hover:!opacity-100 expand-container" data-astro-cid-ghubstuj> <div class="relative mt-1 text-xs font-semibold sm:col-span-2" data-astro-cid-ghubstuj> <time datetime="2013-07-01" data-title="2013-07-01" data-astro-cid-ghubstuj>2013</time> - <time data-astro-cid-ghubstuj>Present</time> <time datetime="P12Y11M" data-title="P12Y11M" class="mt-1 text-skin-hue print:hidden hidden full-content" data-astro-cid-ghubstuj>12y : 11m</time> </div> <div class="relative flex flex-col pb-6 print:pb-0 before:-ml-6 sm:col-span-10 before:w-px print:before:hidden before:absolute before:bg-skin-muted before:h-full before:mt-2" data-astro-cid-ghubstuj> <div class="absolute w-2 h-2 bg-skin-muted rounded-full mt-2 -translate-x-[1.71rem] ring print:hidden ring-skin-fill" data-astro-cid-ghubstuj></div> <h3 data-astro-cid-ghubstuj> <span class="inline-flex items-center text-lg print:text-base leading-tight group/link focus-visible:text-amber-500" aria-label="{position} - {company}" data-astro-cid-ghubstuj> <span data-astro-cid-ghubstuj>Operations &amp; Systems Consultant <span data-astro-cid-ghubstuj>@</span> <span data-astro-cid-ghubstuj>Freelance Consultant</span>  </span> </span> </h3> <!-- Full content - hidden for collapsed entries --> <div class="full-content hidden" data-astro-cid-ghubstuj> <div class="text-xs text-skin-muted" data-astro-cid-ghubstuj> US - Remote </div> <div class="mt-4 print:gap-0 flex flex-col gap-4 print:text-xs text-sm" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold" data-ccursor="lift" data-astro-cid-ghubstuj>Summary:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Supported 10+ founders across education, solar, insurance, and publishing in optimizing web funnels, automating operations, and building scalable digital systems.</li> </ul> </div> <div class="after:from-skin-hue dark:after:to-skin-hue/0 flex relative flex-col print:!h-auto gap-4 print:gap-2 after:bg-gradient-to-t after:absolute after:bottom-0 after:w-full print:after:hidden after:h-12 after:content-[''] h-16 group-data-[expanded=true]:after:hidden group-data-[expanded=true]:h-auto overflow-hidden duration-200 ease-out" data-astro-cid-ghubstuj> <div class="flex flex-col gap-1" data-astro-cid-ghubstuj> <h4 class="print:font-bold print:pt-1" data-ccursor="lift" data-astro-cid-ghubstuj>Responsibilities:</h4> <ul class="text-skin-muted [&>li]:ml-4 flex list-disc flex-col gap-2" data-astro-cid-ghubstuj> <li data-ccursor data-astro-cid-ghubstuj>Delivered end-to-end projects including copywriting, workflow automation, and WordPress builds</li><li data-ccursor data-astro-cid-ghubstuj>Improved lead conversion and reduced manual workload for clients</li> </ul> </div> </div>

                  <button data-ccursor="lift" class="print:hidden group/more w-fit cursor-pointer items-center justify-center gap-1.5 text-xs underline text-skin-muted transition-all hover:text-skin-inverted flex expand-button" data-astro-cid-ghubstuj> <span class="expand-text" data-astro-cid-ghubstuj>Show more</span> <svg width="24" height="24" viewBox="0 0 24 24" class="w-4 h-4 group-hover/more:translate-y-0.5 duration-200 ease-out group-data-[expanded=true]:rotate-180" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-up-s-line">   <use href="#ai:ri:arrow-up-s-line"></use>  </svg> </button>

                  <ul class="flex print:hidden flex-wrap gap-2" aria-label="Technologies used" data-astro-cid-ghubstuj> <li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:lightbulb">   <use href="#ai:mdi:lightbulb"></use>  </svg> <span data-astro-cid-ghubstuj>Consulting</span> </li><li data-ccursor="lift" class="bg-skin-button-accent/20 border-skin-hue/20 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm select-none" data-astro-cid-ghubstuj> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-ghubstuj="true" data-icon="mdi:robot">   <use href="#ai:mdi:robot"></use>  </svg> <span data-astro-cid-ghubstuj>Automation</span> </li> </ul> </div> </div> </div> </div> </li> </ul>  <button id="show-all-experience" data-ccursor="lift" class="print:hidden mt-4 w-full cursor-pointer items-center justify-center gap-1.5 text-sm underline text-skin-muted transition-all hover:text-skin-inverted flex" data-astro-cid-ghubstuj> <span id="show-all-text" data-astro-cid-ghubstuj>Show 5 more roles</span> <svg width="24" height="24" class="w-5 h-5 transition-transform duration-200" id="show-all-icon" data-astro-cid-ghubstuj="true" data-icon="ri:arrow-down-s-line">   <symbol id="ai:ri:arrow-down-s-line" viewBox="0 0 24 24"><path fill="currentColor" d="m12 13.171l4.95-4.95l1.414 1.415L12 16L5.636 9.636L7.05 8.222z"/></symbol><use href="#ai:ri:arrow-down-s-line"></use>  </svg> </button> </section> <script type="module">const a=document.querySelectorAll(".expand-button");a.forEach(e=>{e.addEventListener("click",()=>{const n=e.closest(".expand-container");n.dataset.expanded=n.dataset.expanded==="true"?"false":"true";const o=e.querySelector(".expand-text");o.innerHTML=n.dataset.expanded==="true"?"Show less":"Show more"})});const l=document.getElementById("show-all-experience"),s=document.getElementById("show-all-text"),d=document.getElementById("show-all-icon"),c=document.querySelectorAll(".collapsed-entry");let t=!1;l&&l.addEventListener("click",()=>{if(t=!t,c.forEach(e=>{e.querySelectorAll(".full-content").forEach(o=>{t?o.classList.remove("hidden"):o.classList.add("hidden")})}),s){const e=c.length;s.textContent=t?"Show less":`Show ${e} more roles`}d&&(d.style.transform=t?"rotate(180deg)":"rotate(0deg)")});</script>   <section class="flex flex-col gap-4 print:gap-0 print:col-span-full"> <h3 data-ccursor="lift" class="relative flex w-max items-center gap-3 pb-4 text-3xl print:gap-1 print:pb-0 print:text-xl print:font-extrabold sm:hover:text-skin-hue"> Core Competencies </h3>  <ul class="w-100 inline-flex print:mt-4 flex-wrap gap-4 [&>li>svg]:text-skin-hue [&>li]:text-sm"> <li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:briefcase">   <symbol id="ai:mdi:briefcase" viewBox="0 0 24 24"><path fill="currentColor" d="M10 2h4a2 2 0 0 1 2 2v2h4a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8c0-1.11.89-2 2-2h4V4c0-1.11.89-2 2-2m4 4V4h-4v2z"/></symbol><use href="#ai:mdi:briefcase"></use>  </svg> <span>General Management</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:chart-line">   <symbol id="ai:mdi:chart-line" viewBox="0 0 24 24"><path fill="currentColor" d="m16 11.78l4.24-7.33l1.73 1l-5.23 9.05l-6.51-3.75L5.46 19H22v2H2V3h2v14.54L9.5 8z"/></symbol><use href="#ai:mdi:chart-line"></use>  </svg> <span>P&amp;L Ownership</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:package-variant">   <symbol id="ai:mdi:package-variant" viewBox="0 0 24 24"><path fill="currentColor" d="M2 10.96a.985.985 0 0 1-.37-1.37L3.13 7c.11-.2.28-.34.47-.42l7.83-4.4c.16-.12.36-.18.57-.18s.41.06.57.18l7.9 4.44c.19.1.35.26.44.46l1.45 2.52c.28.48.11 1.09-.36 1.36l-1 .58v4.96c0 .38-.21.71-.53.88l-7.9 4.44c-.16.12-.36.18-.57.18s-.41-.06-.57-.18l-7.9-4.44A.99.99 0 0 1 3 16.5v-5.54c-.3.17-.68.18-1 0m10-6.81v6.7l5.96-3.35zM5 15.91l6 3.38v-6.71L5 9.21zm14 0v-3.22l-5 2.9c-.33.18-.7.17-1 .01v3.69zm-5.15-2.55l6.28-3.63l-.58-1.01l-6.28 3.63z"/></symbol><use href="#ai:mdi:package-variant"></use>  </svg> <span>Product</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:cog">   <symbol id="ai:mdi:cog" viewBox="0 0 24 24"><path fill="currentColor" d="M12 15.5A3.5 3.5 0 0 1 8.5 12A3.5 3.5 0 0 1 12 8.5a3.5 3.5 0 0 1 3.5 3.5a3.5 3.5 0 0 1-3.5 3.5m7.43-2.53c.04-.32.07-.64.07-.97s-.03-.66-.07-1l2.11-1.63c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.31-.61-.22l-2.49 1c-.52-.39-1.06-.73-1.69-.98l-.37-2.65A.506.506 0 0 0 14 2h-4c-.25 0-.46.18-.5.42l-.37 2.65c-.63.25-1.17.59-1.69.98l-2.49-1c-.22-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64L4.57 11c-.04.34-.07.67-.07 1s.03.65.07.97l-2.11 1.66c-.19.15-.25.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1.01c.52.4 1.06.74 1.69.99l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.63-.26 1.17-.59 1.69-.99l2.49 1.01c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64z"/></symbol><use href="#ai:mdi:cog"></use>  </svg> <span>Operations</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:account-group">   <symbol id="ai:mdi:account-group" viewBox="0 0 24 24"><path fill="currentColor" d="M12 5.5A3.5 3.5 0 0 1 15.5 9a3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 8.5 9A3.5 3.5 0 0 1 12 5.5M5 8c.56 0 1.08.15 1.53.42c-.15 1.43.27 2.85 1.13 3.96C7.16 13.34 6.16 14 5 14a3 3 0 0 1-3-3a3 3 0 0 1 3-3m14 0a3 3 0 0 1 3 3a3 3 0 0 1-3 3c-1.16 0-2.16-.66-2.66-1.62a5.54 5.54 0 0 0 1.13-3.96c.45-.27.97-.42 1.53-.42M5.5 18.25c0-2.07 2.91-3.75 6.5-3.75s6.5 1.68 6.5 3.75V20h-13zM0 20v-1.5c0-1.39 1.89-2.56 4.45-2.9c-.59.68-.95 1.62-.95 2.65V20zm24 0h-3.5v-1.75c0-1.03-.36-1.97-.95-2.65c2.56.34 4.45 1.51 4.45 2.9z"/></symbol><use href="#ai:mdi:account-group"></use>  </svg> <span>Leadership</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:chess-queen">   <symbol id="ai:mdi:chess-queen" viewBox="0 0 24 24"><path fill="currentColor" d="M18 3a2 2 0 0 1 2 2c0 .81-.5 1.5-1.17 1.82L17 13.15V18H7v-4.85L5.17 6.82C4.5 6.5 4 5.81 4 5a2 2 0 0 1 2-2a2 2 0 0 1 2 2c0 .5-.18.95-.5 1.3l2.8 3.05l.53-3.73C10.33 5.26 10 4.67 10 4a2 2 0 0 1 2-2a2 2 0 0 1 2 2c0 .67-.33 1.26-.83 1.62l.53 3.73l2.77-3.06A2 2 0 0 1 16 5a2 2 0 0 1 2-2M5 20h14v2H5z"/></symbol><use href="#ai:mdi:chess-queen"></use>  </svg> <span>Strategy</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:account-heart">   <symbol id="ai:mdi:account-heart" viewBox="0 0 24 24"><path fill="currentColor" d="M15 14c-2.7 0-8 1.3-8 4v2h16v-2c0-2.7-5.3-4-8-4m0-2a4 4 0 0 0 4-4a4 4 0 0 0-4-4a4 4 0 0 0-4 4a4 4 0 0 0 4 4M5 15l-.6-.5C2.4 12.6 1 11.4 1 9.9c0-1.2 1-2.2 2.2-2.2c.7 0 1.4.3 1.8.8c.4-.5 1.1-.8 1.8-.8C8 7.7 9 8.6 9 9.9c0 1.5-1.4 2.7-3.4 4.6z"/></symbol><use href="#ai:mdi:account-heart"></use>  </svg> <span>Customer Success</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" viewBox="0 0 24 24" data-icon="mdi:chart-line">   <use href="#ai:mdi:chart-line"></use>  </svg> <span>Revenue</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:headset">   <symbol id="ai:mdi:headset" viewBox="0 0 24 24"><path fill="currentColor" d="M12 1c-5 0-9 4-9 9v7a3 3 0 0 0 3 3h3v-8H5v-2a7 7 0 0 1 7-7a7 7 0 0 1 7 7v2h-4v8h4v1h-7v2h6a3 3 0 0 0 3-3V10c0-5-4.03-9-9-9"/></symbol><use href="#ai:mdi:headset"></use>  </svg> <span>Support Systems</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:sitemap">   <symbol id="ai:mdi:sitemap" viewBox="0 0 24 24"><path fill="currentColor" d="M9 2v6h2v3H5c-1.11 0-2 .89-2 2v3H1v6h6v-6H5v-3h6v3H9v6h6v-6h-2v-3h6v3h-2v6h6v-6h-2v-3c0-1.11-.89-2-2-2h-6V8h2V2z"/></symbol><use href="#ai:mdi:sitemap"></use>  </svg> <span>Process Design</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:school">   <symbol id="ai:mdi:school" viewBox="0 0 24 24"><path fill="currentColor" d="M12 3L1 9l11 6l9-4.91V17h2V9M5 13.18v4L12 21l7-3.82v-4L12 17z"/></symbol><use href="#ai:mdi:school"></use>  </svg> <span>Training</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:face-agent">   <symbol id="ai:mdi:face-agent" viewBox="0 0 24 24"><path fill="currentColor" d="M18.72 14.76c.35-.85.54-1.76.54-2.76c0-.72-.11-1.41-.3-2.05c-.65.15-1.33.23-2.04.23A9.07 9.07 0 0 1 9.5 6.34a9.2 9.2 0 0 1-4.73 4.88c-.04.25-.04.52-.04.78A7.27 7.27 0 0 0 12 19.27c1.05 0 2.06-.23 2.97-.64c.57 1.09.83 1.63.81 1.63c-1.64.55-2.91.82-3.78.82c-2.42 0-4.73-.95-6.43-2.66a9 9 0 0 1-2.24-3.69H2v-4.55h1.09a9.09 9.09 0 0 1 15.33-4.6a9 9 0 0 1 2.47 4.6H22v4.55h-.06L18.38 18l-5.3-.6v-1.67h4.83zm-9.45-2.99c.3 0 .59.12.8.34a1.136 1.136 0 0 1 0 1.6c-.21.21-.5.33-.8.33c-.63 0-1.14-.5-1.14-1.13s.51-1.14 1.14-1.14m5.45 0c.63 0 1.13.51 1.13 1.14s-.5 1.13-1.13 1.13s-1.14-.5-1.14-1.13a1.14 1.14 0 0 1 1.14-1.14"/></symbol><use href="#ai:mdi:face-agent"></use>  </svg> <span>Technical Support</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:file-document">   <symbol id="ai:mdi:file-document" viewBox="0 0 24 24"><path fill="currentColor" d="M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m9 16v-2H6v2zm3-4v-2H6v2z"/></symbol><use href="#ai:mdi:file-document"></use>  </svg> <span>Documentation</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:lightbulb">   <symbol id="ai:mdi:lightbulb" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2a7 7 0 0 0-7 7c0 2.38 1.19 4.47 3 5.74V17a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-2.26c1.81-1.27 3-3.36 3-5.74a7 7 0 0 0-7-7M9 21a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1v-1H9z"/></symbol><use href="#ai:mdi:lightbulb"></use>  </svg> <span>Consulting</span> </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-2 py-1 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="18" height="18" data-icon="mdi:robot">   <symbol id="ai:mdi:robot" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2M7.5 13A2.5 2.5 0 0 0 5 15.5A2.5 2.5 0 0 0 7.5 18a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 7.5 13m9 0a2.5 2.5 0 0 0-2.5 2.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5a2.5 2.5 0 0 0-2.5-2.5"/></symbol><use href="#ai:mdi:robot"></use>  </svg> <span>Automation</span> </li> </ul>  </section> <section class="flex flex-col gap-4 print:gap-0 print:hidden"> <h3 data-ccursor="lift" class="relative flex w-max items-center gap-3 pb-4 text-3xl print:gap-1 print:pb-0 print:text-xl print:font-extrabold sm:hover:text-skin-hue"> Projects </h3>  <div class="grid grid-cols-1 gap-3 md:grid-cols-2 print:flex print:flex-col" data-astro-cid-44zkpkd5> <div role="contentinfo" data-project-slug="geo-signal" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <symbol id="ai:mdi:folder-outline" viewBox="0 0 24 24"><path fill="currentColor" d="M20 18H4V8h16m0-2h-8l-2-2H4c-1.11 0-2 .89-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2"/></symbol><use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://geosignal.dev" title="Ver GEO Signal" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> GEO Signal <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <symbol id="ai:ri:arrow-up-line" viewBox="0 0 24 24"><path fill="currentColor" d="M13 7.828V20h-2V7.828l-5.364 5.364l-1.414-1.414L12 4l7.778 7.778l-1.414 1.414z"/></symbol><use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div> <a data-ccursor="lift" href="https://github.com/adamprime/geo-signal" title="View GEO Signal in GitHub" aria-label="View GEO Signal in GitHub" target="_blank" rel="noopener" class="github-link opacity-75 hover:opacity-100 cursor-none" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> <svg width="24" height="24" data-astro-cid-44zkpkd5="true" data-icon="mdi:github">   <symbol id="ai:mdi:github" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2"/></symbol><use href="#ai:mdi:github"></use>  </svg> </a> </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Production SaaS that audits, scores, and remediates website visibility in AI-powered search engines. Stripe monetization, admin dashboard, CMS-specific remediation guides, and AI citation probing across Perplexity, OpenAI, and Google AI Overviews. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>6-dimension AI readiness audit engine</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Probes 3 AI search engines for citation presence</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>CMS detection for 13 platforms with remediation templates</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Full SaaS: Stripe checkout, admin dashboard, 238 tests</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:fastapi">   <symbol id="ai:simple-icons:fastapi" viewBox="0 0 24 24"><path fill="currentColor" d="M12 .039c-6.627 0-12 5.354-12 11.96c-.001 6.606 5.372 11.963 12 11.962S24.001 18.605 24 12S18.627.039 12 .039m-.829 5.415h7.55l-7.58 5.329h5.182L5.28 18.543l5.891-13.088"/></symbol><use href="#ai:simple-icons:fastapi"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>FastAPI</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:nextdotjs">   <symbol id="ai:simple-icons:nextdotjs" viewBox="0 0 24 24"><path fill="currentColor" d="M18.665 21.978A11.94 11.94 0 0 1 12 24C5.377 24 0 18.623 0 12S5.377 0 12 0s12 5.377 12 12c0 3.583-1.574 6.801-4.067 9.001L9.219 7.2H7.2v9.596h1.615V9.251zm-3.332-8.533l1.6 2.061V7.2h-1.6z"/></symbol><use href="#ai:simple-icons:nextdotjs"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Next.js</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:stripe">   <symbol id="ai:simple-icons:stripe" viewBox="0 0 24 24"><path fill="currentColor" d="M13.976 9.15c-2.172-.806-3.356-1.426-3.356-2.409c0-.831.683-1.305 1.901-1.305c2.227 0 4.515.858 6.09 1.631l.89-5.494C18.252.975 15.697 0 12.165 0C9.667 0 7.589.654 6.104 1.872C4.56 3.147 3.757 4.992 3.757 7.218c0 4.039 2.467 5.76 6.476 7.219c2.585.92 3.445 1.574 3.445 2.583c0 .98-.84 1.545-2.354 1.545c-1.875 0-4.965-.921-6.99-2.109l-.9 5.555C5.175 22.99 8.385 24 11.714 24c2.641 0 4.843-.624 6.328-1.813c1.664-1.305 2.525-3.236 2.525-5.732c0-4.128-2.524-5.851-6.594-7.305z"/></symbol><use href="#ai:simple-icons:stripe"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Stripe</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:python">   <symbol id="ai:simple-icons:python" viewBox="0 0 24 24"><path fill="currentColor" d="m14.25.18l.9.2l.73.26l.59.3l.45.32l.34.34l.25.34l.16.33l.1.3l.04.26l.02.2l-.01.13V8.5l-.05.63l-.13.55l-.21.46l-.26.38l-.3.31l-.33.25l-.35.19l-.35.14l-.33.1l-.3.07l-.26.04l-.21.02H8.77l-.69.05l-.59.14l-.5.22l-.41.27l-.33.32l-.27.35l-.2.36l-.15.37l-.1.35l-.07.32l-.04.27l-.02.21v3.06H3.17l-.21-.03l-.28-.07l-.32-.12l-.35-.18l-.36-.26l-.36-.36l-.35-.46l-.32-.59l-.28-.73l-.21-.88l-.14-1.05l-.05-1.23l.06-1.22l.16-1.04l.24-.87l.32-.71l.36-.57l.4-.44l.42-.33l.42-.24l.4-.16l.36-.1l.32-.05l.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75l-.02-.37l.05-.34l.11-.31l.17-.28l.25-.26l.31-.23l.38-.2l.44-.18l.51-.15l.58-.12l.64-.1l.71-.06l.77-.04l.84-.02l1.27.05zm-6.3 1.98l-.23.33l-.08.41l.08.41l.23.34l.33.22l.41.09l.41-.09l.33-.22l.23-.34l.08-.41l-.08-.41l-.23-.33l-.33-.22l-.41-.09l-.41.09zm13.09 3.95l.28.06l.32.12l.35.18l.36.27l.36.35l.35.47l.32.59l.28.73l.21.88l.14 1.04l.05 1.23l-.06 1.23l-.16 1.04l-.24.86l-.32.71l-.36.57l-.4.45l-.42.33l-.42.24l-.4.16l-.36.09l-.32.05l-.24.02l-.16-.01h-8.22v.82h5.84l.01 2.76l.02.36l-.05.34l-.11.31l-.17.29l-.25.25l-.31.24l-.38.2l-.44.17l-.51.15l-.58.13l-.64.09l-.71.07l-.77.04l-.84.01l-1.27-.04l-1.07-.14l-.9-.2l-.73-.25l-.59-.3l-.45-.33l-.34-.34l-.25-.34l-.16-.33l-.1-.3l-.04-.25l-.02-.2l.01-.13v-5.34l.05-.64l.13-.54l.21-.46l.26-.38l.3-.32l.33-.24l.35-.2l.35-.14l.33-.1l.3-.06l.26-.04l.21-.02l.13-.01h5.84l.69-.05l.59-.14l.5-.21l.41-.28l.33-.32l.27-.35l.2-.36l.15-.36l.1-.35l.07-.32l.04-.28l.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33l-.08.41l.08.41l.23.33l.33.23l.41.08l.41-.08l.33-.23l.23-.33l.08-.41l-.08-.41l-.23-.33l-.33-.23l-.41-.08l-.41.08z"/></symbol><use href="#ai:simple-icons:python"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Python</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="valoa-solar" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://go.valoasolar.com" title="Ver Valoa Solar" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Valoa Solar <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> AI-powered solar lead qualification for a residential installer. Agent Ray — a Gemini-powered conversational AI — qualifies prospects through natural dialogue, integrates Google Solar API for roof analysis, and hands off AI-generated summaries to the sales team. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Agentic AI with tool calls for lead qualification</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Google Solar API with per-panel roof analysis</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Meta CAPI integration (8.0/10 match quality)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>165 tests, Playwright E2E, bilingual support</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:nextdotjs">   <use href="#ai:simple-icons:nextdotjs"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Next.js</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:googlegemini">   <symbol id="ai:simple-icons:googlegemini" viewBox="0 0 24 24"><path fill="currentColor" d="M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68q.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58a12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68q-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96q2.19.93 3.81 2.55t2.55 3.81"/></symbol><use href="#ai:simple-icons:googlegemini"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Gemini</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:drizzle">   <symbol id="ai:simple-icons:drizzle" viewBox="0 0 24 24"><path fill="currentColor" d="M5.353 11.823a1.036 1.036 0 0 0-.395-1.422a1.063 1.063 0 0 0-1.437.399L.138 16.702a1.035 1.035 0 0 0 .395 1.422a1.063 1.063 0 0 0 1.437-.398zm11.216 0a1.036 1.036 0 0 0-.394-1.422a1.064 1.064 0 0 0-1.438.399l-3.382 5.902a1.036 1.036 0 0 0 .394 1.422c.506.283 1.15.104 1.438-.398zm7.293-4.525a1.036 1.036 0 0 0-.395-1.422a1.06 1.06 0 0 0-1.437.399l-3.383 5.902a1.036 1.036 0 0 0 .395 1.422a1.063 1.063 0 0 0 1.437-.399zm-11.219 0a1.035 1.035 0 0 0-.394-1.422a1.064 1.064 0 0 0-1.438.398l-3.382 5.903a1.036 1.036 0 0 0 .394 1.422c.506.282 1.15.104 1.438-.399z"/></symbol><use href="#ai:simple-icons:drizzle"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Drizzle</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:vercel">   <symbol id="ai:simple-icons:vercel" viewBox="0 0 24 24"><path fill="currentColor" d="m12 1.608l12 20.784H0Z"/></symbol><use href="#ai:simple-icons:vercel"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Vercel</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="bishopric-os" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://sego.bishopricos.com" title="Ver Bishopric OS" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Bishopric OS <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Comprehensive administrative platform for local church leadership. Sacrament meeting planning, callings management, ward calendar, drag-and-drop website builder, and AI-powered calling field guides — all with zero-knowledge encryption. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Zero-knowledge AES-256-GCM encryption for all PII</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>AI calling guides with handbook RAG (pgvector)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Ward website builder with custom domain + auto-SSL</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>681 tests, 11 roles, 21 RLS-protected tables</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:nextdotjs">   <use href="#ai:simple-icons:nextdotjs"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Next.js</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:supabase">   <symbol id="ai:simple-icons:supabase" viewBox="0 0 24 24"><path fill="currentColor" d="M11.9 1.036c-.015-.986-1.26-1.41-1.874-.637L.764 12.05C-.33 13.427.65 15.455 2.409 15.455h9.579l.113 7.51c.014.985 1.259 1.408 1.873.636l9.262-11.653c1.093-1.375.113-3.403-1.645-3.403h-9.642z"/></symbol><use href="#ai:simple-icons:supabase"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Supabase</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:anthropic">   <symbol id="ai:simple-icons:anthropic" viewBox="0 0 24 24"><path fill="currentColor" d="M17.304 3.541h-3.672l6.696 16.918H24Zm-10.608 0L0 20.459h3.744l1.37-3.553h7.005l1.369 3.553h3.744L10.536 3.541Zm-.371 10.223L8.616 7.82l2.291 5.945Z"/></symbol><use href="#ai:simple-icons:anthropic"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Anthropic</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:prisma">   <symbol id="ai:simple-icons:prisma" viewBox="0 0 24 24"><path fill="currentColor" d="M21.807 18.285L13.553.757a1.32 1.32 0 0 0-1.129-.755a1.31 1.31 0 0 0-1.206.626l-8.952 14.5a1.36 1.36 0 0 0 .016 1.455l4.376 6.778a1.41 1.41 0 0 0 1.58.581l12.703-3.757c.389-.115.707-.39.873-.755s.164-.783-.007-1.145m-1.848.752L9.18 22.224a.452.452 0 0 1-.575-.52l3.85-18.438c.072-.345.549-.4.699-.08l7.129 15.138a.515.515 0 0 1-.325.713"/></symbol><use href="#ai:simple-icons:prisma"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Prisma</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="wise-squid" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://wisesquid.com" title="Ver WiseSquid" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> WiseSquid <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> SaaS platform for Substack podcasters that automates the entire episode publishing workflow — transcription, AI quote extraction, branded image generation, audiograms with synced subtitles, and guest social media guides. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>55+ episodes processed in production</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Self-hosted asset generation via Cloudflare Browser Rendering</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Guest-ready social guides with per-platform formatting</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Multi-tenant SaaS with Deepgram + AI pipeline</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:svelte">   <symbol id="ai:simple-icons:svelte" viewBox="0 0 24 24"><path fill="currentColor" d="M10.354 21.125a4.44 4.44 0 0 1-4.765-1.767a4.1 4.1 0 0 1-.703-3.107a4 4 0 0 1 .134-.522l.105-.321l.287.21a7.2 7.2 0 0 0 2.186 1.092l.208.063l-.02.208a1.25 1.25 0 0 0 .226.83a1.34 1.34 0 0 0 1.435.533a1.2 1.2 0 0 0 .343-.15l5.59-3.562a1.16 1.16 0 0 0 .524-.778a1.24 1.24 0 0 0-.211-.937a1.34 1.34 0 0 0-1.435-.533a1.2 1.2 0 0 0-.343.15l-2.133 1.36a4 4 0 0 1-1.135.499a4.44 4.44 0 0 1-4.765-1.766a4.1 4.1 0 0 1-.702-3.108a3.86 3.86 0 0 1 1.742-2.582l5.589-3.563a4 4 0 0 1 1.135-.499a4.44 4.44 0 0 1 4.765 1.767a4.1 4.1 0 0 1 .703 3.107a4 4 0 0 1-.134.522l-.105.321l-.286-.21a7.2 7.2 0 0 0-2.187-1.093l-.208-.063l.02-.207a1.25 1.25 0 0 0-.226-.831a1.34 1.34 0 0 0-1.435-.532a1.2 1.2 0 0 0-.343.15L8.62 9.368a1.16 1.16 0 0 0-.524.778a1.24 1.24 0 0 0 .211.937a1.34 1.34 0 0 0 1.435.533a1.2 1.2 0 0 0 .344-.151l2.132-1.36a4 4 0 0 1 1.135-.498a4.44 4.44 0 0 1 4.765 1.766a4.1 4.1 0 0 1 .702 3.108a3.86 3.86 0 0 1-1.742 2.583l-5.589 3.562a4 4 0 0 1-1.135.499m10.358-17.95C18.484-.015 14.082-.96 10.9 1.068L5.31 4.63a6.4 6.4 0 0 0-2.896 4.295a6.75 6.75 0 0 0 .666 4.336a6.4 6.4 0 0 0-.96 2.396a6.83 6.83 0 0 0 1.168 5.167c2.229 3.19 6.63 4.135 9.812 2.108l5.59-3.562a6.4 6.4 0 0 0 2.896-4.295a6.76 6.76 0 0 0-.665-4.336a6.4 6.4 0 0 0 .958-2.396a6.83 6.83 0 0 0-1.167-5.168"/></symbol><use href="#ai:simple-icons:svelte"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>SvelteKit</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:openai">   <symbol id="ai:simple-icons:openai" viewBox="0 0 24 24"><path fill="currentColor" d="M22.282 9.821a6 6 0 0 0-.516-4.91a6.05 6.05 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a6 6 0 0 0-3.998 2.9a6.05 6.05 0 0 0 .743 7.097a5.98 5.98 0 0 0 .51 4.911a6.05 6.05 0 0 0 6.515 2.9A6 6 0 0 0 13.26 24a6.06 6.06 0 0 0 5.772-4.206a6 6 0 0 0 3.997-2.9a6.06 6.06 0 0 0-.747-7.073M13.26 22.43a4.48 4.48 0 0 1-2.876-1.04l.141-.081l4.779-2.758a.8.8 0 0 0 .392-.681v-6.737l2.02 1.168a.07.07 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494M3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085l4.783 2.759a.77.77 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646M2.34 7.896a4.5 4.5 0 0 1 2.366-1.973V11.6a.77.77 0 0 0 .388.677l5.815 3.354l-2.02 1.168a.08.08 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.08.08 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667m2.01-3.023l-.141-.085l-4.774-2.782a.78.78 0 0 0-.785 0L9.409 9.23V6.897a.07.07 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.8.8 0 0 0-.393.681zm1.097-2.365l2.602-1.5l2.607 1.5v2.999l-2.597 1.5l-2.607-1.5Z"/></symbol><use href="#ai:simple-icons:openai"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>OpenAI</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:cloudflare">   <symbol id="ai:simple-icons:cloudflare" viewBox="0 0 24 24"><path fill="currentColor" d="M16.509 16.845c.147-.507.09-.971-.155-1.316c-.225-.316-.605-.499-1.062-.52l-8.66-.113a.16.16 0 0 1-.133-.07a.2.2 0 0 1-.02-.156a.24.24 0 0 1 .203-.156l8.736-.113c1.035-.049 2.16-.886 2.554-1.913l.499-1.302a.27.27 0 0 0 .014-.168a5.689 5.689 0 0 0-10.937-.584a2.58 2.58 0 0 0-1.794-.498a2.56 2.56 0 0 0-2.223 3.18A3.634 3.634 0 0 0 0 16.751q.002.264.035.527a.174.174 0 0 0 .17.148h15.98a.22.22 0 0 0 .204-.155zm2.757-5.564c-.077 0-.161 0-.239.011c-.056 0-.105.042-.127.098l-.337 1.174c-.148.507-.092.971.154 1.317c.225.316.605.498 1.062.52l1.844.113c.056 0 .105.026.133.07a.2.2 0 0 1 .021.156a.24.24 0 0 1-.204.156l-1.92.112c-1.042.049-2.159.887-2.553 1.914l-.141.358c-.028.072.021.142.099.142h6.597a.174.174 0 0 0 .17-.126a5 5 0 0 0 .175-1.28a4.74 4.74 0 0 0-4.734-4.727"/></symbol><use href="#ai:simple-icons:cloudflare"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Cloudflare</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:prisma">   <use href="#ai:simple-icons:prisma"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Prisma</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="18th-vine-jazz-fest" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://18thvinejazzfest.com/" title="Ver 18th &#38; Vine Jazz Festival" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> 18th &amp; Vine Jazz Festival <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Client website for the 18th &amp; Vine Student Jazz Festival in Kansas City. Built with a multi-agent workflow — orchestrator, researcher, designer, and coding agent collaborating through GitHub Issues. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Real client delivery for a KC cultural institution</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Multi-agent development workflow (4 AI agents)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Astro 6 with Netlify deployment</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Content parsed from PDFs and event materials</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:astro">   <symbol id="ai:simple-icons:astro" viewBox="0 0 24 24"><path fill="currentColor" d="M8.358 20.162c-1.186-1.07-1.532-3.316-1.038-4.944c.856 1.026 2.043 1.352 3.272 1.535c1.897.283 3.76.177 5.522-.678c.202-.098.388-.229.608-.36c.166.473.209.95.151 1.437c-.14 1.185-.738 2.1-1.688 2.794c-.38.277-.782.525-1.175.787c-1.205.804-1.531 1.747-1.078 3.119l.044.148a3.16 3.16 0 0 1-1.407-1.188a3.3 3.3 0 0 1-.544-1.815c-.004-.32-.004-.642-.048-.958c-.106-.769-.472-1.113-1.161-1.133c-.707-.02-1.267.411-1.415 1.09c-.012.053-.028.104-.045.165zm-5.961-4.445s3.24-1.575 6.49-1.575l2.451-7.565c.092-.366.36-.614.662-.614s.57.248.662.614l2.45 7.565c3.85 0 6.491 1.575 6.491 1.575L16.088.727C15.93.285 15.663 0 15.303 0H8.697c-.36 0-.615.285-.784.727z"/></symbol><use href="#ai:simple-icons:astro"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Astro</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="mdi:tailwind">   <symbol id="ai:mdi:tailwind" viewBox="0 0 24 24"><path fill="currentColor" d="M12 6c-2.67 0-4.33 1.33-5 4c1-1.33 2.17-1.83 3.5-1.5c.76.19 1.31.74 1.91 1.35c.98 1 2.09 2.15 4.59 2.15c2.67 0 4.33-1.33 5-4c-1 1.33-2.17 1.83-3.5 1.5c-.76-.19-1.3-.74-1.91-1.35C15.61 7.15 14.5 6 12 6m-5 6c-2.67 0-4.33 1.33-5 4c1-1.33 2.17-1.83 3.5-1.5c.76.19 1.3.74 1.91 1.35C8.39 16.85 9.5 18 12 18c2.67 0 4.33-1.33 5-4c-1 1.33-2.17 1.83-3.5 1.5c-.76-.19-1.3-.74-1.91-1.35C10.61 13.15 9.5 12 7 12"/></symbol><use href="#ai:mdi:tailwind"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Tailwind</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:netlify">   <symbol id="ai:simple-icons:netlify" viewBox="0 0 24 24"><path fill="currentColor" d="M6.49 19.04h-.23L5.13 17.9v-.23l1.73-1.71h1.2l.15.15v1.2L6.5 19.04ZM5.13 6.31V6.1l1.13-1.13h.23L8.2 6.68v1.2l-.15.15h-1.2zm9.96 9.09h-1.65l-.14-.13v-3.83c0-.68-.27-1.2-1.1-1.23c-.42 0-.9 0-1.43.02l-.07.08v4.96l-.14.14H8.9l-.13-.14V8.73l.13-.14h3.7a2.6 2.6 0 0 1 2.61 2.6v4.08l-.13.14Zm-8.37-2.44H.14L0 12.82v-1.64l.14-.14h6.58l.14.14v1.64zm17.14 0h-6.58l-.14-.14v-1.64l.14-.14h6.58l.14.14v1.64zM11.05 6.55V1.64l.14-.14h1.65l.14.14v4.9l-.14.14h-1.65zm0 15.81v-4.9l.14-.14h1.65l.14.13v4.91l-.14.14h-1.65z"/></symbol><use href="#ai:simple-icons:netlify"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Netlify</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="keen-bear" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://keenbear.com" title="Ver Keen Bear" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Keen Bear <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div> <a data-ccursor="lift" href="https://github.com/adamprime/keenbear" title="View Keen Bear in GitHub" aria-label="View Keen Bear in GitHub" target="_blank" rel="noopener" class="github-link opacity-75 hover:opacity-100 cursor-none" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> <svg width="24" height="24" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:github">   <use href="#ai:mdi:github"></use>  </svg> </a> </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Free, zero-dependency text cleaning utility that runs entirely in the browser. 25 one-click cleaners, 5 themed skins, keyboard shortcuts, regex find &amp; replace, and offline PWA support. No accounts, no servers. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>25 cleaners (whitespace, case, unicode, redaction, etc.)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>5 themed skins with dark/light modes</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>143 TDD tests, 20-level undo/redo</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Offline-capable PWA, zero dependencies</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:javascript">   <symbol id="ai:simple-icons:javascript" viewBox="0 0 24 24"><path fill="currentColor" d="M0 0h24v24H0zm22.034 18.276c-.175-1.095-.888-2.015-3.003-2.873c-.736-.345-1.554-.585-1.797-1.14c-.091-.33-.105-.51-.046-.705c.15-.646.915-.84 1.515-.66c.39.12.75.42.976.9c1.034-.676 1.034-.676 1.755-1.125c-.27-.42-.404-.601-.586-.78c-.63-.705-1.469-1.065-2.834-1.034l-.705.089c-.676.165-1.32.525-1.71 1.005c-1.14 1.291-.811 3.541.569 4.471c1.365 1.02 3.361 1.244 3.616 2.205c.24 1.17-.87 1.545-1.966 1.41c-.811-.18-1.26-.586-1.755-1.336l-1.83 1.051c.21.48.45.689.81 1.109c1.74 1.756 6.09 1.666 6.871-1.004c.029-.09.24-.705.074-1.65zm-8.983-7.245h-2.248c0 1.938-.009 3.864-.009 5.805c0 1.232.063 2.363-.138 2.711c-.33.689-1.18.601-1.566.48c-.396-.196-.597-.466-.83-.855c-.063-.105-.11-.196-.127-.196l-1.825 1.125c.305.63.75 1.172 1.324 1.517c.855.51 2.004.675 3.207.405c.783-.226 1.458-.691 1.811-1.411c.51-.93.402-2.07.397-3.346c.012-2.054 0-4.109 0-6.179z"/></symbol><use href="#ai:simple-icons:javascript"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>JavaScript</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:html5">   <symbol id="ai:simple-icons:html5" viewBox="0 0 24 24"><path fill="currentColor" d="M1.5 0h21l-1.91 21.563L11.977 24l-8.564-2.438zm7.031 9.75l-.232-2.718l10.059.003l.23-2.622L5.412 4.41l.698 8.01h9.126l-.326 3.426l-2.91.804l-2.955-.81l-.188-2.11H6.248l.33 4.171L12 19.351l5.379-1.443l.744-8.157z"/></symbol><use href="#ai:simple-icons:html5"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>HTML</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:css3">   <symbol id="ai:simple-icons:css3" viewBox="0 0 24 24"><path fill="currentColor" d="M1.5 0h21l-1.91 21.563L11.977 24l-8.565-2.438zm17.09 4.413L5.41 4.41l.213 2.622l10.125.002l-.255 2.716h-6.64l.24 2.573h6.182l-.366 3.523l-2.91.804l-2.956-.81l-.188-2.11h-2.61l.29 3.855L12 19.288l5.373-1.53z"/></symbol><use href="#ai:simple-icons:css3"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>CSS</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="dumpster-fire" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://dumpsterfire.ink" title="Ver Dumpster Fire" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Dumpster Fire <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Local-first, privacy-focused daily writing app. Distraction-free Milkdown editor with inline markdown, typewriter scrolling, and AI-powered &#39;What Remains&#39; analysis that extracts themes and insights from your writing. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Local-first via Chrome File System Access API</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>AI &#39;What Remains&#39; analysis (Claude/OpenAI)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>5 themes, encryption mode, PWA support</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>103 unit tests + Playwright E2E</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:react">   <symbol id="ai:simple-icons:react" viewBox="0 0 24 24"><path fill="currentColor" d="M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236a2.236 2.236 0 0 1-2.236-2.236a2.236 2.236 0 0 1 2.235-2.236a2.236 2.236 0 0 1 2.236 2.236m2.648-10.69c-1.346 0-3.107.96-4.888 2.622c-1.78-1.653-3.542-2.602-4.887-2.602c-.41 0-.783.093-1.106.278c-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03c-.704 3.113-.39 5.588.988 6.38c.32.187.69.275 1.102.275c1.345 0 3.107-.96 4.888-2.624c1.78 1.654 3.542 2.603 4.887 2.603c.41 0 .783-.09 1.106-.275c1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032c.704-3.11.39-5.587-.988-6.38a2.17 2.17 0 0 0-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127c.666.382.955 1.835.73 3.704c-.054.46-.142.945-.25 1.44a23.5 23.5 0 0 0-3.107-.534A24 24 0 0 0 12.769 4.7c1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28c-.686.72-1.37 1.537-2.02 2.442a23 23 0 0 0-3.113.538a15 15 0 0 1-.254-1.42c-.23-1.868.054-3.32.714-3.707c.19-.09.4-.127.563-.132zm4.882 3.05q.684.704 1.36 1.564c-.44-.02-.89-.034-1.345-.034q-.691-.001-1.36.034c.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093q.61.874 1.183 1.86q.557.961 1.018 1.946c-.308.655-.646 1.31-1.013 1.95c-.38.66-.773 1.288-1.18 1.87a25.6 25.6 0 0 1-4.412.005a27 27 0 0 1-1.183-1.86q-.557-.961-1.018-1.946a25 25 0 0 1 1.013-1.954c.38-.66.773-1.286 1.18-1.868A25 25 0 0 1 12 8.098zm-3.635.254c-.24.377-.48.763-.704 1.16q-.336.585-.635 1.174c-.265-.656-.49-1.31-.676-1.947c.64-.15 1.315-.283 2.015-.386zm7.26 0q1.044.153 2.006.387c-.18.632-.405 1.282-.66 1.933a26 26 0 0 0-1.345-2.32zm3.063.675q.727.226 1.375.498c1.732.74 2.852 1.708 2.852 2.476c-.005.768-1.125 1.74-2.857 2.475c-.42.18-.88.342-1.355.493a24 24 0 0 0-1.1-2.98c.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98a23 23 0 0 0-1.086 2.964c-.484-.15-.944-.318-1.37-.5c-1.732-.737-2.852-1.706-2.852-2.474s1.12-1.742 2.852-2.476c.42-.18.88-.342 1.356-.494m11.678 4.28c.265.657.49 1.312.676 1.948c-.64.157-1.316.29-2.016.39a26 26 0 0 0 1.341-2.338zm-9.945.02c.2.392.41.783.64 1.175q.345.586.705 1.143a22 22 0 0 1-2.006-.386c.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423c.23 1.868-.054 3.32-.714 3.708c-.147.09-.338.128-.563.128c-1.012 0-2.514-.807-4.11-2.28c.686-.72 1.37-1.536 2.02-2.44c1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532c.66.905 1.345 1.727 2.035 2.446c-1.595 1.483-3.092 2.295-4.11 2.295a1.2 1.2 0 0 1-.553-.132c-.666-.38-.955-1.834-.73-3.703c.054-.46.142-.944.25-1.438zm4.56.64q.661.032 1.345.034q.691.001 1.36-.034c-.44.572-.895 1.095-1.345 1.565q-.684-.706-1.36-1.565"/></symbol><use href="#ai:simple-icons:react"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>React</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:typescript">   <symbol id="ai:simple-icons:typescript" viewBox="0 0 24 24"><path fill="currentColor" d="M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75q.918 0 1.627.111a6.4 6.4 0 0 1 1.306.34v2.458a4 4 0 0 0-.643-.361a5 5 0 0 0-.717-.26a5.5 5.5 0 0 0-1.426-.2q-.45 0-.819.086a2.1 2.1 0 0 0-.623.242q-.254.156-.393.374a.9.9 0 0 0-.14.49q0 .294.156.529q.156.234.443.444c.287.21.423.276.696.41q.41.203.926.416q.705.296 1.266.628q.561.333.963.753q.402.418.614.957q.213.538.214 1.253q0 .986-.373 1.656a3 3 0 0 1-1.012 1.085a4.4 4.4 0 0 1-1.487.596q-.85.18-1.79.18a10 10 0 0 1-1.84-.164a5.5 5.5 0 0 1-1.512-.493v-2.63a5.03 5.03 0 0 0 3.237 1.2q.5 0 .872-.09q.373-.09.623-.25q.249-.162.373-.38a1.02 1.02 0 0 0-.074-1.089a2.1 2.1 0 0 0-.537-.5a5.6 5.6 0 0 0-.807-.444a28 28 0 0 0-1.007-.436q-1.377-.575-2.053-1.405t-.676-2.005q0-.92.369-1.582q.368-.662 1.004-1.089a4.5 4.5 0 0 1 1.47-.629a7.5 7.5 0 0 1 1.77-.201m-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z"/></symbol><use href="#ai:simple-icons:typescript"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>TypeScript</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:anthropic">   <use href="#ai:simple-icons:anthropic"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Anthropic</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:tailwind">   <use href="#ai:mdi:tailwind"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Tailwind</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="angry-comma" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://angrycomma.com" title="Ver Angry Comma" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Angry Comma <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Encrypted, local-first writing app with AI editing assistance, track changes, and zero-knowledge architecture. Client-side AES-256-GCM encryption means your words stay yours. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Zero-knowledge client-side encryption</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>AI writing assistant with track changes</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>TipTap editor with SvelteKit + Cloudflare D1</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>110 unit tests + Playwright E2E</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:svelte">   <use href="#ai:simple-icons:svelte"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>SvelteKit</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:cloudflare">   <use href="#ai:simple-icons:cloudflare"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Cloudflare</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:anthropic">   <use href="#ai:simple-icons:anthropic"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Anthropic</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:typescript">   <use href="#ai:simple-icons:typescript"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>TypeScript</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="spray" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://spray.adamtervort.com" title="Ver Spray" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Spray <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> AI-assisted dictation-to-publication tool. Speak into a mic, get a polished newsletter post. Agentic loop with 9 skills turns voice recordings into platform-specific derivatives for Substack, X, LinkedIn, and Facebook. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Dictate → transcribe → AI collaborate → publish</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Agentic loop with 9 skills and auto model selection</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Per-newsletter voice profiles and brand matching</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Prompt caching with ~90% cost savings</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:fastapi">   <use href="#ai:simple-icons:fastapi"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>FastAPI</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:anthropic">   <use href="#ai:simple-icons:anthropic"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Anthropic</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:deepgram">   <symbol id="ai:simple-icons:deepgram" viewBox="0 0 24 24"><path fill="currentColor" d="M11.203 24H1.517a.364.364 0 0 1-.258-.62l6.239-6.275a.37.37 0 0 1 .259-.108h3.52c2.723 0 5.025-2.127 5.107-4.845a5.004 5.004 0 0 0-4.999-5.148H7.613v4.646c0 .2-.164.364-.365.364H.968a.365.365 0 0 1-.363-.364V.364C.605.164.768 0 .969 0h10.416c6.684 0 12.111 5.485 12.01 12.187C23.293 18.77 17.794 24 11.202 24z"/></symbol><use href="#ai:simple-icons:deepgram"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Deepgram</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:python">   <use href="#ai:simple-icons:python"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Python</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="agent-orchestration" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" title="Ver Agent Orchestration" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Agent Orchestration <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Cross-cutting practice in designing, deploying, and orchestrating AI agents. From self-hosted Signal-based agents on dedicated hardware to multi-agent coding workflows and agentic patterns embedded across production applications. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Self-hosted agent platform (Signal + Anthropic + Tailscale)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Multi-agent coding workflows with Factory/Claude Code</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Agentic patterns in 6+ production applications</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>E2E encrypted agent communication channels</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:anthropic">   <use href="#ai:simple-icons:anthropic"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Anthropic</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:openai">   <use href="#ai:simple-icons:openai"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>OpenAI</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:python">   <use href="#ai:simple-icons:python"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Python</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="mdi:docker">   <symbol id="ai:mdi:docker" viewBox="0 0 24 24"><path fill="currentColor" d="M21.81 10.25c-.06-.04-.56-.43-1.64-.43c-.28 0-.56.03-.84.08c-.21-1.4-1.38-2.11-1.43-2.14l-.29-.17l-.18.27c-.24.36-.43.77-.51 1.19c-.2.8-.08 1.56.33 2.21c-.49.28-1.29.35-1.46.35H2.62c-.34 0-.62.28-.62.63c0 1.15.18 2.3.58 3.38c.45 1.19 1.13 2.07 2 2.61c.98.6 2.59.94 4.42.94c.79 0 1.61-.07 2.42-.22c1.12-.2 2.2-.59 3.19-1.16A8.3 8.3 0 0 0 16.78 16c1.05-1.17 1.67-2.5 2.12-3.65h.19c1.14 0 1.85-.46 2.24-.85c.26-.24.45-.53.59-.87l.08-.24zm-17.96.99h1.76c.08 0 .16-.07.16-.16V9.5c0-.08-.07-.16-.16-.16H3.85c-.09 0-.16.07-.16.16v1.58c.01.09.07.16.16.16m2.43 0h1.76c.08 0 .16-.07.16-.16V9.5c0-.08-.07-.16-.16-.16H6.28c-.09 0-.16.07-.16.16v1.58c.01.09.07.16.16.16m2.47 0h1.75c.1 0 .17-.07.17-.16V9.5c0-.08-.06-.16-.17-.16H8.75c-.08 0-.15.07-.15.16v1.58c0 .09.06.16.15.16m2.44 0h1.77c.08 0 .15-.07.15-.16V9.5c0-.08-.06-.16-.15-.16h-1.77c-.08 0-.15.07-.15.16v1.58c0 .09.07.16.15.16M6.28 9h1.76c.08 0 .16-.09.16-.18V7.25c0-.09-.07-.16-.16-.16H6.28c-.09 0-.16.06-.16.16v1.57c.01.09.07.18.16.18m2.47 0h1.75c.1 0 .17-.09.17-.18V7.25c0-.09-.06-.16-.17-.16H8.75c-.08 0-.15.06-.15.16v1.57c0 .09.06.18.15.18m2.44 0h1.77c.08 0 .15-.09.15-.18V7.25c0-.09-.07-.16-.15-.16h-1.77c-.08 0-.15.06-.15.16v1.57c0 .09.07.18.15.18m0-2.28h1.77c.08 0 .15-.07.15-.16V5c0-.1-.07-.17-.15-.17h-1.77c-.08 0-.15.06-.15.17v1.56c0 .08.07.16.15.16m2.46 4.52h1.76c.09 0 .16-.07.16-.16V9.5c0-.08-.07-.16-.16-.16h-1.76c-.08 0-.15.07-.15.16v1.58c0 .09.07.16.15.16"/></symbol><use href="#ai:mdi:docker"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Docker</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="memos-platform" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://adamtervort.com/memos" title="Ver Memos" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Memos <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Publication platform built for both human readers and AI agents. Long-form essays with editorial typography, one-click discussion launchers for Claude and ChatGPT, clipboard-ready agent context, and optional Proof doc collaboration — content authored to be discussed, not just read. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>AI-native publishing with discussion launchers</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>One-click open in Claude, ChatGPT, or any agent</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Full memo + context packaged for agent consumption</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Editorial design independent from portfolio</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:astro">   <use href="#ai:simple-icons:astro"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Astro</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:typescript">   <use href="#ai:simple-icons:typescript"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>TypeScript</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:tailwind">   <use href="#ai:mdi:tailwind"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Tailwind</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="jobstravaganza" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" title="Ver Jobstravaganza" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Jobstravaganza <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Automated job discovery pipeline that fetches listings from 17 source instances, scores them against a resume using AI fit-assessment, and surfaces matches via a private dashboard. An agentic co-worker that hunts for jobs while you sleep. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>17 source instances (Remotive, Greenhouse, Lever, etc.)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>AI fit-scoring with cost guardrails ($4.65 for 1,100+ listings)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>PII-scrubbed dashboard with status write-back</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>250 tests, pluggable adapter architecture</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:python">   <use href="#ai:simple-icons:python"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Python</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:anthropic">   <use href="#ai:simple-icons:anthropic"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Anthropic</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:netlify">   <use href="#ai:simple-icons:netlify"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Netlify</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:tailwind">   <use href="#ai:mdi:tailwind"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Tailwind</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="geo-readiness-skill" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" title="Ver GEO Readiness Skill" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> GEO Readiness Skill <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div> <a data-ccursor="lift" href="https://github.com/adamprime/geo-readiness-claudecode" title="View GEO Readiness Skill in GitHub" aria-label="View GEO Readiness Skill in GitHub" target="_blank" rel="noopener" class="github-link opacity-75 hover:opacity-100 cursor-none" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> <svg width="24" height="24" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:github">   <use href="#ai:mdi:github"></use>  </svg> </a> </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Open-source Claude Code skill that audits any website or local project for Generative Engine Optimization readiness. Scores AI search visibility across 6 research-backed dimensions. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>6 weighted audit dimensions</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Works on live URLs and local projects</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Research-grounded (Princeton GEO paper + 4 studies)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Checks llms.txt, AI crawler access, structured data</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:anthropic">   <use href="#ai:simple-icons:anthropic"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Anthropic</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:python">   <use href="#ai:simple-icons:python"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Python</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="tldresume" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://tldresume.com" title="Ver TL;DResume" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> TL;DResume <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div> <a data-ccursor="lift" href="https://github.com/adamprime/TLDR-esume" title="View TL;DResume in GitHub" aria-label="View TL;DResume in GitHub" target="_blank" rel="noopener" class="github-link opacity-75 hover:opacity-100 cursor-none" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> <svg width="24" height="24" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:github">   <use href="#ai:mdi:github"></use>  </svg> </a> </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> AI-powered resume and cover letter customization. Generates tailored applications from your base resume with fit assessment, gap analysis, and multiple PDF styles. Built during my own job search. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Local-first architecture</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>AI-powered tailoring without hallucinations</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Multiple PDF export styles</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Fit assessment before applying</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:nextdotjs">   <use href="#ai:simple-icons:nextdotjs"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Next.js</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:typescript">   <use href="#ai:simple-icons:typescript"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>TypeScript</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:tailwind">   <use href="#ai:mdi:tailwind"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Tailwind</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:openai">   <use href="#ai:simple-icons:openai"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>OpenAI</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="radical-radicals" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://radicals.adamtervort.com" title="Ver Radical Radicals" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Radical Radicals <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div> <a data-ccursor="lift" href="https://github.com/adamprime/radical-radicals" title="View Radical Radicals in GitHub" aria-label="View Radical Radicals in GitHub" target="_blank" rel="noopener" class="github-link opacity-75 hover:opacity-100 cursor-none" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> <svg width="24" height="24" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:github">   <use href="#ai:mdi:github"></use>  </svg> </a> </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Zero-dependency flashcard app for drilling 175 simplified Chinese radicals with spaced repetition and quiz modes. Single HTML file, no build step, no backend. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>175 radicals with pinyin and stroke counts</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>3-box Leitner spaced repetition system</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Single HTML file, zero dependencies</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Dark mode with OS auto-detection</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:html5">   <use href="#ai:simple-icons:html5"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>HTML</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:css3">   <use href="#ai:simple-icons:css3"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>CSS</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:javascript">   <use href="#ai:simple-icons:javascript"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>JavaScript</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="breathe-easy" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" title="Ver Breathe Easy" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Breathe Easy <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Wellness audio discovery app with AI-powered mood-matching recommendations. 1,600+ tracks across breathwork, binaural beats, and meditation, plus standalone breathing tools and a meditation timer. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>AI mood-to-content recommendations (OpenAI)</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>1,600+ wellness tracks across 3 categories</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>iOS native via Capacitor with Apple Health</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>78 Playwright E2E tests</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:nextdotjs">   <use href="#ai:simple-icons:nextdotjs"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Next.js</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:supabase">   <use href="#ai:simple-icons:supabase"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Supabase</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:openai">   <use href="#ai:simple-icons:openai"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>OpenAI</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:capacitor">   <symbol id="ai:simple-icons:capacitor" viewBox="0 0 24 24"><path fill="currentColor" d="m24 3.7l-5.766 5.766l5.725 5.736l-3.713 3.712L5.073 3.742L8.786.03l5.736 5.726L20.284 0zM.029 8.785l3.713-3.713l15.173 15.173l-3.713 3.714l-5.732-5.726L3.7 24L0 20.285l5.754-5.764z"/></symbol><use href="#ai:simple-icons:capacitor"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Capacitor</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="comiccaster" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://comiccaster.xyz" title="Ver ComicCaster" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> ComicCaster <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div> <a data-ccursor="lift" href="https://github.com/adamprime/comiccaster" title="View ComicCaster in GitHub" aria-label="View ComicCaster in GitHub" target="_blank" rel="noopener" class="github-link opacity-75 hover:opacity-100 cursor-none" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> <svg width="24" height="24" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:github">   <use href="#ai:mdi:github"></use>  </svg> </a> </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> RSS feed generator for 500+ webcomics from GoComics, Comics Kingdom, TinyView, and The Far Side. Multi-image support, daily detection, feed health monitoring. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>500+ comics supported</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Multi-source architecture</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Zero maintenance operation</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>OPML bundle creation</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:python">   <use href="#ai:simple-icons:python"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Python</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:flask">   <symbol id="ai:simple-icons:flask" viewBox="0 0 24 24"><path fill="currentColor" d="M7.172 20.36c-.914-.72-1.89-1.41-2.556-2.38c-1.402-1.712-2.482-3.694-3.22-5.777c-.446-1.355-.6-2.808-1.174-4.11c-.602-.944.103-1.978 1.138-2.28c.46-.087 1.272-.522.293-.211c-.878.644-.963-.585-.063-.662c.615-.082.84-.585.63-1.037c-.66-.43 1.6-.903.463-1.544C1.5 1.08 4.34.835 3.64 2.285C3.473 3.4 5.624 2.08 5.125 3.368c.507.619 1.9.14 1.865 1.009c.74.05.993.672 1.687.72c.72.325 2.022.58 2.266 1.39c-.713.566-2.364-1.165-2.443.398c.215 2.31.16 4.689 1.004 6.888c.4 1.332 1.37 2.38 2.244 3.418c.837 1.016 1.971 1.73 3.127 2.333c1.014.478 2.107.795 3.213.994c.448-.343 1.24-1.617 1.938-1.08c.033.604-1.388 1.263-.067 1.196c.776-.234 1.314.6 1.953-.152c.588.697 2.446-.446 2.027.98c-.566.364-1.392.144-1.959.646c-.935-.467-1.68.418-2.715.306a20 20 0 0 1-3.484.29c-1.912-.15-3.865-.214-5.684-.88c-1.024-.297-2.023-.881-2.924-1.464zm1.615.7c1 .432 1.978.888 3.074 1.026c1.74.24 3.537.614 5.283.274c-.79-.357-1.608.14-2.395-.255c-.944.203-1.957-.052-2.917-.177c-1.092-.486-2.27-.82-3.291-1.452c-1.277-.466.66.598 1.005.685c.798.453-.877-.233-1.114-.421c-.668-.375-.754-.297-.066.084c.139.08.276.166.42.235zm-1.904-1.346c.97.359-.004-.682-.45-.622c-.196-.341-.751-.557-.36-.74c-.704.244-.737-.93-1.07-.763c-.744-.235-.29-1.07-1.176-1.58c-.081-.54-.882-1.008-1.138-1.822c-.113-.416-.905-1.613-.418-.5c.414 1.072 1.143 1.99 1.75 2.907c.47.873 1.027 1.786 1.885 2.33c.29.278.568.703.977.79M4.09 16.647c.033-.146.177.317 0 0m3.954 3.497c.215-.096-.31-.12 0 0m.526.192c-.054-.265-.24.148 0 0m.66.275c.312-.3-.484-.188 0 0m1.127.63c.191-.282-.61-.107 0 0M8.19 19.728c.487-.315-.63-.004 0 0m.494.246c-.014-.166-.176.075 0 0m2.47 1.542c.397.25 2.32.55 1.115.103c-.2.042-2.23-.574-1.116-.103zm-3.921-3.054c-.04-.167-.616-.185 0 0m1.15.67c.3-.21-.621-.16 0 0m.966.593c.43-.162-.696-.163 0 0m-2.584-1.773c.466.358 1.88.046.714-.213c-.53-.283-1.727-.476-.912.17zm3.24 1.978c.193-.33-.815-.19 0 0m-.984-.783c1.14.323-.958-.72-.281-.118l.15.068zm1.973 1.14c1.08.01-.975-.147 0 0m-4.644-2.96c-.042-.2-.266.018 0 0m6.47 3.985c.028-.363-.353.27 0 0m-4.63-2.856c-.064-.191-.336-.008 0 0m-1.738-1.254c.62-.037-.848-.273 0 0m-2.06-1.332c-.077-.297-.674-.534 0 0m5.407 3.435c-.114-.13-.054.028 0 0m3.366 2.065c-.01-.197-.183.075 0 0m-3.664-2.373c.06-.255-.528-.077 0 0m-2.506-1.592c.46-.05-.74-.311 0 0m4.241 2.637c.718-.285-.7-.14 0 0M9.03 18.545c.827.106-.985-.563-.181-.06zm2.876 1.768c.773-.462.518 1.082 1.311.13c.782-.57-.675.707.29.103c.696-.467 1.726.22 2.376.445c.468-.023.923.405 1.403.145c.923-.25-1.806-.37-1.09-.81c-.845.245-1.47-.294-1.885-.835c-.948-.22-2.044-.703-2.517-1.542c-.192-.315.28.044-.166-.47c-.57-.508-.856-1.085-1.24-1.702c-.457-.244-.51-.963-.557-.024c.004-.593-.553-.992-.688-.826c-.002-.571.595-.285.176-.707c-.09-.592-.386-1.21-.475-1.877c-.138-.322-.02-1.011-.473-.282c-.165.77-.055-.947.202-.38c.337-.58-.12-.51-.14-.43c.22-.488.14-1.18-.057-.916c.117-.517.185-1.902-.175-1.656c.218-.54.414-2.473-.534-1.736c-.384.005-1.048.14-1.363.296c.986.543-.1.196-.5.11c-.052.502-.45.285-.946.29c.793.098-.386.81-.841.534c-.59.282.51.987.012 1.205c.06.328-.905-.12-.83.64c-.573-.241-.078.9.209.514c.975.264.686.866.71 1.437c-.158.333-.784-.783-.14-.731c-.507-.827-.561-.3-.984.085c-.1.028 1.079.547.34.803c.65.1.668.67.8 1.03c.39.407.31-.45.779.04c-.296-.436-1.567-1.228-.544-.974c-.005-.44-.185-.793.129-.784c.31-.562-.325 1.387.375.672c.193-.085.24-.563.59.045c.505.498.182.858-.531.403c.127.433.954.587.799 1.265c.165.595.395.376.596.342c.158.578.247.153.255-.123c.72.155.552.58.778.88c.497.224-.712-1.522.142-.526c.898.81.337 1.15-.47 1.02c.51-.041.675.69 1.313.664c.582.277.975 1.34-.027.897c-.348-.313-1.58-.7-.573-.104c.929.43 1.665.688 2.561 1.227c.64.458.918.982 1.16 1.086c-.538.257-1.623-.206-.817-.348c-.503-.091-1.068-.345-.587.28c.41.343 1.45.306 1.637.345c-.159.348-.43.376.006.403c-.486.26.156.3.201.448zm-.994-2.808c-.296-.31-.373-.89-.053-.385c.164.066.525.947.053.385m3.238 2.057c.185-.011.006.14 0 0m-3.706-2.816c-.01-.468.107.36 0 0m-.322-.433c-.372-.72.47.204 0 0m-3.9-2.692c.219-.06.108.374 0 0m3.104 1.682c.134-.504.158.424 0 0m-2.192-1.525c-.155-.278.323.26 0 0m1.882.604c-.352-.79.25-.432.078.13zM5.77 12.217c-.158-.26-.418-1.02-.334-1.252c.076.378.804 1.627.357.518c-.494-.93.59.302.702.534c.05.23-.305-.063-.064.478c-.44-.617-.26.34-.661-.278m-1.003-.691c.04-.603.23.413 0 0m.45.155c.216-.455.366.634 0 0m-1.084-.84c-.374-.37-.644-.713.017-.23c.255.01-.566-.778.06-.25c.66.12.327 1.082-.077.48m.57-.015c.217-.215.115.212 0 0m.35.113c-.328-.617.4.258 0 0m-.697-.667c-1.086-.966 1.365.506.177.18zm3.11 1.808c-.47-.282-.123-1.984.037-.82c.457-.148-.025.6.315.594c-.053.473-.206.643-.35.226zm1.15.68c.048-.513.099.35 0 0m-.2-.198c.054-.22.007.258 0 0M4.57 9.955c-.697-.963 2.027.973.447.244c-.165-.043-.364-.06-.447-.244m2.216 1.175c-.066-.81.147.134 0 0m1.682 1.079c.13-.462.01.305 0 0M4.676 9.587c.415-.088 1.718.729.52.234c-.132-.148-.416-.08-.52-.234m3.56 1.775c.044-.83.248-.495.002.118zM4.985 9.299c.169-.248-.45-1.12.089-.313c.232.185.672.31.283.387c.61.539-.15.146-.372-.074m3.075 1.804c.117-.944.103.553 0 0M4.632 8.427c.129-.055.068.172 0 0m.802.478c.206-.434.38.483 0 0m2.263 1.259c-.002-.167.043.242 0 0m-.131-.29c-.314-.776.292.41 0 0m-.193-.51c-.053-.32.18.404 0 0m.314-.51c-.216-.38.272-1.673.326-.87c-.227.625-.065.975.093.136c.293-.66-.063 1.303-.42.735zm.322-1.923c.094-.115.02.139 0 0M7.47 17.544c-.128-.111.016.07 0 0m1.11.56c.615.16.612-.095.055-.17c-.3-.28-1.246-.575-.4-.035c.057.142.235.139.344.206zM6.389 16.65c.34.253 1.28.719.484.096c.269-.312-.514-.478-.254-.686c-.66-.404-.52-.368-.058-.356c-.794-.354.114-.328.07-.51c-.305-.06-1.52-.54-.804.04c-.726-.37-.173.138-.392.084c-.743-.202.66.565-.118.375c.425.337 1.146.864.18.357c-.128.183.69.46.892.6m1.16.667c1.41.454-.691-.556 0 0m5.94 3.598c.02-.28-.193.24 0 0m.611.257c.325-.315.013.503.54-.077c.005-.415-.017-.66-.606-.156c-.162.09-.234.473.066.233m-9.692-6.087c-.1-.393-.7-.39 0 0m.652.428c-.242-.402-.864-.364 0 0m3.71 2.237c.362.32 1.662.236.44.04c-.182-.27-1.151-.204-.44-.04m5.097 3.149c.558-.468-.54.208 0 0m1.16.796c.003-.15-.24.066 0 0m.001-.21c.617-.654-.598.039 0 0M2.805 13.743c-.526-.75-.327-1.088-.835-1.7c-.096-.47-.87-1.533-.4-.406c.43.659.558 1.679 1.235 2.106m12.03 7.534c1.135-.734-.466-.32 0 0m.866.34c.57-.488-.36-.102 0 0M4.215 14.255c.163-.242-.42-.031 0 0m11.305 7.129c.551-.355-.126-.3-.1.032zm-7.47-4.71c-.02-.24-.291.02 0 0m.46.267c-.145-.297-.224.047 0 0m7.894 4.684c.705-.51-.428-.098-.148.096zm-.27-.13c.574-.482-.607.213 0 0m1.38.918c.386-.258-.469-.083 0 0M4.57 14.08c.517.116 2.066 1.274 1.152.08c-.468-.138-.187-1.283-.665-1.08c.32.535.264.763-.41.426c-.845-.413-.474.204-.31.374c-.224.052.299.196.233.2m-2.356-1.86c.092-.383-.853-2.107-.446-.864c.146.26.13.754.446.864m4.324 2.666c-.266-.223-.013-.032 0 0m.656.152c0-.405-.725-.164 0 0m5.681 3.583c-.108-.278-.428-.006 0 0m.273.199c-.04-.155-.157.03 0 0m2.252 1.42c.216-.16-.27-.02 0 0M3.39 12.52c.62-.24-.664-.17 0 0m8.984 5.662c-.007-.401-.395.1 0 0m-9.23-6.231c.399-.135-.367-.09 0 0m1.156.56c-.007-.133-.122.05 0 0m14.09 8.64c.512-.104 1.678.26 1.866-.136c-.62-.015-2.15-.438-2.222.1l.136.023zM4.667 12.603c.009-.407-.317-.015 0 0M1.63 10.495c-.138-.775-.525-.118 0 0m.724.182c.009-.25-.663-.224 0 0m.414.203c-.12-.097-.094.122 0 0m2.605 1.67c.122-.112-.29-.083 0 0m-2.88-2.128c-.07-.585-.84-.088 0 0m-1.486-.964c-.02-.27-.144.102 0 0m.22-.167c-.035-.32-.19.04 0 0m1.22.729c.518-.203-.94-.42-.104-.04zm16.334 10.089c.33-.303-.42-.094 0 0m1.974 1.023c.132-.392-.334.05 0 0M2.573 9.38c.055-.38-.41.075 0 0M.837 8.218c-.093-.535-.08-1.474.812-1.156c-1.191.236.824 1.48.57.498c.5.024.98-.296.716.19c.987-.11 1.67-.964 2.624-.845c.742-.098 1.554-.172 2.354-.471c.658-.048 1.29-.756.93-1.175c-.896-.076-1.835.036-2.827.233c-1.098.228-2.096.662-3.205.849c-1.08.145.217.4-.092.456c-.564.196.672.328-.073.534c-.46-.088-.94-.246-.743-.73c-1.035.133-1.945.563-1.127 1.616zm2.494-1.27c.243-.894 1.3.735.398.118c-.108-.08-.285-.146-.398-.12zm.047-.434c.35-.26.186.146 0 0m.445.008c.032-.411 1.018.218.163.148zm.608-.245c.222-.26.064.23 0 0m.156-.104c.37-.444 2.095-.283.832-.043c-.338-.255-.598.15-.832.043m2.25-.347c-.055-1.214 1.119.432 0 0m.64-.004c.233-.612.906-.245.108-.123c.017.065-.024.316-.108.123M2.322 9.067c.697-.427-.741-.37 0 0m.515.144c.245-.26-.531-.106 0 0m-1.52-1.08c.399-.305-.471-.116 0 0m20.602 12.89c.012-.355-.304.16 0 0m-2.093-1.43c.06-.408-.27.037 0 0m2.67 1.568c.557 0 1.688-.173.475-.173c-.19.03-1.109.024-.476.173zM3.29 8.959c.45-.03.706-.497-.087-.47c-1.23-.127 1.084.42-.158.264c-.167.11.236.237.245.207zm.398.202c-.048-.29-.14.154 0 0m.47-1.257c.197-.243-.27-.065 0 0m-1.5-2.508c.806-.274 1.907-.581 2.287.135c-.387-.466-.156-.924.21-.243c.516.689.775-.313.438-.545c.383.476.819.7.257.03c.61-.734-1.223.097-1.64.088c-.2.09-2.071.477-1.551.535zm.472-.903c.46-.347 1.588.206.864-.345c-.07-.062-1.586.418-.864.345m1.674.069c.538.013-.231-.722.409-.39c-.105-.343-.746-.407-1.06-.544c-.176.314.36.938.65.934zm-1.38-1.52c.186-.252-.326.128 0 0m.684.164c.866-.115-.22-.373-.174-.01zm-1.277-1c-.61-.796 1.146.134.527-.7c-.522-.415-1.023.468-.527.7m7.824 4.215c.28-.496-1.155-.668-.188-.175c.09.03.07.21.188.175"/></symbol><use href="#ai:simple-icons:flask"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Flask</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:githubactions">   <symbol id="ai:simple-icons:githubactions" viewBox="0 0 24 24"><path fill="currentColor" d="M10.984 13.836a.5.5 0 0 1-.353-.146l-.745-.743a.5.5 0 1 1 .706-.708l.392.391l1.181-1.18a.5.5 0 0 1 .708.707l-1.535 1.533a.5.5 0 0 1-.354.146m9.353-.147l1.534-1.532a.5.5 0 0 0-.707-.707l-1.181 1.18l-.392-.391a.5.5 0 1 0-.706.708l.746.743a.497.497 0 0 0 .706-.001M4.527 7.452l2.557-1.585A1 1 0 0 0 7.09 4.17L4.533 2.56A1 1 0 0 0 3 3.406v3.196a1.001 1.001 0 0 0 1.527.85m2.03-2.436L4 6.602V3.406zM24 12.5c0 1.93-1.57 3.5-3.5 3.5a3.5 3.5 0 0 1-3.46-3h-2.08a3.5 3.5 0 0 1-3.46 3a3.5 3.5 0 0 1-3.46-3h-.558c-.972 0-1.85-.399-2.482-1.042V17c0 1.654 1.346 3 3 3h.04c.244-1.693 1.7-3 3.46-3c1.93 0 3.5 1.57 3.5 3.5S13.43 24 11.5 24a3.5 3.5 0 0 1-3.46-3H8c-2.206 0-4-1.794-4-4V9.899A5.01 5.01 0 0 1 0 5c0-2.757 2.243-5 5-5s5 2.243 5 5a5.005 5.005 0 0 1-4.952 4.998A2.48 2.48 0 0 0 7.482 12h.558c.244-1.693 1.7-3 3.46-3a3.5 3.5 0 0 1 3.46 3h2.08a3.5 3.5 0 0 1 3.46-3c1.93 0 3.5 1.57 3.5 3.5m-15 8c0 1.378 1.122 2.5 2.5 2.5s2.5-1.122 2.5-2.5s-1.122-2.5-2.5-2.5S9 19.122 9 20.5M5 9c2.206 0 4-1.794 4-4S7.206 1 5 1S1 2.794 1 5s1.794 4 4 4m9 3.5c0-1.378-1.122-2.5-2.5-2.5S9 11.122 9 12.5s1.122 2.5 2.5 2.5s2.5-1.122 2.5-2.5m9 0c0-1.378-1.122-2.5-2.5-2.5S18 11.122 18 12.5s1.122 2.5 2.5 2.5s2.5-1.122 2.5-2.5m-13 8a.5.5 0 1 0 1 0a.5.5 0 0 0-1 0m2 0a.5.5 0 1 0 1 0a.5.5 0 0 0-1 0m12 0c0 1.93-1.57 3.5-3.5 3.5a3.5 3.5 0 0 1-3.46-3.002l-.021.005l-.506.017h-.017a.5.5 0 0 1-.016-.999l.506-.017c.018-.002.035.006.052.007A3.5 3.5 0 0 1 20.5 17c1.93 0 3.5 1.57 3.5 3.5m-1 0c0-1.378-1.122-2.5-2.5-2.5S18 19.122 18 20.5s1.122 2.5 2.5 2.5s2.5-1.122 2.5-2.5"/></symbol><use href="#ai:simple-icons:githubactions"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>GitHub Actions</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="church-building-scheduler" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://adamprime.github.io/church-building-scheduler/scheduler.html#liberty=9,1&rushcreek=11.5,1&sanrafael=13,1&ysa=14,0" title="Ver Church Building Scheduler" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Church Building Scheduler <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div> <a data-ccursor="lift" href="https://github.com/adamprime/church-building-scheduler" title="View Church Building Scheduler in GitHub" aria-label="View Church Building Scheduler in GitHub" target="_blank" rel="noopener" class="github-link opacity-75 hover:opacity-100 cursor-none" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> <svg width="24" height="24" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:github">   <use href="#ai:mdi:github"></use>  </svg> </a> </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Visual decision-making tool for church leaders scheduling multiple congregations in a shared building. Drag-and-drop interface with constraint validation, packaged as a single HTML file. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Visual scheduling interface</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Single HTML file, no backend</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Real-time constraint validation</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Shareable via URL</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:html5">   <use href="#ai:simple-icons:html5"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>HTML</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:css3">   <use href="#ai:simple-icons:css3"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>CSS</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:javascript">   <use href="#ai:simple-icons:javascript"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>JavaScript</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="health-dashboard" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" title="Ver Health Dashboard" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> Health Dashboard <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Personal weight tracking system optimized for speed. Log weight in under 5 seconds from iOS, with data you own on infrastructure you control. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>iOS Shortcut for instant logging</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Self-hosted data ownership</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>React dashboard visualization</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Sub-5-second entry time</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:fastapi">   <use href="#ai:simple-icons:fastapi"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>FastAPI</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:postgresql">   <symbol id="ai:simple-icons:postgresql" viewBox="0 0 24 24"><path fill="currentColor" d="M23.56 14.723a.5.5 0 0 0-.057-.12q-.21-.395-1.007-.231c-1.654.34-2.294.13-2.526-.02c1.342-2.048 2.445-4.522 3.041-6.83c.272-1.05.798-3.523.122-4.73a1.6 1.6 0 0 0-.15-.236C21.693.91 19.8.025 17.51.001c-1.495-.016-2.77.346-3.116.479a10 10 0 0 0-.516-.082a8 8 0 0 0-1.312-.127c-1.182-.019-2.203.264-3.05.84C8.66.79 4.729-.534 2.296 1.19C.935 2.153.309 3.873.43 6.304c.041.818.507 3.334 1.243 5.744q.69 2.26 1.433 3.582q.83 1.493 1.714 1.79c.448.148 1.133.143 1.858-.729a56 56 0 0 1 1.945-2.206c.435.235.906.362 1.39.377v.004a11 11 0 0 0-.247.305c-.339.43-.41.52-1.5.745c-.31.064-1.134.233-1.146.811a.6.6 0 0 0 .091.327c.227.423.922.61 1.015.633c1.335.333 2.505.092 3.372-.679c-.017 2.231.077 4.418.345 5.088c.221.553.762 1.904 2.47 1.904q.375.001.829-.094c1.782-.382 2.556-1.17 2.855-2.906c.15-.87.402-2.875.539-4.101c.017-.07.036-.12.057-.136c0 0 .07-.048.427.03l.044.007l.254.022l.015.001c.847.039 1.911-.142 2.531-.43c.644-.3 1.806-1.033 1.595-1.67M2.37 11.876c-.744-2.435-1.178-4.885-1.212-5.571c-.109-2.172.417-3.683 1.562-4.493c1.837-1.299 4.84-.54 6.108-.13l-.01.01C6.795 3.734 6.843 7.226 6.85 7.44c0 .082.006.199.016.36c.034.586.1 1.68-.074 2.918c-.16 1.15.194 2.276.973 3.089q.12.126.252.237c-.347.371-1.1 1.193-1.903 2.158c-.568.682-.96.551-1.088.508c-.392-.13-.813-.587-1.239-1.322c-.48-.839-.963-2.032-1.415-3.512m6.007 5.088a1.6 1.6 0 0 1-.432-.178c.089-.039.237-.09.483-.14c1.284-.265 1.482-.451 1.915-1a8 8 0 0 1 .367-.443a.4.4 0 0 0 .074-.13c.17-.151.272-.11.436-.042c.156.065.308.26.37.475c.03.102.062.295-.045.445c-.904 1.266-2.222 1.25-3.168 1.013m2.094-3.988l-.052.14c-.133.357-.257.689-.334 1.004c-.667-.002-1.317-.288-1.81-.803c-.628-.655-.913-1.566-.783-2.5c.183-1.308.116-2.447.08-3.059l-.013-.22c.296-.262 1.666-.996 2.643-.772c.446.102.718.406.83.928c.585 2.704.078 3.83-.33 4.736a9 9 0 0 0-.23.546m7.364 4.572q-.024.266-.062.596l-.146.438a.4.4 0 0 0-.018.108c-.006.475-.054.649-.115.87a4.8 4.8 0 0 0-.18 1.057c-.11 1.414-.878 2.227-2.417 2.556c-1.515.325-1.784-.496-2.02-1.221a7 7 0 0 0-.078-.227c-.215-.586-.19-1.412-.157-2.555c.016-.561-.025-1.901-.33-2.646q.006-.44.019-.892a.4.4 0 0 0-.016-.113a2 2 0 0 0-.044-.208c-.122-.428-.42-.786-.78-.935c-.142-.059-.403-.167-.717-.087c.067-.276.183-.587.309-.925l.053-.142c.06-.16.134-.325.213-.5c.426-.948 1.01-2.246.376-5.178c-.237-1.098-1.03-1.634-2.232-1.51c-.72.075-1.38.366-1.709.532a6 6 0 0 0-.196.104c.092-1.106.439-3.174 1.736-4.482a4 4 0 0 1 .303-.276a.35.35 0 0 0 .145-.064c.752-.57 1.695-.85 2.802-.833q.616.01 1.174.081c1.94.355 3.244 1.447 4.036 2.383c.814.962 1.255 1.931 1.431 2.454c-1.323-.134-2.223.127-2.68.78c-.992 1.418.544 4.172 1.282 5.496c.135.242.252.452.289.54c.24.583.551.972.778 1.256c.07.087.138.171.189.245c-.4.116-1.12.383-1.055 1.717a35 35 0 0 1-.084.815c-.046.208-.07.46-.1.766m.89-1.621c-.04-.832.27-.919.597-1.01l.135-.041a1 1 0 0 0 .134.103c.57.376 1.583.421 3.007.134c-.202.177-.519.4-.953.601c-.41.19-1.096.333-1.747.364c-.72.034-1.086-.08-1.173-.151m.57-9.271a7 7 0 0 1-.105 1.001c-.055.358-.112.728-.127 1.177c-.014.436.04.89.093 1.33c.107.887.216 1.8-.207 2.701a4 4 0 0 1-.188-.385a8 8 0 0 0-.325-.617c-.616-1.104-2.057-3.69-1.32-4.744c.38-.543 1.342-.566 2.179-.463m.228 7.013l-.085-.107l-.035-.044c.726-1.2.584-2.387.457-3.439c-.052-.432-.1-.84-.088-1.222c.013-.407.066-.755.118-1.092c.064-.415.13-.844.111-1.35a.6.6 0 0 0 .012-.19c-.046-.486-.6-1.938-1.73-3.253a7.8 7.8 0 0 0-2.688-2.04A9.3 9.3 0 0 1 17.62.746c2.052.046 3.675.814 4.824 2.283a1 1 0 0 1 .067.1c.723 1.356-.276 6.275-2.987 10.54m-8.816-6.116c-.025.18-.31.423-.621.423l-.081-.006a.8.8 0 0 1-.506-.315c-.046-.06-.12-.178-.106-.285a.22.22 0 0 1 .093-.149c.118-.089.352-.122.61-.086c.316.044.642.193.61.418m7.93-.411c.011.08-.049.2-.153.31a.72.72 0 0 1-.408.223l-.075.005c-.293 0-.541-.234-.56-.371c-.024-.177.264-.31.56-.352c.298-.042.612.009.636.185"/></symbol><use href="#ai:simple-icons:postgresql"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>PostgreSQL</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:react">   <use href="#ai:simple-icons:react"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>React</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:railway">   <symbol id="ai:simple-icons:railway" viewBox="0 0 24 24"><path fill="currentColor" d="M.113 10.27A13 13 0 0 0 0 11.48h18.23a2.3 2.3 0 0 0-.235-.347c-3.117-4.027-4.793-3.677-7.19-3.78c-.8-.034-1.34-.048-4.524-.048c-1.704 0-3.555.005-5.358.01c-.234.63-.459 1.24-.567 1.737h9.342v1.216H.113zm18.26 2.426H.009q.029.488.094.961h16.955c.754 0 1.179-.429 1.315-.96zm-17.318 4.28s2.81 6.902 10.93 7.024c4.855 0 9.027-2.883 10.92-7.024H1.056zM11.988 0C7.5 0 3.593 2.466 1.531 6.108l4.75-.005v-.002c3.71 0 3.849.016 4.573.047l.448.016c1.563.052 3.485.22 4.996 1.364c.82.621 2.007 1.99 2.712 2.965c.654.902.842 1.94.396 2.934c-.408.914-1.289 1.458-2.353 1.458H.391s.099.42.249.886h22.748A12 12 0 0 0 24 12.005C24 5.377 18.621 0 11.988 0"/></symbol><use href="#ai:simple-icons:railway"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Railway</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="speakeasy" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" title="Ver SpeakEasy" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> SpeakEasy <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> OpenAI text-to-speech interface with multiple voices and style prompts. Built for my wife to generate natural-sounding audio from text. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Multiple voice options</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Style prompt customization</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Clean audio output</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Simple interface</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:openai">   <use href="#ai:simple-icons:openai"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>OpenAI</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:python">   <use href="#ai:simple-icons:python"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Python</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="epub-bookshelf" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" title="Ver EPUB Bookshelf" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> EPUB Bookshelf <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div>  </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> CLI tool to convert Deseret Bookshelf books to standard EPUB format. Read your purchased books on any device. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>DRM-free conversion</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Standard EPUB output</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Batch processing</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>CLI interface</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:python">   <use href="#ai:simple-icons:python"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>Python</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div><div role="contentinfo" data-project-slug="randomatic-3000" class="project-card grid-span-1 group relative flex min-h-80 flex-col overflow-hidden rounded-md bg-skin-button-muted/50 p-5 shadow-sm ring-1 ring-skin-muted sm:hover:ring-2 sm:hover:ring-skin-hue sm:hover:bg-skin-muted transition-all duration-250 ease-in-out cursor-pointer" data-astro-cid-44zkpkd5> <div class="relative z-10 flex items-center justify-between space-x-[10px]" data-astro-cid-44zkpkd5> <div class="flex items-center gap-2" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" data-ccursor="lift" class="size-4" data-astro-cid-44zkpkd5="true" data-icon="mdi:folder-outline">   <use href="#ai:mdi:folder-outline"></use>  </svg> <div class="flex items-center gap-[6px]" data-astro-cid-44zkpkd5> <a class="project-link group flex items-center gap-[6px] text-lg decoration-dotted underline-offset-[5px] hover:text-skin-hue hover:underline transition-all sm:hover:cursor-none" href="https://randomatic3000.com" title="Ver RandoMatic 3000" target="_blank" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> RandoMatic 3000 <span class="text-skin-hue transition ease-linear group-hover:-translate-y-0.5 group-hover:translate-x-0.5" data-astro-cid-44zkpkd5> <svg width="1em" height="1em" viewBox="0 0 24 24" class="rotate-45" data-astro-cid-44zkpkd5="true" data-icon="ri:arrow-up-line">   <use href="#ai:ri:arrow-up-line"></use>  </svg> </span> </a> </div> </div> <a data-ccursor="lift" href="https://github.com/adamprime/randomatic3000" title="View RandoMatic 3000 in GitHub" aria-label="View RandoMatic 3000 in GitHub" target="_blank" rel="noopener" class="github-link opacity-75 hover:opacity-100 cursor-none" onclick="event.stopPropagation()" data-astro-cid-44zkpkd5> <svg width="24" height="24" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="mdi:github">   <use href="#ai:mdi:github"></use>  </svg> </a> </div> <p data-ccursor="noPadding" class="relative z-10 py-3 text-sm text-skin-base break-words" data-astro-cid-44zkpkd5> Over-engineered randomization tool with six visualization engines. For when pulling names from a hat isn&#39;t dramatic enough. </p> <ul class="z-10 mt-1 text-sm" data-astro-cid-44zkpkd5> <li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Six randomization engines</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Zero dependencies</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Dark/light mode</li><li data-ccursor class="break-words" data-astro-cid-44zkpkd5>Statistical trial mode</li> </ul> <ul class="flex print:hidden flex-wrap gap-2 mt-4" aria-label="Technologies used" data-astro-cid-44zkpkd5> <li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:html5">   <use href="#ai:simple-icons:html5"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>HTML</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:css3">   <use href="#ai:simple-icons:css3"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>CSS</span> </span> </li><li data-ccursor="lift" class="border-skin-hue/60 text-skin-hue print:p-0 print:bg-transparent print:text-zinc-800 flex gap-1 items-center border-solid print:border-none border rounded-md px-2 py-0.5 text-xs backdrop-blur-sm group/stack" data-astro-cid-44zkpkd5> <span class="flex gap-1" data-astro-cid-44zkpkd5> <svg width="16" height="16" viewBox="0 0 24 24" data-astro-cid-44zkpkd5="true" data-icon="simple-icons:javascript">   <use href="#ai:simple-icons:javascript"></use>  </svg> <span class="group-hover/stack:text-skin-hue transition-all duration-200" data-astro-cid-44zkpkd5>JavaScript</span> </span> </li> </ul> <div class="mt-auto pt-4 text-xs text-skin-muted opacity-0 group-hover:opacity-100 transition-opacity" data-astro-cid-44zkpkd5>
Click card for details →
</div> </div> </div>  </section> <script type="module" src="/_astro/Projects.astro_astro_type_script_index_0_lang.Q2G1G2DV.js"></script>  <section class="flex flex-col gap-4 print:gap-0 print:col-span-full"> <h3 data-ccursor="lift" class="relative flex w-max items-center gap-3 pb-4 text-3xl print:gap-1 print:pb-0 print:text-xl print:font-extrabold sm:hover:text-skin-hue"> Technologies </h3>  <ul class="w-100 inline-flex print:mt-4 flex-wrap gap-4 [&>li>svg]:text-skin-hue [&>li]:text-sm"> <li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:python"> <title>Advanced</title>  <use href="#ai:simple-icons:python"></use>  </svg>  <span>Python</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:typescript"> <title>Advanced</title>  <use href="#ai:simple-icons:typescript"></use>  </svg>  <span>TypeScript</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:react"> <title>Advanced</title>  <use href="#ai:simple-icons:react"></use>  </svg>  <span>React</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:nextdotjs"> <title>Advanced</title>  <use href="#ai:simple-icons:nextdotjs"></use>  </svg>  <span>Next.js</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:svelte"> <title>Intermediate</title>  <use href="#ai:simple-icons:svelte"></use>  </svg>  <span>Svelte</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:fastapi"> <title>Advanced</title>  <use href="#ai:simple-icons:fastapi"></use>  </svg>  <span>FastAPI</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:postgresql"> <title>Advanced</title>  <use href="#ai:simple-icons:postgresql"></use>  </svg>  <span>PostgreSQL</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:openai"> <title>Advanced</title>  <use href="#ai:simple-icons:openai"></use>  </svg>  <span>OpenAI</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="simple-icons:anthropic"> <title>Advanced</title>  <use href="#ai:simple-icons:anthropic"></use>  </svg>  <span>Anthropic</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="mdi:tailwind"> <title>Advanced</title>  <use href="#ai:mdi:tailwind"></use>  </svg>  <span>Tailwind</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" data-icon="mdi:git"> <title>Advanced</title>  <symbol id="ai:mdi:git" viewBox="0 0 24 24"><path fill="currentColor" d="M2.6 10.59L8.38 4.8l1.69 1.7c-.24.85.15 1.78.93 2.23v5.54c-.6.34-1 .99-1 1.73a2 2 0 0 0 2 2a2 2 0 0 0 2-2c0-.74-.4-1.39-1-1.73V9.41l2.07 2.09c-.07.15-.07.32-.07.5a2 2 0 0 0 2 2a2 2 0 0 0 2-2a2 2 0 0 0-2-2c-.18 0-.35 0-.5.07L13.93 7.5a1.98 1.98 0 0 0-1.15-2.34c-.43-.16-.88-.2-1.28-.09L9.8 3.38l.79-.78c.78-.79 2.04-.79 2.82 0l7.99 7.99c.79.78.79 2.04 0 2.82l-7.99 7.99c-.78.79-2.04.79-2.82 0L2.6 13.41c-.79-.78-.79-2.04 0-2.82"/></symbol><use href="#ai:mdi:git"></use>  </svg>  <span>Git</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" viewBox="0 0 24 24" data-icon="mdi:docker"> <title>Intermediate</title>  <use href="#ai:mdi:docker"></use>  </svg>  <span>Docker</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" data-icon="simple-icons:notion"> <title>Advanced</title>  <symbol id="ai:simple-icons:notion" viewBox="0 0 24 24"><path fill="currentColor" d="M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514c-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233l4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632"/></symbol><use href="#ai:simple-icons:notion"></use>  </svg>  <span>Notion</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" data-icon="simple-icons:amazonaws"> <title>Intermediate</title>  <symbol id="ai:simple-icons:amazonaws" viewBox="0 0 24 24"><path fill="currentColor" d="M6.763 10.036q.002.446.088.71c.064.176.144.368.256.576c.04.063.056.127.056.183q.002.12-.152.24l-.503.335a.4.4 0 0 1-.208.072q-.12-.002-.239-.112a2.5 2.5 0 0 1-.287-.375a6 6 0 0 1-.248-.471q-.934 1.101-2.347 1.101c-.67 0-1.205-.191-1.596-.574q-.588-.575-.59-1.533c0-.678.239-1.23.726-1.644c.487-.415 1.133-.623 1.955-.623c.272 0 .551.024.846.064c.296.04.6.104.918.176v-.583q-.001-.909-.375-1.277c-.255-.248-.686-.367-1.3-.367c-.28 0-.568.031-.863.103q-.443.106-.862.272a2 2 0 0 1-.28.104a.5.5 0 0 1-.127.023q-.168.002-.168-.247v-.391c0-.128.016-.224.056-.28a.6.6 0 0 1 .224-.167a4.6 4.6 0 0 1 1.005-.36a4.8 4.8 0 0 1 1.246-.151c.95 0 1.644.216 2.091.647q.66.645.662 1.963v2.586zm-3.24 1.214c.263 0 .534-.048.822-.144a1.8 1.8 0 0 0 .758-.51a1.3 1.3 0 0 0 .272-.512c.047-.191.08-.423.08-.694v-.335a7 7 0 0 0-.735-.136a6 6 0 0 0-.75-.048c-.535 0-.926.104-1.19.32c-.263.215-.39.518-.39.917c0 .375.095.655.295.846c.191.2.47.296.838.296m6.41.862c-.144 0-.24-.024-.304-.08c-.064-.048-.12-.16-.168-.311L7.586 5.55a1.4 1.4 0 0 1-.072-.32c0-.128.064-.2.191-.2h.783q.227-.001.31.08c.065.048.113.16.16.312l1.342 5.284l1.245-5.284q.058-.24.151-.312a.55.55 0 0 1 .32-.08h.638c.152 0 .256.025.32.08c.063.048.12.16.151.312l1.261 5.348l1.381-5.348q.074-.24.16-.312a.52.52 0 0 1 .311-.08h.743c.127 0 .2.065.2.2c0 .04-.009.08-.017.128a1 1 0 0 1-.056.2l-1.923 6.17q-.072.24-.168.311a.5.5 0 0 1-.303.08h-.687c-.151 0-.255-.024-.32-.08c-.063-.056-.119-.16-.15-.32l-1.238-5.148l-1.23 5.14c-.04.16-.087.264-.15.32c-.065.056-.177.08-.32.08zm10.256.215c-.415 0-.83-.048-1.229-.143c-.399-.096-.71-.2-.918-.32c-.128-.071-.215-.151-.247-.223a.6.6 0 0 1-.048-.224v-.407c0-.167.064-.247.183-.247q.072 0 .144.024c.048.016.12.048.2.08q.408.181.878.279c.319.064.63.096.95.096c.502 0 .894-.088 1.165-.264a.86.86 0 0 0 .415-.758a.78.78 0 0 0-.215-.559c-.144-.151-.416-.287-.807-.415l-1.157-.36c-.583-.183-1.014-.454-1.277-.813a1.9 1.9 0 0 1-.4-1.158q0-.502.216-.886c.144-.255.335-.479.575-.654c.24-.184.51-.32.83-.415c.32-.096.655-.136 1.006-.136c.175 0 .359.008.535.032c.183.024.35.056.518.088q.24.058.455.127q.216.072.336.144a.7.7 0 0 1 .24.2a.43.43 0 0 1 .071.263v.375q-.002.254-.184.256a.8.8 0 0 1-.303-.096a3.65 3.65 0 0 0-1.532-.311c-.455 0-.815.071-1.062.223s-.375.383-.375.71c0 .224.08.416.24.567c.159.152.454.304.877.44l1.134.358c.574.184.99.44 1.237.767s.367.702.367 1.117c0 .343-.072.655-.207.926a2.2 2.2 0 0 1-.583.703c-.248.2-.543.343-.886.447c-.36.111-.734.167-1.142.167m1.509 3.88c-2.626 1.94-6.442 2.969-9.722 2.969c-4.598 0-8.74-1.7-11.87-4.526c-.247-.223-.024-.527.272-.351c3.384 1.963 7.559 3.153 11.877 3.153c2.914 0 6.114-.607 9.06-1.852c.439-.2.814.287.383.607m1.094-1.246c-.336-.43-2.22-.207-3.074-.103c-.255.032-.295-.192-.063-.36c1.5-1.053 3.967-.75 4.254-.399c.287.36-.08 2.826-1.485 4.007c-.215.184-.423.088-.327-.151c.32-.79 1.03-2.57.695-2.994"/></symbol><use href="#ai:simple-icons:amazonaws"></use>  </svg>  <span>AWS</span>  </li><li class="group relative flex items-center gap-1 rounded-md border border-solid cursor-default border-skin-hue/20 bg-skin-button-accent/20 px-1 py-0.5 text-xs text-skin-hue print:border-none print:bg-transparent print:p-0 print:text-zinc-800 transform transition-transform duration-300 hover:scale-110 hover:translate-y-[-8px] sm:hover:cursor-none"> <svg width="16" height="16" data-icon="simple-icons:kubernetes"> <title>Intermediate</title>  <symbol id="ai:simple-icons:kubernetes" viewBox="0 0 24 24"><path fill="currentColor" d="m10.204 14.35l.007.01l-.999 2.413a5.17 5.17 0 0 1-2.075-2.597l2.578-.437l.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.14 5.14 0 0 0-.73 3.255l2.514-.725zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005l.15-2.62a5.14 5.14 0 0 0-3.01 1.442l2.147 1.523zm.76 2.75l.723.349l.722-.347l.18-.78l-.5-.623h-.804l-.5.623l.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003l2.134-1.513a5.2 5.2 0 0 0-2.992-1.442l.148 2.615zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.58 1.58 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.6 1.6 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34m-3.289-2.057c-.042-.01-.103-.026-.145-.034c-.174-.033-.315-.025-.479-.038c-.35-.037-.638-.067-.895-.148c-.105-.04-.18-.165-.216-.216l-.201-.059a6.5 6.5 0 0 0-.105-2.332a6.5 6.5 0 0 0-.936-2.163c.052-.047.15-.133.177-.159c.008-.09.001-.183.094-.282c.197-.185.444-.338.743-.522c.142-.084.273-.137.415-.242c.032-.024.076-.062.11-.089c.24-.191.295-.52.123-.736s-.506-.236-.745-.045c-.034.027-.08.062-.111.088c-.134.116-.217.23-.33.35c-.246.25-.45.458-.673.609c-.097.056-.239.037-.303.033l-.19.135a6.55 6.55 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25c-.022-.268.015-.557.057-.905c.023-.163.061-.298.068-.475c.001-.04-.001-.099-.001-.142c0-.306-.224-.555-.5-.555c-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128c.006.177.044.312.067.475c.042.348.078.637.056.906a.55.55 0 0 1-.162.258l-.012.211a6.42 6.42 0 0 0-4.166 2.003l-.18-.128c-.09.012-.18.04-.297-.029c-.223-.15-.427-.358-.673-.608c-.113-.12-.195-.234-.329-.349l-.111-.088a.6.6 0 0 0-.348-.132a.48.48 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005l.104.083c.142.105.272.159.414.242c.299.185.546.338.743.522c.076.082.09.226.1.288l.16.143a6.46 6.46 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217c-.257.081-.546.11-.895.147c-.164.014-.305.006-.48.039c-.037.007-.09.02-.133.03l-.004.002l-.007.002c-.295.071-.484.342-.423.608c.061.267.349.429.645.365l.007-.001l.01-.003l.129-.029c.17-.046.294-.113.448-.172c.33-.118.604-.217.87-.256c.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282c-.097.252-.263.517-.452.813c-.091.136-.185.242-.268.399c-.02.037-.045.095-.064.134c-.128.275-.034.591.213.71c.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127c.07-.162.094-.301.144-.458c.132-.332.205-.68.387-.897c.05-.06.13-.082.215-.105l.113-.205a6.45 6.45 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155c.136.232.229.507.342.84c.05.156.074.295.145.457c.016.037.043.09.062.129c.133.276.442.402.69.282c.247-.118.341-.435.213-.71c-.02-.039-.045-.096-.065-.134c-.083-.156-.177-.261-.268-.398c-.19-.296-.346-.541-.443-.793c-.04-.13.007-.21.038-.294c-.018-.022-.059-.144-.083-.202a6.5 6.5 0 0 0 2.88-3.622c.064.01.176.03.213.038c.075-.05.144-.114.28-.104c.266.039.54.138.87.256c.154.06.277.128.448.173c.036.01.088.019.13.028l.009.003l.007.001c.297.064.584-.098.645-.365c.06-.266-.128-.537-.423-.608M16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01l2.526.728a5.2 5.2 0 0 0-.108-1.674A5.2 5.2 0 0 0 16.4 9.7zm-4.013 5.325a.44.44 0 0 0-.404-.232a.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.16 5.16 0 0 0 3.326.003l-1.27-2.296zm1.888-1.293a.44.44 0 0 0-.27.036a.44.44 0 0 0-.214.572l-.003.004l1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44z"/></symbol><use href="#ai:simple-icons:kubernetes"></use>  </svg>  <span>Kubernetes</span>  </li> </ul>  </section>  </div> </main> <footer id="normal-footer" class="print:hidden flex flex-col gap-2" data-astro-cid-5uazswxx> <div class="text-skin-base" data-astro-cid-5uazswxx>
Press <kbd data-astro-cid-5uazswxx>Cmd</kbd> + <kbd data-astro-cid-5uazswxx>J</kbd> to open the command palette.
</div> </footer> <div class="footer-button print:hidden" data-astro-cid-5uazswxx> <svg width="20" height="20" viewBox="0 0 24 24" class="text-skin-hue" data-astro-cid-5uazswxx="true" data-icon="ri:command-fill">   <use href="#ai:ri:command-fill"></use>  </svg> </div> <div id="hotkeypad" data-placeholder="Search Command" data-activation-letter="J" data-info="[{&#34;id&#34;:&#34;GitHub&#34;,&#34;section&#34;:&#34;Social&#34;,&#34;title&#34;:&#34;Visit GitHub&#34;,&#34;url&#34;:&#34;https://github.com/adamprime&#34;,&#34;icon&#34;:&#34;<svg width=\&#34;16\&#34; height=\&#34;16\&#34; viewBox=\&#34;0 0 24 24\&#34;><title>GitHub</title><path fill=\&#34;currentColor\&#34; d=\&#34;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\&#34;></path></svg>\n&#34;,&#34;hotkey&#34;:&#34;ctrl+G&#34;},{&#34;id&#34;:&#34;LinkedIn&#34;,&#34;section&#34;:&#34;Social&#34;,&#34;title&#34;:&#34;Visit LinkedIn&#34;,&#34;url&#34;:&#34;https://www.linkedin.com/in/adam-tervort&#34;,&#34;icon&#34;:&#34;\n<svg fill=\&#34;currentColor\&#34; height=\&#34;16\&#34; width=\&#34;16\&#34; viewBox=\&#34;0 0 24 24\&#34; xml:space=\&#34;preserve\&#34; stroke=\&#34;currentColor\&#34;><g id=\&#34;SVGRepo_bgCarrier\&#34; stroke-width=\&#34;0\&#34;></g><g id=\&#34;SVGRepo_tracerCarrier\&#34; stroke-linecap=\&#34;round\&#34; stroke-linejoin=\&#34;round\&#34;></g><g id=\&#34;SVGRepo_iconCarrier\&#34;> <g id=\&#34;social-linkedin\&#34;> <path d=\&#34;M22.2,0H1.8C0.8,0,0,0.8,0,1.8v20.5c0,1,0.8,1.8,1.8,1.8h20.5c1,0,1.8-0.8,1.8-1.8V1.8C24,0.8,23.2,0,22.2,0z M7.2,20.4 H3.5V9h3.6V20.4z M5.3,7.4c-1.1,0-2.1-0.9-2.1-2.1s0.9-2.1,2.1-2.1s2.1,0.9,2.1,2.1S6.5,7.4,5.3,7.4z M20.5,20.5h-3.6v-6.3 c0-1.8-0.8-2.4-1.8-2.4c-1.1,0-2.1,0.8-2.1,2.5v6.2H9.3V9h3.5v1.6h0c0.3-0.7,1.6-1.9,3.4-1.9c2,0,4.2,1.2,4.2,4.7V20.5z\&#34;></path> </g> </g></svg>\n&#34;,&#34;hotkey&#34;:&#34;ctrl+L&#34;},{&#34;id&#34;:&#34;About&#34;,&#34;section&#34;:&#34;Social&#34;,&#34;title&#34;:&#34;Visit About&#34;,&#34;url&#34;:&#34;/about&#34;,&#34;hotkey&#34;:&#34;ctrl+A&#34;}]" data-astro-cid-5uazswxx></div> <script type="module" src="/_astro/KeyboardManager.astro_astro_type_script_index_0_lang.CVpX1VJw.js"></script>   </div> <script type="module" src="/_astro/Layout.astro_astro_type_script_index_0_lang.DG5mB0-K.js"></script> </body> </html>  