<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
  <title>buildlog</title>
  <description>A public build-log — what I build and learn.</description>
  <link>https://log.ozzo.blog/</link>
  <language>en-us</language>
  
  <item>
    
    <title>Sep 9, 2026</title>
    <description>&lt;p&gt;Moved buildlog off DigitalOcean onto Hetzner today.
The droplet was a 1GB box sitting at 650MB with a single app on it and swap already doing real work, while a 4GB Hetzner server I bought back in July has been running completely empty.&lt;/p&gt;

&lt;p&gt;The cutover itself cost about six minutes of downtime, all of it self-inflicted. I flipped DNS before stopping the old proxy, so Let’s Encrypt kept validating against the droplet, got its existing certificate back instead of the challenge, and burned the five-failed-authorizations-per-hour limit before the new box ever got a chance. Next time the old proxy stops at the same moment the record changes.&lt;/p&gt;

&lt;p&gt;One box instead of two, four times the RAM, automatic backups on, and about €50 a year cheaper.&lt;/p&gt;
</description>
    <pubDate>Wed, 09 Sep 2026 18:35:32 +0200</pubDate>
    <link>https://log.ozzo.blog/entries/8</link>
    <guid>https://log.ozzo.blog/entries/8</guid>
  </item><item>
    
    <title>Aug 14, 2026</title>
    <description>&lt;p&gt;Just merged two prs after noticing my chackra-ui project had security updates to do.&lt;/p&gt;
</description>
    <pubDate>Fri, 14 Aug 2026 20:20:55 +0200</pubDate>
    <link>https://log.ozzo.blog/entries/7</link>
    <guid>https://log.ozzo.blog/entries/7</guid>
  </item><item>
    
    <title>Jul 26, 2026</title>
    <description>&lt;p&gt;Linked buildlog from ozzo.blog/projects  today. Proof-led layout ordered by focus and effort, with buildlog as the first now-shipping card.
Fixed cards not being tappable on mobile and cleaned up the detail-page copy. Also leaning toward closing bet 1 now instead of holding to  week 6: the no-gos boundary kept  slipping without a real pitch behind it.&lt;/p&gt;
</description>
    <pubDate>Sun, 26 Jul 2026 14:21:58 +0200</pubDate>
    <link>https://log.ozzo.blog/entries/6</link>
    <guid>https://log.ozzo.blog/entries/6</guid>
  </item><item>
    
    <title>Jul 25, 2026</title>
    <description>&lt;p&gt;Shipped the feedback loop for buildlog today: a public /feedback page, Tally form, GitHub issue templates, and the fixes from review are live in production. I am stopping the feature work here for the day; tomorrow is launch surface work: link it from ozzo.blog/projects, review the article, and write the launch post.&lt;/p&gt;
</description>
    <pubDate>Sat, 25 Jul 2026 18:14:26 +0200</pubDate>
    <link>https://log.ozzo.blog/entries/5</link>
    <guid>https://log.ozzo.blog/entries/5</guid>
  </item><item>
    
    <title>Jul 24, 2026</title>
    <description>&lt;p&gt;Realized today that my Bet 1 roadmap was invented on day zero without a real pitch: it quietly re-added scope I’d already agreed to cut.
Rewrote the process to require a written pitch before any plan, then retrofitted Bet 1 to match. Turns out the 6-week bet only needed about two weeks.&lt;/p&gt;
</description>
    <pubDate>Fri, 24 Jul 2026 18:19:25 +0200</pubDate>
    <link>https://log.ozzo.blog/entries/4</link>
    <guid>https://log.ozzo.blog/entries/4</guid>
  </item><item>
    
    <title>Jul 23, 2026</title>
    <description>&lt;p&gt;Merged the design refresh: mint/teal/coral color system, entry cards, updated auth forms. Turns out Rails does not generate a social preview by default, so every link to log.ozzo.blog showed a bare title until today. Added og:image and twitter:card meta tags plus a 1200x630 image. Live now.&lt;/p&gt;
</description>
    <pubDate>Thu, 23 Jul 2026 18:49:01 +0200</pubDate>
    <link>https://log.ozzo.blog/entries/3</link>
    <guid>https://log.ozzo.blog/entries/3</guid>
  </item><item>
    
    <title>Jul 22, 2026</title>
    <description>&lt;p&gt;Spent today fixing three real bugs before shipping the next feature: DigitalOcean silently blocks outbound SMTP by default so the password-reset email needed Resend’s HTTP API instead. Staging shared its database with local dev until I isolated it, and the Tailwind watcher wasn’t actually watching in the container.&lt;/p&gt;
</description>
    <pubDate>Wed, 22 Jul 2026 19:07:51 +0200</pubDate>
    <link>https://log.ozzo.blog/entries/2</link>
    <guid>https://log.ozzo.blog/entries/2</guid>
  </item><item>
    
    <title>Jul 22, 2026</title>
    <description>&lt;p&gt;Dropped Synergym after a year of building.
Shipping small Rails apps in public instead, one every 6 weeks. This is entry #1&lt;/p&gt;
</description>
    <pubDate>Wed, 22 Jul 2026 13:21:47 +0200</pubDate>
    <link>https://log.ozzo.blog/entries/1</link>
    <guid>https://log.ozzo.blog/entries/1</guid>
  </item>
</channel></rss>
