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.