TrackHours
A local-first work-hours tracker with Norwegian holiday calendar, flekstid balance, and PWA install.
Problem
I wanted a private time-tracker that behaved like a real product — clock in with one tap, see weekly and yearly balance against expected hours, handle Norwegian public holidays and vacation properly, persist offline, install to home screen — without any of the SaaS baggage. No account, no server, no data leaving the device.
Approach
Vite + React + TypeScript, Tailwind for styling, date-fns for the calendar
math. All state lives in localStorage. The app installs as a PWA so it
behaves like a native tool on phone and desktop.
Four core views:
- Today — one-tap clock in / out with a live timer, today's sessions, and the running week balance.
- Overview — week / month / year breakdowns of worked vs. expected, with a clearly-signed over/undertime balance.
- Entries — full history grouped by day, with add / edit / delete.
- Leave — a calendar for vacation, sick, and holiday days. Leave on a scheduled working day counts toward expected hours, so the balance stays honest.
Settings cover expected hours per week, working weekdays, annual vacation entitlement, week start, and JSON export / import — because the only thing worse than no time-tracker is one you can't migrate out of.
Outcome
A small, fast, single-purpose tool I actually use. It also doubles as a clean example of how much UI a local-first PWA can carry without ever talking to a backend.