<!DOCTYPE html><html lang="en"> <head><!-- Global Metadata --><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="generator" content="Astro v5.17.3"><!-- RSS Autodiscovery --><link rel="alternate" type="application/rss+xml" title="Home" href="/rss.xml"><!-- Primary Meta Tags --><title>Home</title><meta name="title" content="Home"><meta name="description" content="Architect. Educator. Builder."><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://juri.dev/"><meta property="og:title" content="Home"><meta property="og:description" content="Architect. Educator. Builder."><meta property="og:image" content="https://juri.dev/placeholder-social.jpg"><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://juri.dev/"><meta property="twitter:title" content="Home"><meta property="twitter:description" content="Architect. Educator. Builder."><meta property="twitter:image" content="https://juri.dev/placeholder-social.jpg"><script>
      (function() {
        var t = typeof localStorage !== 'undefined' ? localStorage.getItem('theme') : null;
        var dark = t === 'dark' || (t !== 'light' && window.matchMedia('(prefers-color-scheme: dark)').matches);
        if (dark) document.documentElement.classList.add('dark');
      })();
    </script><link rel="stylesheet" href="/_astro/_slug_.0CdQ3OA5.css">
<style>.health-snapshot[data-astro-cid-jnbdusit]{display:block;text-decoration:none;padding:12px 0;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);transition:opacity .15s}.health-snapshot[data-astro-cid-jnbdusit]:hover{opacity:.8}.snapshot-row[data-astro-cid-jnbdusit]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;row-gap:8px}.metric[data-astro-cid-jnbdusit]{display:flex;align-items:center;gap:5px;font-family:var(--font-mono)}.metric-val[data-astro-cid-jnbdusit]{font-size:15px;font-weight:500;color:var(--color-text)}.metric-unit[data-astro-cid-jnbdusit]{font-size:11px;color:var(--color-text-faint)}.sep[data-astro-cid-jnbdusit]{width:1px;height:14px;background:var(--color-border);flex-shrink:0}.stage-bar[data-astro-cid-jnbdusit]{display:inline-flex;width:48px;height:4px;border-radius:2px;overflow:hidden;gap:1px;margin-left:2px}.stage-seg[data-astro-cid-jnbdusit]{border-radius:1px}.week-dots[data-astro-cid-jnbdusit]{display:inline-flex;gap:3px;align-items:center;margin-left:2px}.dot[data-astro-cid-jnbdusit]{width:8px;height:8px;border-radius:2px}.dot-pass[data-astro-cid-jnbdusit]{background-color:#34d399}.dot-fail[data-astro-cid-jnbdusit]{background-color:transparent;border:1px solid var(--color-border)}.dot-future[data-astro-cid-jnbdusit]{background-color:transparent;border:1px dashed var(--color-border);opacity:.4}.heart-icon[data-astro-cid-jnbdusit]{width:12px;height:12px;flex-shrink:0;opacity:.8}.arrow[data-astro-cid-jnbdusit]{font-family:var(--font-mono);font-size:12px;color:var(--color-text-faint)}@media(max-width:640px){.sep[data-astro-cid-jnbdusit]{display:none}.snapshot-row[data-astro-cid-jnbdusit]{justify-content:flex-start;gap:16px}}
</style><script>!(function(w,p,f,c){if(!window.crossOriginIsolated && !navigator.serviceWorker) return;c=w[p]=Object.assign(w[p]||{},{"lib":"/~partytown/","debug":false});c[f]=(c[f]||[]).concat(["dataLayer.push"])})(window,'partytown','forward');/* Partytown 0.11.0 - MIT QwikDev */
const t={preserveBehavior:!1},e=e=>{if("string"==typeof e)return[e,t];const[n,r=t]=e;return[n,{...t,...r}]},n=Object.freeze((t=>{const e=new Set;let n=[];do{Object.getOwnPropertyNames(n).forEach((t=>{"function"==typeof n[t]&&e.add(t)}))}while((n=Object.getPrototypeOf(n))!==Object.prototype);return Array.from(e)})());!function(t,r,o,i,a,s,c,l,d,p,u=t,f){function h(){f||(f=1,"/"==(c=(s.lib||"/~partytown/")+(s.debug?"debug/":""))[0]&&(d=r.querySelectorAll('script[type="text/partytown"]'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(l=setTimeout(v,(null==s?void 0:s.fallbackTimeout)||1e4),r.addEventListener("pt0",w),a?y(1):o.serviceWorker?o.serviceWorker.register(c+(s.swPath||"partytown-sw.js"),{scope:c}).then((function(t){t.active?y():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&y()}))}),console.error):v())))}function y(e){p=r.createElement(e?"script":"iframe"),t._pttab=Date.now(),e||(p.style.display="block",p.style.width="0",p.style.height="0",p.style.border="0",p.style.visibility="hidden",p.setAttribute("aria-hidden",!0)),p.src=c+"partytown-"+(e?"atomics.js?v=0.11.0":"sandbox-sw.html?"+t._pttab),r.querySelector(s.sandboxParent||"body").appendChild(p)}function v(n,o){for(w(),i==t&&(s.forward||[]).map((function(n){const[r]=e(n);delete t[r.split(".")[0]]})),n=0;n<d.length;n++)(o=r.createElement("script")).innerHTML=d[n].innerHTML,o.nonce=s.nonce,r.head.appendChild(o);p&&p.parentNode.removeChild(p)}function w(){clearTimeout(l)}s=t.partytown||{},i==t&&(s.forward||[]).map((function(r){const[o,{preserveBehavior:i}]=e(r);u=t,o.split(".").map((function(e,r,o){var a;u=u[o[r]]=r+1<o.length?u[o[r]]||(a=o[r+1],n.includes(a)?[]:{}):(()=>{let e=null;if(i){const{methodOrProperty:n,thisObject:r}=((t,e)=>{let n=t;for(let t=0;t<e.length-1;t+=1)n=n[e[t]];return{thisObject:n,methodOrProperty:e.length>0?n[e[e.length-1]]:void 0}})(t,o);"function"==typeof n&&(e=(...t)=>n.apply(r,...t))}return function(){let n;return e&&(n=e(arguments)),(t._ptf=t._ptf||[]).push(o,arguments),n}})()}))})),"complete"==r.readyState?h():(t.addEventListener("DOMContentLoaded",h),t.addEventListener("load",h))}(window,document,navigator,top,window.crossOriginIsolated);;(e=>{e.addEventListener("astro:before-swap",e=>{let r=document.body.querySelector("iframe[src*='/~partytown/']");if(r)e.newDocument.body.append(r)})})(document);</script></head> <body> <header class="mx-auto max-w-[960px] px-4 sm:px-8" style="padding-top: 24px; padding-bottom: 24px; border-bottom: 1px solid var(--color-border);" data-astro-cid-3ef6ksr2> <div class="flex items-center justify-between gap-3" data-astro-cid-3ef6ksr2> <div class="flex items-center gap-2 font-ui text-sm min-w-0" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> <a href="/" class="hover:opacity-80 transition-opacity" style="color: var(--color-text);" data-astro-cid-3ef6ksr2>
juri.dev
</a>  </div> <nav class="flex items-center gap-5" data-astro-cid-3ef6ksr2> <div class="desktop-nav-links items-center gap-5" data-astro-cid-3ef6ksr2> <a href="/articles" class="font-ui text-[13px] no-underline transition-colors" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> articles </a><a href="/videos" class="font-ui text-[13px] no-underline transition-colors" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> videos </a><a href="/speaking" class="font-ui text-[13px] no-underline transition-colors" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> talks </a><a href="/notes" class="font-ui text-[13px] no-underline transition-colors" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> notes </a><a href="/health" class="font-ui text-[13px] no-underline transition-colors" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> health </a><a href="/about" class="font-ui text-[13px] no-underline transition-colors" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> about </a> </div> <button id="themeToggle" aria-label="Toggle theme" class="font-ui text-xs" style="padding: 5px 10px; border: 1px solid var(--color-border); border-radius: 4px; background: transparent; color: var(--color-text-faint); cursor: pointer; transition: color 0.15s ease, border-color 0.15s ease;"> <span class="theme-label"></span> </button> <script>
  (function() {
    var modes = ['system', 'dark', 'light'];
    var stored = typeof localStorage !== 'undefined' ? localStorage.getItem('theme') : null;
    var mode = stored && modes.indexOf(stored) !== -1 ? stored : 'system';

    function applyMode(m) {
      mode = m;
      var isDark;
      if (m === 'system') {
        isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
      } else {
        isDark = m === 'dark';
      }
      if (isDark) {
        document.documentElement.classList.add('dark');
      } else {
        document.documentElement.classList.remove('dark');
      }
      var label = document.querySelector('#themeToggle .theme-label');
      if (label) label.textContent = m;
      localStorage.setItem('theme', m);
    }

    applyMode(mode);

    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function() {
      if (mode === 'system') applyMode('system');
    });

    document.getElementById('themeToggle').addEventListener('click', function() {
      var next = modes[(modes.indexOf(mode) + 1) % modes.length];
      applyMode(next);
    });
  })();
