<html lang="en" class="overflow-y-scroll"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Home | erikcraddock.me</title><meta property="og:site_name" content="Erik Craddock"/><meta property="og:title" content="Home | erikcraddock.me"/><meta property="og:type" content="article"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="Home | erikcraddock.me"/><script>
(function() {
  var theme = localStorage.getItem('theme');
  if (theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
    document.documentElement.classList.add('dark');
  }
})();
</script><link rel="icon" type="image/x-icon" href="/favicon.ico"/><link rel="stylesheet" href="/css/main.css"/><link rel="alternate" type="application/rss+xml" title="Erik Craddock RSS Feed" href="/feed.xml"/></head><body class="min-h-screen flex flex-col bg-gray-50 text-gray-900 dark:bg-gray-900 dark:text-gray-100"><header class="sticky top-0 z-50 bg-white shadow-sm dark:bg-gray-800 dark:shadow-gray-900/50"><nav class="max-w-6xl mx-auto px-4 py-4 flex items-center justify-between"><a href="/" class="text-lg font-semibold text-gray-900 hover:text-gray-600 dark:text-gray-100 dark:hover:text-gray-300">Erik Craddock</a><div class="flex items-center gap-6"><button id="theme-toggle" type="button" class="p-2 rounded-lg text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:focus:ring-gray-600" aria-label="Toggle dark mode"><svg id="theme-toggle-light-icon" class="hidden w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z" fill-rule="evenodd" clip-rule="evenodd"></path></svg><svg id="theme-toggle-dark-icon" class="hidden w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"></path></svg></button></div></nav></header><main class="flex-1 max-w-6xl mx-auto px-4 py-8 w-full"><section class="mb-12 py-8 bg-gray-100 dark:bg-gray-800 -mx-4 px-4 rounded-lg"><div class="flex flex-col md:flex-row items-stretch gap-8"><div class="order-first md:order-last flex-shrink-0"><a href="/about" class="block w-64 h-64 md:w-80 md:h-80 rounded-full overflow-hidden bg-gray-200 dark:bg-gray-700 border-4 border-gray-300 dark:border-gray-600 shadow-lg transition-transform hover:scale-[1.02] focus:outline-none focus:ring-2 focus:ring-teal-500 focus:ring-offset-4 dark:focus:ring-offset-gray-800" aria-label="About Erik Craddock"><img src="/images/erik-logo.png" alt="Erik Craddock" class="w-full h-full object-cover"/></a></div><div class="flex-1 flex flex-col justify-center items-center"><div class="text-left"><p class="text-xl md:text-2xl text-gray-600 dark:text-gray-300 mb-2 leading-relaxed">I am a <span class="text-blue-600 dark:text-blue-400 font-medium">writer</span>, <span class="text-green-600 dark:text-green-400 font-medium">coder</span>, and <span class="text-purple-600 dark:text-purple-400 font-medium">musician</span></p><p class="text-lg text-gray-500 dark:text-gray-400 mb-2 italic">— not always in that order.</p><p class="text-base text-gray-400 dark:text-gray-500 mb-8">This is my haphazard living autobiography.</p><div class="flex justify-start gap-4"><a href="https://github.com/evcraddock" target="_blank" rel="noopener noreferrer" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 transition-colors" aria-label="GitHub" title="GitHub"><svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd"></path></svg></a><a href="https://www.linkedin.com/in/erik-craddock-42aa9815" target="_blank" rel="noopener noreferrer" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 transition-colors" aria-label="LinkedIn" title="LinkedIn"><svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a><a href="https://www.facebook.com/evcraddock" target="_blank" rel="noopener noreferrer" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 transition-colors" aria-label="Facebook" title="Facebook"><svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path fill-rule="evenodd" d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z" clip-rule="evenodd"></path></svg></a><a href="https://youtube.com/@ErikCraddock" target="_blank" rel="noopener noreferrer" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 transition-colors" aria-label="YouTube" title="YouTube"><svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path fill-rule="evenodd" d="M19.812 5.418c.861.23 1.538.907 1.768 1.768C21.998 8.746 22 12 22 12s0 3.255-.418 4.814a2.504 2.504 0 0 1-1.768 1.768c-1.56.419-7.814.419-7.814.419s-6.255 0-7.814-.419a2.505 2.505 0 0 1-1.768-1.768C2 15.255 2 12 2 12s0-3.255.417-4.814a2.507 2.507 0 0 1 1.768-1.768C5.744 5 11.998 5 11.998 5s6.255 0 7.814.418ZM15.194 12 10 15V9l5.194 3Z" clip-rule="evenodd"></path></svg></a><a href="/feed.xml" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 transition-colors" aria-label="RSS" title="RSS"><svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path d="M6.503 20.752c0 1.794-1.456 3.248-3.251 3.248-1.796 0-3.252-1.454-3.252-3.248 0-1.794 1.456-3.248 3.252-3.248 1.795.001 3.251 1.454 3.251 3.248zm-6.503-12.572v4.811c6.05.062 10.96 4.966 11.022 11.009h4.817c-.062-8.71-7.118-15.758-15.839-15.82zm0-3.368c10.58.046 19.152 8.594 19.183 19.188h4.817c-.03-13.231-10.755-23.954-24-24v4.812z"></path></svg></a></div></div></div></div></section><section class="mb-12 rounded-lg bg-white p-6 shadow-md dark:bg-gray-800 sm:p-8"><div class="flex flex-col gap-5 sm:flex-row sm:items-center sm:justify-between"><div><p class="text-sm font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">Latest updates</p><h2 class="mt-2 text-2xl font-bold text-gray-900 dark:text-gray-100">Notes, Links &amp; Updates</h2><p class="mt-2 max-w-2xl text-gray-600 dark:text-gray-400">Browse the full feed for shorter notes, links worth sharing, and new articles.</p></div><a href="/feed" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-lg bg-teal-600 px-5 py-3 text-sm font-semibold text-white transition-colors hover:bg-teal-700 dark:bg-teal-500 dark:text-gray-950 dark:hover:bg-teal-400">Open Feed<svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg></a></div></section><section class="mb-12"><h2 class="mb-6 text-2xl font-bold text-gray-900 dark:text-gray-100">Recent Articles</h2><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"><article class="flex h-full flex-col bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition-shadow"><a href="/posts/memphis-boa" class="flex h-full flex-col"><div class="relative aspect-video bg-gray-200 dark:bg-gray-700"><img src="/media/posts/memphis-boa/memphis-boa.png" alt="Mustang wins the BOA Memphis Regional" class="w-full h-full object-cover"/><div class="absolute top-3 right-3 bg-black/70 text-white text-xs px-2 py-1 rounded">Oct 20, 2025</div></div><div class="flex flex-1 flex-col p-4"><div class="flex-1"><h3 class="text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2 line-clamp-2 group-hover:text-blue-600">Mustang wins the BOA Memphis Regional</h3><p class="text-gray-600 dark:text-gray-400 text-sm line-clamp-3 mb-2">Mustang Marching band wins BOA Championship at Memphis Regional</p></div><div class="mt-4 flex items-center justify-around border-t border-gray-100 pt-3 text-sm text-gray-500 dark:border-gray-800 dark:text-gray-400"><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub replies"><span aria-hidden="true">↩</span><span>0 Replies</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub boosts"><span aria-hidden="true">↻</span><span>0 Boosts</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub likes"><span aria-hidden="true">♡</span><span>0 Likes</span></span></div></div></a></article><article class="flex h-full flex-col bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition-shadow"><a href="/posts/daily-process" class="flex h-full flex-col"><div class="relative aspect-video bg-gray-200 dark:bg-gray-700"><img src="/media/posts/daily-process/finances-claude.png" alt="Managing Finances with Ledger and Claude Code" class="w-full h-full object-cover"/><div class="absolute top-3 right-3 bg-black/70 text-white text-xs px-2 py-1 rounded">Aug 17, 2025</div></div><div class="flex flex-1 flex-col p-4"><div class="flex-1"><h3 class="text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2 line-clamp-2 group-hover:text-blue-600">Managing Finances with Ledger and Claude Code</h3><p class="text-gray-600 dark:text-gray-400 text-sm line-clamp-3 mb-2">A simple 5-10 minute daily routine for managing personal finances using Ledger CLI and Claude Code automation.</p></div><div class="mt-4 flex items-center justify-around border-t border-gray-100 pt-3 text-sm text-gray-500 dark:border-gray-800 dark:text-gray-400"><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub replies"><span aria-hidden="true">↩</span><span>0 Replies</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub boosts"><span aria-hidden="true">↻</span><span>0 Boosts</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub likes"><span aria-hidden="true">♡</span><span>0 Likes</span></span></div></div></a></article><article class="flex h-full flex-col bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition-shadow"><a href="/posts/receipt-processing" class="flex h-full flex-col"><div class="relative aspect-video bg-gray-200 dark:bg-gray-700"><img src="/media/posts/receipt-processing/receipts-claude.png" alt="Processing Receipts with Ledger and Claude Code" class="w-full h-full object-cover"/><div class="absolute top-3 right-3 bg-black/70 text-white text-xs px-2 py-1 rounded">Aug 17, 2025</div></div><div class="flex flex-1 flex-col p-4"><div class="flex-1"><h3 class="text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2 line-clamp-2 group-hover:text-blue-600">Processing Receipts with Ledger and Claude Code</h3><p class="text-gray-600 dark:text-gray-400 text-sm line-clamp-3 mb-2">Automate your receipt processing and bookkeeping with a scanner and Claude Code to maintain accurate financial records with minimal effort.</p></div><div class="mt-4 flex items-center justify-around border-t border-gray-100 pt-3 text-sm text-gray-500 dark:border-gray-800 dark:text-gray-400"><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub replies"><span aria-hidden="true">↩</span><span>0 Replies</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub boosts"><span aria-hidden="true">↻</span><span>0 Boosts</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub likes"><span aria-hidden="true">♡</span><span>0 Likes</span></span></div></div></a></article><article class="flex h-full flex-col bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition-shadow"><a href="/posts/better-display" class="flex h-full flex-col"><div class="relative aspect-video bg-gray-200 dark:bg-gray-700"><img src="/media/posts/better-display/better-display-cover.png" alt="Switching monitor sources with BetterDisplay" class="w-full h-full object-cover"/><div class="absolute top-3 right-3 bg-black/70 text-white text-xs px-2 py-1 rounded">Jan 6, 2025</div></div><div class="flex flex-1 flex-col p-4"><div class="flex-1"><h3 class="text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2 line-clamp-2 group-hover:text-blue-600">Switching monitor sources with BetterDisplay</h3><p class="text-gray-600 dark:text-gray-400 text-sm line-clamp-3 mb-2">The ability to change inputs source with a key stroke has been wonderful. Thank you BetterDisplay</p></div><div class="mt-4 flex items-center justify-around border-t border-gray-100 pt-3 text-sm text-gray-500 dark:border-gray-800 dark:text-gray-400"><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub replies"><span aria-hidden="true">↩</span><span>0 Replies</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub boosts"><span aria-hidden="true">↻</span><span>0 Boosts</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub likes"><span aria-hidden="true">♡</span><span>0 Likes</span></span></div></div></a></article><article class="flex h-full flex-col bg-white dark:bg-gray-800 rounded-lg overflow-hidden shadow-md hover:shadow-lg transition-shadow"><a href="/posts/dont-explain" class="flex h-full flex-col"><div class="relative aspect-video bg-gray-200 dark:bg-gray-700"><img src="/media/posts/dont-explain/dont-explain.png" alt="Don&#39;t Explain" class="w-full h-full object-cover"/><div class="absolute top-3 right-3 bg-black/70 text-white text-xs px-2 py-1 rounded">Oct 18, 2022</div></div><div class="flex flex-1 flex-col p-4"><div class="flex-1"><h3 class="text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2 line-clamp-2 group-hover:text-blue-600">Don&#39;t Explain</h3><p class="text-gray-600 dark:text-gray-400 text-sm line-clamp-3 mb-2">When you explain your decisions to people, you leave yourself open to their counter arguments.</p></div><div class="mt-4 flex items-center justify-around border-t border-gray-100 pt-3 text-sm text-gray-500 dark:border-gray-800 dark:text-gray-400"><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub replies"><span aria-hidden="true">↩</span><span>0 Replies</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub boosts"><span aria-hidden="true">↻</span><span>0 Boosts</span></span><span class="inline-flex items-center gap-2" aria-label="0 ActivityPub likes"><span aria-hidden="true">♡</span><span>0 Likes</span></span></div></div></a></article></div></section></main><footer class="bg-white border-t dark:bg-gray-800 dark:border-gray-700"><div class="max-w-6xl mx-auto px-4 py-6 text-center text-gray-500 dark:text-gray-400 text-sm"><nav aria-label="Footer navigation" class="mb-3 flex justify-center gap-6"><a href="/articles" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100">Articles</a><a href="/feed" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100">Feed</a><a href="/about" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100">About</a></nav><p>© 2026 Erik Craddock</p></div></footer><script>
(function() {
  var lightIcon = document.getElementById('theme-toggle-light-icon');
  var darkIcon = document.getElementById('theme-toggle-dark-icon');
  var toggle = document.getElementById('theme-toggle');
  
  function updateIcons() {
    if (document.documentElement.classList.contains('dark')) {
      lightIcon.classList.remove('hidden');
      darkIcon.classList.add('hidden');
    } else {
      lightIcon.classList.add('hidden');
      darkIcon.classList.remove('hidden');
    }
  }
  
  updateIcons();
  
  toggle.addEventListener('click', function() {
    document.documentElement.classList.toggle('dark');
    var isDark = document.documentElement.classList.contains('dark');
    localStorage.setItem('theme', isDark ? 'dark' : 'light');
    updateIcons();
  });
  
  // Listen for system preference changes
  window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) {
    if (!localStorage.getItem('theme')) {
      if (e.matches) {
        document.documentElement.classList.add('dark');
      } else {
        document.documentElement.classList.remove('dark');
      }
      updateIcons();
    }
  });
})();
</script></body></html>