README

Study effort, made visible.

A local-first Chrome extension that records how long you actually studied, what you were working on, and where that time went — then turns it into reports you can trust.

Installing Hourmark

Hourmark is not on the Chrome Web Store yet — the listing is still being prepared. Until it is, you can run it from source:

  1. Download or clone the repository.
  2. Run npm install, then npm run build.
  3. Open chrome://extensions and turn on Developer mode (top right).
  4. Choose Load unpacked and select the .output/chrome-mv3 folder.

The toolbar owl appears once it loads. Nothing leaves your machine at any point — see the privacy policy.

What Hourmark is

Most study timers are Pomodoro clocks: they count down to a break. Hourmark counts up, because the thing worth measuring is effort invested, not intervals survived.

You start a session against a course and (optionally) a task. While it runs, Hourmark quietly records which sites you used — domain, page title, path, search terms — and attributes that time back to the work you said you were doing. When you stop, you get a record you can actually defend: "I put 16h 17m into Data Structures this term, 33% of it on LeetCode."

Three things make it different:

  1. It counts up. Stopping a session and completing a task are separate actions. Finishing work is not the same as running out of time.
  2. It connects browsing to coursework. Time on chatgpt.com isn't just "time on ChatGPT" — it's time on Binary search trees, in Data Structures & Algorithms.
  3. It stays on your machine. No account, no server, no sync. Everything lives in chrome.storage.local.

Who it is for

Hourmark is built for students who need proof of effort, not productivity theatre:

AudienceWhy it fits
Competency-based university students (WGU and similar)Progress is measured in demonstrated work, not seat time. A defensible per-course hour count matters.
Online and self-paced learnersNo lecture timetable imposes structure, so the record has to come from somewhere.
Working studentsStudy happens in scattered 40-minute windows. Those windows need to add up somewhere visible.
Certification and exam candidates"Have I put enough hours into this domain?" is the whole question.
Bootcamp learnersWeekly effort targets per module, with evidence.

The through-line: people whose motivation depends on seeing the effort accumulate, and who need honest data rather than a gamified streak that punishes a bad week.

Design principles that fall out of that: motivate without shame, never fabricate data, keep starting a session fast, and treat study history as sensitive.

Feature tour

Every screenshot below is the real extension, rendered from the built bundle with a generated preview dataset.

The popup: start a session in two fields

Click the toolbar icon, type or pick a course, optionally a task, press start. That's it — no notes field, no project setup, no friction between deciding to study and studying.

Hourmark popup, idle stateHourmark popup, idle state

Course is genuinely optional: leave it blank and the session attaches to a shared "Unnamed" course you can rename later, rather than blocking you at the door.

While a session runs, the popup becomes the live card — elapsed time, the course and task, totals, your goal, what you're currently looking at, and the owl:

Hourmark popup, active sessionHourmark popup, active session

Notes are collected after the work, not before it. Stopping shows the completion screen with a prompt — and the auto-dismiss only counts down while the box is empty, so it never closes a half-written note:

Session complete, with a notes promptSession complete, with a notes prompt

Studied offline? The Manual tab is a three-step wizard for adding time after the fact — course and task, then the time, then the date, with overlap protection:

Manual entry wizardManual entry wizard

The floating timer

While a session runs, a draggable widget rides along on the page you're studying on. It shows live/paused state, the count-up, the course, pause/resume, and stop.

Floating timer, expandedFloating timer, expanded

Collapse it and it becomes a slim capsule docked to the nearest screen edge — still showing the owl, status and elapsed time, still able to pause and resume, but you have to expand it to end a session:

Floating timer, dockedFloating timer, docked

Where you put it sticks. Position, collapsed state and dock side persist in local storage, so the widget reappears exactly where you left it after a reload and on every other page you open.

Overview: where your time went

The headline question — where did my time actually go? — has three answers, and Hourmark refuses to collapse them into one. The same donut switches between Courses, Tasks and Websites:

Overview, time by courseOverview, time by course

Rows are two-stage. The first press on a course opens its tasks in place; a second press walks into the course:

Overview with a course expanded into its tasksOverview with a course expanded into its tasks

Tasks mode ranks every task across every course, each labelled with the course it belongs to:

Overview, time by taskOverview, time by task

Websites mode drills into the individual pages behind a domain — the actual titles, paths and search terms Hourmark saw. Every site icon is drawn locally: Hourmark never asks a favicon service for them, because that request would tell a third party exactly which site you just visited:

Overview, time by website with page drill-downOverview, time by website with page drill-down

Courses and tasks

Courses have three saved layouts (cards, list, compact grid), a status filter, and completed courses split into their own section — a finished course should read as a small badge of honour, not get lost in the pile.

CoursesCourses

Any card expands in place into its task checklist without leaving the page:

Course card expanded into its task checklistCourse card expanded into its task checklist

Course detail and task analytics

Each course gets progress, time spent, goal, status, a task-or-website breakdown, its task table, notes, and recent sessions:

Course detailCourse detail

Each task gets its own analytics page — real totals, session count, goal, a website breakdown, a per-session bar chart and history, all derived from that task's own sessions:

Task analyticsTask analytics

Session history

Every session, searchable and filterable, with CSV export. The seven-day chart is clickable: selecting a day scopes the history below it and splits that day's bar into its real activity mix, coloured by site.

Session history with a day selectedSession history with a day selected

Personalisation

Courses and tasks each carry an icon and a colour. That colour is one source of truth: it tints the icon, the progress bars and that entity's slice in every donut. Press a course's icon anywhere it appears — a card, a list row, or the course header — to edit just its look:

Edit course iconEdit course icon

Tasks work the same way from their own page, with an extra Auto option that hands the colour back to the automatic palette:

Edit task iconEdit task icon

Auto and the spectrum chip sit together at the head of the row, ahead of the twelve presets; the chip opens the system colour picker for anything the palette misses.

Data and privacy

Settings owns the whole data story: what counts as idle, how long detailed activity is kept, JSON backup and restore, CSV export, and two levels of deletion.

SettingsSettings

Light and dark

Every surface — dashboard, popup and the injected floating widget — follows the theme.

Overview in dark modeOverview in light mode

Privacy model

What it does:

  • Records activity only while a tracked session is running — paused and stopped means nothing is captured.
  • Stores domains, redacted URLs, paths, page titles, extracted search queries and timestamps, in chrome.storage.local on your machine.
  • Redacts before storage: URL credentials, fragments and secret-looking query parameters are dropped.
  • Ships per-site icons as hand-drawn local SVGs — no favicon service is called, because that request would leak the domain you visited to a third party.
  • Lets you delete activity detail (keeping durations) or everything, and export a full JSON backup at any time.

What it does not do:

  • No account, no server, no cloud sync.
  • No passwords, cookies, keystrokes, form values, payment data, screenshots, camera or microphone.
  • No analytics, telemetry or remote assets — the mascot GIFs are bundled, not fetched.
  • No Incognito or other-profile collection.

Honest limitations: "Outside Chrome" means Chrome lost window focus — Hourmark cannot see which other application you switched to, and does not claim to. Being local-first is not the same as being anonymous or encrypted; anyone with access to your browser profile has access to this data.