TimeTracker

Application Feature Overview

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.

Lines of Code
11,187
PHP + HTML + CSS + JS
Main Pages
9
+ Client Settings subpage
Modal Dialogs
20+
Covers all CRUD actions
JS Functions
200+
Vanilla — no frameworks
Currencies
18
USD, EUR, GBP and more
Export Formats
3
CSV · XLSX · PDF
Application Pages
Nine navigable sidebar pages — two require Admin role
Navigation
📊
Dashboard
Widgets, stats, active timer
Time Entries
Log, filter & manage entries
📁
Projects
Accordion project tree
Tasks
Per-project task tracking
Activities
Activity types per project
👤
Clients
Overview with budgets & files
⚙️
Client Settings
Rates, caps & documents
📈
Reports
Client pivot & task reports
🏷
Activity Types  Admin
Global type definitions
👥
Team  Admin
Members, roles & access
Core Features
Key capabilities across the full application
12 features
Live Timer Engine
Real-time timer with start, stop, and pause. Persists across page navigation via background polling. Assigns to client, project, activity, task, and billing type in real time.
Start / Stop / PauseAuto-persistBillable toggle
💰
Multi-Currency Billing
Per-entry tariff types: hourly, daily, monthly, or fixed. Currency inherits workspace → client → entry override. 18 currencies supported.
Per-hour / Per-dayFixed rate18+ currencies
🔔
Overtime & Hour Caps
Client-level hour caps with OVT banners when exceeded. Snooze or dismiss per client using fingerprint-based deduplication. Background sync every 60 s.
OVT bannersSnooze controlsBackground sync
📊
Dashboard Widget Board
Freely draggable and resizable widget cards on the dashboard. Layout persists to the database. Add, remove, collapse, or reload individual widgets via AJAX.
Drag & dropResizableDB-persisted layout
📄
Multi-Format Export
Export any report or list to CSV, XLSX, or PDF (A4 Landscape). Choose delimiter, custom filenames, and save to client folders or download directly.
CSV / XLSX / PDFCustom delimiterFolder save
🗄
Database Backup System
Full DB dumps, selective table backups, per-client exports, and file directory backups. Auto-backup scheduler. Restore from uploaded JSON backup files.
Full / SelectiveAuto-schedulerRestore from file
🗂
Client File Browser
Per-client document storage with folder hierarchy. Drag-and-drop files between folders. Multi-select, rename, move, and delete with file type icons and sizes.
Folder treeDrag & dropMulti-select
🔍
Advanced Filter Engine
Every page has a filter bar with dropdowns for project, client, activity, task, billing status, and date ranges. Filters persist per session with live count badges.
Multi-select dropsDate rangesLive search
📈
Client & Task Reports
Client Pivot (group by client, project, activity, or member with earnings breakdown) and Task Report (resizable columns, sort, live search, and export).
Client pivotTask tableResizable cols
Quick-Start Actions
One-click Quick Start on any project, activity, or task immediately launches a timer, pre-filling all fields from the item's tariff and billing settings.
One-click launchPre-fills tariffConfirm dialog
📝
Client Notes
Freeform notes attached to each client, editable from the Client Settings page. Notes can be updated or cleared independently from other client data.
Per-client notesEdit / clear
🛡
Role-Based Access
Admin (full access, team, settings, activity types) and Member (own entries and assigned projects). Admin-only pages are hidden from members automatically.
Admin / MemberHidden menusSession auth
Timer & Entry Controls
Interactive preview of the timer bar, entry fields, billing options, filters, and currencies
Live demo

The sticky timer bar appears across all pages when a timer is active. All dropdowns and controls update state in real time.

00:00:00
Timer running — no client

Fields in the Add / Edit Time Entry modal. Entries can also be created automatically when the timer stops.

Date2025-01-14
Time Range09:00 → 11:30
Duration2.50 h
ClientAcme Corp
ProjectWebsite Redesign
ActivityDevelopment
NotesImplemented new authentication flow and fixed session handling bug.

Each entry carries its own billing config. Rates cascade: workspace → client → project → entry override.

Tariff TypeDescriptionBillable
Per HourRate × elapsed hours. Most common for dev & consulting.
Per DayFixed daily rate regardless of hours. For on-site work.
Per MonthMonthly retainer, amortised across the month's entries.
FixedFlat fee for the entry, independent of time logged.
Non-BillableOverhead / internal time — excluded from invoices.
InheritedPulls 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.

Available Filters
🗓
Date Range
From / To date picker
👤
Client
Multi-select dropdown
📁
Project
Multi-select dropdown
Activity
Multi-select dropdown
💰
Billable
Yes / No / All
Sort Options

18 currencies supported. Each entry can inherit the client's default, workspace default, or use a custom override.

USD $
EUR €
GBP £
RON
CHF
JPY ¥
CAD
AUD
SEK
NOK
DKK
PLN
CZK
HUF
TRY
BRL R$
INR ₹
CNY ¥
Currency Resolution Waterfall
Workspace
Default (USD)
Client
Override (EUR)
Entry
Custom (GBP)

Entry custom wins over client override, which wins over workspace default.

