A local work activity logger that runs on your Mac. Record what you did throughout the day, organize tasks by category and tag, and analyze your time weekly and monthly.
docker compose up -dOpen http://localhost:5555. Data is persisted in ./data/.
# Stop
docker compose down
# Rebuild after code changes
docker compose up -d --build
# View logs
docker compose logs -f- Node.js 22+ (uses built-in
node:sqlite) - npm
cd work-log
npm installnpm startOpen http://localhost:5555.
Before recording tasks, set up your tags and categories in Settings.
Tags group categories. Examples: "Development", "Communication", "Operations".
Go to Settings > Tags, type a name, pick a color, and click Add Tag.
Categories are the specific activity types you log. Each category has a name, color, optional tag, and an optional Main flag.
Go to Settings > Categories, fill in:
- Name - e.g. "Coding", "Meeting", "Code Review"
- Tag - select from your tags
- Main - check this for categories that represent core work (used for filtered analysis)
- Color - pick from the palette
| Tag | Categories |
|---|---|
| Development | Coding, Code Review, Debugging |
| Communication | Meeting, Slack, Email |
| Operations | Deploy, Monitoring, Admin |
- Open http://localhost:5555 and go to Record
- Select Start time (hour and minute dropdowns, 5-min intervals)
- Select End time (only shows times after start)
- Choose a Category
- Type a Description of what you did
- Optionally add Detail (supports Markdown - switch to Preview tab to check formatting)
- Click Save
Shortcuts:
- Click any recorded task in the list to auto-fill the start time with that task's end time (for consecutive tasks)
- The start time defaults to the end of the last recorded task, or 09:00 if no tasks exist
- Navigate between days with the arrow buttons or date picker
- Click Edit on any entry to load it into the form
- Click Delete to remove an entry
- Time overlap is validated - you cannot save a task that conflicts with existing entries
The horizontal timeline at the top of the Record page shows:
- All tasks as colored blocks positioned by time
- The 09:00-17:30 work zone highlighted in blue
- An amber "now" marker (today only)
- Hour ticks from 5:00 to 22:00
Go to Analysis to review your time. Toggle between Week and Month views.
Shows a table with one row per day:
- Timeline bar showing task blocks with category colors
- Per-category time columns
- Daily total
- Week total with per-category percentages
Same format as weekly, but grouped by week with subtotals and percentages for each week.
Below the daily table, the Breakdown card shows aggregated time with two independent controls:
- Group by: Category or Tag
- Filter: Full (all categories) or Main (only categories flagged as Main)
When Main is selected, percentages are recalculated against the main-only total, showing how your core work time is distributed.
All data is stored locally in data/worklog.db (SQLite). This file is gitignored.
Export any day's entries as CSV or Markdown from the Record page (export buttons in the header) or from Settings.
To back up your data, copy data/worklog.db. To restore, replace the file and restart the server.