A local-first, open-source alternative to Clockify: track time, manage clients and projects, and export monthly work reports (timesheets) as Excel β all data stays on your machine.
ClockItNow is a self-hosted time tracker built for freelancers and small teams who bill by the hour but don't want their data in someone else's cloud. It runs as a single Node.js app with a built-in SQLite database β no Docker, no external services, no telemetry. It can also run as a native Windows desktop app (Electron) with a system tray icon, idle detection and timer reminders.
- β± Timer β Start/stop time entries with project and task assignment
- π Dashboard β KPIs, daily bar chart, project/client breakdown, monthly goal
- π₯ Clients & Projects β Full master data management with hourly rates and per-client rounding rules
- π Reports β Filter by client, project, date range and billability; export as CSV
- π Arbeitsrapport β Generate a monthly work report as
.xlsxdirectly from time entries, grouped by project and day, with embedded signature image - βοΈ Settings β Sender name/address/signature, UI language, and desktop reminder/backup behavior, all stored server-side and shared across every open window
- π₯οΈ Desktop app β Optional Electron shell: tray icon shows the running timer, idle detection prompts when you've been away, notifications for long-running timers and "nothing tracked" reminders during work hours
- πΎ Automatic backups β Rotating SQLite backups (default: every 6 hours, kept for 14 runs) to OneDrive or a folder you choose
- π Auth β Password login or magic link (email, optional)
| Layer | Technology |
|---|---|
| Frontend | React 18 Β· TypeScript Β· Vite Β· Tailwind CSS Β· Recharts |
| Backend | Node.js Β· Express Β· node:sqlite (built-in, no native addons) |
| Desktop | Electron |
| Export | ExcelJS |
- Node.js v24+ (uses the built-in
node:sqlitemodule) - npm
# 1. Clone the repo
git clone https://github.com/Steph-Wb/ClockItNow.git
cd ClockItNow
# 2. Install dependencies
npm install
# 3. Start the app β that's it, no configuration required
npm run devThe app runs on http://localhost:5173 (frontend, dev mode with hot reload) and http://localhost:3001 (API). On first launch, register an account β the first registered user owns the database.
| Command | What it does |
|---|---|
npm run dev |
Development: Vite dev server (hot reload) + API, two ports |
npm run build && npm start |
Production: single Node process on http://localhost:3001, serves the built frontend and the API from one port |
npm run electron |
Desktop app: builds, then launches the Electron shell (window + system tray) around the production server |
The app runs with zero configuration: a JWT secret is generated automatically on first start and stored in the data directory (see below). Everything in .env.example is optional β copy it to .env only if you want to override a default:
- Magic-link login β set
SMTP_HOSTand the otherSMTP_*variables to enable email login (hidden otherwise; password login always works) - Data/backup locations, port β
CLOCKITNOW_DATA_DIR,CLOCKITNOW_BACKUP_DIR,CLOCKITNOW_PORT; the backup folder and most desktop-app behavior (work hours, reminder thresholds, backup retention) can also be changed at runtime under Settings β Desktop & Erinnerungen, no restart needed for most fields
Monthly work reports can be generated as .xlsx files in two ways:
In the app: Reports page β Arbeitsrapport (.xlsx) button β choose client and month.
Via CLI:
npx tsx scripts/arbeitsrapport.ts --month 2026-01 --client "Client Name" \
[--projekt "Project description"] [--out /path/to/output/]Set up sender name, address and signature image once under Settings β they are embedded automatically in every report.
βββ server/
β βββ database.ts # SQLite schema + migrations
β βββ lib/
β β βββ appPaths.ts # Data directory resolution (%APPDATA%\ClockItNow)
β β βββ backup.ts # Automatic rotating backups
β β βββ secret.ts # JWT secret auto-generation
β β βββ localToken.ts # Local API token for the Electron tray
β β βββ buildArbeitsrapport.ts # Shared xlsx builder
β βββ routes/ # Express route handlers
βββ electron/
β βββ main.ts # Electron main process: window, tray, idle detection
β βββ trayIcon.ts # Runtime-rendered app/tray icons (no binary assets)
βββ src/
β βββ components/ # React components
β βββ pages/ # Page-level components
β βββ api/ # API client
β βββ types/ # Shared TypeScript types
βββ scripts/
β βββ arbeitsrapport.ts # CLI for report generation
βββ .env.example
All data lives in a local SQLite database in %APPDATA%\ClockItNow\ (Windows) β never in the project folder, never committed to git. Automatic rotating backups run every 6 hours to OneDrive (auto-detected) or a folder you configure under Settings.
No analytics, no telemetry, no external services required.
Contributions are welcome! Please read CONTRIBUTING.md for how to set up a development environment, run the checks and submit a pull request. By participating you agree to the Code of Conduct.
GNU Affero General Public License v3.0 β see LICENSE for details.
Free to use, self-host and modify. If you offer this software as a network service, the AGPL requires you to make your source code available under the same terms.