Time tracking for teams. People start a timer or fill a timesheet against a project and a task, and the reports turn those hours into billable amounts, client invoices and a picture of where the week actually went.
Build me time tracking that replaces Clockify: timers, timesheets, projects, rates and the reports that turn hours into money. STACK - Node 20+ with Fastify, server-rendered HTML with a little vanilla JS - SQLite through better-sqlite3, WAL mode - Caddy in front THE DATA MODEL - users: id, email, name, role, hourly_cost_cents, is_active, created_at - clients: id, name, currency, notes, archived_at - projects: id, client_id, name, code, colour, is_billable, budget_kind, budget_amount, budget_hours, archived_at - tasks: id, project_id, name, is_billable, estimate_hours, archived_at - rates: id, scope, scope_id, user_id, hourly_cents, currency, effective_from — a rate has a start date, and an entry is billed at the rate in force when the work happened. Changing a rate must never restate last quarter - entries: id, user_id, project_id, task_id, description, started_at, ended_at, duration_seconds, is_billable, is_locked, invoice_id, tags_json, source, created_at, updated_at - entry_revisions: id, entry_id, field, old_value, new_value, changed_by, changed_at — an edited timesheet in an append-only log, which is what makes it defensible - approvals: id, user_id, period_start, period_end, status, submitted_at, reviewed_by, reviewed_at, note - Every instant in UTC. Every amount in integer cents with a currency TIME, WHICH IS SUBTLER THAN IT LOOKS - An entry is two instants, and the duration is derived. Never store a duration alone, or a day with a clock change will not add up - A running timer is an entry with no end. One running timer per user, enforced in the database with a partial unique index, not by hope - A timer left running overnight is caught: warn at a configurable length, and offer to trim it to the last activity rather than silently discarding it - Manual entries and timer entries are the same row with a different source, so reports never have to look in two places - The week starts where the workspace says, and the day boundary is the user's zone TRACKING - Start and stop from anywhere in the interface, with the project, task and description - A weekly timesheet grid: rows of project and task, columns of days, type hours into cells - Duplicate yesterday, continue a previous entry, and split an entry in two - Idle detection where the browser can tell, offered as a suggestion, never applied automatically - Bulk edit by selection, with every change written to the revision log BUDGETS AND ALERTS - A budget per project in hours or money, recurring monthly or for the whole project - Progress shown as it is consumed, and an alert at configurable thresholds to the project's owner - The difference between billable and cost is kept: a user has a cost rate and the project has a billable rate, and margin is the gap. A tool that tracks only one of the two cannot answer whether the work was worth doing REPORTS - Group by any of client, project, task, user, tag or day, and filter by all of them - Summary, detailed and weekly views - Billable and non-billable, amounts, and margin - Export CSV, and a PDF for a client that shows exactly what was worked on - Every report is computed from entries at query time. No stored totals, ever — a total that disagrees with its rows is the failure this category is prone to APPROVAL AND LOCKING - Submit a period, a reviewer approves or returns it with a note - Approved periods are locked: an entry inside one cannot be edited without an explicit unlock, which is logged - Locking is what makes the hours usable for payroll and for an invoice, and it is the feature homemade trackers never have INVOICING HANDOFF - Select approved billable entries and mark them invoiced with a reference, so nothing is billed twice - Export the selection in a shape an invoicing tool can read OPERATIONS - .env: DATABASE_PATH, BASE_URL, SESSION_SECRET, SMTP_URL - Migrations on boot, each once - Nightly backup off the machine, restore script - Health endpoint WHAT MATTERS MOST Rates with effective dates, and the revision log. Build those before anything visible, and test a rate change in the middle of a month against a report of the previous one. Hours are a record people are paid from and argued over, and a tracker that quietly restates history is a tracker nobody can trust twice. Give me the repository, migrations, .env.example, a seed workspace with three clients and a month of entries, and a README with deploy steps behind Caddy.
What you lose
- A free tier that already covers unlimited tracking for a small team, which makes the build hard to justify
- Apps for every platform, plus a browser extension and a kiosk mode
- Approval workflows and locked timesheets that a payroll process can rely on
- Attendance, time-off and scheduling features that surround the timer
- Somebody else's uptime on the system your invoicing depends on
If you would rather not build
- Toggl Track — the same category, priced per seat
- Harvest — heavier, invoicing-first alternative
What it costs
read from their page 15 Aug 2026
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| — | $4.99/mo | — | 15 Aug 2026 |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
Kimai
$0Time tracking with projects, rates, invoices and exports; runs on ordinary PHP hosting.
kimai/kimaifree · open source
Why this verdict
our own opinion · changed only by a person
86/100
Verdict yes at 86: the highest score in this batch after Carrd. Timers and timesheets are simple, and the approval log is the only interesting part. The honest caveat is that Clockify's free tier already does most of this.
History
tracked since 6 Aug 2026 · nothing is ever overwritten
Questions about Clockify
answered from the record above
Is Clockify free?
No — the plan we track is $4.99 a month. Basic, $4.99 per user per month on monthly billing ($3.99 billed annually). A free tier exists and covers a lot.
Can you replace Clockify by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 86 out of 100, build time one session. Read what you lose before you decide.
How much does Clockify cost?
$4.99 a month on Basic — $59.88 a year. Recorded 6 Aug 2026.
What do you lose by replacing Clockify?
A free tier that already covers unlimited tracking for a small team, which makes the build hard to justify; Apps for every platform, plus a browser extension and a kiosk mode; Approval workflows and locked timesheets that a payroll process can rely on; Attendance, time-off and scheduling features that surround the timer; Somebody else's uptime on the system your invoicing depends on. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Clockify?
Yes: Kimai. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

