Latch

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.