<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>dimboo.net</title>
  <subtitle>Notes, projects, and writing from dimboo.net.</subtitle>
  <link href="https://blog.dimboo.net/feed.xml" rel="self"/>
  <link href="https://blog.dimboo.net/"/>
  <updated>2026-08-21T14:00:00Z</updated>
  <id>https://blog.dimboo.net/</id>
  <author>
    <name>dimboo.net</name>
  </author>
  
  <entry>
    <title>Weather display, take two: enclosure and firmware notes</title>
    <link href="https://blog.dimboo.net/posts/weather-display-enclosure-and-firmware/"/>
    <updated>2026-08-21T14:00:00Z</updated>
    <id>https://blog.dimboo.net/posts/weather-display-enclosure-and-firmware/</id>
    <content type="html"><![CDATA[<p>Follow-up to the <a href="https://blog.dimboo.net/posts/a-weekend-project-tiny-weather-display/">weekend weather display project</a>
— it no longer looks like a breadboard experiment on my desk, and the
firmware has settled down enough to write up properly.</p>
<h2>Parts list</h2>
<ul>
<li>ESP32-C3 dev board (Wi-Fi, deep sleep support)</li>
<li>4.2&quot; e-ink panel, SPI</li>
<li>1000mAh LiPo + basic charge/boost module</li>
<li>3D-printed two-piece enclosure (PETG, printed in a matte black)</li>
</ul>
<p>Total cost was well under what a commercial e-ink display would run, and
most of that was the panel itself.</p>
<h2>Firmware</h2>
<p>The loop is intentionally boring: wake up, connect to Wi-Fi, hit a weather
API, render to the e-ink buffer, go back to deep sleep. No web server, no
persistent connection, nothing to keep alive.</p>
<pre class="language-c"><code class="language-c"><span class="token keyword">void</span> <span class="token function">loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">connectWifi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  WeatherData data <span class="token operator">=</span> <span class="token function">fetchForecast</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token function">renderToDisplay</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token function">esp_sleep_enable_timer_wakeup</span><span class="token punctuation">(</span>HOUR_IN_US<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token function">esp_deep_sleep_start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
<p>Deep sleep between refreshes is what makes the battery estimate realistic —
active Wi-Fi and the e-ink refresh together only draw meaningful current for
a few seconds each hour.</p>
<h2>What’s left</h2>
<p>Battery life is still an estimate rather than a measurement — I’ll know more
once it’s been running unattended for a couple of weeks. If it holds up,
next on the list is a second unit for the kitchen with a shorter refresh
interval.</p>
]]></content>
  </entry>
  
  <entry>
    <title>Shipping this blog: a few bumps along the way</title>
    <link href="https://blog.dimboo.net/posts/shipping-this-blog/"/>
    <updated>2026-08-21T09:00:00Z</updated>
    <id>https://blog.dimboo.net/posts/shipping-this-blog/</id>
    <content type="html"><![CDATA[<p>This site went from an empty folder to live on <code>blog.dimboo.net</code> in an
afternoon, but not without a few surprises — worth writing down before I
forget them.</p>
<p><strong>Plugin ecosystems move fast.</strong> By the time I actually installed
dependencies, <code>@11ty/eleventy-plugin-rss</code> had gone ESM-only, which meant
switching the config file from <code>eleventy.config.js</code> to <code>eleventy.config.mjs</code>
and updating a couple of filter names that had been renamed upstream
(<code>rssLastUpdatedDate</code> → <code>getNewestCollectionItemDate | dateToRfc3339</code>).
Small fix, but a good reminder that a plan written even a few weeks earlier
can drift out of date.</p>
<p><strong>Cloudflare Pages deploys changed too.</strong> <code>wrangler pages deploy</code> no longer
auto-creates the project on first run — you now need
<code>wrangler pages project create</code> first, and a stray delegation to the newer
unified Workers deploy path meant the very first attempt needed a <code>--force</code>
flag to land on classic Pages. One-time hiccup; every deploy since has been
a plain <code>npm run deploy</code>.</p>
<p><strong>Domains don’t have to be all-or-nothing.</strong> <code>dimboo.net</code> was already doing
a job elsewhere, so rather than fight over the apex domain, this blog just
lives on <code>blog.dimboo.net</code> — a separate subdomain, attached as its own
custom domain in Cloudflare Pages, without touching anything else on the
root.</p>
<p>None of this was hard, exactly, just the usual cost of gluing together
several fast-moving tools. Onward to actually writing about things other
than the blog itself.</p>
]]></content>
  </entry>
  
  <entry>
    <title>A weekend project: tiny weather display</title>
    <link href="https://blog.dimboo.net/posts/a-weekend-project-tiny-weather-display/"/>
    <updated>2026-08-05T00:00:00Z</updated>
    <id>https://blog.dimboo.net/posts/a-weekend-project-tiny-weather-display/</id>
    <content type="html"><![CDATA[<p>Spent the weekend wiring up a small e-ink display that pulls the local
forecast every hour and sits on my desk. Nothing fancy — a microcontroller,
a weather API, and a battery that should last a few weeks per charge.</p>
<p><picture><source type="image/webp" srcset="https://blog.dimboo.net/assets/images/generated/gbWWOCt_UG-400.webp 400w, https://blog.dimboo.net/assets/images/generated/gbWWOCt_UG-800.webp 800w, https://blog.dimboo.net/assets/images/generated/gbWWOCt_UG-1200.webp 1200w" sizes="100vw" /><img src="https://blog.dimboo.net/assets/images/generated/gbWWOCt_UG-400.jpeg" alt="Prototype e-ink weather display sitting on a desk" loading="lazy" decoding="async" width="1200" height="750" srcset="https://blog.dimboo.net/assets/images/generated/gbWWOCt_UG-400.jpeg 400w, https://blog.dimboo.net/assets/images/generated/gbWWOCt_UG-800.jpeg 800w, https://blog.dimboo.net/assets/images/generated/gbWWOCt_UG-1200.jpeg 1200w" sizes="100vw" /></picture></p>
<p>Next step is a 3D-printed enclosure so it stops looking like a breadboard
experiment. Full write-up with the parts list and firmware once it’s tidier.</p>
]]></content>
  </entry>
  
  <entry>
    <title>Notes on learning in public</title>
    <link href="https://blog.dimboo.net/posts/notes-on-learning-in-public/"/>
    <updated>2026-06-10T00:00:00Z</updated>
    <id>https://blog.dimboo.net/posts/notes-on-learning-in-public/</id>
    <content type="html"><![CDATA[<p>Writing about something before you fully understand it feels risky, but it’s
one of the fastest ways to actually understand it. A few things that have
helped:</p>
<ul>
<li>Publish the rough version. You can always revise later.</li>
<li>Link to sources so future-you can retrace the reasoning.</li>
<li>Treat comments and pushback as free debugging for your mental model.</li>
</ul>
<p>None of this is novel advice, but it’s easy to forget when a draft feels
“not ready yet.”</p>
]]></content>
  </entry>
  
  <entry>
    <title>Why I&#39;m betting on static sites in 2026</title>
    <link href="https://blog.dimboo.net/posts/why-im-betting-on-static-sites-in-2026/"/>
    <updated>2026-04-22T00:00:00Z</updated>
    <id>https://blog.dimboo.net/posts/why-im-betting-on-static-sites-in-2026/</id>
    <content type="html"><![CDATA[<p>Every few years the pendulum swings back toward simplicity, and I think we’re
in one of those moments again. For a personal blog, a static site generator
gives you almost everything a database-backed CMS does, with none of the
operational overhead.</p>
<p>Here’s roughly what the build step looks like for a page in this project:</p>
<pre class="language-js"><code class="language-js">eleventyConfig<span class="token punctuation">.</span><span class="token function">addCollection</span><span class="token punctuation">(</span><span class="token string">"posts"</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">collectionApi</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
  <span class="token keyword">return</span> collectionApi
    <span class="token punctuation">.</span><span class="token function">getFilteredByTag</span><span class="token punctuation">(</span><span class="token string">"posts"</span><span class="token punctuation">)</span>
    <span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">item</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token operator">!</span>item<span class="token punctuation">.</span>data<span class="token punctuation">.</span>draft<span class="token punctuation">)</span>
    <span class="token punctuation">.</span><span class="token function">sort</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> b</span><span class="token punctuation">)</span> <span class="token operator">=></span> b<span class="token punctuation">.</span>date <span class="token operator">-</span> a<span class="token punctuation">.</span>date<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
<p>No server to patch, no database to back up, and deploys are a single
<code>wrangler pages deploy</code> away. For a blog like this one, that trade-off is an
easy call.</p>
]]></content>
  </entry>
  
  <entry>
    <title>Hello world, starting this blog</title>
    <link href="https://blog.dimboo.net/posts/hello-world-starting-this-blog/"/>
    <updated>2026-02-14T00:00:00Z</updated>
    <id>https://blog.dimboo.net/posts/hello-world-starting-this-blog/</id>
    <content type="html"><![CDATA[<p>I’ve put this off for long enough — welcome to the first post on <strong>dimboo.net</strong>.</p>
<p>The plan is simple: write about things I’m building, learning, or thinking
about, without worrying too much about polish. This site is built with
<a href="https://www.11ty.dev/">Eleventy</a>, hosted for free on Cloudflare Pages, and
the whole theme is hand-written CSS — no framework, no client-side JS beyond
a tiny dark/light toggle.</p>
<p>More posts soon.</p>
]]></content>
  </entry>
  
</feed>
