<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Sabrina Holt</title>
    <description>The latest articles on Forem by Sabrina Holt (@sholt).</description>
    <link>https://forem.com/sholt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3542074%2F6acbf4ad-7347-460d-ae07-1b3598763b1e.png</url>
      <title>Forem: Sabrina Holt</title>
      <link>https://forem.com/sholt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sholt"/>
    <language>en</language>
    <item>
      <title>GitOps for Basil: Automating an Urban Garden Without Overengineering It</title>
      <dc:creator>Sabrina Holt</dc:creator>
      <pubDate>Wed, 01 Oct 2025 19:50:26 +0000</pubDate>
      <link>https://forem.com/sholt/gitops-for-basil-automating-an-urban-garden-without-overengineering-it-2nil</link>
      <guid>https://forem.com/sholt/gitops-for-basil-automating-an-urban-garden-without-overengineering-it-2nil</guid>
      <description>&lt;h2&gt;
  
  
  Picture This: Version Control for Your Basil
&lt;/h2&gt;

&lt;p&gt;If you’ve ever tried to keep a basil plant alive on a city balcony while also debugging distributed systems, you’ve probably had a recurring thought: &lt;em&gt;Wouldn’t it be easier if I could just &lt;code&gt;git push&lt;/code&gt; my watering schedule?&lt;/em&gt; — or maybe that’s just me. Either way, here’s the story of how I used a little GitOps thinking to automate my urban herb garden… without turning it into a DevOps death spiral.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Why" (Besides Needing Pesto on Demand)
&lt;/h3&gt;

&lt;p&gt;I’m a big fan of automating the boring stuff. But I’ve seen far too many tech projects (and yes, garden projects!) become so tightly wound around automation that no actual human wants to touch them anymore. My goal here: Let code do the heavy lifting, but always keep a manual override (because maybe I want to water my basil after a tricky deploy—it’s therapeutic, okay?).&lt;/p&gt;

&lt;h3&gt;
  
  
  What is "GitOps for Basil"?
&lt;/h3&gt;

&lt;p&gt;For the uninitiated, &lt;a href="https://www.gitops.tech/" rel="noopener noreferrer"&gt;GitOps&lt;/a&gt; is a strategy where your system's desired state &lt;em&gt;lives in Git&lt;/em&gt;, and automation (usually bots or controllers) brings the actual system in line with what's declared there. Think of it as a way to manage your software—or in this case, your plants—with the careful versioning and review process that developers love.&lt;/p&gt;

&lt;p&gt;In garden terms: Define watering patterns and light schedules in a plain text file (&lt;code&gt;garden.yaml&lt;/code&gt;), commit to GitHub, and a little Raspberry Pi on my shelf reads those declarations and tells a smart relay to water the basil. If I change the config, commit, and push—the garden follows suit. If I break everything, a quick &lt;code&gt;git revert&lt;/code&gt; returns my basil to its (hopefully lush) glory.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Minimal Viable Automation Stack
&lt;/h3&gt;

&lt;p&gt;I promised not to overengineer. Here’s what I &lt;em&gt;actually used&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Raspberry Pi Zero&lt;/strong&gt; (with Wi-Fi)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Moisture sensor&lt;/strong&gt; (trusty capacitive, thanks Adafruit)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simple peristaltic pump&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relay/Power controller&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LED Grow Light&lt;/strong&gt; (bonus: makes my living room look like a spaceship)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Scripts&lt;/strong&gt; (for pulling from Git, reading YAML, interfacing with GPIO)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt; (for fun and a little CI/CD flair)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The config file (&lt;code&gt;garden.yaml&lt;/code&gt;):
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;basil&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;moisture_min&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;35&lt;/span&gt;    &lt;span class="c1"&gt;# below this, trigger watering&lt;/span&gt;
  &lt;span class="na"&gt;moisture_max&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;    &lt;span class="c1"&gt;# stop watering here&lt;/span&gt;
  &lt;span class="na"&gt;light_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;07:00"&lt;/span&gt;
  &lt;span class="na"&gt;light_off&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;20:00"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  The Sync Script (abridged magic):
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;yaml&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load_garden_config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;git_raw_url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;git_raw_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;safe_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;basil&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;# ... logic to read sensors, control relays, etc
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Nerd note: Python is intentional here—it’s fast to hack, easy to debug after midnight, and plays nicely with Pi GPIO.&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The Manual Override
&lt;/h4&gt;

