log(ger)

Track time like you mean it.

A personal time tracker with real-time timers, analytics that rescale with one control, and an AI that answers questions about your own time. Your data lives on your machine — nowhere else.

Kaiwen Bian · Yuer Tang

log(ger) — Spring 2026
Good afternoon
Monday · May 25
Spring 2026 · active
Today0m
Entries0
Streak0d
Quick startSalk Research
Salk COGS PP Training

It started as three years of spreadsheets and a Jupyter notebook. log(ger) keeps the idea — every minute is worth logging — and turns it into something you’d actually want to open: you hit start, do the work, hit stop, and the dashboards, streaks, and answers all fall out of that one habit.

Salk Research0m
Writinglive
🌴🌴
🔥 streak kept
Capture

Start, work, stop.

Hit play on a category and the clock runs — pause for a coffee, resume, stop when you’re done. Run a few timers at once, and everything rounds to the honest minute. Forgot to start one? A manual entry backfills the time after the fact. And when you take a day off, mark it a break: it logs nothing, yet your streak bridges right over it.

🔥 0d
Review

Replay any day.

Every entry lands as a colored block across the day, start to end. Scrub back to any past date and the whole dashboard rewinds with it — and stays there as you move between pages. Down the side, a streak counts the days you showed up, quietly stepping over the breaks you planned.

OverallYearMonthWeek
Analyze

One control, every scale.

Flip a single control between overall, year, month, and week and every chart re-fits to match. A weekly heatmap shows the rhythm of your effort at a glance, and you can stack whole quarters side by side — by group — to see where each one actually went.

Research
SalkMPISWL
Salk · S26MPI · Su24
Salk · Fall 2026 Salk family
Organize

Filed the way you think.

Flat tags collapse over a year. log(ger) uses three levels instead — a group (the kind of work), a family (the thread that runs through it), and a category (one session’s slice). New categories file themselves: on import they snap to the right family by exact or prefix rules, so you never sort by hand.

How much research this quarter?
Approve ✓
52h 15m — 41% Salk.
Salk MPI COGS PP SWL
Explore & ask

See it, then just ask.

A bubble map shows your projects breathing across sessions — the biggest circles the things you gave the most to. When charts aren’t enough, ask in plain language: an assistant tied to Claude reads your sessions and answers, with every call gated behind a one-tap approval. Link a GitHub repo and your summaries even pull in real commit context.

study.csvtext.csv
🗄 logger.db ↓ snapshot.db
Own it

All of it, on one file.

Everything lives in a single SQLite file on your machine — no cloud, no accounts. Bring years of history in by dropping a CSV pair onto the import page; it fans out across six tables in one transaction, messy headers and all. Download a snapshot whenever you want, or load one back.

Curious how that file changes as you work? Go under the hood →

Run it locally

Builds from source into a real .app. Needs uv, pnpm, and Node 22+.

git clone https://github.com/KevinBian107/logger.git && cd logger
uv sync --project backend --extra macapp
pnpm --dir frontend install && pnpm --dir frontend build
uv run --project backend python scripts/build_macapp.py
open dist/Logger.app

Prefer hot-reload? Browser dev mode and CSV import are in the README.