<!DOCTYPE html><html lang="en" data-astro-cid-sckkx6r4 data-astro-transition-scope="astro-smooz4hq-1"> <head><title>Wylie Fisher</title><meta charset="utf-8"><meta name="description" content="Ahoy! I'm Wylie Fisher, a dad, developer, and outdoor enthusiast."><meta name="viewport" content="width=device-width, initial-scale=1"><meta property="og:type" content="website"><meta property="og:title" content="Wylie Fisher"><meta property="og:image" content="/_astro/share-image.DTXf5BiP.png"><meta property="og:image:alt" content="A drawing of Wylie under the name Wylie Fisher"><meta property="og:description" content="Ahoy! I'm Wylie Fisher, a dad, developer, and outdoor enthusiast."><meta property="og:locale" content="en_US"><meta property="og:site_name" content="Wylie Fisher"><script>
  (function () {
    var measurementId = 'G-5X60SSE4MN';
    var consentKey = 'wf_analytics_consent';

    window.gtag = window.gtag || function () {};

    window.wfEnableAnalytics = function () {
      if (window.__wfAnalyticsEnabled) return;

      window.__wfAnalyticsEnabled = true;
      window.dataLayer = window.dataLayer || [];
      window.gtag = function () {
        window.dataLayer.push(arguments);
      };

      window.gtag('js', new Date());
      window.gtag('consent', 'default', {
        analytics_storage: 'granted',
        ad_storage: 'denied',
        ad_user_data: 'denied',
        ad_personalization: 'denied'
      });
      window.gtag('config', measurementId, { send_page_view: true });

      document.addEventListener('astro:page-load', function () {
        window.gtag('config', measurementId, {
          page_title: document.title,
          page_location: window.location.href,
          page_path: window.location.pathname
        });
      });

      var script = document.createElement('script');
      script.async = true;
      script.src = 'https://www.googletagmanager.com/gtag/js?id=' + measurementId;
      document.head.appendChild(script);
    };

    window.wfDisableAnalytics = function () {
      try {
        localStorage.setItem(consentKey, 'denied');
      } catch (_) {}

      if (typeof window.gtag === 'function') {
        window.gtag('consent', 'update', {
          analytics_storage: 'denied',
          ad_storage: 'denied',
          ad_user_data: 'denied',
          ad_personalization: 'denied'
        });
      }
    };

    try {
      if (localStorage.getItem(consentKey) === 'granted') {
        window.wfEnableAnalytics();
      }
    } catch (_) {}
  })();