Reports & Export
Two report types with filtering, sorting, and multi-format export
CSV · XLSX · PDF
Client Report (Pivot)
📊
Group By
Client / Project / Activity / Member
👁
Column Toggles
Hours, Billable, Amount, Rate
🔽
Client Filter
Select specific clients or all
📤
Export
CSV, XLSX, or PDF A4 Landscape
Task Report (Table)
↔️
Resizable Columns
Drag column borders to resize
↕️
Column Sort
Click any header to sort asc/desc
🔍
Live Search
Filter tasks by name in real time
↕️
Vertical Resize
Drag table bottom edge to expand
FormatOptionsWhere Available
CSVComma, semicolon, or tab delimiter. Custom filename.Entries · Reports · Overview
XLSXExcel workbook via client-side SheetJS library.Entries · Reports · Overview
PDFA4 Landscape, auto-generated table layout.Reports · Overview
Modal Dialogs
Every primary action is handled through a focused modal — 20+ total
20+ modals
JavaScript Function Explorer
Search and browse the 200+ functions that power the application UI logic
200+ functions
toggleTimer()timer
startUI(e)timer
stopUI()timer
togglePause()timer
checkTimer()timer
updateHeaderStrip()timer
updateHeaderSum()timer
timerClientChanged()timer
timerProjChanged()timer
timerActivityChanged()timer
tbDoStart()timer
tbDoStop()timer
tbToggleBillable()timer
tbInheritFromSelections()timer
nav(el)nav
showPage(pg)nav
refreshPage()nav
boot()nav
restoreFromHash()nav
updateSidebar()nav
doLogin()auth
doLogout()auth
loadEntries()entries
renderEntries()entries
openEntryModal()entries
saveEntry()entries
deleteEntry()entries
efExport()entries
_efBuildDrop(key)entries
_efUpdateSummary()entries
crExport(fmt)reports
crSetGroupBy(g)reports
crToggleFilter()reports
renderTaskReport()reports
trExport(fmt)reports
trSort(col)reports
trLiveSearch(q)reports
trInitResize(th)reports
wbInit()widget
wbCreateCard()widget
wbBindDrag()widget
wbBindResize()widget
wbSaveLayoutDb()widget
wbRemove(id)widget
wbReloadCard(id)widget
abRestoreDb()backup
abRestoreClient()backup
abDoDbSelective()backup
abRestoreDir()backup
abSelAll()backup
renderCapNotices()overtime
_capFingerprint()overtime
_capLoad(cid)overtime
_capSave(cid)overtime
currencySymbol()currency
resolveCurrency()currency
fmtMoney()currency
tariffLabel(type)currency
tariffBadge()currency
_fbItemClick()files
_fbFolderDrop()files
_fbMoveDocsTo()files
_fbUpdateSelBar()files
_fbBreadcrumb()files
syncData()misc
toast(msg,type)misc
openM(id)misc
closeM(id)misc
quickStart(item)misc
statsBar()misc
loadDashboard()misc
populateTimerClients()misc

Representative subset of 200+ functions · search or use the category buttons above

Settings & Configuration
Workspace options, account management, and the backup system
Admin only
Workspace Settings
🏢
Workspace Name
Displayed in the sidebar header
💱
Default Currency
Fallback when no client override
Rounding
Round entries to nearest unit
🌍
Timezone
Server-side timestamp handling
📅
Date Format
ISO, EU, or US format
Admin Controls
🔑
Admin Account
Username and password management
👥
Team Members
Add, disable, or remove members
🐛
PHP Error Log
View and clear server-side errors
🔧
Diagnostics
DB health, version, config info
🔄
Sync Data
Re-send all entries, resolve tariffs
Backup & Restore System
💾
Full DB Backup
Complete SQL dump of all tables
🎯
Selective Backup
Choose specific tables to include
👤
Client Export
Per-client data as JSON
📂
File Directory
Archive uploaded client files
🔁
Auto-Scheduler
Scheduled automatic backups
⬆️
Restore from File
Upload backup JSON to restore
User Roles & Access
Admin has full access — Member is scoped to their own data and assigned projects
A
Administrator
Full access to all features
Admin
Manage team members & roles
Configure workspace settings
View all team time entries
Manage activity types globally
Access diagnostics & error log
Create & restore DB backups
M
Member
Scoped to own data
Member
Log and edit own time entries
View assigned projects & tasks
Use the live timer
View own reports & export data
No access to Team or Settings
Cannot modify activity types
Architecture & Tech Stack
Self-contained — requires only a PHP server and MySQL database
🐘
PHP Backend
Session management, auth, base URL resolution. Config via includes/config.php. All API endpoints in separate includes.
Vanilla JavaScript
Zero framework dependencies. 200+ async functions using fetch(). Full SPA navigation with hash-based routing.
🎨
Pure CSS Design System
No external CSS framework. Custom design tokens via CSS variables. Responsive via media queries. Poppins typeface from Google Fonts.
📦
Client-Side Libraries
SheetJS (XLSX), jsPDF (PDF), vanilla chart rendering. Loaded on-demand. No build toolchain required.