Write report #work/proj-x due:fri 17:00 ~2h !high @review Fixed the build 45m #work/proj-x @ci
Work log and tasks
A private work log and task list in your browser — tasks nested as deep as you like with due dates, effort and recurring rules, a timestamped journal, timers and timesheets that roll up by project, and a “what’s on my plate” view — with quick-add typing, undo, and JSON, Markdown and CSV import and export.
Added
How to use it
Three things in one place: a task list (tasks inside tasks, as deep as you like), a log of what you did, and time tracking, all filed under the same categories (Work › Project X › Design). The tabs:
-
Today — the running timer, what’s overdue, due today and in progress, today’s time on a timeline and by category, and today’s log.
-
Tasks — the tree. Tick to finish; + adds a subtask; ▶ starts a timer; click a title (or ⋯) to edit status, due date and time, start date, estimate, priority, category, tags, repeat and Markdown notes. Parents show the roll-up of their subtasks: % done, time spent against the estimate, and the earliest due date inside. Filter by status, due date, category, tag or text, and sort within each level.
-
Log — a journal grouped by day: what you did, decided or noticed, with an optional task, category, tags and time spent. Search and filter by category, tag, task and dates.
-
Time — totals for a date range by category, task, tag, day or week (categories and tasks include their children), every time entry (edit or delete any of them, or add one by hand), and estimate against actual. Download any range as CSV.
-
Open work — everything still open, overdue first, with the estimated effort left per group and in days: what’s on your plate. Sort by priority, biggest first, or quick wins.
-
Data — back up, export, import, categories (rename, recolour, move, merge) and settings.
Quick add
The box at the top adds a task (or, switched to Log, a log entry). Little words do the filing, and the line under the box shows what it understood before you press Enter:
-
#work/proj-x— category; every level is created if it is new. It must start with a letter, so#123stays text. -
@review— a tag (as many as you like). -
due:fri 17:00— due date and optional time. Dates:today,tomorrow,mon…sun(the next one; today counts),next fri(Friday of next week),next week(its first day),eow(end of the working week),eom,+3d,+2w,+1m,in 3 days,nov 3,3 nov 2027,2026-11-03. Times:17:00,9:30,5pm,noon;due:fri@5pmworks too, anddue:17:00alone means today. Use quotes for two words:due:"next fri". -
start:mon— when you plan to start (the task shows on Today from then). -
~2h— effort estimate:30m,2h,1h30m,1d(one working day, 8 hours unless you change it in Data),1w(a working week); a bare~3means hours. -
!high— priority:!urgent,!high,!medium,!low(or!!!for urgent,!!for high). -
every:weekly— repeats:daily,weekdays,weekly,monthly,yearly,3d,2w. When you tick it off, the next one appears with its due date moved on. -
status:doingorstatus:blocked— start it in that state. -
In a log entry, a duration such as
45m,1h30mor1.5his time spent (it counts in the reports, ending at the entry’s time), andat:9:30orat:yesterday 17:00back-dates it. -
A backslash keeps a word as text:
\#hashtag.
Keyboard
Press ? for the full list. Anywhere: n new task, l log entry, t start a timer on the selected
task (or stop the running one), / search, 1–6 switch tabs, ⌘Z / Ctrl+Z undo and ⇧⌘Z / Ctrl+Y
redo. On a selected task: ↑/↓ move, →/← expand or collapse, Enter edits, Space ticks it off, Tab and
Shift+Tab indent and outdent, Alt+↑/↓ re-order, a adds a subtask, d duplicates.
Drag a task by its ⠿ handle onto another: the top or bottom edge puts it before or after, the middle puts it inside. On a phone (or without a mouse) use the editor’s ⇤ ⇥ ↑ ↓ buttons or Move under….
Timers
One timer runs at a time; starting another stops the first. It stores when it started, so it keeps counting if you close the tab, reload, or come back tomorrow — the page title shows it too. Starting a timer on a task marks it Doing; ticking the task off stops its timer. Time on a task counts for its category and every parent task and category above it. A stop under a second is treated as a mis-click and dropped. Forgot to start one? Add the time by hand on the Time tab, or log an entry with a duration.
Your data
Everything is saved as you go, in this browser’s storage for this site (IndexedDB; localStorage if IndexedDB is unavailable), and never leaves your computer. The page asks the browser to keep it persistent so it isn’t cleared when space runs low; Data shows whether it agreed. Undo and redo cover every change until you reload. If the tool is open in two tabs, each saves and the other reloads to match.
Because the data lives in one browser, a different browser, device, private window or address is a
separate, empty store. In particular, the preview in the gitwebsite desktop app (at 127.0.0.1) is a
different site from geekychris.github.io as far as the browser is concerned. Move data between them
with Download backup and Import.
Back up now and then — a banner reminds you after a week (adjustable). A backup is one JSON file with everything, marked with a schema version. Importing one checks it first, explains anything wrong, and shows what will change. Then choose Merge (adds new items and keeps the newer version of anything edited in both places — matched by id, nothing is deleted) or Replace.
You can also export tasks as a Markdown checklist (with the quick-add words, so it imports back
exactly) or CSV, the log as Markdown, and time entries as CSV for a spreadsheet or timesheet. Import
accepts Markdown checklists (- [ ], - [x]), bullet, numbered or plain indented lists (headings
become parent tasks; indented > lines become notes) and CSV with a title column plus any of
status, due, estimate, priority, category, tags and notes, nested by id/parent_id or a level
column.
Load sample data (on the empty start page, or in Data) fills it with a small example so you can see it working.
Limits
-
No sync and no accounts: one browser’s storage. Move data with backups.
-
Merge never deletes: something deleted in one copy comes back when you merge the other copy in.
-
Undo history is lost on reload.
-
Times are local to this computer’s time zone; a log entry with a duration is counted as ending at the entry’s time.
-
Built for a personal list — thousands of tasks are fine; tens of thousands will feel slow.
-
A recurring task repeats from its due date (or today, if it has none), not from when you finished.
Related: timers and Pomodoro (focus sessions with their own log), CSV viewer (for the time export), timestamp converter.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.