Self-reflection, browser extension
Tabmood
A picture of where your attention went, built from the least data that could possibly produce one.
Chrome Web Store Privacy policy
The problem
Every time-tracking extension starts from the same temptation: the more it records, the better the charts get. Full URLs, page titles, search queries, idle detection down to the keystroke. The product improves and the thing you installed becomes a surveillance log of your life that happens to live on your own machine. Tabmood started from the opposite end — what is the smallest record that still answers the question?
The domain is the whole constraint
Tabmood stores a domain, a start time, an estimated duration, and a category you can change. That is the record. No page paths, no search queries, no URL fragments, no page text, no screenshots, no form entries, no keystrokes. Private windows and non-HTTP(S) pages never enter it at all.
Working inside that limit is the design. You cannot show someone which article held them for an hour, only which site did — and that turns out to be enough for the question actually being asked, which is where the day went, not what was in it.
Minimisation applied backwards
An earlier version stored full addresses. Rather than leaving that data sitting there and only changing behaviour going forward, the upgrade reduces already-stored addresses down to domains.
Deleting data you have already collected is the part almost nobody does. It has no user-visible feature attached, it cannot be demoed, and the only person who knows it happened is whoever reads the changelog. It is also the only version of data minimisation that means anything.
Saying "estimate" and meaning it
Browsing time is a guess about attention, not a measurement of it. Tabmood pauses when the browser reports the device idle or locked, or when no window is focused, and discards long sleep gaps rather than billing you for the hours your laptop was shut.
The same restraint applies to what the summary claims. The categories and the mood view are framed for reflection — explicitly not a diagnosis of an emotional state and not a productivity score. The pressure to ship a number that goes up is constant, and a number that dresses up a guess as a verdict is worse than no number.
There is no server, no telemetry, no cloud sync, and no remote fonts — that last one because a font fetched from someone else’s CDN hands them your address on every page load. History lives in local IndexedDB, kept thirty days by default, adjustable to seven, ninety, or a year, or until you delete it yourself. You can export it or wipe it whenever you like.
The decisions
- Recorded
- Domain, start, estimated duration, category — nothing finer
- Excluded
- Private windows, non-HTTP(S) pages, paths and queries
- Migration
- Previously stored full addresses reduced to domains on upgrade
- Retention
- 30 days by default; 7, 90, 365, or indefinite by choice
- Network
- No server, telemetry, cloud sync, or remote fonts