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. 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. One box instead of two, four times the RAM, automatic backups on, and about €50 a year cheaper.
Build in public
buildlog
A public build-log microblog for short notes on what shipped, what broke, and what I learned while building in Rails.
Latest entries
Daily notes, kept public.
Showing the latest 8 entries
Just merged two prs after noticing my chackra-ui project had security updates to do.
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.
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.
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.
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.
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.
Dropped Synergym after a year of building. Shipping small Rails apps in public instead, one every 6 weeks. This is entry #1