<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Stuart Harrell</title>
    <link>https://stuartharrell.com/posts/</link>
    <description>Recent content in Posts on Stuart Harrell</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>©2026 Stuart Harrell</copyright>
    <lastBuildDate>Thu, 11 Jun 2026 16:36:25 +0000</lastBuildDate>
    <atom:link href="https://stuartharrell.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Home Lab</title>
      <link>https://stuartharrell.com/posts/home-lab/</link>
      <pubDate>Thu, 11 Jun 2026 16:36:25 +0000</pubDate>
      <guid>https://stuartharrell.com/posts/home-lab/</guid>
      <description>I setup a home lab in my garage this year. It hosts a bunch of fun services like video streaming, local LLM inference, and web hosting. In fact, the website you are reading right now is being served from a web server in garage. I really enjoy setting these up since I like knowing how computer software works and setting up Linux systems is not something I get to do as a software engineer.</description>
      <content:encoded><![CDATA[<p>I setup a home lab in my garage this year. It hosts a bunch of fun services like video streaming, local LLM inference, and web hosting. In fact, the website you are reading right now is being served from a web server in garage. I really enjoy setting these up since I like knowing how computer software works and setting up Linux systems is not something I get to do as a software engineer.</p>
<p>Here is the current state of things. There are two general-purpose machines running proxmox and a beefier one with a GPU for LLM inference.</p>
<p><img src="images/homelab-overview.jpg" alt="Home lab overview"></p>
<h2 id="hardware">Hardware</h2>
<p>Here are the basic specs for each of the machines. For non-LLM use buying used Dell Optiplexes off Ebay is an amazing value. For the price of the inference server (which is quite modest by inference machine standards) I could have purchased 6 Dell Optiplexes!</p>
<p>Proxmox1:</p>
<ul>
<li>Operating System: Proxmox</li>
<li>Machine: Dell Optiplex 7070 Micro</li>
<li>Specs: 16GB RAM, 512GB NVMe SSD, Intel i7</li>
<li>Price: $230</li>
</ul>
<p>Proxmox2:</p>
<ul>
<li>Operating System: Proxmox</li>
<li>Machine: Dell Optiplex 7080 SFF</li>
<li>Specs: 32GB RAM, 256 NVMe SSD, Intel i5</li>
<li>Price: $450 ($250 for machine, $200 for 32GB RAM upgrade)</li>
</ul>
<p>Inference:</p>
<ul>
<li>Operating System: Ubuntu Server</li>
<li>Specs: 32GB RAM, 1 TB M.2 NVMe SSD, Ryzen 5</li>
<li>Graphics: NVIDIA RTX 5060 Ti 16GB</li>
<li>Price: $1500</li>
</ul>
<p>All the machines are connected to power via a 1500VA/900W UPS ($190). Networking is an unmanaged Gigabit switch ($20) and Google Nest WiFi router. Running servers off WiFi isn&rsquo;t ideal but I&rsquo;ve found it more than stable enough for my use.</p>
<h2 id="services">Services</h2>
<p>For Proxmox machines I try to keep one-service-per-container to keep things simple. Take a look at this screenshot of my Proxmox2 machine; each container is just named by the service it runs and you can easily monitor hardware usage.</p>
<p><img src="images/proxmox2-screenshot.jpg" alt="Proxmox2 containers"></p>
<p>Here&rsquo;s a quick run-down of the services I run sorted by most-used to least-used with a brief description of why I use each:</p>
<ul>
<li>Pi-hole: DNS resolver. I use it to block <a href="https://reddit.com">Reddit</a> and <a href="https://news.ycombinator.com">Hacker News</a> mainly.</li>
<li>Caddy: Web server. I use it to host this website!</li>
<li>Anki: Flash card server.</li>
<li>Pi-agent: Agentic coding harness.</li>
<li>Hermes: AI assistant.</li>
<li>Open WebUI: Chat harness.</li>
<li>Jellyfin: Video streaming server.</li>
<li>Radarr / Sonarr / Prowlarr: Automation for downloading movies &amp; shows.</li>
</ul>
<p>For the inference machine I run just one service:</p>
<ul>
<li>Ollama: Runs local LLM inference.</li>
</ul>
<p>For accessing these services outside my local network I use Tailscale. It&rsquo;s free and easy to setup.</p>
<h2 id="future">Future</h2>
<p>I&rsquo;m reasonably happy with the current state of things but here&rsquo;s what I&rsquo;d like to add in the future:</p>
<ol>
<li>NAS server: For video storage, backups.</li>
<li>Beefier inference machine: High VRAM GPUs are VERY expensive right now. I&rsquo;d love to pickup an RTX 5090 32GB but $5K is pricey for hobby use.</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>Bathroom Remodel</title>
      <link>https://stuartharrell.com/posts/bathroom-remodel/</link>
      <pubDate>Mon, 24 Jun 2024 13:31:50 +0000</pubDate>
      <guid>https://stuartharrell.com/posts/bathroom-remodel/</guid>
      <description>In 2023, I decided to remodel a guest bathroom that was showing its age. It took 8 months and was a great experience in learning home improvement skills. I did everything myself, including the demolition, tiling, painting, and installing the fixtures. The tiling was, by far, the most challenging which I&amp;rsquo;ll get into later.&#xA;Here is the completed result. I forgot to take before pictures, so this was actually taken from the listing photos from when we purchased the house.</description>
      <content:encoded><![CDATA[<p>In 2023, I decided to remodel a guest bathroom that was showing its age. It took 8 months and was a great experience in learning home improvement skills. I did everything myself, including the demolition, tiling, painting, and installing the fixtures. The tiling was, by far, the most challenging which I&rsquo;ll get into later.</p>
<p>Here is the completed result. I forgot to take before pictures, so this was actually taken from the listing photos from when we purchased the house.</p>
<figure><img src="/posts/bathroom-remodel/images/before-after.jpg"
    alt="Before and after"><figcaption>
      <p>Before and after</p>
    </figcaption>
</figure>

<h2 id="the-process">The Process</h2>
<h3 id="demolition">Demolition</h3>
<p>I approached the project in an iterative way. With my inexperience planning the entire project felt like too large of an endeavor so instead I just always focused on the next thing to do. And the first thing is always demolition.</p>
<p><img src="images/first-counter-demo.jpg" alt="Start of demolition">
<img src="images/trash-counter.jpg" alt="Counter removed"></p>
<p>I didn&rsquo;t plan on replacing the floor until discovering that no flooring was installed under the vanity. This meant having to remove all the existing flooring which was quite a challenge! The flooring was glued to the concrete foundation with a heavy-duty adhesive. This required many hours with a circular saw to cut the flooring into smaller pieces, a 6 ft crowbar to pry them up, and sometimes a hammer drill for the really pesky parts. And finally a grinder to remove all of the glue.</p>
<p><img src="images/floor-removed.jpg" alt="Wood floor removed">
<img src="images/floor-grinded.jpg" alt="Grinded floor"></p>
<h3 id="tile-floor">Tile Floor</h3>
<p>Next it was time to install tile but before that I had to ensure the concrete subfloor was flat enough. Large 24 x 12 inch tiles require the subfloor to vary &lt;1/8 inch over 10 feet. My concrete subfloor varied about a 1/2 inch so I had to apply concrete leveler.</p>
<p><img src="images/mixing-leveler.jpg" alt="Mixing the leveler">
<img src="images/leveled-floor.jpg" alt="Leveled floor"></p>
<p>Now I could finally install the tile. To avoid cracking, I used a decoupling membrane between the subfloor and tile (it&rsquo;s the orange layer in photos). Installing the tile went mostly smoothly but I used too much thinset and it squished into the gaps where the grout needed to go. This meant spending time with an oscillating multi-tool to clean it out and unfortunately chipping the edges of some of the tiles.</p>
<p><img src="images/laying-tile.jpg" alt="Laying tile">
<img src="images/finished-tile-floor.jpg" alt="Finished tile floor"></p>
<h3 id="exhaust-fan">Exhaust Fan</h3>
<p>I wanted to replace the exhaust fan also just because I wanted everything to be new. In retrospect the new fan wasn&rsquo;t significantly quieter than the 50-year old one but it does look nicer. The main challenge was working in such a confined space. I ended up enlarging the drywall cut multiple times when I should have just made a single large cut to begin with.</p>
<p>While up there I found a sandwich wrapper. Initially I had hoped this was from the original construction but apparently it was from just a couple years ago when the previous owner renovated the bathroom above.</p>
<p><img src="images/exhaust-fan-before-after.jpg" alt="Exhaust fan before/after">
<img src="images/sandwich-wrapper.jpg" alt="Sandwich wrapper"></p>
<h3 id="finishing-touches">Finishing Touches</h3>
<p>After tiling the floor I was feeling more confident in my abilities and wanted to try a herringbone pattern for the backsplash. I think it turned out well but I left too much gap on the sides which required a lot of caulking.</p>
<p><img src="images/herringbone-backsplash.jpg" alt="Herringbone backsplash"></p>
<p>To maximize the small space I opted for built-in shelves. They look chunky but they&rsquo;re actually hollow inside and it&rsquo;s just plywood around a 2x2 lumber skeleton.</p>
<p><img src="images/builtin-shelves.jpg" alt="Bult-in shelves"></p>
<p>Installing the fixtures went smoothly. The toilet and vanity are shown below.</p>
<p><img src="images/toilet-and-vanity.jpg" alt="Toilet and vanity"></p>
<p>My first time using a chop saw for the base boards resulted in me cutting the power cord. Oops!</p>
<p><img src="images/chopsaw-cord.jpg" alt="Chop saw cord cut"></p>
<p>And voila the bathroom is complete. Here is the final product.</p>
<p><img src="images/final-vanity.jpg" alt="Final vanity">
<img src="images/final-toilet.jpg" alt="Final toilet"></p>
<h2 id="cost-breakdown">Cost Breakdown</h2>
<p>Overall the cost including materials, tools, and fixtures (toilet, vanity, etc) was similar to what I would paid a handyman to do the same job in my area. But to me the benefit of learning how to do the work and being confident in my ability to fix things was worth it. Not to mention I have a respectable collection of tools for future projects.</p>
<p><img src="images/cost-breakdown.jpg" alt="Cost breakdown"></p>
<h2 id="what-i-learned">What I Learned</h2>
<p>I learned a LOT since I was coming from virtually zero home improvement experience. I highly recommend a bathroom remodel due to the breadth of skills needed:</p>
<ul>
<li>Drywall</li>
<li>Painting</li>
<li>Tiling</li>
<li>Electrical</li>
<li>Plumbing</li>
<li>HVAC (for exhaust fan)</li>
<li>Carpentry (builtin shelves)</li>
</ul>
<p>Doing this work in my <em>extremely</em> limited free time due to having 2 kids under 2 forced me to plan things efficiently. For each stage of work I would plan things out, order materials, and then plan when I could have N-hours of time to do it. Everything was ordered online (Home Depot is very online friendly) except for the lumber. All in all a very satisfying project and I&rsquo;d love to try a larger home improvement project in the future.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