</script> </nav> </div> <!-- Mobile nav --> <nav class="mobile-nav-links items-center justify-start gap-x-4 gap-y-2 pt-3 mt-2 flex-wrap overflow-x-auto" style="border-top: 1px solid var(--color-border);" data-astro-cid-3ef6ksr2> <a href="/articles" class="font-ui text-[12px] no-underline transition-colors whitespace-nowrap" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> articles </a><a href="/videos" class="font-ui text-[12px] no-underline transition-colors whitespace-nowrap" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> videos </a><a href="/speaking" class="font-ui text-[12px] no-underline transition-colors whitespace-nowrap" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> talks </a><a href="/notes" class="font-ui text-[12px] no-underline transition-colors whitespace-nowrap" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> notes </a><a href="/health" class="font-ui text-[12px] no-underline transition-colors whitespace-nowrap" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> health </a><a href="/about" class="font-ui text-[12px] no-underline transition-colors whitespace-nowrap" style="color: var(--color-text-faint);" data-astro-cid-3ef6ksr2> about </a> </nav> </header>  <main>  <div class="container-content" style="padding-top: 64px; padding-bottom: 80px;"> <!-- Hero --> <section style="margin-bottom: 48px;"> <h1 style="font-family: var(--font-serif); font-size: 40px; font-weight: 400; line-height: 1.2; margin-bottom: 12px; color: var(--color-text);">
Juri Strumpflohner
</h1> <p class="font-ui text-[13px] uppercase tracking-wide" style="color: var(--color-text-faint); margin-bottom: 24px; letter-spacing: 0.08em;"> Architect. Educator. Builder. </p> <p style="font-size: 19px; line-height: 1.75; color: var(--color-text-body); margin-bottom: 28px; max-width: 600px;">
Sr. Director of Developer Experience at <a href="https://nx.dev" target="_blank" style="color: var(--color-link); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--color-text-faint);">Nx</a>,
        where I work on monorepo tooling, developer education, and AI integrations.
        Google Developer Expert. Based in South Tyrol, Italy.
