Devlog — 2026-11-02#

TL;DR#

You can now skip a recurring task instead of lying to the app that you did it. Kombine also got a pulse — the timer, checkboxes and breaks finally move like they mean it — and the web app learned to show itself off with a throwaway demo account. No new release this week; I was busy with polish. (Allegedly.)

User-facing features#

  • Skip one occurrence of a recurring task. Not today? Skip it. The series moves on, but stats, streaks and goals don’t count it as done. Undo is one tap away, web and Android.
  • Intentional motion. Checkbox draws itself, timer start draws in, pause/resume morphs, finished sessions get a sweep and a pulse. Hitting your daily target bursts once a day — and only for sessions you ran on this device, so your watch doesn’t steal the party. Respects reduced-motion settings.
  • Break decision lives in the timer ring. Session ends, the ring shows the next break with Start Break and Skip. No more dialog saying the same sentence three times. Circle buttons, and digits that stop jiggling as they change.
  • Try the web app as a Demo Account. One click on the login page, 45 days of sample history, no signup. It cleans itself up after it expires.
  • First-visit coachmarks. Little speech-bubble tips on Today, Tasks, Timer, Log and Goals (Android) and for new web accounts. Louder than v1, because v1 was invisible.
  • Web: dashboard as command centre. Every card leads to the page that owns its data. New “This week’s goal” card, plus Add task and Log a note straight from the dashboard.
  • Web: tag autocomplete with near-miss suggestions. Typo’d wrok? It’ll nudge you toward work. Tags set outside the description now show up and can be removed.
  • Web: add a log entry from the keyboard — Ctrl+Shift+L or the command palette.
  • Android: system back finally goes back. Back closes overlays, returns to Today from other tabs, and only exits from Today. Before, it just killed the app. Everywhere.
  • Autofill on login and register. Password managers now know what they’re looking at.
  • Log titles sessions by their note when there’s no task (Android and web match now).
  • Fixes you’d notice:
    • A completed task showed up twice in the log. Once now.
    • Dragging on web only happens on the status board; elsewhere the whole card just opens the task.
    • Web activity colours match mobile.
    • “Set toad” / “Clear toad” actually closes the sheet.
    • Opening a task a second time no longer shows a leftover description source.
    • Archive list on Android had cards glued to the screen edge. Fixed.

Technical improvements#

  • Web logins no longer hang for a minute. Neon restarts silently kill idle DB connections, and the pool waited on them for 40–80 seconds. Now it gives up after 3 seconds and grabs a fresh one. Embarrassingly small fix, embarrassingly long bug.
  • Skipped occurrences are a first-class synced thing. Own storage, own sync feed, undo supported — and invisible to every stats query by design.
  • Tags normalized on every write path — lowercase, no #, no dupes. Work and work stop splitting your stats. Old rows fix themselves on next edit (no migration, on purpose).
  • Completion log dedup in sync. Client skips its own record when the server copy exists, and cleans up existing duplicates on pull.
  • Motion became a token set, mirrored from the design system. Same values on Android and iOS, no more per-screen guesses.
  • Demo accounts are walled off. No email flows, no tokens, no password changes, no imports. Dedicated analytics events and a Grafana funnel row for them.