Story Timer
Developer · 2026
A local-first Windows system-tray app that tracks time against Azure DevOps work items — start, stop, and switch timers, then sync logged hours back to ADO. Built with Electron, React, and SQLite.
- TypeScript
- Electron
- React
- SQLite
- Playwright
The problem
Logging hours against ADO stories after the fact is tedious and inaccurate — time gets reconstructed from memory at the end of the week instead of captured as it happens.
The approach
An Electron tray app with atomic timer state transitions, an offline-first SQLite cache of stories and sprint data, periodic checkpoints for crash recovery, and a personal access token encrypted with Windows DPAPI. Unit-tested with Jest and gated by Playwright end-to-end runs against the packaged app.
The result
A packaged, daily-driver desktop tool: timers survive crashes and offline stretches, and tracked time syncs back to Azure DevOps when a connection returns.
Screenshots