</p> <div class="flex flex-wrap gap-3 sm:gap-5 font-ui text-[13px]"> <a href="https://twitter.com/juristr" style="color: var(--color-text-faint); text-decoration: none;">twitter</a> <a href="https://github.com/juristr" style="color: var(--color-text-faint); text-decoration: none;">github</a> <a href="https://youtube.com/@juristr" style="color: var(--color-text-faint); text-decoration: none;">youtube</a> <a href="https://linkedin.com/in/juristr/" style="color: var(--color-text-faint); text-decoration: none;">linkedin</a> <a href="https://bsky.app/profile/juri.dev" style="color: var(--color-text-faint); text-decoration: none;">bluesky</a> </div> </section> <!-- Health Snapshot --> <div style="margin-bottom: 48px;"> <a href="/health" class="health-snapshot no-underline" data-testid="health-snapshot" data-astro-cid-jnbdusit> <div class="snapshot-row" data-astro-cid-jnbdusit> <div class="metric" data-astro-cid-jnbdusit> <span class="metric-val" style="color: #ef5350;" data-astro-cid-jnbdusit>5.3</span><span class="metric-unit" data-astro-cid-jnbdusit>h sleep</span> <span class="stage-bar" data-astro-cid-jnbdusit> <span class="stage-seg" style="flex: 1.8; background: #4338ca;" data-astro-cid-jnbdusit></span> <span class="stage-seg" style="flex: 0.6; background: #818cf8;" data-astro-cid-jnbdusit></span> <span class="stage-seg" style="flex: 2.8; background: #a5b4fc;" data-astro-cid-jnbdusit></span> </span> </div> <span class="sep" data-astro-cid-jnbdusit></span> <div class="metric" data-astro-cid-jnbdusit> <span class="metric-val" style="color: #34d399;" data-astro-cid-jnbdusit>3</span><span class="metric-unit" data-astro-cid-jnbdusit>/4 workouts</span> <span class="week-dots" data-astro-cid-jnbdusit> <span class="dot dot-pass" data-astro-cid-jnbdusit></span><span class="dot dot-pass" data-astro-cid-jnbdusit></span><span class="dot dot-pass" data-astro-cid-jnbdusit></span><span class="dot dot-fail" data-astro-cid-jnbdusit></span><span class="dot dot-future" data-astro-cid-jnbdusit></span><span class="dot dot-future" data-astro-cid-jnbdusit></span><span class="dot dot-future" data-astro-cid-jnbdusit></span> </span> </div> <span class="sep" data-astro-cid-jnbdusit></span> <div class="metric" data-astro-cid-jnbdusit> <svg class="heart-icon" viewBox="0 0 24 24" fill="#ef5350" data-astro-cid-jnbdusit><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" data-astro-cid-jnbdusit></path></svg> <span class="metric-val" data-astro-cid-jnbdusit>53</span><span class="metric-unit" data-astro-cid-jnbdusit>ms hrv</span> </div> <span class="sep" data-astro-cid-jnbdusit></span> <div class="metric" data-astro-cid-jnbdusit> <svg class="heart-icon" viewBox="0 0 24 24" fill="#ef5350" data-astro-cid-jnbdusit><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" data-astro-cid-jnbdusit></path></svg> <span class="metric-val" data-astro-cid-jnbdusit>47</span><span class="metric-unit" data-astro-cid-jnbdusit>bpm rhr</span> </div> <span class="arrow" data-astro-cid-jnbdusit>&rarr;</span> </div> </a>  </div> <!-- Writing --> <section style="margin-bottom: 64px;"> <div class="flex items-center justify-between" style="margin-bottom: 20px;"> <span class="section-label">Writing</span> <a href="/articles" class="font-ui text-xs no-underline transition-colors" style="color: var(--color-text-faint);"> all articles &rarr;
</a> </div> <div> <a href="https://nx.dev/blog/agentic-nx-import" class="block no-underline group" style="padding: 16px 0; border-bottom: 1px solid var(--color-border);" target="_blank" rel="noopener"> <div class="flex items-start justify-between gap-4"> <span class="text-[17px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); line-height: 1.4; font-family: var(--font-serif);"> Agentic Nx Import: Let an Agent Drive Your Monorepo Migrations <span class="font-ui text-[11px] ml-2" style="color: var(--color-text-faint);">
&#8599; nx.dev </span> </span> <span class="font-ui text-xs shrink-0 pt-0.5" style="color: var(--color-text-faint);"> Apr 30, 2026 </span> </div> </a><a href="https://nx.dev/blog/nx-22-7-release" class="block no-underline group" style="padding: 16px 0; border-bottom: 1px solid var(--color-border);" target="_blank" rel="noopener"> <div class="flex items-start justify-between gap-4"> <span class="text-[17px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); line-height: 1.4; font-family: var(--font-serif);"> Nx 22.7 Is Here: Task Sandboxing, 7x Less Memory, and Worktree-Aware Caching <span class="font-ui text-[11px] ml-2" style="color: var(--color-text-faint);">
&#8599; nx.dev </span> </span> <span class="font-ui text-xs shrink-0 pt-0.5" style="color: var(--color-text-faint);"> Apr 28, 2026 </span> </div> </a><a href="https://nx.dev/blog/pnpm-monorepo-cloudflare-pages" class="block no-underline group" style="padding: 16px 0; border-bottom: 1px solid var(--color-border);" target="_blank" rel="noopener"> <div class="flex items-start justify-between gap-4"> <span class="text-[17px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); line-height: 1.4; font-family: var(--font-serif);"> Deploying a PNPM Monorepo to Cloudflare Pages <span class="font-ui text-[11px] ml-2" style="color: var(--color-text-faint);">
&#8599; nx.dev </span> </span> <span class="font-ui text-xs shrink-0 pt-0.5" style="color: var(--color-text-faint);"> Apr 21, 2026 </span> </div> </a><a href="https://nx.dev/blog/sharing-tailwind-styles-nx-monorepo" class="block no-underline group" style="padding: 16px 0; border-bottom: 1px solid var(--color-border);" target="_blank" rel="noopener"> <div class="flex items-start justify-between gap-4"> <span class="text-[17px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); line-height: 1.4; font-family: var(--font-serif);"> Sharing Tailwind CSS Styles Across Apps in a PNPM Workspaces Nx Monorepo <span class="font-ui text-[11px] ml-2" style="color: var(--color-text-faint);">
&#8599; nx.dev </span> </span> <span class="font-ui text-xs shrink-0 pt-0.5" style="color: var(--color-text-faint);"> Apr 10, 2026 </span> </div> </a><a href="/articles/visual-feedback-loop-electron-apps-claude-code" class="block no-underline group" style="padding: 16px 0; border-bottom: 1px solid var(--color-border);"> <div class="flex items-start justify-between gap-4"> <span class="text-[17px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); line-height: 1.4; font-family: var(--font-serif);"> A Visual Feedback Loop for Electron Apps with Claude Code  </span> <span class="font-ui text-xs shrink-0 pt-0.5" style="color: var(--color-text-faint);"> Mar 6, 2026 </span> </div> </a><a href="https://nx.dev/blog/making-nx-agent-ready" class="block no-underline group" style="padding: 16px 0; border-bottom: 1px solid var(--color-border);" target="_blank" rel="noopener"> <div class="flex items-start justify-between gap-4"> <span class="text-[17px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); line-height: 1.4; font-family: var(--font-serif);"> Agentic Experience Is the New Developer Experience <span class="font-ui text-[11px] ml-2" style="color: var(--color-text-faint);">
&#8599; nx.dev </span> </span> <span class="font-ui text-xs shrink-0 pt-0.5" style="color: var(--color-text-faint);"> Mar 5, 2026 </span> </div> </a> </div> </section> <!-- Two Column: Videos + Notes --> <div class="grid grid-cols-1 md:grid-cols-2 gap-12" style="margin-bottom: 64px;"> <!-- Videos --> <section> <div class="flex items-center justify-between" style="margin-bottom: 20px;"> <span class="section-label">Videos</span> <a href="/videos" class="font-ui text-xs no-underline transition-colors" style="color: var(--color-text-faint);"> youtube &rarr;
</a> </div> <div> <a href="https://youtu.be/mUG292kkz0w" target="_blank" rel="noopener" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> Agentic Nx Import </span> <span class="font-ui text-[11px] shrink-0" style="color: var(--color-text-faint);"> Apr 2026 </span> </a><a href="https://www.youtube.com/watch?v=1WBToDwdbGc" target="_blank" rel="noopener" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> Nx 22.7 release </span> <span class="font-ui text-[11px] shrink-0" style="color: var(--color-text-faint);"> Apr 2026 </span> </a><a href="https://www.youtube.com/watch?v=aQUlsilNSQ8" target="_blank" rel="noopener" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> How Nx Self-Healing CI Works </span> <span class="font-ui text-[11px] shrink-0" style="color: var(--color-text-faint);"> Mar 2026 </span> </a><a href="https://www.youtube.com/watch?v=9uC7wYqyQ0Y" target="_blank" rel="noopener" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> Don&#39;t Miss This Cursor Productivity Hack! </span> <span class="font-ui text-[11px] shrink-0" style="color: var(--color-text-faint);"> Feb 2026 </span> </a><a href="https://www.youtube.com/watch?v=N3-PgLQK0uU" target="_blank" rel="noopener" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> We got skills for you! </span> <span class="font-ui text-[11px] shrink-0" style="color: var(--color-text-faint);"> Feb 2026 </span> </a> </div> </section> <!-- Notes / Digital Garden --> <section> <div class="flex items-center justify-between" style="margin-bottom: 20px;"> <span class="section-label">Notes</span> <a href="/notes" class="font-ui text-xs no-underline transition-colors" style="color: var(--color-text-faint);"> explore garden &rarr;
</a> </div> <p class="text-sm" style="color: var(--color-text-muted); margin-bottom: 20px; line-height: 1.6;">
A digital garden of ideas at various stages of growth.
</p> <div> <a href="/notes/tailscale-ssh-macos" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> How to setup Tailscale SSH on macOS </span> <span class="font-ui text-[10px] shrink-0 px-2 py-0.5 rounded" style="color: var(--color-accent); background: var(--color-accent)15;"> seedling </span> </a><a href="/notes/create-skill-scaffolding-claude-code-skills" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> Create-Skill - Scaffolding Claude Code Skills </span> <span class="font-ui text-[10px] shrink-0 px-2 py-0.5 rounded" style="color: var(--color-accent); background: var(--color-accent)15;"> seedling </span> </a><a href="/notes/ascii-fs-rendering" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> Generate a ASCII tree from file system </span> <span class="font-ui text-[10px] shrink-0 px-2 py-0.5 rounded" style="color: var(--color-accent); background: var(--color-accent)15;"> seedling </span> </a><a href="/notes/uses" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> My Setup </span> <span class="font-ui text-[10px] shrink-0 px-2 py-0.5 rounded" style="color: var(--color-accent); background: var(--color-accent)15;"> seedling </span> </a><a href="/notes/cloudflare-domain-with-netlify" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> Configure Cloudflare Domain with Netlify hosted app </span> <span class="font-ui text-[10px] shrink-0 px-2 py-0.5 rounded" style="color: var(--color-accent-alt); background: var(--color-accent-alt)15;"> evergreen </span> </a><a href="/notes/compress-images-terminal-macos" class="flex items-center justify-between no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <span class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text); font-family: var(--font-serif);"> Compress images via the terminal on MacOS </span> <span class="font-ui text-[10px] shrink-0 px-2 py-0.5 rounded" style="color: var(--color-accent-alt); background: var(--color-accent-alt)15;"> evergreen </span> </a> </div> </section> </div> <!-- Two Column: Talks + Courses --> <div class="grid grid-cols-1 md:grid-cols-2 gap-12" style="margin-bottom: 64px;"> <!-- Talks --> <section> <div class="flex items-center justify-between" style="margin-bottom: 20px;"> <span class="section-label">Talks</span> <a href="/speaking" class="font-ui text-xs no-underline transition-colors" style="color: var(--color-text-faint);"> all talks &rarr;
</a> </div>  <div> <div class="font-ui text-[11px]" style="color: var(--color-text-faint); margin-bottom: 12px;">
past
</div> <a href="https://go.nx.dev/autonomous-software-factories-are-we-there-yet" target="_blank" rel="noopener" class="block no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <div class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text-muted); font-family: var(--font-serif); margin-bottom: 4px;"> Autonomous Software Factories: Are We There Yet? </div> <div class="font-ui text-[11px]" style="color: var(--color-text-faint);"> webinar </div> </a><a href="https://go.nx.dev/april2026-webinar" target="_blank" rel="noopener" class="block no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <div class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text-muted); font-family: var(--font-serif); margin-bottom: 4px;"> Synthetic Monorepos: the Solution for Agentic Development Across Repository Boundaries </div> <div class="font-ui text-[11px]" style="color: var(--color-text-faint);"> webinar </div> </a><a href="https://go.nx.dev/feb2026-webinar" target="_blank" rel="noopener" class="block no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <div class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text-muted); font-family: var(--font-serif); margin-bottom: 4px;"> Why Monorepos are King in the Age of AI </div> <div class="font-ui text-[11px]" style="color: var(--color-text-faint);"> webinar </div> </a><a href="https://bit.ly/4kv5tfb" target="_blank" rel="noopener" class="block no-underline group" style="padding: 12px 0; border-bottom: 1px solid var(--color-border);"> <div class="text-[15px] transition-colors group-hover:text-[var(--color-accent)]" style="color: var(--color-text-muted); font-family: var(--font-serif); margin-bottom: 4px;"> Build Better, Ship Faster: Monorepos, Apps &amp; Component Libraries with Nx Cloud </div> <div class="font-ui text-[11px]" style="color: var(--color-text-faint);"> webinar </div> </a> </div> </section> <!-- Courses --> <section> <div class="flex items-center justify-between" style="margin-bottom: 20px;"> <span class="section-label">Courses</span>  </div> <div class="flex flex-col gap-3"> <a href="https://www.epicweb.dev/tutorials/versioning-and-releasing-npm-packages-with-nx" target="_blank" rel="noopener" class="flex items-center gap-4 no-underline group surface-card" style="padding: 16px 20px;"> <img src="/images/egghead/epicweb-nx-release.webp" alt="Versioning and Releasing NPM Packages with Nx" loading="lazy" class="w-14 h-14 rounded object-cover shrink-0"> <div class="min-w-0"> <div class="flex items-center gap-2 mb-1"> <span class="tag-badge" style="color: var(--color-accent);">epicweb.dev</span>  </div> <h3 class="text-base font-normal transition-colors group-hover:text-[var(--color-accent)] mb-1" style="color: var(--color-text); line-height: 1.4;"> Versioning and Releasing NPM Packages with Nx </h3>  <div class="font-ui text-[11px]" style="color: var(--color-text-faint);">  <span> &middot; 1h 15m</span> </div> </div> </a><a href="https://egghead.io/courses/build-high-speed-monorepos-with-nx-and-pnpm-workspaces-27703a7a" target="_blank" rel="noopener" class="flex items-center gap-4 no-underline group surface-card" style="padding: 16px 20px;"> <img src="/images/egghead/egghead-nx-pnpm.webp" alt="Build High-Speed Monorepos with Nx and pnpm Workspaces" loading="lazy" class="w-14 h-14 rounded object-cover shrink-0"> <div class="min-w-0"> <div class="flex items-center gap-2 mb-1"> <span class="tag-badge" style="color: var(--color-accent);">egghead</span>  </div> <h3 class="text-base font-normal transition-colors group-hover:text-[var(--color-accent)] mb-1" style="color: var(--color-text); line-height: 1.4;"> Build High-Speed Monorepos with Nx and pnpm Workspaces </h3>  <div class="font-ui text-[11px]" style="color: var(--color-text-faint);">  <span> &middot; 42m</span> </div> </div> </a><a href="https://egghead.io/courses/scale-react-development-with-nx-4038" target="_blank" rel="noopener" class="flex items-center gap-4 no-underline group surface-card" style="padding: 16px 20px;"> <img src="/images/egghead/egghead-scaling-react.webp" alt="Scale React Development with Nx" loading="lazy" class="w-14 h-14 rounded object-cover shrink-0"> <div class="min-w-0"> <div class="flex items-center gap-2 mb-1"> <span class="tag-badge" style="color: var(--color-accent);">egghead</span>  </div> <h3 class="text-base font-normal transition-colors group-hover:text-[var(--color-accent)] mb-1" style="color: var(--color-text); line-height: 1.4;"> Scale React Development with Nx </h3>  <div class="font-ui text-[11px]" style="color: var(--color-text-faint);"> <span>24 lessons</span> <span> &middot; 1h 40m</span> </div> </div> </a><a href="https://egghead.io/courses/productive-git-for-developers" target="_blank" rel="noopener" class="flex items-center gap-4 no-underline group surface-card" style="padding: 16px 20px;"> <img src="/images/egghead/egghead-git.webp" alt="Productive Git for Developers" loading="lazy" class="w-14 h-14 rounded object-cover shrink-0"> <div class="min-w-0"> <div class="flex items-center gap-2 mb-1"> <span class="tag-badge" style="color: var(--color-accent);">egghead</span>  </div> <h3 class="text-base font-normal transition-colors group-hover:text-[var(--color-accent)] mb-1" style="color: var(--color-text); line-height: 1.4;"> Productive Git for Developers </h3>  <div class="font-ui text-[11px]" style="color: var(--color-text-faint);">  <span> &middot; 32m</span> </div> </div> </a> </div> </section> </div> <!-- Newsletter --> <div class="surface-card" style="padding: 32px; text-align: center;"> <h3 style="font-family: var(--font-serif); font-size: 24px; font-weight: 600; color: var(--color-text); margin-bottom: 8px;">
Stay in the loop
</h3> <p style="font-size: 15px; color: var(--color-text-muted); margin-bottom: 24px;">
Don't miss any of my content. No spam. I'm not a grifter.
</p> <script type="module" src="/_astro/NewsletterCTA.astro_astro_type_script_index_0_lang.CGmvUPlg.js"></script> <form action="https://app.convertkit.com/forms/2230479/subscriptions" method="post" data-sv-form="2230479" data-uid="7f1cac0474" data-format="inline" data-version="5" style="display: flex; gap: 8px; max-width: 480px; margin: 0 auto; flex-wrap: wrap; justify-content: center;"> <input name="fields[first_name]" aria-label="Name" required placeholder="Name" type="text" style="flex: 1; min-width: 120px; padding: 10px 14px; font-family: var(--font-mono); font-size: 13px; background: var(--color-bg); border: 1px solid var(--color-border); border-radius: 4px; color: var(--color-text);"> <input name="email_address" aria-label="Email" required placeholder="Email" type="email" style="flex: 1; min-width: 160px; padding: 10px 14px; font-family: var(--font-mono); font-size: 13px; background: var(--color-bg); border: 1px solid var(--color-border); border-radius: 4px; color: var(--color-text);"> <button type="submit" style="padding: 10px 20px; font-family: var(--font-mono); font-size: 13px; font-weight: 500; background: var(--color-accent); color: #0a0a12; border: none; border-radius: 4px; cursor: pointer;">
Subscribe
</button> </form> </div> </div>  </main> <footer class="container-content" style="padding-top: 48px; padding-bottom: 48px; border-top: 1px solid var(--color-border);"> <div class="flex flex-col sm:flex-row items-center justify-between gap-3 font-ui text-xs" style="color: var(--color-text-faint);"> <span>&copy; 2026 Juri Strumpflohner</span> <div class="flex items-center gap-4"> <a href="/rss.xml" class="hover:opacity-80 transition-opacity" style="color: var(--color-text-faint);">RSS</a> <a href="https://github.com/juristr" class="hover:opacity-80 transition-opacity" style="color: var(--color-text-faint);">GitHub</a> <a href="https://bsky.app/profile/juri.dev" class="hover:opacity-80 transition-opacity" style="color: var(--color-text-faint);">Bluesky</a> <a href="https://twitter.com/juristr" class="hover:opacity-80 transition-opacity" style="color: var(--color-text-faint);">X</a> <a href="https://www.linkedin.com/in/juristr/" class="hover:opacity-80 transition-opacity" style="color: var(--color-text-faint);">LinkedIn</a> </div> </div> </footer> <plausible-analytics data-domain="juri.dev"></plausible-analytics> <script type="module" src="/_astro/PlausibleAnalytics.astro_astro_type_script_index_0_lang.vZH3MhKm.js"></script> </body></html>