I needed to track my hours across clients and turn them into invoices without paying for another tool, so I built one. It's what I use for my freelance work.
What it does
- A weekly calendar with tasks stored in UTC, drag and drop, and timers you can pause
- Invoices that go from draft to final. An invoice only gets its number once it's finalized
- Exports to PDF, CSV and PNG
- Monthly reports, with a search for hours by client and Recharts dashboards
- Sign-in with email and password, Google, Apple or a passkey (WebAuthn)
- A one-time import from the older localStorage version of the app
Build notes
The client is React 19 and Vite. Supabase handles auth and Postgres, with row-level security on the data. PDFs are generated in the browser with jsPDF and html2canvas, so making an invoice doesn't need a server.
Time is stored in UTC and shown in whatever timezone you're in, so the hours always add up.
Status
It's live at jptimetracker.vercel.app and I use it for my own work.