The Personal Website of Jeremy Boles

Uile

The data layer that everything else talks to.

Uile is an Elixir umbrella project. It holds everything I write down—articles, logbook entries, contacts, tasks, passwords, media—and answers questions about all of it over a Unix socket.

The heart of it is an op-log: an append-only list of operations in SQLite. Nothing is a row you edit in place. You append an operation, and the section that owns that kind of thing replays the log to work out the current state. Which is what makes the fleet work: a change made on one machine syncs to the others and replays there as though it had been made locally.

The Sub-Apps

  • store — the SQLite op-log engine, with sync and a daemon that says when something changed
  • database — the section modules that materialize projections out of the log: atlas, logbook, moment, todo, pass, contacts
  • asset — content-addressed media storage; originals in one tier, derived variants in another, generated on demand and evicted when nobody wants them
  • wire — the Unix-socket BERT-RPC listener that every non-BEAM client connects to. The protocol rule is additive-only, so an old client never breaks
  • website — the public read side of jeremyboles.com. See the colophon
  • ann — the authoring side, which is where the Phoenix and LiveView live, behind mTLS

The Fleet

Four nodes, all running identical release bytes: two workstations (Rowan and Chestnut), a public face on a cloud box, and a replica in the basement. What any one of them does is decided by a single environment file rather than a different build. Each ships as a .deb, so apt owns versioning and rollback.