Ratchet
An accountability timer that only turns one way.
Ratchet lives in the menu bar and asks every minute what I am doing and which goal it serves. Untracked time counts against the day, work cannot start without a goal, and each sitting ends with a yes or no on whether I did what I said. Goals nest into trees with deadlines and completion bonuses, and a 1000-point day score makes drift visible as soon as it starts. One Cloudflare Durable Object holds the state, so the Mac app, a phone PWA, and a public dashboard stay in sync.
Python · PyObjC · TypeScript · Cloudflare Durable Objects