Skip to content

Tasks

A fresh to-do list for each day

Overview

Tasks gives you a fresh to-do list for every day. Instead of one ever-growing pile, each date has its own list — you pick a day in the sidebar, jot what needs doing, and check things off as you go. It is part of the kimtos new-tab app suite.

Everything is fully on-device. There is no backend, no account, and no network: every task lives in your browser's IndexedDB and never leaves the machine.

Highlights

  • A list per day — a sidebar of dates, each opening its own task list. Today and Yesterday are labelled by name; other days show their weekday and date.
  • Quick capture — a compact composer adds a task by title; expand it to add an optional description.
  • Edit in place — rename a task or change its description without leaving the list.
  • Check things off — a done checkbox on every task; the header shows how many are still left.
  • Multi-select delete — tap Select (or drag across rows) to remove several tasks at once, with one undo that restores them all.
  • Dock badge — the dock icon shows the total number of open tasks across every day.
  • Home widget — a card on your home screen lists today's open tasks plus anything still unfinished from earlier days, so nothing silently vanishes when the date rolls over.

Privacy model

Tasks writes only to local browser storage:

  • Tasks (date, title, description, done flag) are records in IndexedDB.
  • Nothing is uploaded, and there are no analytics or third-party calls.

Because each task is plain serializable data, your lists are portable — they travel with the browser profile and are included in the suite's local Export / Import backup.

Getting Started

Open Tasks from the dock. It opens on Today with an empty list ready for your first task.

The day sidebar

The left sidebar lists your days, newest first. Today is always present; past days appear once they have tasks.

  • Switch days — click a day to open its list.
  • Labels — Today and Yesterday are named; other days show their weekday and date (for example, Mon, Jun 8).
  • Open marker — a small dot next to a day means it still has open tasks.

On a narrow window the sidebar collapses into an overlay; use the hamburger button in the list header to show or hide it, and click outside it to close.

Adding and editing tasks

  • Add a task — type a title in the composer at the top and press Enter (or click Add task). The task lands on the day you have open.
  • Add a description — click into the composer to expand it and type an optional description below the title.
  • Edit — click the pencil on a task to edit its title and description in place; Save keeps the change, Cancel discards it. Press Esc to cancel, or ⌘/Ctrl+Enter to save.

Marking tasks done

Tick the checkbox on a task to mark it done; untick to reopen it. The list header shows a running count of how many tasks are still left for that day.

Deleting tasks

  • One task — click the trash icon on a task and confirm.
  • Several at once — click Select, tick the tasks you want (or drag across rows to pick a range), then Delete (N). A toast lets you undo for a few seconds, restoring all of them.

The dock badge

The Tasks icon in the dock carries a badge with the total number of open tasks across every day — a glanceable count of everything still on your plate.

The home widget

Tasks also shows a Today card on your home screen. It lists open tasks in a deliberate order:

  • Overdue first — tasks still unfinished from earlier days, each tagged with the day they came from.
  • Then today's open tasks.

This carry-over matters: because each day has its own list, an unfinished task would otherwise drop out of view once midnight passes. The widget surfaces those overdue items so nothing silently vanishes when the date rolls over. You can check a task off straight from the card, and it shows up to five items with a +N more link into the full app.

Architecture

Tasks follows the suite convention: all data logic lives behind the local API layer, and the app itself is UI. The code lives in extension/src/apps/tasks/.

Modules

FileRole
index.tsThe app descriptor and UI — the day sidebar, the per-day task list, the add/edit composer, done toggles, multi-select batch delete, the dock badge, and the home widget.
tasks.local.tsThe data layer — task CRUD, the per-date summary, and the pending/overdue query over IndexedDB, registered on the local API router.

Data flow

The UI never touches storage directly: it calls getApi / jsonApi (the suite's local router), which dispatches to tasks.local.ts.

The data model

Todos are stored as flat records, each carrying its own date, title, description, done flag, and a created timestamp. There is no per-day container in storage — the day-by-day view you see is reconstructed by grouping records on their date:

  • GET todos?date=… returns one day's tasks, sorted by creation order.
  • GET todos/dates groups every record by date and reports, per day, how many are open and how many total — this drives the sidebar dots and the dock badge.
  • GET todos/pending?today=… returns today's open tasks plus overdue ones (open tasks whose date is earlier than today), feeding the home widget.

Keeping todos flat means a task can move conceptually from "today" to "overdue" with no data change at all — only the today value the query is compared against moves forward, so yesterday's unfinished work naturally carries over.