<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Food-Nerdery on TanHo.ca</title><link>https://tanho.ca/tags/food-nerdery/</link><description>Recent content in Food-Nerdery on TanHo.ca</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright> © 2026 Tan Ho. Unless otherwise specified, content is licensed with [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).</copyright><lastBuildDate>Fri, 02 Oct 2026 14:22:39 -0400</lastBuildDate><atom:link href="https://tanho.ca/tags/food-nerdery/index.xml" rel="self" type="application/rss+xml"/><item><title>Dry Aging At Home, Episode 1</title><link>https://tanho.ca/posts/2026-08-30_dry-aging/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://tanho.ca/posts/2026-08-30_dry-aging/</guid><description>&lt;p&gt;One of my deep nerd obsessions is food, especially food science, and I&amp;rsquo;ve long&#10;wanted to try out dry-aging at home. The premise sounds &amp;ldquo;simple&amp;rdquo;: you just need a&#10;dedicated fridge, a big old hunk of meat, and a way to monitor the temperature&#10;and humidity inside. Pair that with some burgeoning homelab skills and &amp;hellip; how&#10;hard could it be? Here are some reflections on my first dry-aging experiment, a&#10;45-day boneless ribeye roast.&lt;/p&gt;&#10;&lt;p&gt;Code for this project lives on GitHub at &lt;a href="https://github.com/tanho63/dry-age-monitor" target="_blank" rel="noreferrer"&gt;tanho63/dry-age-monitor&lt;/a&gt;.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;equipment and setup&#10; &lt;div id="equipment-and-setup" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#equipment-and-setup" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;img src="fridge-setup.jpg" alt="dry-aging fridge setup" style="max-height:400px"&gt;&#10;&lt;p&gt;I got a &lt;a href="https://www.costco.ca/frigidaire-21-in.-6.0-cu-ft.-commercial-glass-display-refrigerator.product.4000409375.html" target="_blank" rel="noreferrer"&gt;dedicated fridge&lt;/a&gt;&#10;from Costco - around 6.0 cubic feet with a glass door and wire shelving - and on&#10;balance I think it worked really well: it held humidity pretty decently, was&#10;able to fit a good sized chunk of meat on a shelf, and the glass door let me&#10;look in on it whenever I wanted. The one downside is that it uses a mechanical&#10;thermostat for deciding when to kick on the compressor, and I ended up needing&#10;to fiddle with it a bit (more on that later). A digital thermostat that let me&#10;control top-end and bottom-end temperature would probably be better, but honestly&#10;I&amp;rsquo;m very pleased with what I got for ~$350 CAD.&lt;/p&gt;&#10;&lt;p&gt;The Raspberry Pi monitoring setup worked great for tracking temperature and&#10;humidity. I&amp;rsquo;ve mostly had experience with the Pi Zero 2 WH (i.e. with headers already&#10;soldered on), so went with that and paired it with a &lt;a href="https://www.pishop.ca/product/bme690-4-in-1-air-quality-breakout-gas-temperature-pressure-humidity/" target="_blank" rel="noreferrer"&gt;BME690&lt;/a&gt;&#10;air quality sensor that promised to monitor temperature, humidity, gas, and&#10;pressure. I could probably have cheaped out and gone with a simpler sensor like&#10;the &lt;a href="https://shop.pimoroni.com/products/adafruit-aht20-temperature-humidity-sensor-breakout-board-stemma-qt-qwiic?variant=32004099801171" target="_blank" rel="noreferrer"&gt;AHT20&lt;/a&gt;,&#10;since the gas and pressure turned out to be pretty useless, but the BME690&#10;worked well enough once I got it set up and calibrated.&lt;/p&gt;&#10;&lt;p&gt;I don&amp;rsquo;t have a soldering kit, so plugging everything in via Stemma/QT cables was&#10;the move and it was painless. I made sure to get a longer (400mm) cable for the&#10;sensor-to-hub connection so that I could put the sensor closer to the middle of&#10;the fridge, and then used a velcro cable tie to secure it to the desired fridge&#10;rack. I didn&amp;rsquo;t have any worries about the sensor breakout board being exposed to&#10;cold temperatures or potential humidity, since it is designed to read those, and&#10;the actual Pi is mounted outside of the fridge.&lt;/p&gt;&#10;&lt;p&gt;I used a spare &lt;a href="https://www.canadacomputers.com/en/case-fans/249387/be-quiet-pure-wings-3-120mm-case-fan-bl104.html" target="_blank" rel="noreferrer"&gt;computer case fan&lt;/a&gt;&#10;I already had, paired with this USB-powered &lt;a href="https://www.amazon.ca/dp/B0DPZM7T3Q" target="_blank" rel="noreferrer"&gt;fan controller&lt;/a&gt;.&#10;I initially tried a &lt;a href="https://www.amazon.ca/dp/B06Y5WWBHH?th=1" target="_blank" rel="noreferrer"&gt;USB fan&lt;/a&gt;, but the&#10;cable was pretty thick and awkward to fit into the fridge&amp;rsquo;s door seal. The case&#10;fan&amp;rsquo;s cable was much thinner and easier to route, and the adjustable fan speed&#10;was pretty useful too. I didn&amp;rsquo;t end up needing to adjust it very often at all&#10;because I found that a higher fan speed messed with the temperature more than I&#10;wanted while not really changing the effective humidity much at all.&lt;/p&gt;&#10;&lt;p&gt;Sealing off the cable gaps in the door gasket was very helpful in maintaining&#10;temperature. I duct-taped the cables down first to make sure it stayed put, then&#10;put foam tape over top to help reduce air leakage.&lt;/p&gt;&#10;&lt;p&gt;I bought a &lt;a href="https://temppro.com/products/tp50-digital-indoor-hygrometer-thermometer" target="_blank" rel="noreferrer"&gt;cheap thermohygrometer&lt;/a&gt;&#10;as a backup in case the Pi ever went down. It worked fine as a sanity check but&#10;I&amp;rsquo;d want to invest in a better one if I was relying on it directly.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;meat&#10; &lt;div id="meat" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#meat" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;I was a bit impulsive about buying the meat: I&amp;rsquo;d had the fridge for a while, but&#10;had been procrastinating actually starting on everything, so one day I was at&#10;Costco Business Centre and decided to just get a starter piece of meat for the&#10;sake of giving myself a kick in the pants.&lt;/p&gt;&#10;&lt;p&gt;The beef I ended up with for this first experiment was an ungraded, boneless ribeye&#10;roast weighing 14.2 lbs. Not a particularly great one either: the fat cap was&#10;thick, the meat wasn&amp;rsquo;t especially marbled, and the spinalis was thinner than I&amp;rsquo;d&#10;have liked. I mostly wanted to get a roast I wouldn&amp;rsquo;t be too upset about ruining&#10;if the experiment flopped.&lt;/p&gt;&#10;&lt;p&gt;I didn&amp;rsquo;t do a great job of documenting the &amp;ldquo;before&amp;rdquo; state: I forgot to log the&#10;total cost and size of the whole roast before trimming, so I can&amp;rsquo;t do a really good&#10;cost estimate, but I did remember to portion off a steak so I could have a&#10;before/after comparison tasting. I also trimmed it up so that it would fit&#10;horizontally on the shelf with some space for airflow around the sides.&lt;/p&gt;&#10;&lt;p&gt;My goal was to age this first roast for 45 days. I&amp;rsquo;ve had 30-day dry-aged steaks&#10;before, so with my home experimentation I really wanted to try going for a&#10;meaningful increase but not necessarily going all the way to 60 days (which the&#10;research suggests is potentially quite overpowering).&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;monitoring&#10; &lt;div id="monitoring" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#monitoring" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;I set up the Pi to record data (temp, humidity, pressure, gas) every 30 seconds,&#10;which gave me a pretty good representation of the fridge cycle, and I calculated&#10;the mean values for the whole up/down fridge cycle as well as the 5th, 20th,&#10;80th, and 95th percentile values (avoiding outliers in case I opened the fridge&#10;momentarily).&lt;/p&gt;&#10;&lt;p&gt;I put together an R Markdown report to summarize the data, and set it up to knit&#10;via a cron job every 15 minutes on my main home server rather than on the Pi&#10;itself (which was too underpowered). I also chose to push the report to an&#10;&lt;a href="https://s3.tan.gg/dry-age-monitor" target="_blank" rel="noreferrer"&gt;S3 bucket page&lt;/a&gt; rather than continually&#10;committing it to GitHub like I might have in the past (lots of images being&#10;committed that often would lead to repository size growing indefinitely).&lt;/p&gt;&#10;&#10;&lt;h3 class="relative group"&gt;temperature&#10; &lt;div id="temperature" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#temperature" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="chart of fridge cycle temperatures over 45 days"&#10; width="2304"&#10; height="1536"&#10; src="https://tanho.ca/posts/2026-08-30_dry-aging/temperature-chart_hu_10cd966a57a10d8c.webp"&#10; srcset="https://tanho.ca/posts/2026-08-30_dry-aging/temperature-chart_hu_10cd966a57a10d8c.webp 800w, https://tanho.ca/posts/2026-08-30_dry-aging/temperature-chart_hu_3ec13b204cb35943.webp 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://tanho.ca/posts/2026-08-30_dry-aging/temperature-chart.webp"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Temperature-wise, the internet says that dry-age temperatures should be between&#10;34F and 38F, that meat freezes at about 30F, and that the danger zone from a food&#10;safety perspective starts at 40F. I decided to shoot for:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;mean cycle temp between 36F and 38F&lt;/li&gt;&#10;&lt;li&gt;5th and 20th percentiles above 30F&lt;/li&gt;&#10;&lt;li&gt;95th percentile at or below 41F&lt;/li&gt;&#10;&lt;li&gt;80th percentile at or below 40F&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;These felt like reasonable goals because the meat itself shouldn&amp;rsquo;t actually reach&#10;over 41F - the sensor reacts to air temperature swings much faster than the&#10;meat&amp;rsquo;s surface does. I also wanted to avoid short-cycling the fridge compressor,&#10;which would reduce the lifespan of the fridge and also probably cost more money&#10;to run overall.&lt;/p&gt;&#10;&lt;p&gt;Unfortunately, my fridge&amp;rsquo;s cycle maxes and mins seemed to naturally range between&#10;32F and 42F, even on the coldest fridge setting. While I was willing to risk a&#10;small portion (less than 20%) of the time being between 40F and 41F, I was&#10;worried that any more time than that, or any warmer a band, would be more likely&#10;to cause spoilage and &amp;ldquo;bad&amp;rdquo; bacteria growth.&lt;/p&gt;&#10;&lt;p&gt;I tried increasing fan speed, thinking that it would circulate cold air up faster.&#10;However, this didn&amp;rsquo;t really change the set-point of the fridge&amp;rsquo;s thermostat: the&#10;cooling happened faster since the cold air would circulate more quickly on the&#10;&amp;ldquo;down&amp;rdquo; part of the cycle, but the compressor didn&amp;rsquo;t kick on any earlier.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="I bent the fridge&amp;rsquo;s thermostat sensor wire upwards to fool it into thinking the fridge was warmer"&#10; width="2364"&#10; height="1330"&#10; src="https://tanho.ca/posts/2026-08-30_dry-aging/fridge-sensor_hu_9bac3a27f1daf39f.jpg"&#10; srcset="https://tanho.ca/posts/2026-08-30_dry-aging/fridge-sensor_hu_9bac3a27f1daf39f.jpg 800w, https://tanho.ca/posts/2026-08-30_dry-aging/fridge-sensor_hu_ead309ff5579d108.jpg 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://tanho.ca/posts/2026-08-30_dry-aging/fridge-sensor.jpg"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;I ended up messing with the fridge&amp;rsquo;s thermostat sensor itself: this is basically&#10;a wire that sat in a little housing on the back of the fridge, so I took the&#10;housing off and bent the wire upwards to move the end of the sensor into a&#10;warmer spot of the fridge. This kicked the compressor on a little earlier (~41F)&#10;and also caused it to turn off a bit later (~28F), since it took longer for the&#10;&amp;ldquo;cold&amp;rdquo; to register on the sensor. That latter part was easy to fix: just turn&#10;the dial down!&lt;/p&gt;&#10;&lt;p&gt;I also wanted to try to lengthen the cycle to help the fridge run a little more&#10;efficiently, so I added some thermal mass in the form of 4L jugs of water - this&#10;helped slow the rate at which the fridge warmed between the compressor shutting&#10;off and kicking on again.&lt;/p&gt;&#10;&#10;&lt;h3 class="relative group"&gt;humidity&#10; &lt;div id="humidity" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#humidity" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="chart of relative humidity over 45 days"&#10; width="2304"&#10; height="1536"&#10; src="https://tanho.ca/posts/2026-08-30_dry-aging/humidity-chart_hu_f96621f8725d68cc.webp"&#10; srcset="https://tanho.ca/posts/2026-08-30_dry-aging/humidity-chart_hu_f96621f8725d68cc.webp 800w, https://tanho.ca/posts/2026-08-30_dry-aging/humidity-chart_hu_a93788b69bab578c.webp 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://tanho.ca/posts/2026-08-30_dry-aging/humidity-chart.webp"&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&lt;p&gt;Humidity seemed to sit really high throughout the process, swinging from 50% to&#10;100%+, according to the BME690 sensor. This led to some worries about condensation&#10;forming on either the meat or on the walls of the fridge (and eventually ice).&#10;My research suggested that the meat would give off moisture for at least 2-3 weeks,&#10;so I just added a quarter sheet pan of kosher salt hoping that it would resolve&#10;itself eventually.&lt;/p&gt;&#10;&lt;p&gt;This didn&amp;rsquo;t really happen: humidity levels stayed basically the same, so I replaced&#10;the salt with a quarter sheet pan of silica beads (making sure to orient the fan to&#10;blow air across the tray but not allowing the meat to touch the silica at all).&#10;This made a meaningful difference in bringing down the humidity, but only lasted&#10;a short while and needed replacing about every week.&lt;/p&gt;&#10;&lt;p&gt;Interestingly, when I left for a one-week trip to Croatia, the humidity &lt;strong&gt;declined&lt;/strong&gt;&#10;steadily while I was away, but somehow spiked immediately &lt;strong&gt;before&lt;/strong&gt; I got home.&#10;This clued me in to a potential reason why the humidity was sitting so high:&#10;when I left, I turned the house&amp;rsquo;s AC off and programmed it to turn back on&#10;shortly before I got back from the trip. The fridge is in the same room as the&#10;HVAC, and that room gets warmer and more humid when either the heating or air conditioning is running. The fridge pulls that humid air in, which keeps the&#10;internal humidity high even after the meat has lost the moisture it was always&#10;going to lose.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;tasting notes&#10; &lt;div id="tasting-notes" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tasting-notes" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&#10;&#10; &#10; &#10; &#10; &#10; &#10; &#10; &#10; &#10;&#10;&#10;&#10;&#10; &#10; &#10; &#10;&lt;div class="width-patch"&gt;&lt;/div&gt;&#10;&lt;div id="gallery-e5241e70c6c112313b29b35defef48a8" class="gallery"&gt;&#10; &lt;img alt="" src="https://tanho.ca/posts/2026-08-30_dry-aging/04_dry_age.jpg" class="grid-w50 lg:grid-w33"&gt;&lt;img alt="" src="https://tanho.ca/posts/2026-08-30_dry-aging/03_dry_age_sliced.jpg" class="grid-w50 lg:grid-w33"&gt;&lt;img alt="" src="https://tanho.ca/posts/2026-08-30_dry-aging/02_steaks.jpg" class="grid-w50 lg:grid-w33"&gt;&lt;/div&gt;&#10;&#10;&lt;ul&gt;&#10;&lt;li&gt;Starting weight: 14.2 lbs&lt;/li&gt;&#10;&lt;li&gt;Ending weight: 12.36 lbs (13% loss)&lt;/li&gt;&#10;&lt;li&gt;Post-trim weight: ~9 lbs (largeish fat cap mostly to blame), cut into 10 steaks&#10;about 1.5&amp;quot; thick and between 12 and 14 oz each.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The dry-aged taste was noticeable but not overpowering (especially since I had been&#10;semi-aggressive in trimming off the pellicle) - really tasty! I&amp;rsquo;m very satisfied&#10;with the results. Haven&amp;rsquo;t tried a before/after comparison of flavour and tenderness&#10;yet - I think I&amp;rsquo;m saving that for when Mi Yen is home next.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;thoughts for next time&#10; &lt;div id="thoughts-for-next-time" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#thoughts-for-next-time" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;get a larger subprimal with bone + meat to protect the main steak, something like a &lt;a href="https://www.chefs-resources.com/types-of-meat/beef/cuts-of-beef/prime-rib/" target="_blank" rel="noreferrer"&gt;107&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;try hanging vertically via meat hooks instead of being constrained by the shelf width&lt;/li&gt;&#10;&lt;li&gt;go for only a little bit more time (maybe 50 days?)&lt;/li&gt;&#10;&lt;li&gt;investigate inoculating fridge/meat with mold&lt;/li&gt;&#10;&lt;li&gt;move fridge into a different room to be less sensitive to temp/humidity swings?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;All in all: delicious, 10/10 would do again - maybe even this week to be ready&#10;before my birthday in November?&lt;/p&gt;&#10;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://tanho.ca/posts/2026-08-30_dry-aging/featured.jpg"/></item></channel></rss>