&lt;p&gt;There’s a big red button. No, really. It waters everything when pressed. Felt important.&lt;/p&gt;




&lt;h3&gt;
  
  
  Keeping it Human-Scale
&lt;/h3&gt;

&lt;p&gt;Here’s where I draw the line: No Kubernetes. No web UIs (except the garden’s readme on GitHub). If I found myself writing a Helm chart for this setup, I’d know I’d gone too far.&lt;/p&gt;

&lt;p&gt;The goal is reliability and tweakability. If I go on vacation, my plants survive. If I have a wild idea ("Does basil like jazz at night?"), it’s a one-line config change. And if my neighbor’s dog knocks the pump over, I can &lt;em&gt;still&lt;/em&gt; just water the plants with a cup.&lt;/p&gt;




&lt;h3&gt;
  
  
  Photos! [Insert photo of a Pi nestled between tomato vines, LED aglow, and code open in VSCode on my balcony table.]
&lt;/h3&gt;




&lt;h3&gt;
  
  
  Lessons Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automate, don’t alienate&lt;/strong&gt;: Good automation &lt;em&gt;invites&lt;/em&gt; you in, doesn’t lock you out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep it observable&lt;/strong&gt;: Logs to the garden GitHub repo keep me honest—and fixable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never skip the override&lt;/strong&gt;: Machines are great, but sometimes you just need to press a big red button.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Urban gardening doesn’t have to be another overengineered mess. But a little version control never hurt anyone—except maybe my first batch of parsley, but that’s a story for another post.&lt;/p&gt;

&lt;p&gt;Happy growing! 🌱&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>automation</category>
      <category>devops</category>
      <category>iot</category>
    </item>
    <item>
      <title>The $100 Climate Stack: Spend to Save the Planet, One Benjamin at a Time</title>
      <dc:creator>Sabrina Holt</dc:creator>
      <pubDate>Wed, 01 Oct 2025 19:41:09 +0000</pubDate>
      <link>https://forem.com/sholt/the-100-climate-stack-spend-to-save-the-planet-one-benjamin-at-a-time-32l8</link>
      <guid>https://forem.com/sholt/the-100-climate-stack-spend-to-save-the-planet-one-benjamin-at-a-time-32l8</guid>
      <description>&lt;h1&gt;
  
  
  The $100 Climate Stack: Spend to Save the Planet, One Benjamin at a Time
&lt;/h1&gt;

&lt;p&gt;Let’s nerd out on where your money can be a literal planet-saving power-up! 💸🌎 &lt;/p&gt;

&lt;p&gt;I get it: "Fixing the climate crisis" feels like it’s in the domain of governments and billionaires. But if you have $100 to &lt;em&gt;intentionally&lt;/em&gt; throw at the problem, you can make shockingly measurable impact now. Let’s break down how to build your own $100 &lt;em&gt;Climate Stack&lt;/em&gt;—an actionable combo of spending, donating, and investing that squeezes every last carbon molecule out of your dollar. &lt;/p&gt;

