A comprehensive single-file PHP application covering live time tracking, multi-currency billing, client & project management, advanced reporting, database backups, and a draggable dashboard widget board — built without external framework dependencies.
The sticky timer bar appears across all pages when a timer is active. All dropdowns and controls update state in real time.
Fields in the Add / Edit Time Entry modal. Entries can also be created automatically when the timer stops.
Each entry carries its own billing config. Rates cascade: workspace → client → project → entry override.
| Tariff Type | Description | Billable |
|---|---|---|
| Per Hour | Rate × elapsed hours. Most common for dev & consulting. | ✓ |
| Per Day | Fixed daily rate regardless of hours. For on-site work. | ✓ |
| Per Month | Monthly retainer, amortised across the month's entries. | ✓ |
| Fixed | Flat fee for the entry, independent of time logged. | ✓ |
| Non-Billable | Overhead / internal time — excluded from invoices. | ✗ |
| Inherited | Pulls tariff from the parent project or client setting. | → |
The Entries page filter bar gives granular control. Filters persist per session with count badges on active dropdowns.
18 currencies supported. Each entry can inherit the client's default, workspace default, or use a custom override.
Entry custom wins over client override, which wins over workspace default.
| Format | Options | Where Available |
|---|---|---|
| CSV | Comma, semicolon, or tab delimiter. Custom filename. | Entries · Reports · Overview |
| XLSX | Excel workbook via client-side SheetJS library. | Entries · Reports · Overview |
| A4 Landscape, auto-generated table layout. | Reports · Overview |
Representative subset of 200+ functions · search or use the category buttons above
includes/config.php. All API endpoints in separate includes.fetch(). Full SPA navigation with hash-based routing.