The gap in self-hosted time tracking
There are good open-source time trackers. Kimai is excellent for invoicing-grade timesheets, ActivityWatch is a strong privacy-first personal tracker, and TimeTagger and Solidtime both do clean manual tracking. What almost none of them do is the thing teams actually shop for when they compare against Hubstaff or Time Doctor: automatic activity levels plus optional screenshots, managed across a team.
That combination is why organisations end up on hosted SaaS even when their policy, their clients, or their regulator would rather they did not. Quillclock exists to close that gap.
What self-hosting actually gets you
Data residency. The activity samples and screenshots live in your MongoDB instance, in whatever region you choose. For teams under GDPR — or under a client contract that forbids sending staff data to a third-party processor — this is often the deciding factor.
Retention on your terms. Screenshots auto-delete after seven days by default, but it is your database. You set what is kept and for how long.
No per-seat meter. Hosted monitoring tools price per user per month, which is what makes them expensive for BPOs, agencies and call centres running large rosters. Self-hosting decouples headcount from cost.
What deployment involves
The stack is deliberately unexotic: Next.js 14 (App Router), MongoDB via Mongoose, and JWT auth in an httpOnly cookie. It runs anywhere Node.js runs — your own VPS, a container, or a managed platform if you prefer. Set three environment variables (MONGODB_URI, MONGODB_DB, JWT_SECRET), point the desktop agents at your server URL, and the first visit walks you through creating the admin account.
The Windows agent is a single Python-built executable. Employees install it, sign in, and accept their invite — there are no config files to distribute and no agent keys to copy around.
Self-hosted does not mean unmonitored consent
Running the server yourself does not let you switch off the consent gate. It is enforced in the ingest path: samples for an employee who has not accepted their invite are rejected, and revoking consent stops collection immediately. Self-hosting changes who holds the data, not whether the person generating it agreed to it.
See how consent is enforced for the detail.