Blog · release
Latch 0.2.0
Own repo. Split out of the Aurora monorepo (stacks/latch/) with full history. The estate
glue (guards, Caddy vhost, Kuma monitor, sqlite hot backup) stays in aurora/homelab.
Player surface vs settings.
- /settings is now the one place every rule and editor lives: Clock & undo · Stamps & recap ·
Handler rules + prompt library · Training library · Wheel cooldown + segments · System.
Modules contribute their section through a new Module.settings_panel() hook and declare
editable keys in Module.settings_keys; the core saves them.
- The Handler, Training and Wheel pages are play-only. Each carries a ⚙ link to its section.
- Dashboard: a primary actions row (📸 photo check-in · 🐾 Handler · 🎡 spin · 📋 training,
with due/open badges) under the timer; the adjust/freeze/undo controls collapsed into one
Clock card and one Session card; the lock form's extras (dice, hidden timer, note,
started earlier) live in a fold.
Retroactive log. Every write takes an optional when (web: when datetime-local in
LATCH_TZ; API: at epoch seconds): lock (started at), adjust, freeze, unfreeze, note,
task complete/fail, reflection (typed and spoken), check-in, recite, headspace session, photo
check-in. The future is refused; a session-scoped time before the lock started is refused; a
backdated lock may not overlap the previous one; an unfreeze may not precede its freeze; a task
may not complete before it was assigned. Any event recorded more than two minutes after its
time carries backdated: true + recorded_at in its payload and a ↶ logged later badge
in the log. Handler entries file under the local day of the backdated time, and attach to the
session that was active then.
Photo check-in. A first-class action: one tap on the dashboard opens the camera and the
photo lands in the log (event kind photo, +5 xp) and the gallery — no training task needed.
POST /checkin/photo (web) and POST /api/v1/media/photo (Shortcut). Caption is prose and
stays off the API's event feed.
Share. A Share button on stamped photos and recap cards hands the JPEG to the phone's share sheet (Web Share API, secure origin only); otherwise it downloads as before.