<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AdamFortuna.com</title>
	<atom:link href="https://adamfortuna.com/feed" rel="self" type="application/rss+xml" />
	<link>https://adamfortuna.com</link>
	<description>Exploring the intersection of minimalism, mindfulness and technology.</description>
	<lastBuildDate>Fri, 13 Mar 2026 22:23:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>How to Be a Wizard: AI-Assisted Coding and the Art of Leverage</title>
		<link>https://adamfortuna.com/how-to-be-a-wizard</link>
					<comments>https://adamfortuna.com/how-to-be-a-wizard#comments</comments>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Fri, 13 Mar 2026 22:20:38 +0000</pubDate>
				<category><![CDATA[Adam Fortuna]]></category>
		<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Betterment]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[dev]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=20023</guid>

					<description><![CDATA[A few thoughts on coding in the year of our LLM, 2026.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="900" height="900" src="https://af-wordpress.storage.googleapis.com/uploads/2026/02/08213050/photo_2026-02-08-14.30.35-900x900.jpeg" alt="" class="wp-image-20024" srcset="https://af-wordpress.storage.googleapis.com/uploads/2026/02/08213050/photo_2026-02-08-14.30.35-900x900.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2026/02/08213050/photo_2026-02-08-14.30.35-300x300.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2026/02/08213050/photo_2026-02-08-14.30.35-150x150.jpeg 150w, https://af-wordpress.storage.googleapis.com/uploads/2026/02/08213050/photo_2026-02-08-14.30.35-768x768.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2026/02/08213050/photo_2026-02-08-14.30.35.jpeg 1024w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p>I always play a wizard.</p>



<p>Back in the 1990s I loved Diablo. I played it through as a Warrior, a Rogue and a Sorcerer. After trying out each path (<em>and getting some not-so-legit items from others on BattleNet</em>), I realized wizards were the way to go. I could clear an entire room in seconds &#8211; or die spectacularly fast.</p>



<p>Using a Staff of Apocalypse, I&#8217;d hit all enemies on the screen at once. Later on, I  played through Ragnarok Online as a Wizard. Then Skyrim. If I wasn&#8217;t a wizard, I was a rogue &#8211; switching MP for arrows but keeping a distance from my enemies.</p>



<p>I&#8217;ve always been drawn to glass cannons. Wizards are optimized for dealing damage. They&#8217;re frail. They can be taken down easily. But when used right? They&#8217;re a powerhouse.</p>



<p>I&#8217;ve kind of applied the same mindset to my career.</p>



<p>I optimize for being as productive as possible — using whatever tools enable this. That philosophy led me through PHP, ColdFusion, jQuery, WordPress, Ruby, and for the last 20 years, Ruby on Rails. Each was the most powerful spell available at the time that I knew of.</p>



<p>More recently, the biggest upgrade to my damage output has been <strong>AI-assisted coding with Claude Code</strong>.</p>



<h2 class="wp-block-heading">Leveling Up: The Spellbook Gets Thicker</h2>



<p>Most of the senior developers I&#8217;ve worked with spend time polishing their tools. They setup keyboards, custom shortcuts, and tweak their code editor in a way where they can maximize their focused time.</p>



<p>This ranges from the tools we choose (<em>languages and frameworks</em>), to the software we write in (<em>code editors, docker</em>), and more recently to how we leverage AI to write faster (<em>LLM models, agents</em>).</p>



<p>Each level of abstraction take a step back from tweaking bits and bytes. Improved languages and frameworks led to a major increase in what we could do in single coding session. </p>



<p>That&#8217;s a measurement I&#8217;ve never thought about, but it becomes more clear the more you can do in less time.</p>



<p>Writing <strong>jQuery</strong> was loads faster than writing all of that pure JS DOM code.</p>



<p>Creating a basic application in <strong>Rails</strong>, complete with it&#8217;s conventions, allowed for setting up an app with fewer decisions and get to creation that much faster.</p>



<p>And now with <strong>Claude Code</strong>, languages and frameworks are mostly abstractions. I am still in the &#8220;mostly look over the code it writes&#8221; phase of AI coding, but I suspect it&#8217;s only a matter of time before that domino falls and I&#8217;m shipping (more) code to production without human eyes.</p>



<p>Each of these jumps in productivity felt like a <strong>level up</strong>. Like I&#8217;d invested in a new skill path, unlocked a new ability and everything was smoother.</p>



<h2 class="wp-block-heading">Recent Dungeons</h2>



<p>The last few months, since around the beginning of December 2025 when Anthropic released the Opus 4.5 model, have felt <em>different</em>. It&#8217;s no longer a question to me if I&#8217;ll be more productive with LLM-assisted coding. It&#8217;s <em>how much more</em> productive I&#8217;ll be.</p>



<p>My LLM experience isn&#8217;t too different from most developers. I started by asking ChatGPT some questions in 2023ish. By 2024 I&#8217;d tried out Cursor a bit. By July 2025 I was using Claude Code. Over a weekend I built out a prototype of the Community features on Hardcover that I&#8217;d been dreaming of. The code wasn&#8217;t the greatest, and neither were my systems at the time. It was a throwaway branch, but it showed me what was possible.</p>



<p>Fast forward to December 2025 and the tools, along with my ability to work with them, have improved. I&#8217;ve <a href="/projects">launched a bunch of things</a> in only a few short months.</p>



<p><strong>Often what would take a week of work can now be done in an evening. </strong></p>



<p>Each of these projects would have taken longer without AI assistance. Some might not have happened at all — the activation energy would have been too high. The change to this blog (from static to dynamic) had been on my mind to do for MONTHS, and I wrapped it up in an afternoon while watching Netflix.</p>



<p>That ability to <strong>finally execute on those open loops</strong> in my head have been a welcomed relief. Sure, I would&#8217;ve been able to do any of the above. But they would have taken significantly more time, and involved much more frustration. </p>



<p>In the time it would previously take to research how to do something, LLMs can propose and implement a solution.</p>



<h2 class="wp-block-heading">Glass Cannon Problems</h2>



<p>But here&#8217;s the thing about wizards: they&#8217;re fragile.</p>



<p>Optimizing for maximum damage output means accepting real vulnerabilities. The same is true for leaning hard into AI-assisted coding:</p>



<p>If you can&#8217;t write a for-loop without AI anymore, that&#8217;s a problem. High-level wizards sometimes forget their cantrips. The basics still matter when the magic fails.</p>



<p>AI is confident. It writes code that <em>looks</em> correct. But hallucinated APIs, deprecated methods, subtle logic bugs — the illusion of correctness is dangerous. You&#8217;re responsible for code you ship, even if you didn&#8217;t write every line.</p>



<p>Granting AI access to your systems is summoning power you don&#8217;t fully control. A misconfigured agent could delete a production database. Could leak customer data. Your creations can turn against you.</p>



<p>Wizards without mana are just squishy people with sticks. If Claude goes down, Anthropic rate-limits you, or your API budget runs dry mid-sprint — suddenly you&#8217;re coding at half speed. What&#8217;s your fallback?</p>



<p>The classic trope: power changes you. I&#8217;ve noticed I spend more time <strong>preparing</strong> to code and <strong>reviewing</strong> code than actually writing it. There&#8217;s a risk of losing the joy of crafting code yourself. Of becoming a code reviewer instead of a coder.</p>



<p>AoE spells hit your own party. AI &#8220;helping&#8221; by refactoring things you didn&#8217;t ask it to touch. Cascading changes. The blast radius of a powerful tool wielded imprecisely.</p>



<h2 class="wp-block-heading">Solo Leveling Your AI Skills</h2>



<p>In <strong>Solo Leveling</strong> (the anime), Sung Jin-Woo doesn&#8217;t start as the strongest hunter. He&#8217;s E-rank. Weak. But he gets access to a system — a way to grind, to level up, to become something more.</p>



<p>Learning to use AI tools effectively is the same grind.</p>



<p>You don&#8217;t install Claude Code and immediately ship 10x faster. You:<br>&#8211; Learn what it&#8217;s good at (and what it hallucinates)<br>&#8211; Build intuition for prompt crafting<br>&#8211; Develop review habits that catch bugs<br>&#8211; Figure out when to use it vs. when to just write the code yourself</p>



<p>Every project is a dungeon. Every bug is XP. There&#8217;s no shortcut to S-rank.</p>



<p>One of my favorite fun fantasy books is <a href="https://hardcover.app/books/off-to-be-the-wizard">Off to Be the Wizard</a>. It&#8217;s about normal guy who figures out how to tweak reality; which somehow leads him back in time to the middle ages where he pretends to be a wizard.</p>



<p>Likewise, even having access to reality-warping &#8220;magic&#8221;, it takes practice and imagination to use it. We&#8217;re in the same place now with LLMs, where it&#8217;s unclear what the ceiling will be in what these systems can create.</p>



<h2 class="wp-block-heading">The Tower Spirit</h2>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>SPOILERS for Rhythm of War (Stormlight Archive Book 4)</strong> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>If the wizard metaphor doesn&#8217;t resonate, here&#8217;s another frame for fantasy readers:</p>



<p>In Brandon Sanderson&#8217;s Stormlight Archive, there&#8217;s a tower called Urithiru — an ancient, magnificent structure that was dormant for millennia. What awakened it was the Sibling, a spren (a sentient spirit of Intelligence) that bonds with the tower and brings it to life.</p>



<p>The Sibling:</p>



<ul class="wp-block-list">
<li>Controls the tower&#8217;s systems — heating, lighting, defenses</li>



<li>Lay dormant until someone came along who could bond with it</li>



<li>Partners with Navani (a scholar/engineer) to experiment and create new fabrials</li>



<li>Provides capabilities the tower couldn&#8217;t access alone</li>



<li>Still requires a Bondsmith (human) to provide direction and Investiture</li>
</ul>



<p>The parallel writes itself. The AI is the tower spirit. The infrastructure (Mac mini humming under my desk) is Urithiru. And I&#8217;m&#8230; Navani? Experimenting in the tower, trying to figure out what this thing can do, occasionally making breakthroughs that feel like magic.</p>



<p>The delightful absurdity: an ancient, powerful tower spirit&#8230; running on a small aluminum box in a home office.</p>



<h2 class="wp-block-heading">The Disclaimer</h2>



<p>LLMs and AI aren&#8217;t all roses. Most of these models are trained on stolen data (and are running on stolen land using stolen water). The data infused in these models is ill-begotten. They use too much electricity and water, displacing local communities. They take jobs from people by moving what a single person can do. They reproduce artists works, copying skills that took a lifetime of practice. Some companies are pandering to big tech and fascist governments.</p>



<p>And yet those same tools can compress 3 weeks of programming into a single day, <em>already</em>. Time will only make those tools more impactful.</p>



<p>Even as someone who aims to avoid big tech when I can, it&#8217;s hard to ignore the productivity gains available. I&#8217;m ethically split on the subject &#8211; allowing myself to use these tools while knowing it&#8217;ll be a while before these concerns are addressed (if ever).</p>



<h2 class="wp-block-heading">The Spellbook Isn&#8217;t the Wizard</h2>



<p>Anyone can buy a spellbook.</p>



<p>But the wizard is the one who spent time learning to read it. Who knows which spell to cast when. Who understands <strong>why</strong> the incantation works — so when it fails, they can adapt.</p>



<p>It&#8217;s one of the most exciting times ever to be a developer. What we can do is limited by our imaginations and time.</p>



<p>AI is the most powerful spellbook ever written. But having access to it doesn&#8217;t make you a wizard.</p>



<p><strong>You</strong> make you a wizard.</p>



<p>The tools are available. The dungeons are waiting. The only question is: are you ready to try?</p>



<h2 class="wp-block-heading">Related Writings</h2>



<ul class="wp-block-list">
<li><a href="https://ashtom.github.io/agentic-life">Scenes from an Agentic Life</a> by Thomas Dohmke</li>



<li><a href="https://brittanyellich.com/living-in-the-inflection-point/">Living in the Inflection Point</a> by Brittany Ellich</li>



<li><a href="https://cassidoo.co/post/good-brain/">Do not give up your brain</a> by Cassidy Williams</li>



<li><a href="https://localghost.dev/blog/stop-generating-start-thinking/">Stop generating, start thinking</a> by Sophie Koonin</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://adamfortuna.com/how-to-be-a-wizard/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>My 2025 Year in Review</title>
		<link>https://adamfortuna.com/2025-year-in-review</link>
					<comments>https://adamfortuna.com/2025-year-in-review#respond</comments>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Wed, 31 Dec 2025 19:03:50 +0000</pubDate>
				<category><![CDATA[Adam Fortuna]]></category>
		<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Betterment]]></category>
		<category><![CDATA[Highlights]]></category>
		<category><![CDATA[Journal]]></category>
		<category><![CDATA[yearinreview]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=19921</guid>

					<description><![CDATA[New house, new job, new dog, new schedule and staying grounded during a stressful year.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000951/IMG_1898-900x675.jpeg" alt="" class="wp-image-19999" srcset="https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000951/IMG_1898-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000951/IMG_1898-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000951/IMG_1898-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000951/IMG_1898-1536x1152.jpeg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000951/IMG_1898-2048x1536.jpeg 2048w" sizes="(max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Adam and Hoid (Cosmere character) at the WorldHopper Ball at Dragonsteel Nexus 2025</figcaption></figure>



<p>I’ve written a “year in review” post for the last fifteen years. I&nbsp;<a href="https://wp.adamfortuna.com/write-your-year-in-review-post-now">highly recommend you try it</a>. It’s a time capsule that lets you reflect on the past year, appreciate parts of it that were great, and develop a plan for the next year. You can view any of the past 15 years’ posts here:&nbsp;<a href="https://wp.adamfortuna.com/2010-year-review">2010</a>, &nbsp;<a href="https://wp.adamfortuna.com/2011-year-review">2011</a>,&nbsp;&nbsp;<a href="https://wp.adamfortuna.com/2012-year-review">2012</a>,&nbsp;&nbsp;<a href="https://wp.adamfortuna.com/2013-year-review">2013</a>, &nbsp;<a href="https://wp.adamfortuna.com/2014-year-review">2014</a>,&nbsp;&nbsp;<a href="https://wp.adamfortuna.com/2015-year-review">2015</a>,&nbsp;&nbsp;<a href="https://wp.adamfortuna.com/2016-year-review">2016</a>, &nbsp;<a href="https://wp.adamfortuna.com/2017-year-review">2017</a>,&nbsp;&nbsp;<a href="https://wp.adamfortuna.com/2018-year-review">2018</a>,&nbsp;<a href="https://wp.adamfortuna.com/2019-year-review">2019</a>, <a href="https://wp.adamfortuna.com/2020-year-review">2020</a>, <a href="https://wp.adamfortuna.com/2021-year-review">2021</a>, <a href="https://adamfortuna.com/2022-year-in-review">2022</a>, <a href="https://adamfortuna.com/2023-year-in-review">2023</a> and <a href="https://adamfortuna.com/2024-year-in-review" data-type="post" data-id="19714">2024</a>.</p>



<p>There are some years with very few major life changes (2023, I&#8217;m looking at you). 2025 was not one of those years. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>My themes for this year were: <strong>new house, new job (Libro.fm), new dog (Bucky), books, and Hardcover</strong>.</p>



<p>We closed on <strong>our house</strong> just after Christmas 2024. We spent two months fixing it up &#8211; repairing the foundation, adding gutters, new hot water heater, fixing sprinklers, replacing floors, replacing an AC system from the 1980s, and so much more. We moved in on February 24th, a day before our 19-year anniversary! It didn&#8217;t take long for this place to feel like home. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3e1.png" alt="🏡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Since then we&#8217;ve undertaken even more projects – most recently fixing a bricked up fireplace with a gas one and beautiful tile work.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000919/IMG_2046-900x675.jpeg" alt="" class="wp-image-19998" srcset="https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000919/IMG_2046-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000919/IMG_2046-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000919/IMG_2046-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000919/IMG_2046-1536x1152.jpeg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30000919/IMG_2046-2048x1536.jpeg 2048w" sizes="(max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Our cozy living room with our new fireplace and Christmas tree.</figcaption></figure>



<p>A few years earlier, back in 2022 or so, I started realizing that we wouldn&#8217;t be able to live this &#8220;retired&#8221; life forever –&nbsp;unless we wanted to lower our expenses to a level beyond the life we&#8217;d want. In February, a post came up on <a href="https://bsky.app/profile/adamfortuna.com">my BlueSky</a> feed for a Ruby on Rails <strong>role at <a href="https://libro.fm/">Libro.fm</a></strong> that made me curious. Initially I planned to not have a job this year, and spend it working on <a href="https://hardcover.app/">Hardcover</a>. But the timing, combined with us spending a million dollars (<em>only a slight exaggeration</em>) on the new place, combined with rising prices, and an unknown political environment and stock market meant it felt like the right time to have a job. <em>(related: <a href="https://minafi.com/why-we-traded-stocks-for-a-house">Why We Traded Stocks for a House Seven Years Into FIRE</a>, <a href="https://minafi.com/why-i-went-back-to-work-after-6-years-of-early-retirement">Why I Went Back to Work After 6 Years of Early Retirement</a>)</em></p>



<p>In 2024 I started getting allergy shots with the hope that we could <strong>adopt a dog</strong>. In May 2025 things fell into place and we adopted Bucky! He&#8217;s 50 pound black golden doodle that absolutely loves us (and we love him!). He&#8217;s a quiet boy who loves car rides, needs constant attention and gets along well with our friends dogs –&nbsp;and even has a crush on one of them.</p>



<p>2025 marked 4 years of working on <strong>Hardcover</strong>. We grew from 23k users to 59k users &#8211; another 140%+ growth year! I was worried that when I got a job things would slow down, but somehow things have continued to speed up. I brought on 22 new part-time team members to fill in the gap and keep the project active –&nbsp;15 of them have stuck around. I <a href="https://hardcover.app/blog/part-1-how-we-fell-out-of-love-with-next-js-and-back-in-love-with-ruby-on-rails-inertia-js">wrote a blog post</a> that went wildly viral. We migrated from Next.js to Ruby on Rails, converted to Kubernetes to autoscale, and launched a bunch of things (including Hardcover Wrapped <em>today</em>).</p>



<p>There were areas this year that <em>didn&#8217;t go great</em>. Besides the obvious politics, Ukraine and Palestine, I&#8217;ve been dealing with <strong>anxiety</strong>, struggling with <strong>physical health</strong>, spending entirely too much time <strong>doom scrolling</strong> and not enough time learning &amp; exploring. I feel most healthy when my mind and body are exercised.</p>



<p>All of this change at once, along with a very packed schedule, and well everything else (<em>*waves hands dramatically*</em>) brought up something I haven&#8217;t experienced in a long time &#8211; <strong>anxiety</strong>. The addition of a job, switching from an apartment to a house (with all the maintenance involved), adopting a dog, and trying to keep Hardcover growing has <em>not</em> been easy. I even had my first anxiety attack! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f631.png" alt="😱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> That was months ago and fortunately hasn&#8217;t been recurring. I&#8217;m very grateful to have a partner who I&#8217;ve talked through things with and be very supportive.</p>



<p>After spending 6-month of 2024 working with an online personal trainer, tracking every calorie I ate and losing 20 pounds, this year I gained it all back and more. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f62d.png" alt="😭" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I&#8217;m still figuring out what my <strong>fitness regime</strong> looks like while fitting it into my schedule. Currently that means going to the gym MWF &#8211; but I&#8217;ve struggled to add in cardio in a way that sticks. This is a work in progress for now.</p>



<p>With everything happening in the news this year, there have been times I&#8217;ve fallen down the news rabbit hole, leading to entirely too much time <strong>doom scrolling</strong>. I alternated between wanting to just <em>do something</em>, and trying to figure out what I can <em>actually</em> do. Whenever I protest or join other local events I feel that energy magnified 10,000x. More recently I&#8217;ve cut out all THC &#8211; which has led to less doom scrolling and more journaling.</p>



<h2 class="wp-block-heading">My 2025 Month By Month</h2>



<p>A few years ago, I started doing a monthly breakdown. I love being able to look back and see what I thought was most important each month.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="720" height="405" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21222446/56BA4CA8-C9DC-4CE8-B510-4E38F219E06B.jpeg" alt="" class="wp-image-19972" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21222446/56BA4CA8-C9DC-4CE8-B510-4E38F219E06B.jpeg 720w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21222446/56BA4CA8-C9DC-4CE8-B510-4E38F219E06B-300x169.jpeg 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /><figcaption class="wp-element-caption">Our first meal in the new house: champagne, burger king and Little Ceasers. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></figcaption></figure>



<p><strong>January</strong>: Sundance Film Festival, preparing the house for foundation work (removing deck, rerouting HVAC in basement), new gutters, tree trimming and various other house work. First concert for a friend (as the headliner!). Started moving some things over to the house.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21222040/5CB9687F-4F15-41FD-8840-71471FC04930_1_105_c-900x675.jpeg" alt="" class="wp-image-19970" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21222040/5CB9687F-4F15-41FD-8840-71471FC04930_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21222040/5CB9687F-4F15-41FD-8840-71471FC04930_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21222040/5CB9687F-4F15-41FD-8840-71471FC04930_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21222040/5CB9687F-4F15-41FD-8840-71471FC04930_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">New office on day I set it up</figcaption></figure>



<p><strong>February</strong>: Moved from our apartment to the new house! Joined the Wasatch Coop. 19 year anniversary with Marilyn.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221818/BEC5184B-221D-4F1A-9AE0-EDD6F918BA8E_1_105_c-900x675.jpeg" alt="" class="wp-image-19969" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221818/BEC5184B-221D-4F1A-9AE0-EDD6F918BA8E_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221818/BEC5184B-221D-4F1A-9AE0-EDD6F918BA8E_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221818/BEC5184B-221D-4F1A-9AE0-EDD6F918BA8E_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221818/BEC5184B-221D-4F1A-9AE0-EDD6F918BA8E_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">A mini excavator installing 65ft metal rods down to the stone below to hold our house up.</figcaption></figure>



<p><strong>March</strong>: Oscar party (it can still be a party with just 2 people right?), Final Fantasy VII Rebirth, interviewing at Libro.fm, working on Hardcover in new house. Epic Web Conference and Web Developer Challenge: Bad video player (<a href="https://birdcatcher.adamfortuna.com/">my submission</a>!). Foundation repair (7 days!).</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221224/110E8D73-32BB-466F-8734-FBEE3DE20DA2_1_105_c-900x675.jpeg" alt="" class="wp-image-19968" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221224/110E8D73-32BB-466F-8734-FBEE3DE20DA2_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221224/110E8D73-32BB-466F-8734-FBEE3DE20DA2_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221224/110E8D73-32BB-466F-8734-FBEE3DE20DA2_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21221224/110E8D73-32BB-466F-8734-FBEE3DE20DA2_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Enjoying the cherry blossoms in full bloom.</figcaption></figure>



<p><strong>April</strong>: Cherry Blossoms picnic at the Utah Capital (hanami). Alton Brown live. Started at Libro.fm. On my 2nd day I flew to Denver for their yearly offsite! New floor installation in 2 rooms. Watching friends dogs. Meow Wolf Denver (2nd time!).</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220916/48E1F102-5F6B-4C4B-9B9B-FEE60CA1F3CF_1_105_c-900x675.jpeg" alt="" class="wp-image-19967" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220916/48E1F102-5F6B-4C4B-9B9B-FEE60CA1F3CF_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220916/48E1F102-5F6B-4C4B-9B9B-FEE60CA1F3CF_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220916/48E1F102-5F6B-4C4B-9B9B-FEE60CA1F3CF_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220916/48E1F102-5F6B-4C4B-9B9B-FEE60CA1F3CF_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Eurovision + my birthday party with friends!</figcaption></figure>



<p><strong>May</strong>: Eurovision 2025! My birthday! Rilo Kiley at Kilby Court! Spirited Away at a Sushi restaurant with many courses! Adopting Bucky! (all of those deserve exclamation points <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" />). Bees game with friends.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220430/CA0AE671-DF03-41E5-944A-721EA255BED8_1_105_c-900x675.jpeg" alt="" class="wp-image-19965" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220430/CA0AE671-DF03-41E5-944A-721EA255BED8_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220430/CA0AE671-DF03-41E5-944A-721EA255BED8_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220430/CA0AE671-DF03-41E5-944A-721EA255BED8_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220430/CA0AE671-DF03-41E5-944A-721EA255BED8_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Us at the Pride parade trying to stay cool</figcaption></figure>



<p><strong>June</strong>: Hired 22 new people to Hardcover (!). British Field Day at Liberty Park. Pride Parade. Salt Con Board Game convention. Goonies live with Sean Astin. Sip &amp; Script (where I was the only guy).</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220009/64DE2C46-4CA0-4DAA-9E31-DB8621C15EBA_1_105_c-900x675.jpeg" alt="" class="wp-image-19964" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220009/64DE2C46-4CA0-4DAA-9E31-DB8621C15EBA_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220009/64DE2C46-4CA0-4DAA-9E31-DB8621C15EBA_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220009/64DE2C46-4CA0-4DAA-9E31-DB8621C15EBA_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21220009/64DE2C46-4CA0-4DAA-9E31-DB8621C15EBA_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Seeing Lady Gaga live was a bucket list item.</figcaption></figure>



<p><strong>July</strong>: Fourth of July Camping Trip with friends, Las Vegas trip to see Lady Gaga and O (Cirque show), Peking duck at Jasmine @ the Belagio, Pioneer Day Parade.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215729/D2732821-3909-4E87-808A-CCC720F7CDFA_1_105_c-900x675.jpeg" alt="" class="wp-image-19963" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215729/D2732821-3909-4E87-808A-CCC720F7CDFA_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215729/D2732821-3909-4E87-808A-CCC720F7CDFA_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215729/D2732821-3909-4E87-808A-CCC720F7CDFA_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215729/D2732821-3909-4E87-808A-CCC720F7CDFA_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Dressed up for Bike Prom with friends.</figcaption></figure>



<p><strong>August</strong>: Marilyns Birthday party, My Morning Jacket concert, Nine Inch Nails concert, Bike Prom.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215528/130C14D2-70C8-4B77-99E1-E8E0CE4F2757_1_105_c-900x675.jpeg" alt="" class="wp-image-19962" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215528/130C14D2-70C8-4B77-99E1-E8E0CE4F2757_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215528/130C14D2-70C8-4B77-99E1-E8E0CE4F2757_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215528/130C14D2-70C8-4B77-99E1-E8E0CE4F2757_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21215528/130C14D2-70C8-4B77-99E1-E8E0CE4F2757_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Adam working a Libro.fm booth in Spokane, WA.</figcaption></figure>



<p><strong>September</strong>: Japanese Breakfast concert, OK Go concert, FanX SLC, Running a Libro.fm booth at a bookseller convention.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214017/5CADB10A-4D76-43CB-B406-7AD2E8DE00B7_1_105_c-900x675.jpeg" alt="" class="wp-image-19957" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214017/5CADB10A-4D76-43CB-B406-7AD2E8DE00B7_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214017/5CADB10A-4D76-43CB-B406-7AD2E8DE00B7_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214017/5CADB10A-4D76-43CB-B406-7AD2E8DE00B7_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214017/5CADB10A-4D76-43CB-B406-7AD2E8DE00B7_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Marilyn, Bucky and Adam dressed up as Princess Donut, Mongo and Carl</figcaption></figure>



<p><strong>October</strong>: Dressed up for Halloween (Dungeon Crawler Carl themed of course), Sarah Millican comedy show, Hardcover migration to Kubernetes.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214506/69EF4D50-69D0-4FD3-AE05-6292AC88E03A_1_105_c-900x675.jpeg" alt="" class="wp-image-19959" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214506/69EF4D50-69D0-4FD3-AE05-6292AC88E03A_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214506/69EF4D50-69D0-4FD3-AE05-6292AC88E03A_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214506/69EF4D50-69D0-4FD3-AE05-6292AC88E03A_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214506/69EF4D50-69D0-4FD3-AE05-6292AC88E03A_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Our new table and chairs setup for Thanksgiving</figcaption></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1440" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214723/adam_dr-1-scaled.jpg" alt="" class="wp-image-19961" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214723/adam_dr-1-scaled.jpg 2560w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214723/adam_dr-1-300x169.jpg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214723/adam_dr-1-900x506.jpg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214723/adam_dr-1-768x432.jpg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214723/adam_dr-1-1536x864.jpg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214723/adam_dr-1-2048x1152.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption class="wp-element-caption">Adam walking back after many all-included passion fruit cocktails by the pool</figcaption></figure>



<p><strong>November</strong>: Marilyn&#8217;s cousins wedding in the Dominican Republic, Friendsgiving, Thanksgiving, Distant Worlds Final Fantasy Concert, cold recovery.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="506" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214208/fireplace-900x506.jpg" alt="" class="wp-image-19958" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214208/fireplace-900x506.jpg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214208/fireplace-300x169.jpg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214208/fireplace-768x432.jpg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214208/fireplace-1536x864.jpg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21214208/fireplace-2048x1152.jpg 2048w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Bucky staying wam in front of the fireplace</figcaption></figure>



<p><strong>December</strong>: Redid our fireplace, quit THC, starting using Happy to code from my phone, tons of Hardcover work, Dragonsteel Nexus 2025, Worldhopper Ball, Hardcover Wrapped.</p>



<h2 class="wp-block-heading">Creative Output</h2>



<p>I struggled to find the energy to be as creative as I wanted this year. After 7 years without a job, trying to get back into a schedule where I could work on projects on nights and weekend was a big change.</p>



<p>With that, I still was able to do a few major things this year!</p>



<p>I wrote <strong>23 </strong>blog posts:</p>



<ul class="wp-block-list">
<li>6 on AdamFortuna.com</li>



<li>3 on Minafi</li>



<li>14 on Hardcover</li>
</ul>



<p>Most of my creative side went towards <strong>Hardcover</strong>. In January we released the <a href="https://hardcover.app/2024">Hardcover 2024 Year in Books</a> &#8211; removing all AI.</p>



<p><strong>AdamFortuna.com</strong> &#8211; In January, I migrated the site from Next.js and Vercel to Astro on Netlify. <a href="https://github.com/adamfortuna/adamfortuna-astro">Code is available</a>.</p>



<p>At the <strong>Epic Web Convention</strong> in March, CodeTV recorded an episode on the theme <a href="https://codetv.dev/series/web-dev-challenge/s2/e3-worst-video-player">Build the Most Devious Video Player</a>. My team built a player that hit a missing niche &#8211; <a href="https://birdcatcher.adamfortuna.com/">brid theming</a>. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f426.png" alt="🐦" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>In March, we fully moved Hardcover away from <strong>Next.js and to Ruby on Rails</strong>. A <a href="https://hardcover.app/blog/part-1-how-we-fell-out-of-love-with-next-js-and-back-in-love-with-ruby-on-rails-inertia-js">blog post I wrote about the migration</a> went viral &#8211; bringing in 60k+ views and being shared on a bunch of tech newsletter. It resulted in nearly no new users (but a few links back that could help with SEO).</p>



<p>I&#8217;d been trying AI coding tools over the years. I used Chat GPT to brainstorm solutions to things I was working on. I used Cursor for some of the Next.js to Rails migration. But around July 2025 I started using <strong><a href="https://claude.com/product/claude-code">Claude Code</a></strong> which blew my mind <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f92f.png" alt="🤯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I started using it at work, which has allowed me to take on projects I previously wouldn&#8217;t have dared (ex: Python, DevOps, Infra). More recently I&#8217;ve been working on Hardcover issues from my phone using <a href="https://happy.engineering/">Happy</a> along with CloudFlare Dev Tunnels.</p>



<p>The first AI Coding I tried was building out the planned <strong>Hardcover Discussions</strong> feature over a weekend which included Reddit-like discussions, Facebook like groups and Meetup-like events. It was an ambitious first project, but it <em>worked</em> (kind of). It was more of a learning experience for me than anything else. I designed the database tables myself, but most everything else was done by Claude. The worst thing Claude did was deploy it&#8217;s development version I was working on to Production (<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f631.png" alt="😱" class="wp-smiley" style="height: 1em; max-height: 1em;" />) &#8211; which broke Hardcover temporarily until I could figure out what was happening. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Fortunately the migrations only created new tables.</p>



<p>In November, on a whim, I created the <a href="https://hardcover.app/labs/popular-by-month">Hardcover Popular Books by Month Bump Chart</a> to try out the latest Claude model (Opus 4.5). It leveraged a bunch of the existing charting libraries I created manually in D3.js for the Hardcover Stats pages, and was just a fun project.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="501" src="https://af-wordpress.storage.googleapis.com/uploads/2026/01/30003621/Screenshot-2025-12-29-at-5.36.13-PM-900x501.png" alt="" class="wp-image-20007" srcset="https://af-wordpress.storage.googleapis.com/uploads/2026/01/30003621/Screenshot-2025-12-29-at-5.36.13-PM-900x501.png 900w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30003621/Screenshot-2025-12-29-at-5.36.13-PM-300x167.png 300w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30003621/Screenshot-2025-12-29-at-5.36.13-PM-768x428.png 768w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30003621/Screenshot-2025-12-29-at-5.36.13-PM-1536x855.png 1536w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30003621/Screenshot-2025-12-29-at-5.36.13-PM-2048x1140.png 2048w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Hardcover&#8217;s current dashboard</figcaption></figure>



<p>Most of the other projects on Hardcover that I worked on aren&#8217;t the most noteworthy: fixing bugs, improving the experience, making it more smooth and polished. Making continuous small improvements there has set things up for 2026 to be an amazing year.</p>



<h2 class="wp-block-heading">Yearly Favorites</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="506" src="https://af-wordpress.storage.googleapis.com/uploads/2026/01/30004114/20250516_202559-900x506.jpg" alt="" class="wp-image-20008" srcset="https://af-wordpress.storage.googleapis.com/uploads/2026/01/30004114/20250516_202559-900x506.jpg 900w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30004114/20250516_202559-300x169.jpg 300w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30004114/20250516_202559-768x432.jpg 768w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30004114/20250516_202559-1536x864.jpg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2026/01/30004114/20250516_202559-2048x1152.jpg 2048w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Rilo Kiley at Kilby Court</figcaption></figure>



<p><strong>Favorite concert</strong>: Rilo Kiley! I didn&#8217;t realize how much I binged this band&#8217;s entire catalog back in the day. I knew every word to every song. So did some of the people around me, which ended up being fun with a group of girls around us starting singing along to &#8220;A Better Son or Daughter&#8221; to each other and making friends.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="675" height="900" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225515/2B784460-8C9C-42A2-8714-1EB8C7D86C6A_1_105_c-675x900.jpeg" alt="" class="wp-image-19979" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225515/2B784460-8C9C-42A2-8714-1EB8C7D86C6A_1_105_c-675x900.jpeg 675w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225515/2B784460-8C9C-42A2-8714-1EB8C7D86C6A_1_105_c-225x300.jpeg 225w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225515/2B784460-8C9C-42A2-8714-1EB8C7D86C6A_1_105_c.jpeg 768w" sizes="auto, (max-width: 675px) 100vw, 675px" /><figcaption class="wp-element-caption">Eating Onigiri with Chihiro</figcaption></figure>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225547/3E380A63-BFC9-4A12-92D4-B2B4297ED411_1_105_c-900x675.jpeg" alt="" class="wp-image-19980" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225547/3E380A63-BFC9-4A12-92D4-B2B4297ED411_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225547/3E380A63-BFC9-4A12-92D4-B2B4297ED411_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225547/3E380A63-BFC9-4A12-92D4-B2B4297ED411_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225547/3E380A63-BFC9-4A12-92D4-B2B4297ED411_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Eating Peking duck with Marilyn in Las Vegas with the Bellagio Fountain show</figcaption></figure>



<p><strong>Favorite meal</strong>: This is a tough one! The Spirited Away themed sushi dinner was incredible and memorable. The peking duck dinner at the Bellagio with the fountain show and cocktails was delicious &#8211; and one I keep thinking about how tasty it was.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225733/18AF74CF-1B3D-40E6-ABC6-995EC5CCBB06_1_105_c-900x675.jpeg" alt="" class="wp-image-19981" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225733/18AF74CF-1B3D-40E6-ABC6-995EC5CCBB06_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225733/18AF74CF-1B3D-40E6-ABC6-995EC5CCBB06_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225733/18AF74CF-1B3D-40E6-ABC6-995EC5CCBB06_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21225733/18AF74CF-1B3D-40E6-ABC6-995EC5CCBB06_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Playing Dune: Imperium on our new board game table</figcaption></figure>



<p><strong>Favorite Board Game</strong>: Dune Imperium: Uprising! We played this for the first time at SaltCon, a local board game convention, and immediately got a copy. It&#8217;s a great combination of engine building, resource management, strategy and battle.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230229/BEEBB628-348C-42B2-84FA-AA9864C8819B_1_105_c-900x675.jpeg" alt="" class="wp-image-19982" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230229/BEEBB628-348C-42B2-84FA-AA9864C8819B_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230229/BEEBB628-348C-42B2-84FA-AA9864C8819B_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230229/BEEBB628-348C-42B2-84FA-AA9864C8819B_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230229/BEEBB628-348C-42B2-84FA-AA9864C8819B_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Playing FFVII Rebirth!</figcaption></figure>



<p><strong>Favorite Video Game</strong>: This is a tough one &#8211; mostly because I haven&#8217;t finished any of the games I&#8217;ve been playing. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I&#8217;m in the middle of Silksong, Final Fantasy VII: Rebirth, Final Fantasy Tactics Remake, Baulders Gate 3, Split Fiction and Celeste –&nbsp;Mario Kart World too in that I haven&#8217;t mastered all the courses. If I had to pick a favorite it&#8217;d probably be FFVII for how it made me feel (Golden Saucer!), with Silksong a close second.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="506" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230552/20251111_130212-900x506.jpg" alt="" class="wp-image-19984" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230552/20251111_130212-900x506.jpg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230552/20251111_130212-300x169.jpg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230552/20251111_130212-768x432.jpg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230552/20251111_130212-1536x864.jpg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230552/20251111_130212-2048x1152.jpg 2048w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>Favorite spot I visited</strong>: After a bunch of travel in 2024 (South Korea, Spain, Portugal), this year we took a bit of a travel break. I love this spot by the beach in the Dominican Republic perhaps the most. </p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230735/4C8BDB0F-6CD7-4C57-8FDD-C5638B8BC3F7_1_102_o-900x675.jpeg" alt="" class="wp-image-19985" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230735/4C8BDB0F-6CD7-4C57-8FDD-C5638B8BC3F7_1_102_o-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230735/4C8BDB0F-6CD7-4C57-8FDD-C5638B8BC3F7_1_102_o-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230735/4C8BDB0F-6CD7-4C57-8FDD-C5638B8BC3F7_1_102_o-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230735/4C8BDB0F-6CD7-4C57-8FDD-C5638B8BC3F7_1_102_o-1536x1152.jpeg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21230735/4C8BDB0F-6CD7-4C57-8FDD-C5638B8BC3F7_1_102_o.jpeg 2048w" sizes="auto, (max-width: 900px) 100vw, 900px" /><figcaption class="wp-element-caption">Watching Eurovision 2025 Live</figcaption></figure>



<p><strong>Favorite Live Event</strong>: Alton Brown&#8217;s live show was a ton of fun, as was the O Cirque show. I think my favorite though was watching Eurovision Live at home &#8211; with a dozen or more friends and a bunch of tiny flags.</p>



<p><strong>Favorite Movies</strong>: I was not great at keeping track of what I watched. A few I remember include: Kiss of the Spider Woman (2025), Sinners, Smile. I kept track of the <a href="https://letterboxd.com/adamfortuna/list/sundance-2025/">ones I watched at Sundance 2025</a>.</p>



<p><strong>Favorite Shows</strong>: Andor S2, Pluribus S1, Adolescence, Severance S2, The Pitt S1, The Gilded Age S3, Paradise S1, Murderbot S1, Only Murders in the Building S5, Star Trek Strange New Worlds S3, White Lotus S3, The Residence S1 &#8211; and one of my unexpected favorites of the year: <strong>Bon Appetit, Your Majesty</strong> S1 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><strong>Favorite Books</strong>: I put together a <a href="https://hardcover.app/@adam/lists/favorite-reads-of-2025">list of my favorites this year</a>. My top 5: Dungeon Crawler Carl (#1 of 7 in Dungeon Crawler Carl), A Drop of Corruption (#2 of 2 in Shadow of the Leviathan), The Eye of the Bedlam Bride (#6 of 7 in Dungeon Crawler Carl), Wind and Truth (#5 of 5 in The Stormlight Archive), Part of Your World (#1 of 3 in Part of Your World). I started reading romance this year, and it&#8217;s been a welcomed escape.</p>



<p><strong>Favorite new programming discovery</strong>: Claude Code, for sure. For months my wife thought I was saying &#8220;clawed code&#8221;, which makes me smile whenever I think about. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f980.png" alt="🦀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><strong>Favorite Project</strong>: Getting completely off Next.js and Vercel for all projects. The <a href="https://hardcover.app/labs/popular-by-month">Popular Books by Month Bump Chart</a> is the kind of fun labs project I want to do more of. Hardcover Wrapped.</p>



<p><strong>Favorite Course or Education Experience</strong>: To prepare for some projects we have planned on Hardcover, I&#8217;ve been going through courses on <a href="https://www.deeplearning.ai/">DeepLearning.ai</a>. I&#8217;d watched courses by the main instructor on Coursera back in the day, and so far it&#8217;s been useful. Although lately learning has been more focused on using Claude Code as a collaborator and describing what I want then looking the results.</p>



<h2 class="wp-block-heading">How’d I Do On My 2024 Resolutions?</h2>



<p>I didn&#8217;t do a great job of journaling throughout the year &#8211; which is when I usually review these and see if I&#8217;m on track. Looking at them now might be the first time I&#8217;ve checked on them in months, or even since I wrote them. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Create a Hygge Home</strong> &#8211; Well, I&#8217;m writing this from our living room with a fire going next to me, a Christmas tree sparkling nearby, a cosy board gaming table that invites us to play more, and lots of candles. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f56f.png" alt="🕯" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Play lots of games (board and video)</strong> &#8211; Somehow I hit this one! I could&#8217;ve played more of both, but I played lots, and more than 2024 for sure. Fortunately I didn&#8217;t make a resolution to <em>finish</em> games.</p>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Welcome a dog</strong> &#8211; In May we adopted Bucky who is the bestest boy. He&#8217;s laying tummy up next to me right now.</p>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f536.png" alt="🔶" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Write at least one post here a month</strong> &#8211; I wrote 9 non-Hardcover blog posts (10 if you include this one). That&#8217;s pretty close to my target of 12. I think if I had written more it would have balanced out my anxiety more.</p>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Work on a side project (tech-specific)</strong> &#8211; Aside from a one-day hack project, and converting this site to Astro, I didn&#8217;t have any other non-Hardcover projects. I do have something I&#8217;d like to do in 2026 though, and using LLMs could enable it&#8217;s development much faster.</p>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Continue learning Japanese</strong> &#8211; I didn&#8217;t pick this one up <em>at all</em>. Without a clear goal in mind I haven&#8217;t felt the urge to do this. For now I&#8217;m going to put this one on the sidelines.</p>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Continue enjoying fitness</strong> &#8211; Our new place is within walking distance from a gym, which led to 80 visits in 2025. I didn&#8217;t get into a good Peloton or cardio habit this year, but I&#8217;ve recently been jumping on more often.</p>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f536.png" alt="🔶" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Grow Hardcover to ramen profitability</strong> &#8211; My hope was to grow income to where it&#8217;d pay it&#8217;s bills <em>and</em> some of mine. We didn&#8217;t make it to that point, but it is generating more income than we spend! Things are moving in the right direction.</p>



<p>4 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" />, 2 <strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f536.png" alt="🔶" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong>, 2 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> &#8211; that&#8217;s not bad!</p>



<h2 class="wp-block-heading">What’s Next for 2026?</h2>



<p>Some years I&#8217;ve done monthly themes, sometimes start-stop-continue. This time I&#8217;m setting goals based on things I think I can accomplish, and if I complete them (or even work towards them) they&#8217;ll improve my life.</p>



<p><strong>Cook meals from cookbooks often</strong> &#8211; A lot of this year was spent adjusting to new routines, which left little time for meal planning. That often meant throwing something together at the last minute. We have a number of cookbooks with recipes I&#8217;d love to make from a variety of cuisines. I&#8217;m planning to start the year by setting a theme per month (a cookbook) and trying to create a few recipes out of it each month.</p>



<p><strong>Create and launch the new Line Of Thought App</strong> &#8211; I have an idea for an app I want to build that&#8217;ll be on iOS and Apple Watch, and NOT have a backend component. This app would be entirely on the app, which is a different paradigm than I&#8217;m used to. My incentive to build this is just for me to use it, but I&#8217;d also like to learn a bit about iOS development while I&#8217;m at it. This will be a new experience using Claude Code and Swift.</p>



<p><strong>Continue staying off social media</strong> &#8211; For December I&#8217;ve largely stayed off social media. I got on Reddit for a short time (when /r/suggestmeabook <a href="https://www.reddit.com/r/suggestmeabook/comments/1pp0dyx/mod_announcement_weve_implemented_a_new_version/?share_id=isHk_tPaxYNAy956RxFDp&amp;utm_name=androidcss">announced they were going to use Hardcover for book data</a>!), but the time on there didn&#8217;t feel like it was improving my day. I&#8217;d like to completely stay off any short form video content, and mostly off Reddit.</p>



<p><strong>Deepen my marriage &amp; relationship with my wife</strong> &#8211; This last year was a busy one. Between everything with the house, dog, job and schedule we didn&#8217;t have as much time to be around each other as the previous few years. I want to set more time aside to slow down and make sure we&#8217;re being good partners. Right now I&#8217;m thinking about topics we learned from <a href="https://www.gottman.com/">Gottman training</a> we attended a few years ago –&nbsp;like a state of the union discussion, and taking time to sit down and discuss plans.</p>



<p><strong>Read more books</strong> &#8211; It&#8217;s hard to replace social media unless you have something to switch to. In my case that&#8217;s reading more books. I have a Kobo Libra Color that I love, along with a BUNCH of physical books. There are some Hardcover integrations I want to try running a calibre server too. The main time I want to read more is in the morning –&nbsp;staying of my phone and picking up a book instead.</p>



<p><strong>Improve my online workflow an AI assistant</strong> &#8211; As I&#8217;ve gotten more into Claude Code and using LLMs for coding, I&#8217;m realizing that for just about everything I do online, coding is the bottleneck &#8211; but it no longer needs to be. With better AI-assisted processes, these bottlenecks should be me <em>reviewing</em> code, not writing it. Turning ideas into code is easy. Iterating those into products is the step AI&#8217;s can&#8217;t do (or at least, not without getting additional inputs from <em>somewhere</em>). I&#8217;ve been reading about systems like <a href="https://github.com/danielmiessler/Personal_AI_Infrastructure">PAI</a> for organizing this on a personal level that I&#8217;d like to try.</p>



<p><strong>Get into a cardio routine</strong> &#8211; I have my gym routine down, but not so much my cardio routine. Lately I&#8217;ve enjoyed riding the Peloton more often, and want to figure out a schedule that I can stick to and not be overwhelmed by. I have a few spots in my schedule I want to try this, with the hope some will stick.</p>



<p><strong>Get digitally organized</strong> &#8211; Over the years I&#8217;ve let my very organized life slip more and more. Now I have photos that aren&#8217;t backed up, notes spread across 4 different platforms, 0kb files locally that are artifacts of a botched Dropbox sync and more. I&#8217;d like to clean things up, improve backup strategies locally and in the cloud and embrace Obsidian for organization.</p>



<p><strong>Create a Community on Hardcover</strong> &#8211; For a social media site, Hardcover has very few community features. We&#8217;ve pushed the biggest social aspects to get the foundation right, and keep the community on Discord. I have a big goal in mind for this project, and it&#8217;s the one I&#8217;m most looking forward to this year. We&#8217;ve talked to dozens of users, done surveys, talked to users on Discord, prototyped pages – we know what we want to build, we just have to do it.</p>



<p><strong>Practice being present without improving anything</strong> &#8211; I want to regularly do things that don’t improve me, scale, or ship. This can mean aimless walks with Bucky, board games or video games without the stress of finishing, meditating, or other things that have no specific goal in mind.</p>



<h2 class="wp-block-heading">Thanks for Reading!</h2>



<p>Whew that&#8217;s 3,593 words, 30% longer than last year. I suspect it&#8217;s because I haven&#8217;t written much this year I&#8217;m making up for it now. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Adam</p>
]]></content:encoded>
					
					<wfw:commentRss>https://adamfortuna.com/2025-year-in-review/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>From SimCity 2000 to Ruby on Rails: How Games Sparked My Love of Orchestration</title>
		<link>https://adamfortuna.com/from-simcity-2000-to-ruby-on-rails</link>
					<comments>https://adamfortuna.com/from-simcity-2000-to-ruby-on-rails#respond</comments>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Sun, 21 Dec 2025 20:05:28 +0000</pubDate>
				<category><![CDATA[Adam Fortuna]]></category>
		<category><![CDATA[Canonical]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[Highlights]]></category>
		<category><![CDATA[Journal]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=19928</guid>

					<description><![CDATA[My love for designing systems started from an unlikely game.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="600" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21200446/ChatGPT-Image-Dec-21-2025-01_04_35-PM-900x600.png" alt="" class="wp-image-19952" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/21200446/ChatGPT-Image-Dec-21-2025-01_04_35-PM-900x600.png 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21200446/ChatGPT-Image-Dec-21-2025-01_04_35-PM-300x200.png 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21200446/ChatGPT-Image-Dec-21-2025-01_04_35-PM-768x512.png 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/21200446/ChatGPT-Image-Dec-21-2025-01_04_35-PM.png 1536w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>I was born in 1982. I was 5 when I played <em>Super Mario Bros.</em> for the first time –&nbsp;holding the controller withs hands just big enough to hit all of the buttons. By the time the Super Nintendo and Genesis came out, my hands had grown with the controllers.</p>



<p>For me, that was the Golden Age of video games. I&#8217;d spend countless hours playing the original <em>Zelda</em> (NES) all the way through over and over. Some weeks I&#8217;d scour every inch of <em>A Link to the Past</em>&#8216;s (SNES) levels, looking for areas I shouldn&#8217;t be able to access at different points in the game. I&#8217;d challenge myself to beat all the bosses in <em>Mega Man 2</em> (NES) using only the Mega Buster. I&#8217;d go through <em>Donkey Kong Country</em> (SNES) to hit 101% &#8211; finding the secret room inside the other secret room.</p>



<p>Looking back it seems like I spent years playing these games, but it was likely only weeks or months on each of them. For a time I wanted to <em>create</em> video games. I loved the idea that people were enjoying something I poured my heart into –&nbsp;even without them even knowing who I was.</p>



<p>There was one game that captured my heart unlike any other: <em>SimCity 2000</em> (Macintosh).</p>



<h2 class="wp-block-heading">From Player to Creator</h2>



<p><em>SimCity</em> is a city-building game – the first of it&#8217;s genre. <em>SimCity Classic</em> was released in 1989, and followed up with <em>SimCity 2000</em> in 1993 for Windows and Mac.</p>



<p>Here&#8217;s how it works:</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a href="https://www.angelfire.com/games2/zealgames/simcity2000/howtocty.html"><img loading="lazy" decoding="async" width="519" height="269" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024253/BlankMapGreen.jpg" alt="" class="wp-image-19934" style="width:519px;height:auto" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024253/BlankMapGreen.jpg 519w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024253/BlankMapGreen-300x155.jpg 300w" sizes="auto, (max-width: 519px) 100vw, 519px" /></a><figcaption class="wp-element-caption">Image from How to Start a City</figcaption></figure>



<p>You start with a blank slate of land that&#8217;s randomly generated. You can roll the dice and have it generate terrain with more mountains, forests, rivers, an ocean or tweak it tile by tile.</p>



<p>Once your map is decided, you have free reign to build your city. You don&#8217;t do this by placing individual building like you might think. You do this by zoning areas as residential (green), commercial (gray) or industrial (yellow), giving them power and water, and then waiting for people to magically move in.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="439" height="223" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024518/CityZones.jpg" alt="" class="wp-image-19935" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024518/CityZones.jpg 439w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024518/CityZones-300x152.jpg 300w" sizes="auto, (max-width: 439px) 100vw, 439px" /></figure>



<p><strong>It was the first time I remember building something for myself and hoping people would love it.</strong></p>



<p>As more people join, your population increases –&nbsp;as does your tax revenue. With those funds you can build more services to entice more emigration. Police stations and fire stations to keep people safe; schools and colleges to continue education; parks and marinas for people to have fun; and roads, highways, railways and subways to help people travel.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="582" height="275" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024841/CityAfter.jpg" alt="" class="wp-image-19937" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024841/CityAfter.jpg 582w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/02024841/CityAfter-300x142.jpg 300w" sizes="auto, (max-width: 582px) 100vw, 582px" /></figure>



<p>As your city grows, there&#8217;s always a bottleneck to fix. Density spikes and you need more police. Buildings go abandoned because there aren&#8217;t enough jobs or workers. Taxes are too high so people flee to other cities. Pollution, crime, commute times and other factors can drive population change. If you ignore those issues your city suffers.</p>



<h3 class="wp-block-heading">When Paper Was My First IDE</h3>



<p>I took to <em>SimCity 2000</em> with an obsessive addiction. I&#8217;d play during every waking minute, even leaving our family computer on overnight so I&#8217;d have plenty of money (&amp; growth) when I woke up to check it before school.</p>



<p>I was in eighth grade at the time, I and remember prototyping SimCity maps on college ruled paper and pencil on the bus to school. <strong>It was the first time I ever prototyped.</strong></p>



<p>When I made it home, I&#8217;d transfer my paper design to my city, seeing it take the shape I had in my head.</p>



<p>It was satisfying in a new way that I&#8217;d never experienced before.</p>



<h3 class="wp-block-heading">The Day I Stopped Playing SimCity</h3>



<p><em>Spoilers ahead for SimCity 2000&#8217;s endgame. </em></p>



<p>After a few months playing, I&#8217;d reached the point where almost every square I could use was taken up by <strong>arcologies</strong> (short for architectural ecology). <em>Arcologies</em> were a late game addition that allowed you to build a futuristic structure that housed 70,000 people in a small 4&#215;4 area.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="484" height="900" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/02025108/of9yxl8zmwh91-484x900.jpg" alt="" class="wp-image-19938" style="aspect-ratio:0.5377895212930562;width:276px;height:auto" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/02025108/of9yxl8zmwh91-484x900.jpg 484w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/02025108/of9yxl8zmwh91-161x300.jpg 161w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/02025108/of9yxl8zmwh91-768x1428.jpg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/02025108/of9yxl8zmwh91-826x1536.jpg 826w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/02025108/of9yxl8zmwh91.jpg 1024w" sizes="auto, (max-width: 484px) 100vw, 484px" /></figure>



<p>One morning I woke up to check on my city before school like I did every day. To my complete shock, my city was gone! In it&#8217;s place were hundreds of craters where my arcologies used to be. After my panic subsided, I realized this was the end game. My arcologies had blasted off into space –&nbsp;the next step on the their journey. </p>



<p>This was in the days before Chat GPT (or even Google), so my only way to learn what happened was to find a site on Yahoo! that explained the ending.</p>



<h2 class="wp-block-heading">From Games to Game Websites</h2>



<p>In college I got <em>really</em> into Dance Dance Revolution. I started a website with a bunch of DDR stats and a phpBB forum that became the goto community for players in the southeastern US (DDR was a very social game).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="556" src="https://af-wordpress.storage.googleapis.com/uploads/2025/12/18042028/Screenshot-2025-12-17-at-9.20.23-PM-900x556.png" alt="" class="wp-image-19946" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/12/18042028/Screenshot-2025-12-17-at-9.20.23-PM-900x556.png 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/18042028/Screenshot-2025-12-17-at-9.20.23-PM-300x185.png 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/18042028/Screenshot-2025-12-17-at-9.20.23-PM-768x475.png 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/18042028/Screenshot-2025-12-17-at-9.20.23-PM-1536x949.png 1536w, https://af-wordpress.storage.googleapis.com/uploads/2025/12/18042028/Screenshot-2025-12-17-at-9.20.23-PM.png 2000w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>The <a href="https://github.com/adamfortuna/ddrei.com">code for this site</a> is available on GitHub. It&#8217;s <em>bad</em>. It&#8217;s &#8220;<em>I didn&#8217;t know SQL had an ORDER BY clause so I&#8217;d pull back everything and sort it in PHP</em>&#8221; kind of bad.</p>



<p>But there was something about building this site that gave me a similar feeling to playing SimCity 2000.</p>



<p>In both cases I&#8217;d build out paths for people to take without my input. It felt exciting to see some organization of data and experiences into a route that users actually took!</p>



<p>Creating these experiences hooked me. Since then I&#8217;ve built quite a few <a href="/projects">projects</a>, and in every one of them I aimed to recapture that SimCity 2000 feeling.</p>



<h3 class="wp-block-heading">Enter Ruby on Rails</h3>



<p><a href="https://adamfortuna.com/study-or-ruby">Back in 2005</a> I heard about and started learning Ruby on Rails. It sped up my development in a way nothing else has (at least, not until recently with Claude Code, but that&#8217;s another blog post).</p>



<p>Since then, Ruby on Rails has been my goto tool in my toolbox enabling me to recapture that feeling of being a <strong>world builder</strong>.</p>



<p>I&#8217;m still building worlds 20 years later. Most recently that&#8217;s building paths for people to listen to audiobooks at <a href="https://libro.fm/">Libro.fm</a> by day, and creating paths to discover books at <a href="https://hardcover.app/">Hardcover</a> by night.</p>



<h2 class="wp-block-heading">SimCity as a Systems Design Primer</h2>



<p>The same skills that were honed playing SimCity are directly applicable to web development –&nbsp;even if I didn&#8217;t realize as a middle schooler.</p>



<p>Choosing a <strong>terrain for your city</strong> is like <strong>picking your underlying architecture</strong>. For me that&#8217;s been Rails as my starting point.</p>



<p><strong>Sketching your city in a notebook</strong> is, of course, <strong>prototyping</strong> your application. You&#8217;re making a plan to implement.</p>



<p><strong>Deciding on zoning</strong> for your city is similar to <strong>picking out your features</strong>. You&#8217;re making choices for your users what they&#8217;ll be able to do and where.</p>



<p>The <strong>newspaper</strong> you receive each year is your <strong>product feedback</strong>. Ignore this at your peril, or follow it to stay on course with what your users want.</p>



<p><strong>Power plants</strong> are your <strong>infrastructure</strong>. Without them the lights will be out. When this goes wrong, it&#8217;s all hands on deck.</p>



<p><strong>Roads, subways and highways</strong> are your <strong>information architecture</strong>. This is how your users will get around. If you mess this up, everyone will be stuck.</p>



<p><strong>Water and sewage</strong> are your <strong>background jobs and async processes</strong>. They&#8217;re out of sight and out of mind &#8211; at least when they&#8217;re working.</p>



<p><strong>Tax rates</strong> are your <strong>product pricing</strong>. Set them too high and people will leave en mass.</p>



<p><strong>Police, firefighters and hospitals</strong> are your <strong>error tracking, alerting and observability</strong> that ensures things are running smoothly.</p>



<p>And of course <strong>disasters</strong> are <strong>disasters</strong>. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading">Your Decisions Matter</h2>



<p>For both SimCity 2000 and software development, no single decision is going to reward you with instant success. It&#8217;s orchestrating each of these many decisions so they work together that creates something harmonious.</p>



<p>In every system there&#8217;s going to be a bottleneck. For most of my projects that&#8217;s been getting people to give it their attention in the first place. Whether you&#8217;re playing SimCity or building for millions of users, if you can understand what your systems needs and focus on that, your system will grow &#8211; if you give it time.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://adamfortuna.com/from-simcity-2000-to-ruby-on-rails/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Multiple Persona Disorder</title>
		<link>https://adamfortuna.com/multiple-persona-disorder</link>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Sun, 30 Mar 2025 18:58:33 +0000</pubDate>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Betterment]]></category>
		<category><![CDATA[Journal]]></category>
		<category><![CDATA[Product]]></category>
		<guid isPermaLink="false">https://wp.adamfortuna.com/?p=6033</guid>

					<description><![CDATA[Staying who you are, even when each project has a different audience.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="600" src="https://af-wordpress.storage.googleapis.com/uploads/2025/03/30185739/dyogenez_a_complex_symbolic_representation_of_multiple_personas_0816c9db-5078-4f39-aeb5-ead64c150bcd-900x600.png" alt="" class="wp-image-19892" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/03/30185739/dyogenez_a_complex_symbolic_representation_of_multiple_personas_0816c9db-5078-4f39-aeb5-ead64c150bcd-900x600.png 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/30185739/dyogenez_a_complex_symbolic_representation_of_multiple_personas_0816c9db-5078-4f39-aeb5-ead64c150bcd-300x200.png 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/30185739/dyogenez_a_complex_symbolic_representation_of_multiple_personas_0816c9db-5078-4f39-aeb5-ead64c150bcd-768x512.png 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/30185739/dyogenez_a_complex_symbolic_representation_of_multiple_personas_0816c9db-5078-4f39-aeb5-ead64c150bcd.png 1344w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>In the product world, we often try to reduce users down to a single persona – a representation of this users motivations. By bucketing them into a neat little box it makes it easier to design and plan for.</p>



<p>But this isn&#8217;t a post about other peoples personas: it&#8217;s about yours.</p>



<p>Lately I&#8217;ve been toggling between multiple focuses. Writing on this blog, building Hardcover, as a husband, a friend and even as an employee (if I choose to get a job). Each of these are <em>me</em>, but a different version.</p>



<p>For anyone creating online, they&#8217;re likely hit with the same question: what tone do I use for each project?</p>



<p>We&#8217;ve recently seen renewed interested in the <a href="https://matthiasott.com/articles/into-the-personal-website-verse">Personal-Website-Verse</a> &#8211; a desire to create something online that you can own not tied to social media.</p>



<p>At <a href="https://www.epicweb.dev/conf/2025">Epic Web Conference 2025</a> last week, multiple talks were about building up your personal brand: Epic Bets: Practical tips for betting on yourself by <a href="https://aaronfrancis.com/">Aaron Francis</a>, Why You Should Learn Out Loud In 2025 by <a href="https://www.madisonkanna.com/">Madison Kanna</a> and Networking through Streaming on Twitch by <a href="https://bsky.app/profile/leaht.codes">Leah Thompson</a>.</p>



<p>With more people creating online, it means <strong>more people figuring out their voice online</strong>.</p>



<h2 class="wp-block-heading">Finding My Voice</h2>



<p>Lately I&#8217;ve been trying to write more. Each place I write has a different tone and a different reason for writing.</p>



<p>For <strong>this blog</strong>, my motivation is to share what I&#8217;m learning, what I&#8217;m experiencing, how I&#8217;m growing, what problems I&#8217;m working through and how. <strong>Journaling in public motivates me and helps me hold myself accountable</strong>. I have a secondary motivation to grow my own personal brand not attached to any projects. Projects come and go, but blog was here before them, and will be here after.</p>



<p>On <a href="https://minafi.com"><strong>minafi.com</strong></a>, my motivation is to help others make positive money decisions and cultivate healthy mindsets around money. A secondary motivation is to create a business around this topic, although I&#8217;ve invested much less time towards that lately. It took years and hundreds of articles to feel like I found my voice. I figured out <strong>I could create standout content in this space with a <a href="https://minafi.com/interactive-guide-early-retirement-financial-independence">dash of coding mixed with content</a></strong>.</p>



<p>On <a href="https://hardcover.app">Hardcover</a>, my motivation is to grow a book-focused community. <strong>I want people to feel connected, included and seen</strong>. I have a secondary motivation of having people become paid members and fund the project. It took me years to realize that my role in Hardcover isn&#8217;t a developer, and a <strong>connector</strong>.</p>



<p>I have little doubt that I&#8217;ll add more projects to this list in time, each with their own motivation.</p>



<h2 class="wp-block-heading">Flip Your Motivation</h2>



<p>Each of my secondary motivations is business related &#8211; my personal brand, financial brand and Hardcover&#8217;s success.</p>



<p>When you think about the persona of users using your app or website, their main motivation isn&#8217;t to spend time there; it&#8217;s to <strong>solve a problem</strong>.</p>



<p>A few years ago, I started taking that approach my writing.</p>



<p>That problem can be your own! Learning in public, obstacles you overcame, how you&#8217;re figuring out a problem in your life. I love a good <a href="https://adamfortuna.com/growth-story" data-type="post" data-id="6001">growth story</a>.</p>



<h2 class="wp-block-heading">Write a Personal Mission Statement</h2>



<p>While working at Code School, we spent some time working on a company mission. I was inspired and <a href="https://adamfortuna.com/what-is-your-personal-mission" data-type="post" data-id="5928">wrote my own</a>. Writing this post today made me realize that after 7 years, it was no longer in line with what I cared most about. I decided to update it. Here&#8217;s what I came up with:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>I help connect people to transform their ideas into reality by enlivening community.</p>
</blockquote>



<p>I&#8217;ve been hesitant to call myself a community builder. It makes me think of major connectors &#8211; people with large followings, conference creators, popular vloggers.</p>



<p>Enlivening community doesn&#8217;t mean I need to <em>start</em> the community. It can mean enjoying other peoples company at a meetup or conference, supporting projects that favor connection, and helping others succeed with their own ideas.</p>



<p>This mission is inspiring. That&#8217;s what a personal mission should be! If it can give you butterflies in your stomach because it&#8217;s so important to you, then you&#8217;ve succeeded.</p>



<p>You use your personal mission statement in each project you participate in. If you&#8217;re able to bring that energy to a job, a side project, or even a personal blog, it will be successful – if only because it&#8217;s accomplishing what you&#8217;ve set out to do.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Seven People That Inspire Me To Be More Creative</title>
		<link>https://adamfortuna.com/inspirations-2025</link>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Sun, 09 Mar 2025 22:45:35 +0000</pubDate>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Betterment]]></category>
		<category><![CDATA[Journal]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=19864</guid>

					<description><![CDATA[Here are a few people whose work inspires me to be more open and creative.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="600" src="https://af-wordpress.storage.googleapis.com/uploads/2025/03/09221227/dyogenez_a_complex_symbolic_representation_of_Seven_People_That_23223be7-be68-45aa-b25c-79cd6990474f-900x600.png" alt="" class="wp-image-19874" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/03/09221227/dyogenez_a_complex_symbolic_representation_of_Seven_People_That_23223be7-be68-45aa-b25c-79cd6990474f-900x600.png 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/09221227/dyogenez_a_complex_symbolic_representation_of_Seven_People_That_23223be7-be68-45aa-b25c-79cd6990474f-300x200.png 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/09221227/dyogenez_a_complex_symbolic_representation_of_Seven_People_That_23223be7-be68-45aa-b25c-79cd6990474f-768x512.png 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/09221227/dyogenez_a_complex_symbolic_representation_of_Seven_People_That_23223be7-be68-45aa-b25c-79cd6990474f.png 1344w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>Eight years ago, back in 2017, I wrote about <a href="https://adamfortuna.com/inspirations" data-type="post" data-id="5850">five people who inspire me</a>. These five share something important: they&#8217;re all great teachers. Each of them is not just good at experimenting and innovating, but can put those learnings into teaching.</p>



<p>A lot has changed since 2017, but people who blend creativity and education are still some of the most inspiring people to me today &#8211; with one exception. The ones I&#8217;m most drawn today tend to add one another piece: optimism. That&#8217;s not to say the previous ones didn&#8217;t; it&#8217;s more likely that <em>I&#8217;m</em> noticing it more, and appreciating it more.</p>



<p>A few weeks ago I started thinking about who inspires me today. Most are people I&#8217;ve never met, and only had occasional social media-related interactions with &#8211; following on BlueSky, occasionally joining live streams from, reading blogs, newsletters and listing to podcasts. </p>



<p>I debated writing a note to each of these people, but decided to do a post celebrating them all instead. Thank you all for being cool and inspiring people. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60e.png" alt="😎" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading">Cassidy Williams</h2>



<p>Most people in tech might know <a href="https://cassidoo.co/">Cassidy Williams</a> from her hilarious TikToks which gave me many laughs during lockdown. From newsletter jokes, JavaScript parodies to <a href="https://www.tiktok.com/@cassidoo/video/6781578011788528901">whatever this is</a>, the more far out and unexpected, the more I end up laughing. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Meanwhile she&#8217;s been working at some of the most fun developer-focused companies like CodePen, Netlify and GitHub &#8211; bringing her passion and energy to code collaboration in a way that&#8217;s needed.</p>



<p>When we <a href="https://www.producthunt.com/products/hardcover#hardcover-2">launched Hardcover on Producthunt</a>, Cassidy commented at 12:01am – literally the first comment by anyone outside the team. She&#8217;s an advocate for small players, women, and diversity in tech (which is also a theme for this list in general).</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://af-wordpress.storage.googleapis.com/uploads/2025/03/09183736/Screenshot-2025-03-09-at-12.37.31%E2%80%AFPM-900x232.png" alt="" class="wp-image-19865"/></figure>



<p>Cassidy puts out a newsletter every week (<a href="https://cassidoo.co/newsletter/">rendezvous with cassidoo</a>) with an interview coding question of the week. She seems like a fun person to hang out with, and I&#8217;m sure is an <a href="https://cassidoo.co/post/c-section/">amazing mom</a>.</p>



<h2 class="wp-block-heading">Jason Lengstorf</h2>



<p><a href="https://jason.energy/">Jason</a> is a prolific creator in the programming space. Like a lot of people, I found Jason through his show <a href="https://www.learnwithjason.dev/">Learn With Jason</a>, where he and a guest build something in about 90 minutes. The format is both educational and entertaining.</p>



<p>His episode with <a href="https://codetv.dev/series/learn-with-jason/s4/use-wordpress-with-next-js">Colby Fayock on Using WordPress with Next.js</a> ended up being a template for this blog (before I <a href="https://adamfortuna.com/converting-adamfortuna-com-from-next-js-to-astro-with-a-headless-wordpress-cms" data-type="post" data-id="19819">moved from Next.js to Astro</a>), and for the <a href="https://hardcover.app/blog">Hardcover Blog</a>. His live streams are more organized and better run than ones by big companies. You can tell he takes setup seriously, yet maintains a lighthearted and fun vibe when on camera.</p>



<p>His post about AI generated art back in 2022 <a href="https://adamfortuna.com/valentines-day">inspired me to create AI art of my wife</a> using the same guide as a valentines day gift.</p>



<p>The only decoration I have on my desk is a <a href="https://learn-with-jason.myshopify.com/">Rainbow Corgi Duck</a> which I use as a watch stand while working.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/03/09190246/IMG_3361-900x675.jpg" alt="" class="wp-image-19868" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/03/09190246/IMG_3361-900x675.jpg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/09190246/IMG_3361-300x225.jpg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/09190246/IMG_3361-768x576.jpg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/09190246/IMG_3361-1536x1152.jpg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2025/03/09190246/IMG_3361-2048x1536.jpg 2048w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>Jason has launched many other fun projects over the last few years. The <a href="https://codetv.dev/series/web-dev-challenge/s1">Web Dev Challenge</a> is one of my favorites. Four Developers build something with the same theme with the same time limitations. The variety and limitations spark new creative ideas. It&#8217;s like Project Runway for coders.</p>



<p>He&#8217;s recently launched <a href="https://codetv.dev/series/leet-heat/s1">Leet Heat</a> &#8211; a show that&#8217;s a combination of Hot Ones and Jeopardy.</p>



<p>His most recent project, <a href="https://codetv.dev/">CodeTV</a>, pulls together content from all of his different projects into a channel for developers. It&#8217;s like Dropout TV for devs. I&#8217;m a supporter and over in the Discord if you want to say hi. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f44b.png" alt="👋" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading">Chris Oliver</h2>



<p>My first post about Ruby on Rails on this blog was in <a href="https://adamfortuna.com/study-or-ruby">May 2005</a>. Rails 0.13.1 had been released, and they were amping up for the big 1.0 which came out in December of that year. In those early days, I learned a lot by doing side projects, working at <a href="https://izea.com/">IZEA</a>, <a href="https://envylabs.com/">EnvyLabs</a> and Code School, and from <a href="http://railscasts.com/">Railscasts</a>.</p>



<p>In about 2017 my role at Code School started leaning more towards management. With 11 people on my team, I wasn&#8217;t as up to date on the latest dev trends. When I switched to Product Management, I spent even less time coding &#8211; mostly only on small internal tools and on <a href="/projects">projects</a> in my offtime.</p>



<p>In December of 2018 I <a href="https://adamfortuna.com/whats-next" data-type="post" data-id="5650">left my job at Pluralsight</a>, with the goal of having more time to build things I&#8217;d always dreamed of (<a href="https://minafi.com/bootcamp">The Minafi Investor Bootcamp</a> was the first). </p>



<p>Of all the Rails education resources I found, <a href="https://excid3.com/">Chris Olivers&#8217;</a> <a href="https://gorails.com/">Go Rails</a> was the most useful without a doubt. It filled the Railscasts void in my heart, but also featured longer series. Having a solution to a specific problem solved in a single video enables just in time learning &#8211; a format we often struggled with at Pluralsight/Code School.</p>



<p>I&#8217;d recommend it as the first step to anyone wanting to learn Ruby on Rails even today. It helped me to rebuild and refresh my Rails knowledge and gain back some developer confidence.</p>



<p>When Hardcover reached the point where we wanted to accept payments, I went to Go Rails to see what Chris recommended only to find he created a payment gem (<a href="https://github.com/pay-rails/pay">pay</a>) that works with multiple backends! We&#8217;ve been using it for subscriptions on Hardcover for the last 3 years.</p>



<p>As someone who knows how hard it is to create great developer content, but also creating entire systems around that content, I have huge respect for Chris and everything he&#8217;s built. I&#8217;m excited to see he&#8217;s a Co-Chair for the final RailsConf in Philadelphia – he seems perfect to help grow the Rails community.</p>



<h2 class="wp-block-heading">Maggie Appleton</h2>



<p>Technology is one thing we as humans use to advance civilization, create art, and increase productivity. That nexus is where Maggie thrives &#8211; theorizing about the future, but rooted in reality today on how to take that next step forward. She shares the same space in my mind with Bret Victor; both of them pushing design and user experience with technology.</p>



<p>Maggie is the first person I heard use the term <a href="https://maggieappleton.com/garden-history">Digital Garden</a> to refer to their site. That might seem like a small change, but it impacts the way we think. If your blog is only one thing, that&#8217;s the format you&#8217;ll stick to.</p>



<p>For a few years in mid 2010s, I spent a lot of time Twitter. I still remember something I wanted to communicate and trying to get it down to 140 characters. I was locked into that box, which limited my own creativity in how I thought through a problem. If you can change how you communicate to span more mediums, it opens up how you can think through a problem and communicate your takeaways with the world. Maggie understands that.</p>



<p><a href="https://maggieappleton.com/garden">Maggie&#8217;s Garden</a> stretches all kinds of formats &#8211; from her numerous <a href="https://maggieappleton.com/garden">podcast interviews</a> to <a href="https://maggieappleton.com/garden">talks she&#8217;s given</a> alongside posts in different stages (from seedling to evergreen).</p>



<p>Her talk about <a href="https://www.youtube.com/watch?v=VXkDaDDJjoA">The Expanding Dark Forest and Generative AI</a> from 2023 seems as prescient today as it was then.</p>



<p>I remember reading her <a href="https://maggieappleton.com/command-bar">Command K Bars</a> essay around the same time I was implementing search in a modal on <a href="https://hardcover.app">Hardcover</a> (also using Command K to open). That&#8217;s happened multiple times with Maggie&#8217;s writing &#8211; touching on things that I&#8217;m working on only to see she&#8217;s written an entire analysis of the topic.</p>



<p>One of the best ways to get me to listen to your podcast is to have Maggie on. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading">Shirley Wu</h2>



<p>I love a good data visualization. If someone can communicate a complex topic using interactivity, great design, color, and typography in a way that presets the topic better than in words alone then I&#8217;m often left in awe. It&#8217;s a combination of vision and execution in a way that can fall flat if something doesn&#8217;t feel right.</p>



<p>In 2023 I read Shirley Wu and Nadieh Bremer&#8217;s book <a href="https://hardcover.app/books/data-sketches">Data Sketches</a>. It ended up being in my top 3 books of the year, alongside <a href="https://hardcover.app/books/the-will-of-the-many-2023">The Will of the Many</a> and <a href="https://hardcover.app/books/tomorrow-and-tomorrow-and-tomorrow">Tomorrow, and Tomorrow, and Tomorrow</a>.</p>



<p><em>Data Sketches</em> hits on something that very few things I&#8217;ve ever read does: the journey. The format of the book is like this: each month Shirley and Nadieh would build out a data visualization (independently, so two separate data vizzes) and write about the process. The book is a collection of those notes, sketches of works in progress and the final products.</p>



<p>Her <a href="https://pudding.cool/2017/03/hamilton/">Interactive Visualization of Every Line from Hamilton</a> (on Pudding) came at a time when <em>I knew</em> every line from Hamilton. Seeing it presented in this way blew my mind.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://af-wordpress.storage.googleapis.com/uploads/2025/03/09193833/Screenshot-2025-03-09-at-1.38.27%E2%80%AFPM-900x578.png" alt="" class="wp-image-19870"/></figure>



<p>I enjoyed reading through what was in their minds as they were trying to solve problems &#8211; including what didn&#8217;t work. After reading <em>Data Sketches</em>, I was immediately inspired, started learning Svelte, and built <a href="https://socialhistomap.adamfortuna.com/">The Social Histomap</a> (very rough, but a good learning experience).</p>



<p>Shirley gave an incredible keynote called <a href="https://www.youtube.com/watch?v=zF7mSTVwVs0">Taking Up Space</a> that everyone should watch. It&#8217;s amazing and had me tearing up at times. Between physical art installations, digital creations and self reflection, I found myself nodding along and smiling at each creation.</p>



<p>In 2024 she tried something I&#8217;ve only dreamed of: <a href="https://shirleywu.substack.com/p/a-season-of-change-ft-studio-hua">establishing a studio in Tokyo</a>. I didn&#8217;t even realize you could create a company and then sponsor your own visa in Japan <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f937-200d-2642-fe0f.png" alt="🤷‍♂️" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p>



<p>I can&#8217;t wait to see what she creates next in the intersection of art and technology as well as hearing more about life in Japan!</p>



<h2 class="wp-block-heading">Chelsea Fagan</h2>



<p>Chelsea started <a href="https://thefinancialdiet.com/">The Financial Diet</a> a few years before I started <a href="https://minafi.com">Minafi</a> &#8211; both in the financial space. Between <a href="https://hardcover.app/books/the-financial-diet">her book</a>, <a href="https://creators.spotify.com/pod/show/thefinancialdiet%20/">podcast</a>, and <a href="https://www.youtube.com/c/thefinancialdiet">YouTube channel</a>, she&#8217;s extremely prolific in the financial sphere and created a safe space for women to talk about money.</p>



<p>I recently finished the book <a href="https://hardcover.app/books/men-who-hate-women">Men Who Hate Women</a>. It&#8217;s a sobering analysis of the hate-filled communities that bully women while hiding behind anonymity online.</p>



<p>Chelsea has no doubt experienced her share of online hate. Her <a href="https://www.tiktok.com/@faganchelsea/video/7475037307142212886">recent response to the trolls</a> was a masterclass in how to respond. When I showed it to my wife, she gasped and snapped in agreement. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>One thing about financial content: once you learn enough there&#8217;s very little to do. You switch from spending time understanding how to diversify your portfolio and reduce your taxes to working on your mindset. It&#8217;s part of why I stopped blogging about financial topics &#8211; I got tired of looking at every problem through the lens of finances.</p>



<p>Somehow Chelsea continues to post new content that inspires me in areas beyond the financial. She has her pulse on the intersection between politics, money and feminism &#8211; which has branches to mental health, motivation, and just living your best life. Whenever one of her videos shows up I always watch it.</p>



<h2 class="wp-block-heading">Nadia Odunayo</h2>



<p>When I started Hardcover, it wasn&#8217;t originally a book tracking social network. It&#8217;s precursor was an <a href="https://github.com/adamfortuna/scribe">embedded angular application on my blog</a> to show what I was reading. When Goodreads announced they were shutting down their API, my backend would have to change and that sparked me to start Hardcover.</p>



<p>At the time I hadn&#8217;t heard of <a href="https://www.thestorygraph.com/">The StoryGraph</a>. I was looking for book tracking services with an API, and none existed (only a few exist even today). It wasn&#8217;t until a few months into Hardcover that I stumbled on it. Since then I&#8217;ve joined Nadia&#8217;s <a href="https://buttondown.com/nodunayo">The One-Woman Dev Team Diaries newsletter</a>, watched her <a href="https://www.youtube.com/watch?v=66fagPiBDcc">many talks at conventions</a>, and celebrated SG&#8217;s success.</p>



<p>Meanwhile Nadia seems so authentically herself. Posting what she&#8217;s reading in her newsletters, <a href="https://www.instagram.com/nodunayo/">sharing elaborate dances on her Instagram</a> as a form of self expression, and acting as a proponent of anti-corporate sentiment.</p>



<p>The StoryGraph is a competitor to Hardcover, but in the same way The Financial Diet is a competitor to Minafi. I&#8217;m excited to see SG push the envelope and innovate on recommendations and what readers are asking for. Many of the same problems readers mention <em>my own interviews</em> are ones Nadia is working on. It&#8217;s incredibly rare to be able to look at a new product release and trace it back to the source problems, while seeing how the connection was made to <em>this</em> solution.</p>



<p>The rise of SG also proves the distaste for Goodreads in a way no other site has. I&#8217;m excited to be building products in the same space as Nadia, and would love to work on something together someday.</p>



<h2 class="wp-block-heading">Takeways</h2>



<p>When I look back at my previous post, I see people who are more in the category of <em>thought leaders</em>. When I look at this list, I see a mix of teachers, learners and sharers. People who want to connect different groups together with each other and all grow because of it (<em>still true about the first list, but I&#8217;m noticing it more</em>).</p>



<p>I think that better encapsulates where I am in my life right now too &#8211; looking to grow the Hardcover community, build more things that I find fun, and spending more time with my real-life friends and family.</p>



<p>If anyone on this list is ever in Salt Lake City and wants to meet up, I&#8217;d love to buy you a coffee/beer/meal/book. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Converting Adamfortuna.com from Next.js to Astro with a Headless WordPress CMS</title>
		<link>https://adamfortuna.com/converting-adamfortuna-com-from-next-js-to-astro-with-a-headless-wordpress-cms</link>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Sat, 08 Feb 2025 23:02:36 +0000</pubDate>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Astro]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[React.js]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=19819</guid>

					<description><![CDATA[This blog has undergone a lot of changes over the years. It was WordPress for many years, Jekyll, OctoPress, Middleman, and most recently Next.js with WordPress. In 2024, I fell out of love with Next.js. I was a huge proponent of it for years. Hardcover is built on it (although we&#8217;re migrating to Ruby on [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="600" src="https://af-wordpress.storage.googleapis.com/uploads/2025/02/08230533/dyogenez_a_complex_symbolic_representation_of_Converting_Adamfo_a70b02c8-e3c5-40c6-8db2-c93700d4fe7f-900x600.png" alt="" class="wp-image-19826" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/02/08230533/dyogenez_a_complex_symbolic_representation_of_Converting_Adamfo_a70b02c8-e3c5-40c6-8db2-c93700d4fe7f-900x600.png 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/02/08230533/dyogenez_a_complex_symbolic_representation_of_Converting_Adamfo_a70b02c8-e3c5-40c6-8db2-c93700d4fe7f-300x200.png 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/02/08230533/dyogenez_a_complex_symbolic_representation_of_Converting_Adamfo_a70b02c8-e3c5-40c6-8db2-c93700d4fe7f-768x512.png 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/02/08230533/dyogenez_a_complex_symbolic_representation_of_Converting_Adamfo_a70b02c8-e3c5-40c6-8db2-c93700d4fe7f.png 1344w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>This blog has undergone a lot of changes over the years. It was WordPress for many years, Jekyll, OctoPress, Middleman, and most recently <a href="https://adamfortuna.com/wordpress-headless-cms-next-js-and-graphql">Next.js with WordPress</a>.</p>



<p>In 2024, I fell out of love with Next.js. I was a huge proponent of it for years. <a href="https://hardcover.app">Hardcover</a> is built on it (although we&#8217;re migrating to Ruby on Rails + Inertia.js) and I even started Nextjsbits.com, a blog about Next.js. I wrote a bunch of blog posts about Next.js, and I posted on the Next.js subreddit. In other words, I thought it was <em>pretty great</em>.</p>



<p>We switched to the Next.js App directory almost as soon as that was an option. I was so excited to use React Server Components that I waved away all the beta warnings and went full speed ahead. And it worked! Functionally, at least.</p>



<p>Slowly, problems started to sneak in. Our build time spiked, sometimes taking a minute locally for a route that should take a fraction of a second. Our Vercel bill grew from $20 a month to $500 due to the switch from client-side data loading to server-side loading. I (incorrectly) thought I understood how caching worked, only to later realize that nearly nothing was being cached –&nbsp;but even then I didn&#8217;t have insight into what was actually cached.</p>



<p>There were <em>problems</em>. The development experience was slower. The production experience was slower. Debugging it was slower. Expenses were higher.</p>



<p>All of these problems have solutions. They&#8217;re not inherent to Next.js, but they are (or at least were) difficult to avoid &#8211; even for someone who read the caching article on Next.js&#8217;s site at least 50 times.</p>



<p>I&#8217;ve since spent a bunch of time trying to understand what was wrong. Using turbo for local development might be possible with the latest version of Next.js &#8211; but by the time that was released, Hardcover&#8217;s migration was nearing the finish line.</p>



<p>By October of 2024 I was frustrated to the point I was looking for other options. Once the Hardcover rewrite is complete, I&#8217;ll share more about that process.</p>



<p>In November 2024, after the election, Vercel&#8217;s CEO, Guillermo Rauch, posted on X about his support of Trump. This was around the same time Sticker Mule&#8217;s CEO made similar statements.</p>



<p>Your attention and your spending are votes. While I know Next.js is a project with many amazing developers, Vercel is a business and the backing force behind Next.js.</p>



<p>I decided to start removing Next.js from my projects. I shut down Next.js Bits. I migrated Hardcover from Vercel to Google Cloud Run. Hardcover is being migrated away. And lastly, this blog is now running on <a href="https://astro.build/">Astro</a>!</p>



<h2 class="wp-block-heading">Migrating from Next.js to Astro</h2>



<p>After seeing Astro on the yearly JavaScript survey with a high satisfaction score, it drew me in. When I realized their official documentation had a section on <a href="https://docs.astro.build/en/guides/cms/wordpress/">Headless WordPress &amp; Astro</a>, I knew it was a perfect fit.</p>



<p>The big difference between Next.js and Astro (or my specific implementation) is how pages are rendered. With Next.js, pages are all rendered when they&#8217;re first requested. For this blog, every page is rendered to static HTML at build time. That means it&#8217;s super fast!</p>



<p>There are downsides to this. When I write or edit a new post, it won&#8217;t be immediately available until a rebuild of the entire site is triggered. It also means that comments (using WordPress) aren&#8217;t an option. That&#8217;s something I still need to figure out. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f914.png" alt="🤔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>When I started searching for &#8220;astro WordPress headless cms&#8221;, a <a href="https://www.youtube.com/watch?v=fWxn-r83ygQ">wealth of videos</a> came up! This also led me to this <a href="https://github.com/mladimatija/wp-graphql-astro">great Astro starter template</a>.</p>



<p>I decided to start from scratch with <code>npm create astro@latest</code> and go from there.</p>



<h2 class="wp-block-heading">Converting Next.js Pages to Astro</h2>



<p>One of my first steps is making a list of the routes needed. There were a few more routes I haven&#8217;t moved over yet (ex: books read, photo posts).</p>



<ul class="wp-block-list">
<li><code>/</code> &#8211; Landing page for fun.</li>



<li><code>/projects</code> &#8211; All the projects I&#8217;ve ever worked on, <a href="https://adamfortuna.com/create-your-own-projects-list/">powered by WordPress</a>.</li>



<li><code>/blog</code> &#8211; List of all blog posts across all of my projects&#8217; blogs.</li>



<li><code>/blog/projects</code> &#8211; List of all projects.</li>



<li><code>/blog/projects/:project/:page</code> &#8211; Paginated list of posts by project</li>



<li><code>/blog/all/:page</code> &#8211; Paginated list of posts.</li>



<li><code>/blog/tags</code> &#8211; List of all tags.</li>



<li><code>/blog/tags/:tag/:page</code> &#8211; Paginated list of posts by tag.</li>



<li><code>/newsletter</code> &#8211; Form to sign up for my newsletter (submitted to Sendy).</li>



<li><code>/newsletter/thanks</code> &#8211; Redirect after signing up.</li>



<li><code>/:post</code> &#8211; Single post or page corresponding with a WordPress URI.</li>
</ul>



<p>That&#8217;s it! Not too many. I started converting everything on Tuesday, and by Saturday, everything was working! </p>



<p>The hardest part of the migration was moving React.js components into Astro components. Fortunately, only a few places require client-side code (namely, the homepage and the <a href="/projects">projects page</a>).</p>



<p>Most of these are relatively simple like the <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/components/articles/Article.astro">Article</a> component. Other more advanced components I kept as React (for now), like the <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/components/projects/ProjectListing.tsx">Projects Listing</a> component. Fetching data happens in Astro, then the Projects are passed to React for interactivity.</p>



<h2 class="wp-block-heading">Fetching Data from WordPress</h2>



<p>Fortunately, nothing changed on the <a href="https://adamfortuna.com/wordpress-headless-cms-next-js-and-graphql/">WordPress side</a>. I moved over all of my previous <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/lib/api.ts">fetch GraphQL client</a>, <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/types/index.ts">TypeScript types</a> and all <a href="https://github.com/adamfortuna/adamfortuna-astro/tree/main/src/lib">GraphQL queries</a>. </p>



<p>I made the decision with this blog to list posts from <code>adamfortuna.com</code>, <a href="https://hardcover.app/blog">hardcover.app</a> and <a href="https://mianfi.com">minafi.com</a> &#8211; three blogs I&#8217;ve spent a bunch of time on. However, only individual posts from adamfortuna.com are visible.</p>



<p>This means that when it comes to listing posts, or posts by tag, I need to grab posts from all three blogs and sort them by date.</p>



<p>The solution for this is to hit all three blogs, parse the results and sort them. The <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/lib/getRecentPosts.ts#L90">code for this</a> is a bit hectic, but does the job. Most of these functions accept an array of projects to fetch from, that way if I want to add another blog later I can easily add it.</p>



<p>WordPress can allow GraphQL access without authentication, but certain fields won&#8217;t be available. The most important one is <code>excerpt</code> as regular text. I use this in the meta description and show it on the blog listing page for highlighted posts. That meant authentication would be needed.</p>



<p>I <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/lib/api.ts#L292">created tokens</a> for each blog that represent the username and password, which are then set as environment variables. </p>



<h2 class="wp-block-heading">Astro Pagination</h2>



<p>My favorite part of the migration was using Astro&#8217;s pagination. Each paginated page is <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/pages/blog/all/%5B...page%5D.astro">incredibly simple</a>. The <code>getStaticPaths</code> method provides a <code>paginate</code> function which can be used to create multiple paginated pages from the same array of data. You don&#8217;t even need to slice the array!</p>



<p>Pagination with nested routes takes a little more work. For example, <code>/blog/projects/:project/:page</code>. <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/pages/blog/projects/%5Bproject%5D/%5B...page%5D.astro">This page</a> needs to use the array of projects and gets all posts for each one then paginates them. The same technique is used on the <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/pages/blog/tags/%5Btag%5D/%5B...page%5D.astro">Tag page</a>.</p>



<h2 class="wp-block-heading">Astro Workarounds</h2>



<p>There were two parts I needed to change in order to work well with Astro and static generation.</p>



<p>The first was on the posts by tag page. When Astro tries to load the route <code>/blog/tags/:tag/:page</code>, it has to do a lot of work. It loads all tags, then it hits all three blogs to get all tags for each one. With 70 tags (so far), that means over 200 requests. This wouldn&#8217;t be a problem, but doing so using <code>Promise.all</code> meant DDOSing WordPress with 70 requests at a time. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>I switched to doing these in <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/pages/blog/tags/%5Btag%5D/%5B...page%5D.astro#L19">serial rather than parallel</a> and it seemed to do the trick.</p>



<p>The next problem was that development was slow due to all of these API calls. This one was easy enough. I <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/lib/getRecentPosts.ts#L109">cached these saved values</a> to a local variable and used those instead. If there&#8217;s a better way to do this with Astro, please point me in that direction.</p>



<p>The last major problem was updating Tailwind.css from version 3 to 4. The process went smoothly once I realized the <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/styles/global.css#L3">@config &#8216;../../tailwind.config.js&#8217;</a> option in CSS file. Previously, I used the <code>@screen md {}</code> option in there to limit changed to <code>@media(min-width: theme(--breakpoint-md)) { }</code>. </p>



<h2 class="wp-block-heading">Hosting</h2>



<p>A few months ago I switched from Vercel to <a href="https://www.netlify.com/">Netlify</a>, and have been loving it. I haven&#8217;t tried it for anything big, but for my blog it&#8217;s been wonderful.</p>



<p>I set up Astro on there, and it worked on the first build!</p>



<h2 class="wp-block-heading">What&#8217;s Next</h2>



<p>This has been a fun project so far. There are a few things I&#8217;d still like to do next.</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Trigger a rebuild when something changes in WordPress</li>



<li>Figure out what to do about Comments and Webmentions</li>



<li>Add a book page showing what I&#8217;ve read or reading</li>



<li>Add a movie page showing what I&#8217;ve watched.</li>



<li>Same for TV shows.</li>



<li>Add a list of hikes, maybe using something <a href="https://tympanus.net/Development/StorytellingMap/">like this</a>.</li>



<li>Add back my photo posts. I&#8217;ve written a few in WordPress already.</li>



<li>Add dark mode</li>



<li>Make the homepage even more fun!</li>
</ul>



<h2 class="wp-block-heading">Updates!</h2>



<p>Rather than writing a new post, I&#8217;m going to update this one as I tweak things.</p>



<h3 class="wp-block-heading">Trigger Updates When WordPress Changes</h3>



<p>It didn&#8217;t take long before I needed to fix a spelling error in this post. I don&#8217;t want to spend 15 minutes rebuilding the site to see those kinds of changes. Instead, I want them to be available as soon as possible!</p>



<p>The solution is to rely on Netlify for server-side generation (SSR).</p>



<p>That started with using the <a href="https://docs.astro.build/en/guides/deploy/netlify/">@astrojs/netlify</a> library. While it&#8217;s possible to generate every post every time it&#8217;s accessed, I&#8217;d rather cache as much as possible for as long as possible.</p>



<p>After configuring <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/astro.config.mjs#L24">Netlify with Astro</a>, the next step was to set the <a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/pages/%5B...uri%5D.astro#L56">right headers for each page</a>. </p>


<pre class="wp-block-code"><span><code class="hljs language-typescript"><span class="hljs-comment">// The browser should always check freshness</span>
Astro.response.headers.set(<span class="hljs-string">"cache-control"</span>, <span class="hljs-string">"public, max-age=0, must-revalidate"</span>);

<span class="hljs-comment">// The CDN should cache for a year, but revalidate if the cache tag changes</span>
Astro.response.headers.set(<span class="hljs-string">"netlify-cdn-cache-control"</span>, <span class="hljs-string">"s-maxage=31536000"</span>);

<span class="hljs-comment">// Tag the page with the book ID</span>
Astro.response.headers.set(<span class="hljs-string">"netlify-cache-tag"</span>, <span class="hljs-string">`post-id-<span class="hljs-subst">${article.id}</span>`</span>);</code></span></pre>


<p>The last one will use the dynamic post ID from the given post from WordPress.</p>



<p>To invalidate this, I needed to add a webhook that WordPress would hit, at <code><a href="https://github.com/adamfortuna/adamfortuna-astro/blob/main/src/pages/api/webhook.json.ts">src/pages/api/webhook.json.ts</a></code>. This is the URL that&#8217;ll be hit whenever a new post is created or a post is updated.</p>


<pre class="wp-block-code"><span><code class="hljs language-typescript"><span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> prerender = <span class="hljs-literal">false</span>

<span class="hljs-keyword">import</span> <span class="hljs-keyword">type</span> { WordPressClientIdentifier } <span class="hljs-keyword">from</span> <span class="hljs-string">"@/types"</span>;
<span class="hljs-keyword">import</span> { purgeCache } <span class="hljs-keyword">from</span> <span class="hljs-string">"@netlify/functions"</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sourceToProject</span>(<span class="hljs-params">sourceUrl: <span class="hljs-built_in">string</span></span>): <span class="hljs-title">WordPressClientIdentifier</span> | <span class="hljs-title">null</span> </span>{
  <span class="hljs-keyword">if</span>(sourceUrl === <span class="hljs-string">"https://adamfortuna.com/"</span>) {
    <span class="hljs-keyword">return</span> <span class="hljs-string">"adamfortuna"</span>;
  } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(sourceUrl === <span class="hljs-string">"https://minafi.com/"</span>) {
    <span class="hljs-keyword">return</span> <span class="hljs-string">"minafi"</span>;
  } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(sourceUrl === <span class="hljs-string">"https://hardcover.com/"</span>) {
    <span class="hljs-keyword">return</span> <span class="hljs-string">"hardcover"</span>;
  } <span class="hljs-keyword">else</span> {
    <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
  }
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">POST</span>(<span class="hljs-params">{ request }: { request: Request }</span>) </span>{
  <span class="hljs-keyword">try</span> {    
    <span class="hljs-comment">// See below for information on webhook security</span>
    <span class="hljs-keyword">if</span> (request.headers.get(<span class="hljs-string">"x-wordpress-webhook-secret"</span>) !== <span class="hljs-keyword">import</span>.meta.env.WORDPRESS_WEBHOOK_SECRET) {
      <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Response(<span class="hljs-string">"Unauthorized"</span>, { status: <span class="hljs-number">401</span> });
    }

    <span class="hljs-keyword">const</span> body = <span class="hljs-keyword">await</span> request.json();
    <span class="hljs-keyword">const</span> { post_id } = body;    
    <span class="hljs-keyword">if</span>(!post_id) {
      <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Response(<span class="hljs-string">"No Post ID"</span>, { status: <span class="hljs-number">401</span> });
    }

    <span class="hljs-keyword">const</span> project = sourceToProject(request.headers.get(<span class="hljs-string">"x-wp-webhook-source"</span>) || <span class="hljs-string">""</span>);
    <span class="hljs-keyword">if</span>(!project) {
      <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Response(<span class="hljs-string">"No Project"</span>, { status: <span class="hljs-number">401</span> });
    }

    <span class="hljs-keyword">const</span> postTags = <span class="hljs-built_in">Object</span>.keys(body.taxonomies?.post_tag || {});
    <span class="hljs-keyword">const</span> tags = &#91;
      <span class="hljs-string">`post-id-<span class="hljs-subst">${post_id}</span>`</span>,
      <span class="hljs-string">`blog/projects/<span class="hljs-subst">${project}</span>`</span>,
      <span class="hljs-string">'blog'</span>,
      <span class="hljs-string">'blog/all'</span>,
      ...postTags
    ]
    <span class="hljs-keyword">await</span> purgeCache({
      siteID: <span class="hljs-keyword">import</span>.meta.env.NETLIFY_SITE_ID,
      tags,
      token: <span class="hljs-keyword">import</span>.meta.env.NETLIFY_TOKEN
    });
  
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Response(<span class="hljs-string">`Revalidated entry with id <span class="hljs-subst">${post_id}</span>`</span>, { status: <span class="hljs-number">200</span> });
  } <span class="hljs-keyword">catch</span>(e) {
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Response(<span class="hljs-string">`Something went wrong: <span class="hljs-subst">${e}</span>`</span>, { status: <span class="hljs-number">500</span> });
  }
}</code></span></pre>


<p>This ties in with all of the pages that could have this post &#8211; the main listing page, the all blog posts page, the posts by projects, and the tag pages. Each of these has their own cache key that corresponds with this callback.</p>



<p>To create the callback, I installed the <a href="https://wordpress.org/plugins/wp-webhooks/">WP Webhooks plugin</a>, which works well for this. It also allows you to add custom headers to your requests. I added a <code>x-wordpress-webhook-secret</code> header that it sends over and I check for. </p>



<p>Next, I needed to grab my <code>NETLIFY_SITE_ID</code> from Netlify, and also create a personal token (<code>NETLIFY_TOKEN</code>). I added these locally and on production.</p>



<p>However, the caching I&#8217;d previously added conflicted with this. I disabled it, but then the initial build went too slow. The solution was even more simple: change routes that need dynamic generation to start with the line:</p>


<pre class="wp-block-code"><span><code class="hljs language-typescript"><span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> prerender = <span class="hljs-literal">false</span></code></span></pre>


<p>With this, these pages won&#8217;t be generated when deployed but will be cached when rendered.</p>



<p>Side note: I went down another route where I attempted to build these at deploy time but then expire them with a webhook call. That didn&#8217;t work. I needed to add this <code>prerender = false</code> code in for it to work.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>New House, New Rules</title>
		<link>https://adamfortuna.com/new-house-new-rules</link>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Wed, 05 Feb 2025 01:00:42 +0000</pubDate>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Betterment]]></category>
		<category><![CDATA[Journal]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=19808</guid>

					<description><![CDATA[Later this month, we&#8217;re moving from the apartment we&#8217;ve lived in for the last 8 years to a house! It&#8217;s an exciting time. We&#8217;re still fixing and improving a few projects, but it should be mostly set to move in. Whenever I go on a trip, I like to use that as an excuse to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="600" src="https://af-wordpress.storage.googleapis.com/uploads/2025/02/05011000/dyogenez_a_complex_symbolic_representation_of_new_rules_and_mov_7d9e867c-f92e-4055-ac63-03cf7de5ea78-900x600.png" alt="" class="wp-image-19813" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/02/05011000/dyogenez_a_complex_symbolic_representation_of_new_rules_and_mov_7d9e867c-f92e-4055-ac63-03cf7de5ea78-900x600.png 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/02/05011000/dyogenez_a_complex_symbolic_representation_of_new_rules_and_mov_7d9e867c-f92e-4055-ac63-03cf7de5ea78-300x200.png 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/02/05011000/dyogenez_a_complex_symbolic_representation_of_new_rules_and_mov_7d9e867c-f92e-4055-ac63-03cf7de5ea78-768x512.png 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/02/05011000/dyogenez_a_complex_symbolic_representation_of_new_rules_and_mov_7d9e867c-f92e-4055-ac63-03cf7de5ea78.png 1344w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>Later this month, we&#8217;re moving from the apartment we&#8217;ve lived in for the last 8 years to a house! It&#8217;s an exciting time. We&#8217;re still fixing and improving a few projects, but it should be mostly set to move in.</p>



<p>Whenever I go on a trip, I like to use that as an excuse to change my routine. It&#8217;s a time when my schedule seems the most flexible. I&#8217;m no longer evaluating things daily, allowing me to change my plans with a clearer view of the future.</p>



<p>I&#8217;m using the upcoming move as another chance to reset my routine and figure out what I want to <em>leave behind</em>.</p>



<h2 class="wp-block-heading">New Rules</h2>



<p>None of these new rules are focused on maximizing productivity or physical fitness. The focus is on <strong>feeling healthy</strong>. This includes not feeling as anxious about everything happening while still being healthy enough to protest, contact representatives, and support people in my life who need someone to lean on.</p>



<h3 class="wp-block-heading">Mental Health</h3>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Stop</strong> using <strong>anonymous social media</strong> (TikTok, Reddit, Reels, YouTube Shorts). Any social media you can scroll forever, and it&#8217;ll keep feeding you new content.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Stop</strong> picking up my <strong>phone in the morning</strong>. I&#8217;d like to not even touch it until I&#8217;ve at least worked out and read a little.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> <strong>reading in the morning</strong>. Rather than plugging my brain into the news, I will read more books. I&#8217;ve been doing this on and off for the last month, but lately, doom scrolling has won out more days than not.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Switch</strong> to pre-selected news sources. That includes <a href="https://www.sltrib.com/">The Salt Lake Tribune</a>, <a href="https://www.wired.com/">WIRED</a>, <a href="https://bsky.app/profile/aaronparnas.bsky.social">Aaron Parnas</a>, and a few others on BlueSky.</p>



<h3 class="wp-block-heading">Physical Health</h3>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Continue </strong>going to the <strong>gym</strong> 3x a week on Monday, Wednesday, and Friday from 6 am to 8 am.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> going for a <strong>walk</strong> every day. It doesn&#8217;t matter how long it is. Our new house is close to a park, which I imagine I&#8217;ll get to know even better than I already do (I trained for my marathon there and already know it well).</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> doing <strong>cardio</strong> 2x to 3x a week in the morning. I&#8217;ll plan to start with 2x and see increasing it to 3x. This could be a Peloton ride or, a run, a hike or anything else that gets my heart rate going. If I don&#8217;t do this when I first wake up, the likelihood of this happening decreases fast. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h3 class="wp-block-heading">Diet</h3>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Stop</strong> drinking any <strong>alcohol</strong> unless it&#8217;s a special occasional (Super Bowl) or I&#8217;m out socially with friends. Last year for ~6 months I mostly stopped drinking, but since November I&#8217;ve been having the occasional cocktail or beer at night.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Stop</strong> any <strong>THC consumption</strong> on multiple days in a row. I never vaped or took edibles until my 30s, and I&#8217;m tremendously grateful for past me for that. Doing so negates any desire to be creative or even play games. Instead, I want to lay around on my phone and watch TV. I will start with this change, but I&#8217;d like to cut this out entirely –&nbsp;except on weekends.</p>



<h3 class="wp-block-heading">Fun</h3>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> playing more video games! Somehow, in the last few years, my attention has shifted from video games to news and social media for entertainment. Playing video games is much healthier and is a habit I&#8217;d like to restore.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> playing more board games, especially with friends. We love board games, but haven&#8217;t played nearly enough of them lately. Having a small apartment doesn&#8217;t make it easy. We have a <a href="https://bandpassdesign.com/collections/products/products/the-dresden">Desden Board Game Table</a> set to be delivered this summer, with a smaller 4-person IKEA table for now. I love that we&#8217;ll now have a place to actually play games that&#8217;s now our kitchen island.</p>



<h3 class="wp-block-heading">Personal Projects</h3>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Stop</strong> working on Hardcover outside of working hours. With the new house, I&#8217;ll have a dedicated office. I plan to consider that &#8220;the place&#8221; where I work on Hardcover. If I&#8217;m not in there, then I won&#8217;t worry about work.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> dedicating more time to personal projects! I have a tendency to let projects take over my life. It&#8217;s happened with Code School, Minafi, and Hardcover. With the new arrangement, I&#8217;d like to dedicate some of the &#8220;social media &amp; news time&#8221; to doing more creative projects. I&#8217;ve already mentioned some of these on my <a href="https://adamfortuna.com/now">Now page</a>, and I&#8217;m excited to work on them (especially the Astro conversion of this blog!).</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> gamifying progress. Some of the most productive times in my life were when I was actively tracking what I was working on. For a while, this happened on lineofthought.com, my now-defunct tracker. I have a plan on how to restart this, while also using it to learn some more about Swift and iOS programming. In the meantime, I&#8217;ll keep tracking using <a href="https://exist.io/?referred_by=adamfortuna">Exist.io</a>.</p>



<h3 class="wp-block-heading">Civic Action</h3>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Stop</strong> supporting any <strong>large corporation</strong> that acts against my interests and those of a stable democracy. This will mean buying local much more, and cutting services where the money is going towards causes I don&#8217;t support. I&#8217;ve always done this to some extent, but I&#8217;ve turned a blind eye to some based on convenience or entertainment. That&#8217;s no longer the case.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start calling</strong> my representatives every week if there&#8217;s something that needs to be addressed. Even though I&#8217;m in Utah, I can still be an annoyance.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> becoming more involved in local politics. I have a long ways to go on this one. We&#8217;ve been to a bunch of marches, and vote in all local elections, but we&#8217;d like to do more. A new food Coop is opening a few blocks from our new house and has monthly meetings. The people we&#8217;ve met there seem very like-minded.</p>



<h3 class="wp-block-heading">Relationship Health</h3>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> back with <strong>weekly, scheduled date days/nights</strong> with my wife. We&#8217;ve done this in the past, but between the move, holidays, travel and election news, we&#8217;ve gotten out of the habit. With the new house we&#8217;d love to explore everywhere we can walk to &#8211; which will provide many fun outings!</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start</strong> having <strong>smaller get-togethers</strong> to go along with the bigger group ones. Meeting with friends one-on-one or just getting together for a short time. I tend to focus on large group outings that last multiple hours and leave me socially drained. Smaller get-togethers – in person and online – would create deeper connections with friends.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Start or join</strong> a group that meets at <strong>Liberty Park</strong>! This is the park right by our house. I plan to go there a bunch &#8211; on walks and runs, to walk our future dog. I&#8217;d also love to have an excuse to go there socially more often.</p>



<h2 class="wp-block-heading">&#8220;Don&#8217;t Change Too Much At Once&#8221;</h2>



<p>This is common advice. It can also be wrong.</p>



<p>For example, if you&#8217;re trying to replace one activity with something else (like replacing social media with reading), you need to stop one behavior and start another one.</p>



<p>A few years ago I read Cal Newports <a href="https://hardcover.app/books/digital-minimalism">Digital Minimalism</a>. Most of the book talks about doing a &#8220;digital detox&#8221; &#8211; stopping all use of social sites. After trying a detox myself, I noticed it lacked much advice on what to replace that time with! It&#8217;s important to have things you&#8217;re <strong>excited about</strong> to substitute in. </p>



<p>Instead of reaching for your phone when you have a few free minutes, you&#8217;ll need to create a new behavior. Reach for a book, pick up a Nintendo Switch, or read your RSS feed.</p>



<p>I&#8217;m considering February a trial period for any of these changes I can put into place now. Even just two days with less news consumption has given me enough time to write this post! </p>



<p>Let&#8217;s see what a month looks like.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>My 2024 Year in Review</title>
		<link>https://adamfortuna.com/2024-year-in-review</link>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Betterment]]></category>
		<category><![CDATA[Highlights]]></category>
		<category><![CDATA[Journal]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Year In Review]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=19714</guid>

					<description><![CDATA[My top themes of the year were personal fitness &#038; health, Hardcover, and house. 🏡]]></description>
										<content:encoded><![CDATA[
<p>I’ve written a “year in review” post for the last fourteen years. I&nbsp;<a href="/write-your-year-in-review-post-now">highly recommend you try it</a>. It’s a time capsule that lets you reflect on the past year, appreciate parts of it that were great, and develop a plan for the next year. You can view any of the past 14 years’ posts here:&nbsp;<a href="/2010-year-review">2010</a>, &nbsp;<a href="/2011-year-review">2011</a>,&nbsp;&nbsp;<a href="/2012-year-review">2012</a>,&nbsp;&nbsp;<a href="/2013-year-review">2013</a>, &nbsp;<a href="/2014-year-review">2014</a>,&nbsp;&nbsp;<a href="/2015-year-review">2015</a>,&nbsp;&nbsp;<a href="/2016-year-review">2016</a>, &nbsp;<a href="/2017-year-review">2017</a>,&nbsp;&nbsp;<a href="/2018-year-review">2018</a>,&nbsp;<a href="/2019-year-review">2019</a>, <a href="/2020-year-review">2020</a>, <a href="/2021-year-review">2021</a>, <a href="https://adamfortuna.com/2022-year-in-review" data-type="post" data-id="9">2022</a> and <a href="https://adamfortuna.com/2023-year-in-review" data-type="post" data-id="19223">2023</a>.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="720" height="405" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01152248/70B2347D-EB52-40EA-AFE0-0410FECE3624.jpeg" alt="" class="wp-image-19752" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01152248/70B2347D-EB52-40EA-AFE0-0410FECE3624.jpeg 720w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01152248/70B2347D-EB52-40EA-AFE0-0410FECE3624-300x169.jpeg 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure>



<p>This felt like an in-between year. I didn&#8217;t undergo massive personal changes or life-changing injuries (like <a href="https://adamfortuna.com/acl" data-type="post" data-id="19040">tearing my ACL in 2022</a>). When I got into a routine I could stick with, I saw progress toward my goals and a massive sense of achievement. There are so many things that can go wrong, but this year things just seemed to <em>go right</em>.</p>



<p>My top themes of the year were <strong>personal fitness</strong> <strong>&amp; health</strong>, <strong>Hardcover</strong>, and <strong>house</strong>. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3e1.png" alt="🏡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>I focused a bunch on <strong>personal fitness &amp; health</strong>. After spending 2023 in physical therapy, in 2024 I started hitting the gym more (3x a week), working with an online personal trainer, and tracking calories (using the <a href="https://www.loseit.com/">LoseIt app</a>). I ended up losing 20 lbs (170 lbs → 150 lbs)! According to my body composition scale, I put on 10 lbs of muscle too. Having someone online to be accountable to helped keep me on track. Since November, I&#8217;ve slowed my pace and put a few pounds back on, but I&#8217;m also lifting even heavier at the gym, so some of it should be muscle. A few of my highlights have been hitting 570lbs on leg press, 110lbs on dumbbell bench press and lots of body weight dips (15 reps for each of those)   <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f91e.png" alt="🤞" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>On the <strong>Hardcover</strong> side, a lot happened. We grew from 5k users to 23k. From 40 subscribers to 215. From not profitable to <em>maybe</em> profitable. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f64c.png" alt="🙌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> We launched a redesign, updated progress tracking, <a href="https://hardcover.app/blog/letterbooks">Letterbooks</a>, reading journals, <a href="https://hardcover.app/blog/how-we-survived-10k-requests-second-switching-to-signed-urls">survived a scrapping attempt</a>, planned advanced stats, acquired another site (which fell through) and so much more. I spent on average 25 hours a week working on Hardcover. We&#8217;re planning a big update for January I&#8217;ve been working on for the last 3 months.</p>



<p>In September a <strong>house</strong> went up for sale on my daily walk route in the Avenues of Salt Lake City that made me want to go and see it. It was a somewhat crazy house that we saw with a realtor, but it was both outside our price range and needed too much work. We continued looking, got under contract for one that fell through (&#8220;it&#8217;s falling in on itself&#8221; &#8211; our inspector), and eventually found a place we love in November, 2 days after we returned from our trip. We put in an offer, and closed on the house on Friday, December 27, 2024! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f973.png" alt="🥳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> There are a few things to do before we move in, but it&#8217;s close to move-in ready.</p>



<p>Having a <strong>routine</strong> was a key part of this year&#8217;s enjoyment. Since leaving my job 6 years ago, I&#8217;ve tried lots of different schedules. I don&#8217;t see that changing anytime soon. My routine this year has revolved around a few <a href="https://adamfortuna.com/keystone-habits" data-type="post" data-id="5768">keystone habits</a>: Gym (6-8 am, MWF), Peloton (8 am, TR), run (R), allergy shots (M), errands (M), Hardcover Live (W), Date day (R), Takeout date night (F), gaming with kids (Sun), Video Chat with friends (W).</p>



<p>I&#8217;ve identified many things I want to <strong>learn</strong> and dedicated quite hours to them. These include deploying websites using Kubernetes, Tensorflow &amp; related machine learning techniques, React Native for mobile development and automating workflows using Make and AI. To my surprise, the technologies I learned the most about ended up being Inertia.js and Kamal –&nbsp;two pieces I&#8217;m using right now for the Hardcover migration from Google Cloud and Heroku to <a href="https://m.do.co/c/90c45966d897">Digital Ocean</a>. I wouldn&#8217;t call myself an expert in any of these, but I&#8217;ll continue learning as I go.</p>



<p>Even good years have <strong>down notes</strong>. We said goodbye to 3 more friends who moved away from Salt Lake City. I spent too much time on TikTok and Reddit, which meant less reading or learning. I was constantly stressed out about Hardcover. Trying to grow it, fix bugs, and keep plates spinning while trying to enjoy learning has been stressful. I felt disorganized for much of this year –&nbsp;likely a byproduct of misaligned priorities. Someone was elected who I don&#8217;t support (putting it mildly here). </p>



<p>The 2024 US Presidential election topped the news. Trump was found guilty of 34 felonies. The Paris Summer Olympics gave us breakdancing.</p>



<h2 class="wp-block-heading">My 2024 Month By Month</h2>



<p>A few years ago, I started doing a monthly breakdown. I love being able to look back and see what I thought was most important each month.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153413/2B206EAC-1819-4CA6-9F86-4486750D4EFC_1_105_c-900x675.jpeg" alt="" class="wp-image-19755" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153413/2B206EAC-1819-4CA6-9F86-4486750D4EFC_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153413/2B206EAC-1819-4CA6-9F86-4486750D4EFC_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153413/2B206EAC-1819-4CA6-9F86-4486750D4EFC_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153413/2B206EAC-1819-4CA6-9F86-4486750D4EFC_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>January</strong>: Sundance Film Festival, Jazz Game.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="675" height="900" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153431/A43B56BF-F089-4563-A5DB-D0D04C14FC79-675x900.jpeg" alt="" class="wp-image-19756" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153431/A43B56BF-F089-4563-A5DB-D0D04C14FC79-675x900.jpeg 675w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153431/A43B56BF-F089-4563-A5DB-D0D04C14FC79-225x300.jpeg 225w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153431/A43B56BF-F089-4563-A5DB-D0D04C14FC79.jpeg 768w" sizes="auto, (max-width: 675px) 100vw, 675px" /></figure>



<p><strong>February</strong>: Apple Vision Pro, Superbowl with friends, Broadway Rave, Comedy Church, our 18-year anniversary, Dune 2.</p>



<p><strong>March</strong>: Oscar Party, trip planning, librarian updates on Hardcover.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="506" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153656/DC825CF9-809A-4EA3-9C9A-C4732D1082CB_1_105_c-900x506.jpeg" alt="" class="wp-image-19757" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153656/DC825CF9-809A-4EA3-9C9A-C4732D1082CB_1_105_c-900x506.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153656/DC825CF9-809A-4EA3-9C9A-C4732D1082CB_1_105_c-300x169.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153656/DC825CF9-809A-4EA3-9C9A-C4732D1082CB_1_105_c-768x432.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153656/DC825CF9-809A-4EA3-9C9A-C4732D1082CB_1_105_c.jpeg 1182w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>April</strong>: South Korea for two weeks during cherry blossom season! Started working out with an online personal trainer. Ski &amp; Snowboard lesson with Marilyn.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153741/34D241DB-0925-4791-9280-EFF3385958ED_1_105_c-900x675.jpeg" alt="" class="wp-image-19758" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153741/34D241DB-0925-4791-9280-EFF3385958ED_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153741/34D241DB-0925-4791-9280-EFF3385958ED_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153741/34D241DB-0925-4791-9280-EFF3385958ED_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153741/34D241DB-0925-4791-9280-EFF3385958ED_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>May</strong>:  Hardcover redesign and Letterbooks. Metric concert. My 42nd birthday! Started allergy shots. Saw Death Cab for Cutie, The Postal Service, Belle and Sebastian and TV Girl at the Kilby Block Party Concert. Furiosa. Eurovision.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153759/EACDFCD2-365F-4DEF-B7FB-97DF6C0B9BEB_1_105_c-900x675.jpeg" alt="" class="wp-image-19759" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153759/EACDFCD2-365F-4DEF-B7FB-97DF6C0B9BEB_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153759/EACDFCD2-365F-4DEF-B7FB-97DF6C0B9BEB_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153759/EACDFCD2-365F-4DEF-B7FB-97DF6C0B9BEB_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153759/EACDFCD2-365F-4DEF-B7FB-97DF6C0B9BEB_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>June</strong>: Fortuna Family reunion! Friends moving away from SLC.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153847/F2E49191-6450-4097-9A8B-911487C6CE81_1_105_c-900x675.jpeg" alt="" class="wp-image-19760" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153847/F2E49191-6450-4097-9A8B-911487C6CE81_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153847/F2E49191-6450-4097-9A8B-911487C6CE81_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153847/F2E49191-6450-4097-9A8B-911487C6CE81_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153847/F2E49191-6450-4097-9A8B-911487C6CE81_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>July</strong>: Deadpool &amp; Wolverine. Pie and Beer day. Jewel and Melissa Etheridge concert at Red Butte Garden. Paris Summer Olympics. Retro games tournament for friends birthday party.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153905/5C4B7E95-471B-4791-96F1-023D7C2C64B7_1_105_c-900x675.jpeg" alt="" class="wp-image-19761" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153905/5C4B7E95-471B-4791-96F1-023D7C2C64B7_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153905/5C4B7E95-471B-4791-96F1-023D7C2C64B7_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153905/5C4B7E95-471B-4791-96F1-023D7C2C64B7_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01153905/5C4B7E95-471B-4791-96F1-023D7C2C64B7_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>August</strong>: Marilyns Birthday vinyl, tacos and dinner with Marilyn. Paint night with Marilyn. Pink Martini Concert at Red Butte Garden. SLC Soccer game.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="675" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154202/56FE4A5B-1A8B-49E8-9B35-5013F22CE9CD_1_105_c-900x675.jpeg" alt="" class="wp-image-19762" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154202/56FE4A5B-1A8B-49E8-9B35-5013F22CE9CD_1_105_c-900x675.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154202/56FE4A5B-1A8B-49E8-9B35-5013F22CE9CD_1_105_c-300x225.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154202/56FE4A5B-1A8B-49E8-9B35-5013F22CE9CD_1_105_c-768x576.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154202/56FE4A5B-1A8B-49E8-9B35-5013F22CE9CD_1_105_c.jpeg 1024w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>September</strong>: Utah JS Conference, Atsuko Okasuka comedy show, Eat Drink SLC, house hunting, researching SBLOC loans, Fanx Convention. </p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="506" height="900" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154416/20241020_161202-506x900.jpg" alt="" class="wp-image-19763" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154416/20241020_161202-506x900.jpg 506w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154416/20241020_161202-169x300.jpg 169w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154416/20241020_161202-768x1365.jpg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154416/20241020_161202-864x1536.jpg 864w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154416/20241020_161202.jpg 1078w" sizes="auto, (max-width: 506px) 100vw, 506px" /></figure>



<p><strong>October</strong>: Offer on the house (didn&#8217;t go through), trip to Barcelona, then cruise to Portugal and Morocco.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="506" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154555/E1348514-1BFD-431D-A4F4-881C04108D4C_1_102_o-900x506.jpeg" alt="" class="wp-image-19766" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154555/E1348514-1BFD-431D-A4F4-881C04108D4C_1_102_o-900x506.jpeg 900w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154555/E1348514-1BFD-431D-A4F4-881C04108D4C_1_102_o-300x169.jpeg 300w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154555/E1348514-1BFD-431D-A4F4-881C04108D4C_1_102_o-768x432.jpeg 768w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154555/E1348514-1BFD-431D-A4F4-881C04108D4C_1_102_o-1536x864.jpeg 1536w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154555/E1348514-1BFD-431D-A4F4-881C04108D4C_1_102_o-2048x1152.jpeg 2048w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p><strong>November</strong>: Election, accepted offer on house, Outlander, Hardcover migration, Kevin Smith, Thanksgiving day parade with mimosas and dinner with friends.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="675" height="900" src="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154732/7EEF5F10-E8EE-49D6-A053-E855EF423A5B_1_105_c-675x900.jpeg" alt="" class="wp-image-19767" srcset="https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154732/7EEF5F10-E8EE-49D6-A053-E855EF423A5B_1_105_c-675x900.jpeg 675w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154732/7EEF5F10-E8EE-49D6-A053-E855EF423A5B_1_105_c-225x300.jpeg 225w, https://af-wordpress.storage.googleapis.com/uploads/2025/01/01154732/7EEF5F10-E8EE-49D6-A053-E855EF423A5B_1_105_c.jpeg 768w" sizes="auto, (max-width: 675px) 100vw, 675px" /></figure>



<p><strong>December</strong>: Dragonsteel convention, cozy Christmas, dinner and Christmas windows at The Grand America, white elephant exchange, closed on the house! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f973.png" alt="🥳" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading">Yearly Favorites</h2>



<p><strong>Favorite Spot I Visited</strong>: Seoul in South Korea! We spent two weeks exploring the city, going to different districts and getting a feel of the city. The older I get, the more I enjoy going deep in a specific area rather than exploring a wide range. I&#8217;d like to go back again and spend time in Busan, Jeju and even more time in Seoul.</p>



<p><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><strong>Favorite Meal</strong>: We went on a Seoul food tour,</span> which was easily the best food I&#8217;ve ever been on. We were guided through more than a dozen stops, trying dishes featured on Netflix and the best friend chicken I&#8217;ve ever had. Marilyn and I had a romantic, fancy dinner at Table X for our 18-year anniversary.</p>



<p><strong>Favorite Video Game I played</strong>: This year I didn&#8217;t play as many games as past years. I spent more time with my old favorites rather than start new ones. That included Stardew Valley 1.6, replaying Hollow Knight, and Overcooked.</p>



<p><strong>Favorite Board Game I played</strong>: Terra Mystica was a fun new one I played with friends and then started playing on Steam. Marilyn and I played a TON of Wyrmspan &#8211; the successor to Wingspan. I might even say I prefer to Wingspan. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fae2.png" alt="🫢" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><strong>Favorite Concert</strong>: Jewel and Melissa Etheridge was great. Metric was fun.</p>



<p><strong>Favorite Live Event</strong>: Going to Marilyns first Utah Jazz game, Chris Harwick&#8217;s comedy show, watching Eurovision live, Kevin Smith Live.</p>



<p><strong>Favorite Hike</strong>: During our trip to Seoul, we had one of the most amazing and memorable hikes I&#8217;ve ever been on. Led by a folklore professor who moved from Canada to South Korea, we visited shamanic sites, ancient ramparts, and Buddhist temples while listening to mythic stories before enjoying a delicious post-hike meal together with some Mogui.</p>



<p><strong>Favorite Movies</strong>: My 5<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> movies for this year include Dune 2, It&#8217;s What&#8217;s Inside, Your Monster, Furiosa, and Monkey Man.</p>



<p><strong>Favorite Shows</strong>: House of the Dragon, Shogun, Fallout, Three Body Problem (the Netflix US one), X-Men ’97, True Detective: Night Country, Fargo S5, Silo, Outlander, Dark Matter, Dune Prophecy, Shogun.</p>



<p><strong>Favorite Podcasts</strong>: I&#8217;ve mostly stopped listening to podcasts and switched to audiobooks. Search Engine is one of the only ones I&#8217;m currently on.</p>



<p><strong>Favorite Books</strong>: Reread The Three-Body Problem Trilogy (+ the 4th book by another author), all of the Berserk Manga, Monstress, Before We Say Goodbye (Before the Coffee Gets Cold #4), Lessons In Chemistry, The Creative Act, Convenience Store Woman, Iron Widow, The Tainted Cup, Funny Story, Starter Villain, Invincible (the comic), the entire A Court of Thorns and Roses series. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://hardcover.app/@adam/goals/5504/card?order=user_books_rating&amp;direction=desc">See all of my favorites here</a>.</p>



<p><strong>Favorite new programming discovery</strong>: Kamal for deploying Rails apps has given me the confidence to move off Heroku finally. That opens up a ton of possibilities for where and what I can host.</p>



<p><strong>Favorite Project</strong>: Hardcover, of course. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><strong>Favorite Course or Education Experience</strong>: Learning Kubernetes was fun, but the courses weren&#8217;t the best. I enjoyed some random Youtube videos to better understand python data science which were more helpful than courses I&#8217;ve tried to take that focus so much on math and not on how to use Python to solve them.</p>



<h2 class="wp-block-heading">Noteworthy Changes this Year</h2>



<p>There are many things I started this year where the payoff will be in 2025: Hardcover migration, allergy shots, and buying a home. It&#8217;s felt like I worked a lot on things this year to have an even better 2025. Fortunately, the work was enjoyable.</p>



<p>There were some times this year when my stress level peaked higher than it has in the past few years. It&#8217;s sometimes tough to know if it&#8217;s because I&#8217;m pushing myself too hard, or just taking on hard challenges. I&#8217;d like to write and journal more in 2025, which will help relieve some of the pressure.</p>



<h2 class="wp-block-heading">How&#8217;d I Do On My 2023 Resolutions?</h2>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Get a dog!</strong> &#8211; I started getting allergy shots in April, finished them in October, and now only need to get one a month for maintenance. With the move coming up, we decided to hold off on bringing in a new family member until we&#8217;re settled in the new place. I&#8217;ll still consider this as &#8220;done&#8221; as we did what we wanted &#8211; which is prepare for it.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Traveling to South Korea!</strong> &#8211; The two-week trip was so much fun! Food tours, hikes, cafes, temples, cocktails, shopping and sooo much good food.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Hardcover is growing!</strong> &#8211; We grew from 5k members to 22.5k in a year, which is amazing. If we 4x our pace again in 2025, we&#8217;ll hit 100k members. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f631.png" alt="😱" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Make fitness fun</strong> &#8211; I very much enjoyed going for walks after lunch, and even going to the gym earlier by getting up at 6 am. I thought I was done waking up early when I didn&#8217;t have to, but it&#8217;s been nice.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f937.png" alt="🤷" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Balance consumption, creation and movement</strong> &#8211; I balanced movement. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> But then spent way too much time on Reddit and TikTok this year. When Reddit starts telling you your streak is 75 days maybe that&#8217;s a good indicator that you&#8217;re on there too much.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Plan for fun</strong> &#8211; We reserved Thursdays for dates most of this year. It was great having a dedicated day for that to put down work and focus on just having fun and being tourists in our own city. We fell of that schedule in November, but want to pick it up again.</p>



<p>Overall I&#8217;m happy with these goals and the progress for the year. They weren&#8217;t as specific as some year&#8217;s goals, but when I think about the gains I made in each area, they feel right.</p>



<h2 class="wp-block-heading">What’s Next for 2025?</h2>



<p>I wrote many parts of this post ahead of time, but I waited until the beginning of 2025 to write this section. Some years, <a href="https://adamfortuna.com/a-year-of-monthly-themes">I set a theme</a> for the year. </p>



<p>For 2025, I&#8217;ve decided on one thing that inspires me: <strong>Now</strong>. It&#8217;s about not overthinking and overplanning and just making progress <em>now</em>. Done is better than perfect. Routines form because you take repeated action, not because you plan them perfectly. That&#8217;s the mindset I&#8217;m trying to instill into my brain.</p>



<p>It doesn&#8217;t mean that I can&#8217;t also relax, read, spend time on social media and even bed rot occasionally. But at those times when I&#8217;m relaxing and wondering, &#8220;Should I do X?&#8221; The answer is yes; if I&#8217;m wondering that, then I should do it. I trust myself to use this to spur action while giving space for relaxation.</p>



<p><strong>Create a Hygge Home</strong> &#8211; Hygge is a Danish and Norwegian word that describes a feeling of contentment and coziness. That&#8217;s the feeling I&#8217;m hoping to create in the new place. I want to feel relaxed, warm, and not cluttered.</p>



<p><strong>Play lots of games</strong> (<strong>board and video</strong>) &#8211; I love playing board games. In college one of the first websites I created with a Settlers of Catan League for my friends and I to track our gaming. With the new house, I&#8217;m most excited about hanging out with friends more and playing games (and playing them together with Marilyn). We even ordered a <a href="https://bandpassdesign.com/collections/products/products/the-dresden">Dresden Gaming Table</a> for the house that I can&#8217;t wait to try! My focus will be on playing games I already own to start before getting new ones. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><strong>Welcome a dog</strong> &#8211; Once we&#8217;re settled, we&#8217;re excited to welcome a dog into our lives. I&#8217;ve been spending time with friends dogs and confirmed that I <em>don&#8217;t die</em>, which is a good sign. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p><strong>Write at least one post here a month</strong> &#8211; Writing helps me relieve anxiety. The downside is having another task can cause anxiety. Rather than trying to focus on writing something world-changing, I&#8217;d like to just write <em>something</em>. Even if it&#8217;s just a life update.</p>



<p><strong>Work on a side project</strong> (<strong>tech-specific</strong>) &#8211; As much as I love Hardcover, I want to have at least one other project to work on. There&#8217;s something that happens when you can toggle between projects that results in both of them being better because of it. This past year I, focused almost exclusively on Hardcover. I have a few ideas for this, but I still need to narrow it down. It&#8217;ll probably be one of these (or all <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" />): Line of Thought journal (iOS app), adamfortuna.com migration from Next.js to Astro, Raspberry pi connected to lights. The last one is an idea in my head to create a data visualization with a hundred square lights that can both react to sound or set it to different modes (relaxing, active, etc). Still more planning, but like the idea.</p>



<p><strong>Continue learning Japanese</strong> &#8211; I&#8217;m putting this one here one more time this year. I&#8217;ve started thinking about going on a work trip to Japan in 2026 for a month &#8211; maybe even with my cofounder Ste for part of it! It wouldn&#8217;t be a tourism-focused trip, but more work and routine focused in a new environment. Having this trip in my mind inspires me to learn more.</p>



<p><strong>Continue enjoying fitness</strong> &#8211; I was more focused on this than usual for 6 months of 2024 while working with a trainer. I found that fun, but it was also emotionally taxing to track everything I ate and workout 6 times a week. After that experience, eating mostly healthy and working out 4-5 times a week feels like a vacation. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to continue doing that, while mixing things up so I keep having fun. I&#8217;m excited that we&#8217;ll have a park a block away from us that I can run at too! I&#8217;ll likely start running more just from the proximity there. There&#8217;s another gym within walking distance that has Olympic lifting platforms. I&#8217;d to to get back into that if it works out, but if not I&#8217;ll find other ways to have fun.</p>



<p><strong>Grow Hardcover to ramen profitability</strong> &#8211; This is a bit of a scary one. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Hardcover made $1,274 in December, which is amazing. My dream it to continue working on this project for many years, but for that to happen we&#8217;ll need to be able to support our lifestyle with it. Fortunately, our expenses are low, so it doesn&#8217;t need to generate much income. My dream is to be able to live a life supported by side projects that I love working on. I already love working on Hardcover, and if I can turn it into my source of income, that would be a dream come true. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f973.png" alt="🥳" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading">Thanks for Reading</h2>



<p>Whew, that was a lot. 2600 words, a lot. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" />  Thanks for reading, and have a great 2025!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>My Second Term Plan</title>
		<link>https://adamfortuna.com/my-second-term-plan</link>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Wed, 06 Nov 2024 23:06:52 +0000</pubDate>
				<category><![CDATA[Adam Fortuna]]></category>
		<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Betterment]]></category>
		<category><![CDATA[Journal]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=19722</guid>

					<description><![CDATA[What I'm shifting my attention to over the next 4 years.]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="900" height="600" src="https://af-wordpress.storage.googleapis.com/uploads/2024/11/06231007/dyogenez_a_complex_symbolic_representation_of_of_making_a_plan__106f7333-0232-436f-861c-f571a9154e4f-900x600.png" alt="" class="wp-image-19726" srcset="https://af-wordpress.storage.googleapis.com/uploads/2024/11/06231007/dyogenez_a_complex_symbolic_representation_of_of_making_a_plan__106f7333-0232-436f-861c-f571a9154e4f-900x600.png 900w, https://af-wordpress.storage.googleapis.com/uploads/2024/11/06231007/dyogenez_a_complex_symbolic_representation_of_of_making_a_plan__106f7333-0232-436f-861c-f571a9154e4f-300x200.png 300w, https://af-wordpress.storage.googleapis.com/uploads/2024/11/06231007/dyogenez_a_complex_symbolic_representation_of_of_making_a_plan__106f7333-0232-436f-861c-f571a9154e4f-768x512.png 768w, https://af-wordpress.storage.googleapis.com/uploads/2024/11/06231007/dyogenez_a_complex_symbolic_representation_of_of_making_a_plan__106f7333-0232-436f-861c-f571a9154e4f.png 1344w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>Like many Americans, I woke up to a different world than I was expecting this morning. While I initially compared this feeling to 2016, it felt a lot more like 2004 for me. In 2004, Bush was reelected &#8211; a vote for his politics and brand of governorship that America wanted more of – even though I couldn&#8217;t stand him.</p>



<p>I spent over 12 hours watching the news, reading Reddit, and watching TikTok yesterday. It was the most I&#8217;ve doom-scrolled in quite a while, and it&#8217;s not something I&#8217;d like to make a habit of.</p>



<p>This comes immediately after my wife and I got back last week from a 16-day trip to Barcelona, Spain, and a cruise (Barcelona, Spain → Lisbon, Portugal → Porto, Portugal → Tangier, Morocco → Cadiz, Spain → Barcelona, Spain). During the cruise, I was utterly disconnected from the internet. I couldn&#8217;t remember the last days I had zero internet use.</p>



<p>Whenever I get back from a trip, I try to change my routine immediately. Fortunately, it coincides with when I want to <strong>turn off the news</strong>. </p>



<p>I&#8217;ve found the best times to change are when I have no clear routine in the first place. When I got back from my two-week Korea trip earlier this year, I started working with an online personal trainer, which was an incredibly beneficial change.</p>



<p>During the trip, I started brainstorming changes I wanted to make in my day-to-day life. Here&#8217;s what I came up with:</p>



<h2 class="wp-block-heading">Redefine My Relationship with News and Social Media</h2>



<p>For me, this means Reddit and TikTok. Both are platforms I can scroll on for hours. It&#8217;s unhealthy even in the best times. Now, in the time after the election, I know it&#8217;s going to be rough. </p>



<p>The time leading up to the 2016 election, and pretty much his entire first term, was a slow boil to see how much news and information I could take in. I&#8217;m following Kamala&#8217;s advice and not going back to that.</p>



<p>The goal of this would be:</p>



<p>&#8211; Completely stop using Reddit, TikTok and The New York Times (Only use TikTok for Hardcover).<br>+ More time reading books. I&#8217;m excited about this one! I read 2.5 books during my vacation and already feel my ability to focus for long stretches increasing. <br>+ More time writing blog posts<br>+ More time in general for other things</p>



<p>I&#8217;m not sure how I&#8217;ll keep myself informed about the news in a healthy way (any recommendations for that). I aim to spend more time on other social media (Mastodon, Facebook, Instagram, Threads). I suspect I&#8217;ll hear enough about what&#8217;s happening through those without relying on Reddit/NY Times.</p>



<h2 class="wp-block-heading">Continue Learning Japanese</h2>



<p>I fell out of this habit sometime last year, partly because I lacked a clear goal. I no longer wanted to live there or pass the NL1 proficiency test, which left me without a clear motivation. </p>



<p>After some reflection on this, and after watching <a href="https://letterboxd.com/film/perfect-days-2023/">Perfect Days</a>, I came up with a goal (still very new, I&#8217;ll see if it sticks <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" />): In 2026, work from Japan for a month to celebrate Hardcover&#8217;s 5-year anniversary. That&#8217;s still a year and a half away, which gives me a lot of time to learn and anticipate this. It also checks about 4 of my <a href="/goals">goals</a>.</p>



<p>The goal of this would be:<br>+ Learn how to read Japanese at a basic level<br>+ Learn basic conversational Japanese, focusing on what would be needed to survive there for a month<br>+ Prepare to live in Japan for a month!</p>



<p>Right now my plan includes <a href="https://www.wanikani.com/">WaniKani</a> (for learning kanji), <a href="https://www.pimsleur.com/learn-japanese/">Pimsleur&#8217;s Japanese course</a> (for speaking) and <a href="https://www.amazon.com/Japanese-Manga-Way-Illustrated-Structure/dp/1880656906">Japanese the Manga Way</a> (for grammar and structure).</p>



<p>If you have something that worked for you to learn Japanese, I&#8217;d love to hear about it!</p>



<h2 class="wp-block-heading">Change to Maintenance Mode for Health and Fitness</h2>



<p>In the last <span style="box-sizing: border-box; margin: 0px; padding: 0px;">six months, I have focused a lot on my health. I tracked all of my calories (using <a href="https://www.loseit.com/" target="_blank" rel="noopener">LoseIt</a>), went to the gym three times a week, and </span>did cardio three times a week (usually Peloton or a run). I rarely had any alcohol. I minimized my desserts and didn&#8217;t eat out much. I targeted 1900 calories a day.</p>



<p>I lost 17 pounds (171 lbs → 154 lbs) while putting on 5 pounds of muscle (!).</p>



<p>At no time during this did it feel like I was depriving myself, but by the end it felt like I was spending too much time focused on tracking every calorie rather than just enjoying food.</p>



<p>I want to switch to a more relaxed approach to health while maintaining my current weight. This will mean less time focusing on the how and more time enjoying food and my current fitness level.</p>



<p>The goal of this would be:</p>



<p>&#8211; Stop tracking my foods<br>+ Continue with daily weigh-ins. Those will help verify if my exercise === calories in a similar way as tracking.<br>+ Switch from 6 exercise days a week down to 5. <br>+ Focus on getting 6k steps daily on weight training and Peloton days and 10k steps on all other days. (<em>exceptions allowed if it&#8217;s rainy/snowy</em>).<br>+ Whenever I go grocery shopping (about every other week), make a plan to get ingredients for a new recipe</p>



<h2 class="wp-block-heading">Do a Weekly Review</h2>



<p>I&#8217;ve written about <a href="https://adamfortuna.com/weekly-review" data-type="post" data-id="5975">weekly reviews</a> before. I&#8217;ve tried <a href="https://adamfortuna.com/challenge-yourself-with-weekly-task-planning-using-todoist" data-type="post" data-id="5888">weekly task organization</a> too. This is a chance to check in with myself and see how I&#8217;m doing. </p>



<p>Lately, I&#8217;ve let these reviews swing entirely too much toward productivity and away from overall happiness. I want to switch more in that direction &#8211; using these as a chance to see if what I&#8217;m doing is making me happy or not. </p>



<p>The goal of this would be:</p>



<p>+ Conduct a weekly personal review. I do these in Notion in a folder for personal > reviews > 2024. <br>+ Focus on personal happiness and my relationship, not productivity.</p>



<h2 class="wp-block-heading">Aggressively Say No</h2>



<p>I was reading <a href="https://hardcover.app/books/slow-productivity">Slow Productivity</a> by Cal Newport during my vacation and a number of things stuck with me. The TLDR of the book is this on page 8:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>A philosphy for organizing knowledge work efforts in a sustainable and meaningful mannerm based on the following three principles:</p>



<ol class="wp-block-list">
<li>Do fewer things.</li>



<li>Work at a natural pace.</li>



<li>Obsess over quality.</li>
</ol>
</blockquote>



<p>My weekly review is a chance to verify I&#8217;m doing #2. I tend to obsess over speed more than quality while also taking on more than I often should.</p>



<p>The solution to this is to get better at saying no. That can mean saying no to working on a new Hardcover feature. Saying no to myself when I say, &#8220;I should build &lt;insert new idea here>.&#8221; It can mean saying no when I say, &#8220;This barely works, but it&#8217;s good enough,&#8221; and instead write some damn tests (or, more likely, let Claude write them <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" />).</p>



<p>The goal of this would be:</p>



<p>+ Be happy with whatever my output is &#8211; both in scope and depth<br>+ Create a sustainable pace for knowledge work</p>



<h2 class="wp-block-heading">Focus on What You Can Change</h2>



<p>The theme of all these is taking a step away from the news and distracting myself from *gestures broadly* <em>everything</em>.</p>



<p>I want to miss out on a constant barrage of destructive decisions by politicians, grifts to extract money, agencies gutted, courts packed, and everything else that will surely happen over the next 4 years.</p>



<p>Being able to tune this out daily and instead only look at the news occasionally is a privilege. I fully understand that. I still plan to support all the same politicians and politicians as before. I&#8217;ll be out holding signs at rallies protesting against whatever new right is being taken away. And who knows what else.</p>



<p>But what I won&#8217;t do is let myself drift into a doom-scrolling cycle that lasts a presidential term.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Make My 40s My Best Decade Every: Year 2 Update</title>
		<link>https://adamfortuna.com/40-year-2</link>
		
		<dc:creator><![CDATA[Adam Fortuna]]></dc:creator>
		<pubDate>Sun, 28 Jul 2024 21:16:33 +0000</pubDate>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[Betterment]]></category>
		<category><![CDATA[Journal]]></category>
		<guid isPermaLink="false">https://adamfortuna.com/?p=19711</guid>

					<description><![CDATA[Two years ago when I turned 40 I set out some ambitious goals for the next 10 years. The highlight was the line: I want to make my 40s my best decade of my life (so far). No pressure right. 😂 In the first 3 months of my 40s I tore my ACL, had surgery, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Two years ago when I turned 40 I set out <a href="https://adamfortuna.com/40" data-type="post" data-id="27">some ambitious goals</a> for the next 10 years.</p>



<p>The highlight was the line:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>I want to make my 40s my best decade of my life (so far).</p>
</blockquote>



<p>No pressure right. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>In the first 3 months of my 40s I tore my ACL, had surgery, had to let someone go from the Hardcover team and our 14-year old dog passed away.</p>



<p>It was a rough start.</p>



<p>Fortunately things have improved since then. <strong>I&#8217;ve tried to concentrate on not stressing myself out with additional pressure</strong>. I tend to put the most pressure on myself, and by it&#8217;s been amazing just dialing that down a little bit and noticing that I&#8217;m happier and less stressed.</p>



<p>I&#8217;ve also started <strong>drinking a lot less</strong>. Probably down from 8 drinks a week to more like 2-3. This was a result of two changes: not drinking at home and only having one drink when I&#8217;m out with friends or on a date with my wife.</p>



<p></p>



<h2 class="wp-block-heading">By the time I’m 41…</h2>



<p>Here are some of the goals I set out for my first year.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to be able to hike the mountains of Utah (again)</h3>



<p>After months of physical therapy after my <a href="https://adamfortuna.com/acl" data-type="post" data-id="19040">ACL tear &amp; surgery</a>, I eventually recovered enough to hike again! In year 1 I didn&#8217;t hike all that much. One hike I did complete was Black Mountain &#8211; a 10 mile hike to the highest mountian we can view from our apartment window. </p>



<p>I attempted this same hike a few years ago in May, but there was too much ice in the scrambling part to complete it at that time. Doing it in July, on the 1-year anniversary of my ACL surgery, felt cathartic. Like I was finishing a book I&#8217;d left 95% completed.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to get back to the point where I’m physically fit</h3>



<p>&#8220;Fit&#8221; can mean a lot of things. My intention when I wrote this was that I wouldn&#8217;t want to use my knee as an excuse for <strong><em>not doing something</em></strong>. I&#8217;m not sure if I reached this in year one, but I&#8217;ve for sure reached it now. I&#8217;ve been skiing again, stood for hours at music festivals and concerts, run long distances (well, 10k <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" />), and overall just haven&#8217;t worried about not being able to do something.:</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to grow Hardcover to pay for my food &amp; housing</h3>



<p>This one was always going to be a long shot. Hardcover did grow to over $1k in revenue per month, but our costs have grown too. We&#8217;re very close to breaking even. With over 1,600 users active each week, it&#8217;s a very lively place! We have some plans to increase revenue that we&#8217;re working on for this year.</p>



<h2 class="wp-block-heading">By the time I’m 45…</h2>



<p>I also set a few longer term goals.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f51c.png" alt="🔜" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to learn how to build mobile apps</h3>



<p>Earlier this year I spent some time <a href="https://adamfortuna.com/learning-swiftui" data-type="post" data-id="19491">learning SwitftUI</a>. Alongside a group of random people from Discord, we launched <a href="https://spacetube.app/">SpaceTube</a>, YouTube for Spatial videos on the Apple Vision Pro. It was a fun, quick project.</p>



<p>However I wouldn&#8217;t say I <em>learned how to build mobile apps</em> as part of this.</p>



<p>I did learn that perhaps SwiftUI isn&#8217;t the path I want to go. Instead I&#8217;ve started learning React Native instead. I&#8217;m already comfortable with React, and it works on both Android and iOS. It&#8217;s likely we&#8217;ll move Hardcover to React Native someday &#8211; but I have a lot to learn first.</p>



<p>My hope right now is to switch Line of Thought from a web app to a mobile-only app using React Native and HealthKit. I have such a clear idea of the app I want to build – I just need to build it! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f605.png" alt="😅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2753.png" alt="❓" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to go on a 6-week (or longer) international trip</h3>



<p>This is a tricky one logistically. We&#8217;re planning to adopt a dog later this year. I wouldn&#8217;t want to leave our new family member alone, or with a stranger for that long a period of time. I&#8217;m unsure how this will work into actual plans.</p>



<p>We did spend two weeks in Korea in April 2024 which was amazing though! It reminded me how much I love being in a new city, eating new food and having new experiences every day.</p>



<p>Where would I/we go? I&#8217;m not sure. I&#8217;d love to spend more time in Japan. I could see many parts of Asia being amazing for an extended trip. I&#8217;ll keep thinking about this one for now.</p>



<p>Or maybe we&#8217;ll just decide to leave the US altogether based on the next election. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f937.png" alt="🤷" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f51c.png" alt="🔜" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to grow Hardcover into a successful business</h3>



<p>We&#8217;re making good progress on this. If Hardcover continues to grow 10x a year then I feel like this is only a matter of time. If our momentum slows down we may have to change course, but we&#8217;re not there yet.</p>



<p>For now it&#8217;s more about continuing to do what we&#8217;re doing! Listen to users and build what they want. Get the word out to more people. Find new people to work with. Repeat.</p>



<h2 class="wp-block-heading">By the time I’m 50…</h2>



<p>These were long-term when I set them. I have 8 years left. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2753.png" alt="❓" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to give away $1 million</h3>



<p>This is dependent on Hardcover (or another business) generating revenue. There&#8217;s only so much money anyone needs, and it&#8217;s not as much as most people think.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f51c.png" alt="🔜" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to visit all 50 states by the time I’m 50!</h3>



<p>This is only three trips away:</p>



<ul class="wp-block-list">
<li>Take an Alaskan Cruise. We have a bunch of friends in Seattle that might be up for this one too.</li>



<li>Take a trip to Hawaii. With the fire and deluge of tourism lately, it feels like going there would be adding to the problem locals face rather than helping. I&#8217;d still like to go &#8211; and not stay in an Airbnb).</li>



<li>Take a road trip to the midwest. All the states in the US I haven&#8217;t been to are all grouped together (Wisconsin, Minnesota, Iowa, North Dakota, South Dakota, Nebraska). We have some friends that moved to the Chicago area it&#8217;d be fun to road trip out to.</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2753.png" alt="❓" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to figure out where to live long-term</h3>



<p>Every year when our lease is up in our apartment we have the same discussions about where we should move. For the last year years we&#8217;ve been very happy here in SLC. The longer we stay here the more we love it!</p>



<p>To stay anywhere long-term we do like the idea of buying a house. What we could afford today would be a major step down from our apartment. That&#8217;s led us to be happy where we are.</p>



<p>If Hardcover ends up growing and providing some income, then I could see us having the ability to make a buying decision here. Until then, and until we know what direction our country is headed in, we&#8217;ll wait and see.</p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I want to fitness to be on autopilot</h2>



<p>I&#8217;m surprised to say I can actually check this one off already! Well, it&#8217;s not solved for good. Every plan needs to adapt to whatever life throws at it.</p>



<p>For now, my fitness plan includes:</p>



<ul class="wp-block-list">
<li>Go to the gym Monday, Wednesday and Friday.</li>



<li>Peloton or run Tuesday, Thursday and Saturday.</li>



<li>Take Sundays off.</li>
</ul>



<p>Fitness-wise I&#8217;m happy when where I&#8217;m at. I could walk a bit more, but that&#8217;s really it.</p>



<p>The hardest part was changing my morning schedule. Previous I&#8217;d sleep in as late as I wanted, then get up and have breakfast with my wife every day. In April I started workout out with an online personal trainer and waking up early for a morning workout 3x a week. Most days I end up waking up before my alarm and looking forward to going to the gym! It&#8217;s a chance to listen to audio books and wake myself up for the day.</p>



<h2 class="wp-block-heading">What&#8217;s Changed?</h2>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
