A single-file task manager with hierarchical projects, customizable labels, saved filters, and your Time Sector rituals baked in. No limits on projects, labels, or filters.
Keyboard shortcuts
Quick-add shorthand
p1 / p2 / p3 / p4 — priority@label — adds a label (matches by prefix, e.g. @deep finds @deep-work)#project — assigns project. Spaces and punctuation are ignored, so #thisweek, #this-week, and #ThisWeek all match "This Week"today / tomorrow / mon…sun / YYYY-MM-DD — sets due dateRepeating tasks
Quick-add repeat shorthand
repeat daily, every day, everydayrepeat weekdays — Mon to Fri onlyevery wed and fri, every mon, wed, fri, every tue thurepeat weekly / monthly / yearlyevery 2 weeks, repeat every 3 days, every other weekuntil 2026-12-31 or until friday — stops repeating after that daterepeat or every), so "Daily standup" stays an ordinary task. Example: Team sync every wed and fri p2 @calls until 2026-12-31List view vs Board view
Top-right of every view: toggle List / Board, choose a grouping (None, Priority, Project, Label, Due Date) and a sort order (Smart, Priority, Due date, Title A–Z, Newest, Oldest). Grouping and sorting now work in List view as well as Board — grouped lists get a heading per bucket. On a board, drag a card between columns to change its priority or project.
Each view remembers its own settings. One project can sit in Board grouped by Label while another stays a list sorted by due date; Today, Inbox, labels and saved filters each keep their own too. With "No grouping" a project shows its sections and Today shows its Golden Hours; pick a grouping and that takes over. Completed tasks always sort last.
Sections inside projects
Open any project → "+ Add section" at the bottom. Sections group tasks within a project (e.g., "Q1 Goals", "Backlog", "In Review"). Tasks can be assigned to a section in the task editor (the picker appears once the project has sections). Hover a section header for rename / delete.
Projects, labels & filters
Sidebar width
Drag the divider between the sidebar and the task list to resize it (190–560px). Double-click the divider to snap back to 260px, or focus it and use ←/→ (hold Shift for bigger steps). The width is saved with your data.
Syncing across devices
Click ⟳ in the sidebar footer to connect this device to your Cloudflare sync endpoint. Enter the same endpoint and key on every laptop and phone and everything stays in sync automatically — pushes a couple of seconds after each change, pulls on load, on focus and every minute. Setup instructions are in cloudflare/README.md.
Edits made on two devices are merged per item rather than one device overwriting the other, using the last state each device synced as the common ancestor. Deletions are honoured; if the same item was edited in both places, the more recent edit wins. Theme, sidebar width and collapse state stay local to each device.
Export (⇩) / Import (⇧) still work and need no setup — use them for backups, or instead of sync if you'd rather not host anything.
Base configuration
This file has a base setup baked into it — projects, labels, filters, rituals, sidebar width and view settings. Open it in any browser or on any device with no saved data and you get exactly that setup, no import needed. Everything you add on top lives in that browser's storage and travels via Export / Import.
A browser that already has saved data keeps it — your tasks are never overwritten. When this file's base version changes, anything the base has and that browser is missing is added on next open (nothing is renamed, reordered or deleted). Use "Reload base config" below to force a full reset to the base.
Base version in this file: —
To promote your current setup to the new base, download the config file and paste its contents over the BASE_CONFIG block near the top of this HTML file's script.
Point every device at the same Cloudflare endpoint and key, and your tasks, projects,
labels, filters and rituals stay in sync — no export/import. Theme and sidebar width
stay local to each device. Setup steps are in cloudflare/README.md.
/api/state when you open the app from your Pages URL. Opened from disk, use the full https://…/api/state.SYNC_KEY variable on the Cloudflare project. Anyone with the URL and this key can read and write your tasks.default and work.