
Hope
A calm time tracker for macOS, Windows, iPhone and Apple Watch
- Tauri 2 + Rust + React on the desktop, native Swift on iPhone and Apple Watch, Supabase in between.
- About 23K lines and 150 unit tests across Rust, TypeScript and Swift.
- Desktop installers ship on GitHub; the iPhone and Watch apps run on device. The demo is the real front end with an in-memory backend.
Decisions 4
Pause is not a table. A pause ends the session; resume opens a new one that points back through continues_id.
Because every statistic stays a plain sum over sessions, and a pause chain is only a UI grouping.
Cost: the UI walks the chain to draw one bar, and resume is a write, not a flag.
Sync is last-writer-wins on (updated_ms, device_id), a server_seq cursor, and Postgres triggers. No Realtime.
Because three clients in two languages need one rule they can all implement and test against a fake server, and a five-second pull already shows a watch-started timer on the desktop.
Cost: a websocket would be faster, and pulls re-read the last 50 sequence numbers to cover concurrent commits.
Class time from an imported timetable stays out of the totals by default.
Because the ring is about time I chose. A lecture I had to attend is not that.
Cost: one more setting, and every total on five surfaces has to honor it.
Sub-activities go one level deep through activity.parent_id and take the parent's color.
Because one level covers Math → homework without turning the picker into a file browser.
Cost: a third level is a no.