</script><link rel="sitemap" href="/sitemap-index.xml"><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0&icon_names=description,download,open_in_new"><link rel="icon" type="image/x-icon" href="/favicon.ico"><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CtSceO8m.js"></script><link rel="stylesheet" href="/_astro/_slug_.biY9E5vf.css">
<style>.portrait[data-astro-cid-v2cbyr3p]{float:left;margin-right:1rem}p[data-astro-cid-v2cbyr3p]:not(:first-child){margin-top:1rem}
</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]||[])})(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><style>[data-astro-transition-scope="astro-smooz4hq-1"] { view-transition-name: root; }@layer astro { ::view-transition-old(root) { animation: none; opacity: 0; mix-blend-mode: normal; }::view-transition-new(root) { animation: none; mix-blend-mode: normal; }::view-transition-group(root) { animation: none } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-smooz4hq-1"],
			[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-smooz4hq-1"] { animation: none; mix-blend-mode: normal; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-smooz4hq-1"],
			[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-smooz4hq-1"] { animation: none; mix-blend-mode: normal; }</style><style>[data-astro-transition-scope="astro-ylulxevl-2"] { view-transition-name: astro-ylulxevl-2; }@layer astro { ::view-transition-old(astro-ylulxevl-2) { 
	animation-duration: 180ms;
	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
	animation-fill-mode: both;
	animation-name: astroFadeOut; }::view-transition-new(astro-ylulxevl-2) { 
	animation-duration: 180ms;
	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
	animation-fill-mode: both;
	animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(astro-ylulxevl-2) { 
	animation-duration: 180ms;
	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
	animation-fill-mode: both;
	animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(astro-ylulxevl-2) { 
	animation-duration: 180ms;
	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
	animation-fill-mode: both;
	animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-ylulxevl-2"],
			[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-ylulxevl-2"] { 
	animation-duration: 180ms;
	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
	animation-fill-mode: both;
	animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-ylulxevl-2"],
			[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-ylulxevl-2"] { 
	animation-duration: 180ms;
	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
	animation-fill-mode: both;
	animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-ylulxevl-2"],
			[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-ylulxevl-2"] { 
	animation-duration: 180ms;
	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
	animation-fill-mode: both;
	animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-ylulxevl-2"],
			[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-ylulxevl-2"] { 
	animation-duration: 180ms;
	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
	animation-fill-mode: both;
	animation-name: astroFadeIn; }</style></head> <body data-astro-cid-sckkx6r4> <div class="layout" data-astro-cid-sckkx6r4> <div data-astro-cid-sckkx6r4> <header data-astro-cid-3ef6ksr2> <div data-astro-cid-3ef6ksr2> <a href="/" aria-label="Home" data-astro-cid-3ef6ksr2> <h1 data-astro-cid-3ef6ksr2>Wylie Fisher</h1> </a> <h2 data-astro-cid-3ef6ksr2>
Operations, Programs, and People
</h2> </div> </header>  <nav data-astro-cid-dmqpwcec> <span class="link inactive" data-astro-cid-dmqpwcec>Ahoy</span> <a href="/projects/" class="link active" rel="noopener noreferrer" data-astro-cid-dmqpwcec>Projects</a> <a href="/blog/" class="link active" rel="noopener noreferrer" data-astro-cid-dmqpwcec>Blog</a> <a href="/resume/" class="link active" rel="noopener noreferrer" data-astro-cid-dmqpwcec>Resume</a> <a href="https://github.com/wylie" class="link active gh" target="_blank" rel="noopener noreferrer" data-astro-cid-dmqpwcec>GitHub</a> </nav>  </div> <main data-astro-cid-sckkx6r4 data-astro-transition-scope="astro-ylulxevl-2">   <section class="about" data-astro-cid-v2cbyr3p> <p data-astro-cid-v2cbyr3p> <img src="/_astro/portrait.BeG5cJJK_1Rv1rF.webp" alt="portrait" data-astro-cid-v2cbyr3p="true" width="100" height="142" loading="lazy" decoding="async" class="portrait">
Ahoy, I'm Wylie!
</p> <p data-astro-cid-v2cbyr3p>I'm a dad and a partner. I love Lego, <a href="https://www.goodreads.com/wyliefisher" target="_blank" data-track-link="goodreads" data-astro-cid-v2cbyr3p>books</a>, animals, and the kind of everyday creativity that shows up in gardens, campfires, board games, and building things with your hands. Our home is shared with two cats, a dog named Meatball, and a few other tiny lives, with chickens still high on the wish list.</p> <p data-astro-cid-v2cbyr3p>These days, life looks a little different than it used to. I'm in a season of rebuilding, rethinking, and deciding what comes next. A lot of that energy is going into home, family, the garden, and small web projects that let me explore ideas at my own pace.</p> <p data-astro-cid-v2cbyr3p>I still think like a front-end developer, even if my path has wandered a bit. I care about structure, clarity, accessibility, and making things that feel thoughtful and useful. Sometimes that shows up in code, sometimes in writing, and sometimes in the quieter work of creating a life that feels more honest and sustainable.</p> <p data-astro-cid-v2cbyr3p>This site is a bit of a home base for all of that. It's where I share weekly reflections, track what I'm reading and watching, and make room for the projects, questions, and experiments that keep tugging at me. I like things that are practical, a little weird, and made with care.</p> <p data-astro-cid-v2cbyr3p>At my core, I'm guided by curiosity, fairness, generosity, and honesty. Whether I'm tending a garden bed, building something on the web, or trying to make sense of a transition, I'm usually aiming for the same thing: leave it better than I found it.</p> <p data-astro-cid-v2cbyr3p>If you're curious about what I'm building, or just want to say hello, <a href="mailto:me@wyliefisher.com" data-track-link="email-about" data-astro-cid-v2cbyr3p>I'd love to connect</a>.</p> </section> <script type="module">document.addEventListener("astro:page-load",()=>{document.querySelectorAll("[data-track-link]").forEach(n=>{n.addEventListener("click",t=>{const r=t.currentTarget.getAttribute("data-track-link"),e=window;typeof e.gtag<"u"&&e.gtag("event","link_click",{link_id:r,link_url:t.currentTarget.href})})})});</script>    </main> <footer data-astro-cid-sz7xmlte> <section class="connect" data-astro-cid-sz7xmlte> <a class="connect-link" href="mailto:me@wyliefisher.com" target="_blank" rel="noopener noreferrer" title="Email me!" data-track-social="email" data-astro-cid-dizxyugg> <img src="/_astro/email.CCrv8Dgx_2uNbTu.webp" alt="Email me!" data-astro-cid-dizxyugg="true" width="64" height="64" loading="lazy" decoding="async" class="icon"> </a> <script type="module">document.addEventListener("astro:page-load",()=>{document.querySelectorAll("[data-track-social]").forEach(a=>{a.addEventListener("click",t=>{const r=t.currentTarget.getAttribute("data-track-social"),e=window;typeof e.gtag<"u"&&e.gtag("event","social_click",{platform:r,link_url:t.currentTarget.href})})})});</script>  <a class="connect-link" href="https://github.com/wylie" target="_blank" rel="noopener noreferrer" title="More work on GitHub!" data-track-social="github" data-astro-cid-dizxyugg> <img src="/_astro/github.CvxZcNPZ_2j9DWy.webp" alt="More work on GitHub!" data-astro-cid-dizxyugg="true" width="64" height="64" loading="lazy" decoding="async" class="icon"> </a>   <a class="connect-link" href="https://www.linkedin.com/in/wyliefisher/" target="_blank" rel="noopener noreferrer" title="Let's connect on Linkedin!" data-track-social="linkedin" data-astro-cid-dizxyugg> <img src="/_astro/linkedin.BphE0QWo_Z1hhIRO.webp" alt="Let's connect on Linkedin!" data-astro-cid-dizxyugg="true" width="64" height="64" loading="lazy" decoding="async" class="icon"> </a>   <a class="connect-link" href="https://www.goodreads.com/wyliefisher" target="_blank" rel="noopener noreferrer" title="Read with me on Goodreads!" data-track-social="goodreads" data-astro-cid-dizxyugg> <img src="/_astro/goodreads.BScsmEQH_PLK3r.webp" alt="Read with me on Goodreads!" data-astro-cid-dizxyugg="true" width="64" height="64" loading="lazy" decoding="async" class="icon"> </a>   </section> <p class="quote" id="footer-quote" data-astro-cid-sz7xmlte></p> <script>(function(){const quotes = ["Great leaders inspire greatness in others.","Belief is not a matter of choice, but of conviction.","Easy is the path to wisdom for those not blinded by ego.","A plan is only as good as those who see it through.","The best confidence builder is experience.","Trust in your friends, and they’ll have reason to trust in you.","You hold onto friends by keeping your heart a little softer than your head.","Heroes are made by the times.","Ignore your instincts at your peril.","Most powerful is he who controls his own power.","The winding path to peace is always a worthy one, regardless of how many turns it takes.","Fail with honor rather than succeed by fraud.","Greed and fear of loss are the roots that lead to the tree of evil.","When surrounded by war, one must eventually choose a side.","Arrogance diminishes wisdom.","Truth enlightens the mind, but won’t always bring happiness to your heart.","Fear is a disease; hope is its only cure.","A single chance is a galaxy of hope.","It is a rough road that leads to the heights of greatness.","The costs of war can never be truly accounted for.","Compromise is a virtue to be cultivated, not a weakness to be despised.","A secret shared is a trust formed.","A lesson learned is a lesson earned.","Overconfidence is the most dangerous form of carelessness.","The first step to correcting a mistake is patience.","A true heart should never be doubted.","Believe in yourself or no one else will.","No gift is more precious than trust.","Sometimes, accepting help is harder than offering it.","Attachment is not compassion.","For everything you gain, you lose something else.","It is the quest for honor that makes one honorable.","Easy isn’t always simple.","If you ignore the past, you jeopardize the future.","Fear not for the future, weep not for the past.","In war, truth is the first casualty.","Searching for the truth is easy. Accepting the truth is hard.","A wise leader knows when to follow.","Courage makes heroes, but trust builds friendships.","Choose what is right, not what is easy.","The most dangerous beast is the beast within.","Who my father was matters less than my memory of him.","Adversity is a friendship’s truest test.","Revenge is a confession of pain.","Brothers in arms are brothers for life.","Fighting a war tests a soldier’s skills, defending his home tests a soldier’s heart."];

    function setRandomQuote() {
      const el = document.getElementById("footer-quote");
      if (el && Array.isArray(quotes) && quotes.length) {
        const randomIndex = Math.floor(Math.random() * quotes.length);
        el.textContent = quotes[randomIndex];
      }
    }
    
    // Run on initial load
    setRandomQuote();
    
    // Run on every view transition navigation
    document.addEventListener('astro:page-load', setRandomQuote);
  })();</script> </footer>  </div> <aside id="cookie-consent" class="cookie-consent" hidden data-astro-cid-garwan2p> <p data-astro-cid-garwan2p>
This site uses Google Analytics to understand site usage. Read the <a href="/privacy/" data-astro-cid-garwan2p>Privacy &amp; Cookies Policy</a>, then accept or decline analytics cookies.
</p> <div class="actions" data-astro-cid-garwan2p> <button id="cookie-accept" type="button" data-astro-cid-garwan2p>Accept</button> <button id="cookie-decline" type="button" data-astro-cid-garwan2p>Decline</button> </div> </aside> <script>
  (function () {
    var consentKey = 'wf_analytics_consent';
    function hideBanner(banner) {
      if (banner) banner.hidden = true;
    }

    function showBanner(banner) {
      if (banner) banner.hidden = false;
    }

    function setConsent(value) {
      try {
        localStorage.setItem(consentKey, value);
      } catch (_) {}
    }

    function init() {
      var banner = document.getElementById('cookie-consent');
      if (!banner) return;

      var consent = null;
      try {
        consent = localStorage.getItem(consentKey);
      } catch (_) {}

      if (consent === 'granted') {
        hideBanner(banner);
        if (typeof window.wfEnableAnalytics === 'function') {
          window.wfEnableAnalytics();
        }
      } else if (consent === 'denied') {
        hideBanner(banner);
        if (typeof window.wfDisableAnalytics === 'function') {
          window.wfDisableAnalytics();
        }
      } else {
        showBanner(banner);
      }
    }

    function bindEvents() {
      var banner = document.getElementById('cookie-consent');
      var accept = document.getElementById('cookie-accept');
      var decline = document.getElementById('cookie-decline');

      if (!banner || !accept || !decline) return;

      if (!accept.dataset.bound) {
        accept.addEventListener('click', function () {
          setConsent('granted');
          if (typeof window.wfEnableAnalytics === 'function') {
            window.wfEnableAnalytics();
          }
          hideBanner(banner);
        });
        accept.dataset.bound = 'true';
      }

      if (!decline.dataset.bound) {
        decline.addEventListener('click', function () {
          setConsent('denied');
          if (typeof window.wfDisableAnalytics === 'function') {
            window.wfDisableAnalytics();
          }
          hideBanner(banner);
        });
        decline.dataset.bound = 'true';
      }
    }

    function setup() {
      bindEvents();
      init();
    }

    document.addEventListener('astro:page-load', setup);
    setup();
  })();
</script>  <script type="module">
			const t=document.title;document.body.removeAttribute("nojs");document.addEventListener("visibilitychange",()=>{document.hidden?document.title="Wait... come back!":document.title=t});
		</script> <script type="module">
			// Scroll depth tracking
			let scrollDepths = [25, 50, 75, 100];
			let trackedDepths = new Set();
			const w = window;
			
			function trackScrollDepth() {
				const windowHeight = window.innerHeight;
				const documentHeight = document.documentElement.scrollHeight;
				const scrollTop = window.scrollY;
				const scrollPercent = Math.round((scrollTop / (documentHeight - windowHeight)) * 100);
				
				scrollDepths.forEach(depth => {
					if (scrollPercent >= depth && !trackedDepths.has(depth)) {
						trackedDepths.add(depth);
						if (typeof w.gtag !== 'undefined') {
							w.gtag('event', 'scroll_depth', {
								percent_scrolled: depth,
								page_location: window.location.pathname
							});
						}
					}
				});
			}
			
			// Track outbound links (external links)
			function trackOutboundLinks() {
				document.querySelectorAll('a[href^="http"]').forEach(link => {
					const url = link.href;
					// Only track if it's not your own domain
					if (!url.includes('wyliefisher.com') && !link.hasAttribute('data-tracked')) {
						link.setAttribute('data-tracked', 'true');
						link.addEventListener('click', (e) => {
							if (typeof w.gtag !== 'undefined') {
								w.gtag('event', 'outbound_click', {
									link_url: url,
									link_domain: new URL(url).hostname
								});
							}
						});
					}
				});
			}
			
			// Initialize on page load
			document.addEventListener('astro:page-load', () => {
				trackedDepths.clear();
				window.addEventListener('scroll', trackScrollDepth, { passive: true });
				trackOutboundLinks();
			});
			
			// Initial setup
			window.addEventListener('scroll', trackScrollDepth, { passive: true });
			trackOutboundLinks();
		</script> </body> </html>  