WorkTimer
A Windows system tray utility for tracking daily work hours with break management, custom goal setting, 8 themes, 30-day rolling history, and CSV export, compiled as a standalone .exe with Nuitka.
Overview
WorkTimer is a lightweight Windows utility that lives in the system tray and tracks your daily working hours in real time. It shows net work time (work minus breaks), a live progress bar against a custom daily goal, an ETA to goal completion, and an overtime counter once the goal is exceeded. The window renders off-screen when minimised so the Windows taskbar hover preview always shows a live timer.
Why it was built
Built out of personal frustration with over-engineered time trackers that required accounts and subscriptions. The goal was a zero-friction tool that starts on login, stays out of the way, and just tells you how much you have actually worked today, down to the minute.
Net Work Tracking
Displays gross work time, break time, and net work time (gross minus breaks) as three separate clocks. The primary display is always net time, the number that actually matters.
Goal Progress + ETA
Set a custom daily work goal. A live progress bar fills green while working and turns yellow during breaks, with a real-time ETA like '2h 15m to go · Done by 5:30 PM'. Turns gold and shows overtime once the goal is exceeded.
30-Day Rolling History
Automatically saves each day's stats at midnight rollover. The history panel shows a 7-day average, monthly average, monthly total, and CSV export with Date, Total Work, Break, Net Work, and Goal% columns.
Tech Breakdown
Tkinter is the right tool for a single-user Windows utility with no external runtime dependency. The compiled .exe launches instantly and has no install step.
Nuitka compiles Python to genuine C and produces a standalone .exe without requiring the user to have Python installed. The result is a file you can just double-click.
Used to set the native taskbar progress bar state (green/yellow/paused) and to keep the window rendered off-screen when minimised so the live thumbnail preview works correctly.
All persistent state (today's work log, history, goal, theme preference) is serialised to timer_data.json in the app directory. A single state module owns all reads and writes, no database needed.
- 1
Keeping the taskbar thumbnail live when the window is minimised requires the window to remain rendered off-screen rather than truly hidden, since the standard hide() call kills the thumbnail.
- 2
The system tray icon shows goal progress as a proportional fill. Drawing this dynamically at tray-icon resolution (16x16 or 32x32) required careful geometry: a coloured arc clipped to a circle at the correct angle per percentage.
The app is complete and in daily use. A natural next step would be a weekly summary notification on Monday mornings and an option to sync history to a lightweight cloud backend for cross-machine access, though the offline-first simplicity is part of what makes it useful.
See it live
Check out the deployed site.