Skip to content
T Tickwise
100% LOCAL · NO LLM · NO API KEY

Time tracking that
stays on your laptop.

Tickwise watches the active window, asks your browser for the exact tab URL, and classifies your work by matching project keywords against the combined text. No cloud, no inference, no monthly bill — just a fast, deterministic tray app.

Free· Open source (GPL-3.0)· $0 / month· No data leaves your machine

127.0.0.1:19532 / live
TODAY · 09 MAY

Tickwise Live

Capture loop running. 4 sessions classified by keyword in the last hour.

TOTAL TRACKED
6h 12m
38 sessions
BILLABLE
5h 47m
93% of tracked
UNCLASSIFIED
3
Review on the Timeline page
WEBSOCKET
Connected
Browser extension live

By project

Sceneryenzo website 3h 22m
Acme client docs 1h 47m
Internal R&D 38m

Everything you need.
Nothing you don't.

🎯

Fuzzy keyword classifier

Sceneryenzo matches scenery en zo, Scenery-Enzo, SCENERY ENZO. Spacing, case and punctuation are ignored.

🖥️

Tray-resident

Clock-face tray icon shows tracking / paused / focus / break states. Right-click for everything else.

🔍

Change-detection capture

Perceptual-hash diff means OCR runs only when the screen actually changes — about 2–4 times per minute, not 60.

🌐

Browser extension

Chrome MV3 + Firefox bridge pushes the exact active tab URL to the local API over WebSocket. Domain blocklist included.

🍅

Pomodoro built in

Focus / break state machine tags every session. Controls from the tray, dashboard, browser popup and your phone.

🧾

Invoicing & reports

Line-item-grouped PDFs from tracked time. Configurable HTML/CSS template. Dutch BTW/KVK/IBAN out of the box.

📅

Calendar sync

ICS feed for Tuta, Apple Calendar and Google. CalDAV for Radicale and Nextcloud. OAuth2 for Google Calendar.

📱

Mobile companion

Installable PWA for the timeline, today summary and remote Pomodoro. QR-code pairing, optional Cloudflare Tunnel.

🔒

4-level redaction

Strips secrets, PII, names and structure from any text before it ever lands in the local SQLite database.

Local. Deterministic.
Pay nothing.

No machine learning. No "API key required." Tickwise classifies your time with a single deterministic stage that you fully control.

1

Capture

Once a second, Tickwise samples the active window and the focused screen. A perceptual hash decides whether anything has actually changed — if it hasn't, the loop sleeps. OCR only runs on real change.

2

Combine

The window title, process name and OCR text are joined with the browser extension's exact tab URL and title. That's the haystack the matcher will search.

3

Match

Every active project's keyword list is normalised — lowercased, all non-alphanumerics stripped — and so is the haystack. A normalized substring match wins first; a token-set fallback handles partial matches.

4

Store

The matching project gets the activity. Confidence is 1.0, source is keyword_match. Nothing leaves the machine. If no project matched, the activity stays unclassified for you to assign by hand.

Type one project name.
Every variation matches.

Project keywords

Sceneryenzo
sceneryenzo.com
SE-website

Three lines. Each one is normalized to sceneryenzo, sceneryenzocom, sewebsite.

Haystacks → match

"sceneryenzo.com/dashboard"match
"scenery en zo - Microsoft Edge"match
"SCENERY-ENZO project board"match
"5 more pages — sceneryenzo"match
"random unrelated window"no match

One file.
Double-click to run.

Tickwise ships as a self-contained tray app. No Python install required, no Node.js, no Docker. The dashboard is bundled inside the binary.

🪟

Windows

Windows 10 / 11 · x64 · ~80 MB

Download .exe AVAILABLE
🍎

macOS

Universal binary · Apple Silicon + Intel

Track progress COMING SOON

Or run it from a checkout.

Python 3.12+ and Node.js 20+ is all you need. The build is reproducible and there's no external service to register with.

powershell ~/Projects ❯
# Clone, install editable, build the dashboard, run the tray app
git clone https://github.com/code-lodge/tickwise
cd tickwise

python -m venv .venv
.\.venv\Scripts\pip install -e .

Push-Location dashboard ; npm install ; .\node_modules\.bin\ng build ; Pop-Location
Copy-Item dashboard\dist\tickwise-dashboard\browser\* tickwise\static -Recurse -Force

.\.venv\Scripts\pythonw.exe -m tickwise   # tray icon appears, dashboard at :19532

# Build a standalone Tickwise.exe
.\.venv\Scripts\pip install pyinstaller
.\.venv\Scripts\python.exe -m PyInstaller packaging\tickwise.spec --clean --noconfirm
# → dist\Tickwise\Tickwise.exe