&lt;h2&gt;
  
  
  Stack Component 1: Direct Carbon Offsets
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best bang:&lt;/strong&gt; Buy high-quality, verifiable offsets (not all are created equal!) targeting &lt;em&gt;removal&lt;/em&gt;, not just avoidance. Think: &lt;a href="https://charmindustrial.com/" rel="noopener noreferrer"&gt;Charm Industrial Bio-oil Injection&lt;/a&gt;, &lt;a href="https://climeworks.com/" rel="noopener noreferrer"&gt;Climeworks Direct Air Capture&lt;/a&gt; (pricey but gold-standard), or cool projects aggregated by &lt;a href="https://destroycarbon.com/" rel="noopener noreferrer"&gt;destroycarbon.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$25 here&lt;/strong&gt; gets you 0.25-0.5 &lt;em&gt;tonnes&lt;/em&gt; of CO₂ straight-up removed from the atmosphere;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bonus nerd stat:&lt;/strong&gt; That’s the equivalent of &lt;em&gt;driving a gas car for 700-1,400 miles&lt;/em&gt;—gone!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stack Component 2: Policy and Advocacy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why this matters:&lt;/strong&gt; Personal action is legit, but systemic change? That’s where we go turbo. Organizations like &lt;a href="https://catf.us/" rel="noopener noreferrer"&gt;Clean Air Task Force&lt;/a&gt; and &lt;a href="https://evergreenaction.com/" rel="noopener noreferrer"&gt;Evergreen Action&lt;/a&gt; punch above their weight, pushing governments to flip huge levers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$20–30 here&lt;/strong&gt; subsidizes months of lobbying and research in key energy and climate fights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trade-off tip:&lt;/strong&gt; Boring-sounding orgs sometimes have the highest impact/$. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stack Component 3: Frontier R&amp;amp;D and Innovation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Supporting the next big thing:&lt;/strong&gt; Climate solutions aren’t just wind turbines and Teslas. There’s wild stuff like algae farms, new batteries, and low-carbon cement in the pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try $10–20 as a micro-investment/donation&lt;/strong&gt; through platforms like &lt;a href="https://climate.stripe.com/" rel="noopener noreferrer"&gt;Stripe Climate&lt;/a&gt; or &lt;a href="https://carbon180.org/" rel="noopener noreferrer"&gt;Carbon180&lt;/a&gt;, a nonprofit funding moonshot R&amp;amp;D.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nerd takeaway:&lt;/strong&gt; 1 in 10 bets here is like buying Bitcoin in 2011—huge leverage, uncertain payoff.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stack Component 4: Climate Education and Movement Building
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amplify your own impact:&lt;/strong&gt; Good info is contagious. Support newsletters, translation projects, YouTubers, or teachers talking climate science straight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$10 here&lt;/strong&gt; supercharges stories that shift hearts and votes (and prevents climate doomscrolling paralysis).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stack Component 5: Personal Infrastructure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low-hanging fruit:&lt;/strong&gt; Upgrade your routine. Maybe you buy a plug strip, bike repair, vegan trial groceries, or pay the premium for renewable electricity (just $10–20 covers a meaningful slice for a month!). &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yes, it’s a multiplier:&lt;/strong&gt; You get co-benefits—often more comfort, health, and a bit of bragging rights.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Sample $100 Climate Stack
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;$25:&lt;/strong&gt; Permanent carbon removal offsets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$25:&lt;/strong&gt; Policy/advocacy org pushing for macro change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$15:&lt;/strong&gt; Donate to climate innovation/R&amp;amp;D&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$10:&lt;/strong&gt; Support science communication or teaching&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$15:&lt;/strong&gt; Buy an energy-saving item or try a climate-friendly product&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$10:&lt;/strong&gt; Your wild card! (Plant trees? Eco YouTuber? Open-source climate code?)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;It’s not just about guilt or virtue signaling. Every dollar here is a force multiplier. Stack up, track your impact, and challenge friends with their own $100 climate recipe!&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Want to Go Deeper?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.givinggreen.earth/" rel="noopener noreferrer"&gt;Giving Green: Best climate charities, rated&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://drawdown.org/solutions/table-of-solutions" rel="noopener noreferrer"&gt;Project Drawdown: Solutions ranked by impact&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.carbonbrief.org/" rel="noopener noreferrer"&gt;Carbon Brief: For the climate nerd in training&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You’ve got $100. That’s huge. Drop your stack ideas and favorite picks in the comments! 👇🌱&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
