Small builds, written down

A build log of side projects in backend and automation. Every entry says what I did, what broke and what I want to do next, in that order.

On the bench5 projects
Every project gets one entry. The chip is its state today.

The log, February to August 2026

Five projects, newest first. Each one with the output it actually produces.

Read every entry by

  1. Logging Pi temperatures to SQLite

    did
    A Raspberry Pi reads its own CPU and a 1-wire air sensor every minute and writes both to SQLite.
    broke
    The sensor sometimes reports exactly 85.0 °C. That is its power-on value, not the cupboard catching fire.
    next
    Feed a threshold check into the status page, and a second sensor outside the cupboard.
    Cupboard air, last 7 days17–23 Aug
    Peak 38.1 °C on Sunday at 22:00, during the weekly prune. Amber line: 35 °C.
  2. A status page from one YAML file

    did
    One YAML file lists HTTP, TCP and file-age checks; a Node script runs them and writes a static page.
    broke
    One hung TCP check stalled the whole run for two minutes, and a stale page kept saying all was fine.
    next
    A 24-hour history strip and a feed of status changes the digest can mail me.
    Home statusgenerated 7 Jun, 21:40
    • File sharetcp4 ms
    • Feed digesthttp 20038 ms
    • Nightly backupfile age18 h
    • Old laptoptcptimeout 5 s
    Three up, one switched off. The off one now fails in five seconds instead of two minutes.
  3. Home server backups with restic

    did
    Replaced a manual copy to a USB disk with a nightly restic job to a second disk and an offsite repository.
    broke
    The first prune ran for four hours into the next backup. The test restore found I'd excluded my SSH keys.
    next
    An alert when no backup has succeeded for 48 hours, and a restore drill every quarter.
    restic snapshots/mnt/backup/restic
    $ restic snapshots --compact
    ID        Time                 Host
    3c9e41d0  2026-04-21 03:15:06  den
    b17f0a92  2026-04-22 03:15:04  den
    e40d6c3b  2026-04-23 03:15:09  den
    91a2fe57  2026-04-24 03:15:05  den
    -- 25 Apr: locked by prune, skipped --
    5d08b7e1  2026-04-26 03:15:07  den
    6 snapshots
    The missing night is the prune that ran four hours and held the lock.
  4. An RSS digest that arrives by email

    did
    Forty feeds, one plain email at 06:30. New items are tracked in SQLite so nothing arrives twice.
    broke
    Feeds that change their item IDs on every edit, and one that quietly returned an HTML error page for two weeks.
    next
    A per-feed item limit, a weekly mode for slow blogs, and a timer that catches up after sleep.
    Morning digestSun 15 Mar, 06:30

    23 new items from 11 feeds

    sqlite-notes.example.org 3
    Why WAL mode is not the default
    homelab.example.net 2
    Moving cron jobs to systemd timers
    gopher-diary.example.com 4
    Small CLIs and the flag package

    Quiet feeds: 1 returned nothing for 3 days

    One plain email a day. The quiet-feeds line exists because of a two-week silent failure.
  5. Renaming photos by EXIF date

    did
    A small Go CLI that renames photos to the moment they were taken. Dry run unless told otherwise.
    broke
    Time zones. The camera has no idea where it is, so trip photos sorted two hours off from the phone's.
    next
    A --shift flag per camera and an undo log, so a bad run can be reversed.
    exifmv, dry run~/Pictures/inbox
    $ exifmv ~/Pictures/inbox
    IMG_4512.JPG  -> 2026-01-31_142305.jpg
    IMG_4513.JPG  -> 2026-01-31_142305-1.jpg
    DSC08811.JPG  -> 2026-01-31_122309.jpg
    scan_0001.png skipped (no EXIF date)
    4 files, 3 renames planned.
    Run with --apply to rename.
    Nothing moves until --apply. Note the camera file two hours behind the phone.

How an entry is written

Each project gets one entry when it is useful enough to run on its own. The entry is written the same evening, while the mistakes are still fresh.

didWhat I didThe plain version of what got built, how it runs and the few lines of code or config that matter. No setup tutorials.

brokeWhat brokeThe part most write-ups skip. Wrong assumptions, odd edge cases, the hours lost, and the fix that actually stuck.

nextWhat's nextA short list of what is still missing. Some of it gets done and shows up in a later entry; some never does.

~6 weeksHow oftenRoughly one entry every six weeks. Projects are small on purpose: a weekend or a handful of evenings, then it either runs every day or gets dropped.

Write to me

Spotted a mistake in an entry, or solved the same problem another way? I read every message.

hello@buildlog.vip

Usually a reply within a few days. More on the contacts page.