Clockora Manual, as shipped in the download
Clockora — User Manual
Time tracking: hours worked, by employee and by project. Version 3.1.4 [src: app/controllers/api.php:18].
About this manual
Every statement here was written by reading Clockora's own source, and each one carries the file it came from in a bracketed src marker. Paths are relative to the folder this docs directory sits in. If a sentence disagrees with the application, the application is right and this manual has a bug — the markers exist so you can check rather than take our word for it.
Nothing is described that the code does not do. Where something is deliberately limited, that is said plainly rather than left out.
What Clockora is
It tracks hours worked only [src: app/src/Timesheet.php:17].
It is neither invoicing nor payroll: it never stores a billing rate, never computes a money amount, never touches cards, bank rails or crypto, and initiates no payments [src: app/src/Timesheet.php:18].
Projects are labels for grouping hours, nothing more [src: app/src/Timesheet.php:19]. If you are looking for a rate against a project so the product can produce an invoice, it is not here and is not meant to be.
Everything is whole minutes
Worked time is integer minutes end to end, and the source spells out why that matters: a clock span is a difference of two minutes-of-day integers, a manual entry parses straight to integer minutes, and every sum is done in PHP with a final clamp — never a SQL SUM(), which can overflow and fail under strict mode [src: app/src/Timesheet.php:11].
Because minutes are integers, period totals reconcile exactly [src: app/src/Timesheet.php:14].
⭐ A day cannot hold more than a day
This is the guard worth knowing about, and the source records the bug that produced it.
A single entry is capped at a 24-hour span [src: app/src/Timesheet.php:30]. That alone was not enough:
Ten stacked manual 8:00 entries produced an accepted 80-hour day — each row legal, the sum physically impossible. [src: app/src/Timesheet.php:35]
So there is a second ceiling: one employee's entries dated on one day may not total more than 1440 minutes, however each entry was recorded [src: app/src/Timesheet.php:33], and the check runs before an entry is accepted [src: app/src/Timesheet.php:43].
The suite guards it at the source level for every recording method, not just the one the bug arrived through.
One clarification on cross-midnight entries
A clock entry that crosses midnight is dated on its start day, so "the day's total" strictly means the total of entries dated that day — which the source notes is exactly what payroll sums [src: app/src/Timesheet.php:37].
Worth knowing if you compare a day's figure against a wall clock: a night shift starting on Monday counts against Monday.
Overlaps
Entries are placed on one absolute minute timeline [src: app/src/Timesheet.php:149] so overlap detection works across midnight, and a clash check can exclude the entry being edited [src: app/src/Timesheet.php:177].
Overtime is a flag, never a payment
The section is headed exactly that in the source — overtime FLAG (never pay) [src: app/src/Timesheet.php:255].
The threshold is per employee where they have their own target, otherwise the business default [src: app/src/Timesheet.php:257]. A threshold of zero or less disables the flag entirely [src: app/src/Timesheet.php:264], and minutes above the threshold are informational only [src: app/src/Timesheet.php:270].
Overtime is counted by the week, not by the range
A multi-week report counts how many whole weeks exceeded the threshold [src: app/src/Timesheet.php:281], rather than scaling one number across the range.
The source gives the reasoning in a half-sentence that is exactly right: overtime is a weekly concept [src: app/src/Timesheet.php:279]. Forty-five hours in one week and thirty-five in the next is one overtime week, not ten hours spread over two — and a product that averaged them would report neither honestly.
Status
Four statuses: draft, submitted, approved, rejected [src: app/src/Timesheet.php:48].
Users and roles
Clockora's viewer role is granted entry.read and nothing more [src: app/controllers/v3.php:22] — the narrowest viewer grant in this family of products.
Backups and Settings are for administrators
Both backup downloads — the JSON export and the SQLite file — and the Settings page ask for the administrator role [src: app/controllers/api.php, backup_json() and backup_sqlite(); app/controllers/app.php, settings_page()]. Viewer and member accounts are refused, and the menu and the Security page show those links to administrators only. Before 3.1.4 a sign-in alone was enough to download the whole database, and any account could read the mail server settings.
One server name
The REST interface, the agent specification and its unauthenticated probe all name the server clockora [src: app/controllers/v3.php]. Before 3.1.4 the probe and the specification said Clockora.
The API and agent access
Five tools are exposed to an agent [src: app/controllers/v3.php:341]: listing timesheets, timesheet detail and period totals on the read side; submitting a timesheet and deciding one on the write side.
Note that submitting and deciding are separate tools, mirroring the separation of authorities the roles draw.
What Clockora does not do
It does not invoice and it does not pay [src: app/src/Timesheet.php:18] — no rates, no money amounts, no payments.
It does not hold a rate against a project [src: app/src/Timesheet.php:19]. Projects group hours.
It does not accept a physically impossible day [src: app/src/Timesheet.php:33].
It does not turn an overtime flag into money [src: app/src/Timesheet.php:255], and it does not average overtime across weeks [src: app/src/Timesheet.php:279].
It does not sum time in SQL [src: app/src/Timesheet.php:11].