Releases: manucompiles/Tasklog
Release list
v3.1.0 - Journal QoL: drill-down feelings wheel
Changed
- The feelings wheel now drills down (#85) - instead of all 130 feelings at once (unreadable slivers on a phone), one level fills the whole circle at a time: the seven cores first, then a tapped feeling's finer shades, with a zoom in/out animation. Picking a word logs it and resets the wheel to the cores, ready for the next feeling; deepest slices pick on tap, the center picks the word you're standing on. Back and "all" navigate without picking.
- Every feeling explains itself - all 130 wheel entries carry a short differentiating gloss ("infuriated: boiled over, seeing red" vs "annoyed: small irritation, still in control"), shown under slice names and in the wheel's center to ease finding the right word.
- Map of Consciousness reference ladder - an info button beside the derived score opens a full-spectrum, log-scaled ladder (major Hawkins anchors labeled, courage line marked, your current picks-average positioned). Captioned honestly: "a lens, not a measurement".
- Plan tasks open their sheet in the journal - tap a task title in Today's Plan or the Unplanned bucket to open the full task detail (subtasks, comments, pickers) and edit sheet without leaving the page.
- The check-in modal is bigger on desktop (640px).
Notes
- Wheel dataset (
feelingsWheel.ts) gains ahintfield on every core, secondary, and tertiary, pinned by a dataset test. NewMocLaddercomponent; the rail gained no widget - the ladder lives inside the check-in popup where tagging happens. 7 new component tests cover the drill-down interaction.
v3.0.0 - Journaling
Added
- Journal (#79) - a new top-level section (
/journal): one structured note per day, with a calendar (entry dots) to browse any date.- Three templates: Daily (check-ins, What's going on, Mind dump, Projects today, Today's plan, Front/Back of mind, Daily review, Evening review, Journal), Gratitude, and Affirmations (revisited at the evening close to celebrate wins). Empty sections stay quietly collapsed; the optional Journal section is "earned depth only".
- Mood check-ins - timestamped, several per day, logged through a feelings wheel (7 cores / 41 secondaries / 82 tertiaries, multi-select, own words welcome). The Map of Consciousness score is derived from your picks, never self-tagged; the rail shows the day as a mood arc colored red-to-green by level with a courage-200 reference line. Emotion shift and energy-at-EOD derive from your first and last check-ins.
- Task-linked plan - three buckets (Non-negotiable / If energy allows / Easy wins); the combobox finds open tasks or creates one via an explicit "+ Create task" row (due today, Inbox). "Unplanned, got done" fills itself from tasks completed that day that were never planned.
- Front/Back of mind - transient rail lists designed to be cleared by close of day; uncleared items resurface tomorrow as "rolled over - keep?" candidates.
- Today so far widget (plan progress, time logged, habits, check-ins) + a jump-to-evening shortcut; after 6pm the page opens on the evening cluster.
- Edit / Preview toggle and export - preview and download show the same backend-rendered, Obsidian-compatible markdown; export one day as
.mdor everything as a zip. - The journal carries its own scoped look (fog paper / plum / serif prose, soft dark mode) via new
--color-j-*tokens; the rest of the app is untouched.
Notes
- New tables:
JournalTemplates(code-defined, upserted by key at startup),JournalEntries(one per template per date, unique-indexed, content as JSON TEXT),MoodCheckins(first table with no Task FK). NewcompletedOn=filter onGET /api/tasks. Markdown is generated by a pureServices/JournalMarkdownhelper - stored data is structured JSON, markdown is only ever a render. - New frontend dependency:
react-markdown(preview display only). Feelings-wheel dataset + Hawkins scale mapping sourced indocs/research/feelings-wheel-moc.md. - Journal endpoints are LAN-only and NOT exposed over the MCP connector yet - deliberately deferred until minimal auth (planned v3.1).
v2.20.0 - Subtasks
v2.20.0 - Subtasks
July 2026
Added
- Subtasks (#78) - break a task into a checklist of one-line items, each with a done state, a manual order, and an optional deadline.
- Subtasks show inline, clubbed under their parent on every surface - the desktop table (a full-width sub-row beneath the task), the mobile card, and the board card - as tickable circles with a "2/5" progress badge. Tap a circle to tick a step without opening anything. A subtask with a deadline shows that date inline next to it.
- The task detail (modal +
/tasks/:idpage) has a full subtask editor: add inline, tick, set/clear a per-subtask deadline, delete, and drag-reorder. - Completing a parent that still has open subtasks asks what to do: complete them all, or move them out as their own standalone tasks (kept in the parent's project, with a back-reference). Recurring tasks get the same prompt, then the next occurrence spawns with a fresh, all-unchecked copy of the checklist.
- MCP: 7 new tools bringing total to 36: 6 subtask tools (
add_subtask,list_subtasks,set_subtask_completion,update_subtask,delete_subtask,reorder_subtasks) plusfind- one by-name search over both tasks and subtasks that tags each hittaskorsubtask(subtasks carry their parent), so "I finished wire up the waitlist form" resolves in a single call without knowing which task it's under.
Notes
- New
Subtaskstable (Tasks1-to-many, cascade delete) mirroring theTaskComment/CheckInpattern. Tasks gain response-onlysubtaskCount/completedSubtaskCount(always present) and asubtasks[]array (loaded on the detail, and on the list only when the web passes?includeSubtasks=truefor the inline checklist; MCP'slist_tasksstays lean with counts only). - New frontend components:
SubtaskChecklist(the inline clubbed list, shared by card + table + board),SubtaskSection(full editor with @dnd-kit drag-reorder),CompleteWithSubtasksDialog(the complete-all vs pull-out prompt). First drag-and-drop dependency:@dnd-kit.
v2.19.0 - Time tracking + project colors
v2.19.0 - Time tracking + project colors
June 2026
Added
- Time tracking (#77) - track how long you spend on tasks, Toggl-style.
- A persistent tracking bar sits at the bottom-left on desktop, full-width on mobile. Type a task name and hit Start to quick-create an Inbox task and begin tracking immediately - or start a timer on any existing task from its row in the task list. The bar shows the running task title and a live H:MM:SS clock; one tap stops it.
- A Toggl-style timeline at
/timerenders a vertical hour grid with day columns (day or week view). Each tracked interval is a project-colored block - click an empty slot to log an entry, click a block to edit or delete it. Running entries grow live off the 1 s tick. - Snap-to-5-min / exact granularity setting on the timeline page.
- Inbox color picker on the timeline page - Inbox tasks have no project color, so you can assign one that persists in localStorage.
- At most one timer runs at a time (server-enforced). Starting a new one auto-stops the previous.
- Project colors - each project can have a hex color set when creating or editing it. The color appears as a left border on timeline blocks and as a swatch in the sidebar/modal.
- MCP: 9 new tools bringing total to 29:
- Time tracking (7):
start_timer,stop_timer,get_active_timer,log_time,edit_time_entry,delete_time_entry,get_time_summary - Habits (2):
get_habits(full dashboard - streak, done-today, weekly progress),undo_habit_checkin,get_habit_checkins - Comments (2):
list_task_comments,delete_task_comment - Projects:
create_projectandrename_projectnow accept an optionalcolorhex param
- Time tracking (7):
Notes
- New
TimeEntriestable (Tasks1-to-many).Projectstable gains a nullableColorcolumn. ColorPickerButtoncomponent replaces the legacy inlineColorPicker.tsx- a swatch button that opens a floating popover; used in the sidebar, edit modal, and timeline settings.LabelColorButtonis the label-specific equivalent.TimeTrackingContext(React context) owns the single running entry and a 1 s tick that only fires while a timer is active, so live elapsed seconds render across the bar, the task row timer control, and the timeline without a separate polling loop.
v2.18.1 - Fix: frequency habit check-in progress
Fixed
- Checking in an "x times a week" habit now updates its "n/x this week" count and the current-week strip cell immediately. Previously the streak flame moved but the weekly progress stayed stale (and the week cell stayed grey) until the next background refresh - and a second check-in in the same week could briefly show the wrong streak. The optimistic update is now frequency-aware (#76).
v2.18.0 - Habits v2 Step 2 (frequency + deadline-free schedules)
Added
- "X times a week" habits (#75) - a habit's schedule can now be a weekly frequency ("go to the gym 3x a week") instead of fixed days. Pick the mode in the habit's Schedule chip: Specific days (the existing "every Tue & Thu") or x times a week (a 1-7 stepper). A frequency habit is checkable any day; its card shows "n/x this week", a week-based streak, and a strip of recent weeks coloured green (target met), yellow (showed up but under target), or grey (missed). The streak counts consecutive weeks you showed up at least once - hitting the full target turns the week green, but a yellow week still keeps the streak alive; only a fully missed week breaks it.
- Claude can set the frequency over the connector:
create_task/update_taskaccept aweeklyTarget(1-7).
Changed
- Habits no longer need a deadline to have a schedule (#75). A habit's recurrence is its check-in pattern, not a due date, so the Due chip is hidden for habits and you can set a schedule with no deadline. (Ordinary recurring tasks still need a deadline - it's the anchor they advance from on completion.)
Notes
- Small database migration: one nullable
WeeklyTargetcolumn; existing habits are untouched and stay on the specific-days/daily model. A habit is one mode or the other (specific-days OR a weekly target), never both. Deferred to a later pass: a combined "x times among chosen days" mode, an "x times a month" period, and the calendar heatmap.
v2.17.0 - UI uplift (tokens + chip sheet + board) + Habits v2
Added
- Design-token foundation - all colors now come from semantic CSS variables (surface, text, border, accent, success/warning/danger), so the look is consistent and a dark theme later is a drop-in. Focus rings are unified to one accent color (an accessibility improvement).
- Chip-driven task sheet - adding and editing a task now happens in one sheet (a centered dialog on desktop, a keyboard-aware bottom-sheet on mobile). The title is a quick-add field (type
friday #Work @urgent p1/!urgent); recognized bits highlight and become chips you can adjust, Escape (or tapping a highlight on mobile) turns a recognized bit back into plain text, and#project/@labelauto-create. Replaces the old inline add form + edit modal. - Board view - a List | Board toggle with a Group-by control (due bucket / project / priority). The board shows horizontally-scrollable columns of rich cards (shadow, due-colour tint, priority pill). Each view remembers its own layout.
- Habits, reworked - a habit is now never completed/closed; its control is a daily check-in (an amber ring that fills green when done today). Habit rows are marked with a flame, a right-side Habits panel (and a mobile drawer) let you check in without leaving your task list, and a habit can carry a schedule (e.g. "every Tue & Thu") - the streak counts only the scheduled days, the dot row shows only those days, and off-days read "not due today." Checking in moves the habit out of the day's list.
Fixed
- A habit could previously be "completed" from the task list (closing it) while still showing on the Habits page - two disconnected "done" states. Habits are no longer completable; daily check-in is the only "done."
Notes
- Frontend-only; no database migration. The "x times a week" habit frequency model + decoupling deadline from habit schedules are deferred to a later Habits v2 Step 2.
v2.16.0 - Habit tracking
Added
- Any task can now be tracked as a daily habit (#74). Tick "Track as a daily habit" when adding or editing a task, and it shows up on a new Habits view (sidebar link).
- Each habit on the Habits view shows:
- a current streak - the number of consecutive days you've checked it in (counting back from today; not checking in today yet doesn't break the run until tomorrow)
- a last-7-days dot row - one filled dot per day you checked in
- a big "Mark done today" toggle - one tap logs today's check-in (tap again to undo). Checking in is idempotent: doing it twice in a day doesn't double-count.
- Claude can check a habit in for you over the MCP connector: a new
log_habit_checkintool ("I meditated today", "mark my workout done"), andcreate_task/update_taskaccept anisHabitflag.
Habits are decoupled from recurring tasks: a habit is an ongoing daily check-in, not a finish-once task. Check-ins are stored per day in a new table (a small database migration; existing tasks are untouched and default to not-a-habit). A GitHub-style calendar heatmap is a deliberate later addition - the check-in data already supports it.
This is the finale of the recurring + habits program (v2.13.0 comments -> v2.14.0 recurrence -> v2.14.1 advanced grammar -> v2.15.0 quick-add -> v2.16.0 habits).
v2.15.0 - Natural-language quick-add
Added
- The add-task title field is now a Todoist-style quick-add (#72). Type one line and it recognizes, inline, as you type:
- a due date in natural language - "tomorrow", "friday", "jan 27", "in 3 days", "next week at 4pm"
- a repeat - "every day", "every weekday", "every other monday", "every 3rd thursday", "monthly on the 1st"
- #project, @Label (auto-created if new), and p1-p4 priority
- Recognized tokens are highlighted in the field and listed as removable chips below it (click the x to unlink a wrong match). Typing # or @ opens an autosuggest dropdown (arrow keys + Enter, or click). The parsed values also fill the Deadline / Project / Priority / Repeat controls live.
- A bare multi-weekday list like "friday and saturday" (no "every") is treated as those specific days once each - modeled as a weekly repeat ending on the last day - rather than an endless repeat. "every friday and saturday" stays ongoing.
Frontend-only, no migration. Uses chrono-node for the free-form date parsing; recurrence and the symbol tokens are parsed in-house onto the existing recurrence grammar. Also fixes the phone deploy to bundle vendored (file:) dependencies.
v2.14.1 - Advanced recurrence
Added
- Recurrence now supports the richer Todoist-style patterns (#71):
- "the 3rd Thursday" / "the last Friday" of the month (nth-weekday)
- "the last day" of the month, or a day counted from the end
- intervals: "every other week", "every 2 months"
- end conditions: repeat until a date, or for a set number of times - after which the series stops (and logs a "series complete" note)
- The recurrence picker on the add/edit forms gained controls for all of these (monthly day-of-month / nth-weekday / last-day, an interval input, and an "Ends" option). Claude can use them too via the same
recurrencerule string oncreate_task/update_task
No database migration - end conditions live in the recurrence rule itself, and "for N times" is tracked from the existing series history. This is a patch (it extends the v2.14.0 recurrence feature rather than adding a new one).