Time Tracking Widget
The Time Tracking widget enables recording working hours directly on the dashboard – broken down by projects, orders, employees, or other reference objects. A timer can be started and stopped for each reference object. When stopped, a time entry is automatically saved in the configured data schema.
This allows project hours, employee work time and timesheets to be documented seamlessly – a digital alternative to Excel time sheets or paper-based work-hour reports.
Typical Use Cases
| Use Case | Description |
|---|---|
| Project hours | Track working time per client project for reporting. |
| Employee hours | Record daily work time per employee – as digital timesheet and work-hour report. |
| Order time | Record time spent per production or service order. |
| Client consulting | Document consulting time per client for billing. |
| Maintenance work | Capture duration of maintenance tasks per machine or facility. |
| Support tickets | Track handling time per ticket for SLA reporting. |
| Freelancer billing | Log hours worked per contract or assignment. |
Features
- Reference list: The widget shows a list of all available reference objects (e.g., projects or orders).
- Start/Stop: A timer can be started and stopped individually for each reference object.
- Pause/Resume: Running timers can be paused and resumed later. Paused timers are visually marked as "paused".
- Live counter: The current elapsed time is displayed in real time in HH:MM:SS format.
- Automatic entry: When stopped, a data object with start time, end time, duration as well as pause and work segments is created automatically.
- Concurrency: The configuration determines whether several timers may run at the same time.
Pause and Resume
Running timers can be paused via the pause button and restarted via resume. This keeps interruptions – such as a lunch break or a phone call – out of the recorded working time, while the gross time is preserved for traceability.
After reloading the page, pause and segment state are restored correctly – a paused timer stays paused, a running one keeps running.
Logged and computed fields
When finally stopped, a time entry is created in which both the gross time and the pauses are fully logged:
| Field | Type | Description |
|---|---|---|
start_time |
logged | First start of the timer (gross, unchanged). |
end_time |
logged | Final stop of the timer (gross, unchanged). |
pause_logs |
logged | List of pauses, each entry { paused_at, resumed_at }. |
timer_logs |
logged | List of actually worked segments, each entry { start_time, end_time }. |
duration |
computed | Gross duration (end_time − start_time). |
paused_duration |
computed | Sum of all pause times. |
net_duration |
computed | Actual working time (duration − paused_duration). |
The computed fields are read-only and are determined automatically.
Example of a time entry
A timer started at 09:00, paused from 10:30 to 11:00 and stopped at 12:00 produces the following entry:
{
"start_time": "2026-06-22T09:00:00Z",
"end_time": "2026-06-22T12:00:00Z",
"pause_logs": [
{ "paused_at": "2026-06-22T10:30:00Z", "resumed_at": "2026-06-22T11:00:00Z" }
],
"timer_logs": [
{ "start_time": "2026-06-22T09:00:00Z", "end_time": "2026-06-22T10:30:00Z" },
{ "start_time": "2026-06-22T11:00:00Z", "end_time": "2026-06-22T12:00:00Z" }
],
"duration": 10800,
"paused_duration": 1800,
"net_duration": 9000
}
The gross duration is 3 hours (10800 seconds); subtracting the 30-minute pause (1800 seconds) results in a net working time of 2.5 hours (9000 seconds).
Concurrency Modes
The widget settings in the dashboard designer define how multiple timers behave towards each other:
| Mode | Description |
|---|---|
| Multiple (default) | Any number of timers can be active at the same time. |
| Single | Only one timer is active at a time. |
| Exclusive | Several timers are allowed, but only one is active. When starting or resuming a timer, all other running timers are paused automatically – without a confirmation prompt. |
In addition, the "Allow pausing" switch controls whether timers can be paused. In Exclusive mode pausing is always active, because the automatic pausing of other timers relies on it.
Configuration
The following settings are configured in the properties panel:
- Entries Schema: In which data schema should time entries be saved?
- Reference Source: Where do the reference objects (e.g., projects) come from?
- Schema mode: Reference objects are loaded from a second data schema.
- SQL mode: Reference objects are loaded via an SQL query (e.g., for filtered or computed lists).
- Field Mapping: Which fields of the entries schema are populated with start time, end time, duration, and reference? For pauses, the following mappings are added:
- Pause log field (
pause_logs) and timer log field (timer_logs). - Paused duration field (
paused_duration) and net duration field (net_duration).
- Pause log field (
- Concurrency: Selection of the mode (Multiple, Single or Exclusive) and the "Allow pausing" switch.
Note for existing schemas
When a new time tracking schema is created, the required fields are generated automatically: pause_logs and timer_logs as a list of objects ("array of object"), paused_duration and net_duration as computed fields. Existing schemas do not receive these fields automatically – they must be added manually when needed so that pauses are logged and net times are calculated.
Reference Modes
| Mode | Description |
|---|---|
| Schema | Reference objects are loaded directly from a data schema (e.g., all projects). |
| SQL | Reference objects are determined via an SQL query – e.g., only active projects or orders assigned to a specific team. |
Example
An employee opens the dashboard and sees the timer tile with all active projects. The timer for "Project Alpha" is started. After one hour of work, it is stopped. A time entry with start, end, and duration is automatically saved in the "Time Entries" schema.
Reporting & Analysis
Recorded times are stored as regular data objects in the schema and are immediately available for analysis:
- Table widget: Filter and group entries by employee, project or time range.
- Hours reports: Sum totals per employee, project or month via SQL queries in the Data Lake.
- Export: Export timesheets as CSV or Excel for payroll and client billing.
- Process triggers: Time entries can start follow-up processes, e.g. monthly approvals or invoicing.
Tips
- SQL mode for filtered lists: When only specific projects should be shown (e.g., only active or user-assigned ones), the SQL mode is recommended.
- Combine with table: A table widget displaying the time entries of the same schema provides a good overview of recorded hours.
- Exclusive mode for clean tracking: Those who only ever work on one thing at a time should choose the "Exclusive" mode. When switching to another project, the previous timer is paused automatically, without having to be stopped manually.
- Pause instead of stop: For short interruptions, the pause function is better suited than a full stop, as it produces a single coherent time entry with the correct net time.