All bars now share one baseline, because each column has a label row
of the same height. Before, only columns with a day number had a label
row, so their bars sat higher.
Only the peak bar has a value label, so labels no longer overlap in a
31-day month. A readout line above the chart shows the date and value
of the bar that the user hovers, taps or focuses.
Day numbers are no longer cut, a period with no time has no bar, the
axis line sits at the bar baseline, and bars are 24px wide or less.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Under the TAG picker, the timer form shows buttons for the 3 different
tags from the most recent sessions, newest first. A tap selects the
tag. It does not start a session.
The minute buttons move under the DURATION field. They share the column
width, so all six stay on one line on desktop and on mobile.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The theme picker shows NORD, MOCHA and LATTE. Nord is the base theme
in the CSS, the browser bar color and the PWA manifest. The startup
script applies the theme before the first paint.
A device that saved Mocha changes to Nord one time. After that, a user
can select Mocha again and the app keeps it.
The Nord red #bf616a has only 3.05:1 contrast on the background, so the
danger color is the lighter #dc8890 (4.74:1).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
When a new service worker takes control, the app shows an UPDATE
button. If the page is hidden, the app reloads into the new version.
It does not reload while the entry editor is open or while a save or
import runs. A running timer continues after the reload, because it is
stored with its start time in IndexedDB.
The app asks for a new version when it becomes visible and one time
each hour, because an installed PWA can stay open for days.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This is the first commit of the project, at the state that runs on
timelog.minhtrannhat.com.
Changes in this state:
- Remove redundant UI text from the sidebar, timer and insights pages.
- Show the remaining time and tag in the browser tab title while a
session runs.
- Put the shared record type and the due and end helpers in
src/shared/record.ts.
- Remove the startup tag migration and the one-time Forest import
script. The live data does not need them.
- Remove unused CSS, Playwright ignore rules and duplicate helpers.
- Do not track Forest CSV exports, because they contain private data.
Co-Authored-By: Claude Opus 5.5 <[email protected]>