Skip to content

Latest commit

Β 

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

TaskTracker

The local-first task board for you and your AI agents.

Claude and Cursor plan and update tasks over MCP. Agents propose, you approve: every change waits for one tap.
Working with agents stays low-effort: one calm board, changes in plain words, nothing leaving your machine.

MCP Local-first AI Node License: MIT PRs welcome


An AI agent connected over MCP asks to add a task, complete one and add a subtask; nothing changes until each request is approved in the app, then the board updates

A real MCP connection (a scripted demo agent) asking for three changes. Nothing moves until they're approved.


πŸ€– Agents work on your board

Claude Code, Cursor and any MCP client get 19 tools to plan work, break it into subtasks, log progress and finish tasks, through the same rules you use.

βœ… You stay in charge

Agents propose, you approve. Changes from agents and from the built-in assistant wait on an approval card, in plain words, until you tap Apply. Trust an agent? Let it apply right away.

🏠 It stays on your machine

One SQLite file. No account, no cloud, no telemetry. Pair it with Ollama or LM Studio and even the AI runs locally.

πŸ’­ Why I built this

In the agentic AI era, the hard part isn't getting AI to do work. It's keeping up with it. Every new agent is one more thing to watch, one more place where work happens, one more stream of updates to read.

I wanted the opposite: a task board that gets calmer as AI gets more capable. One place where my agents and I share the same list, where I can see what happened at a glance, where nothing changes behind my back, and where the screen stays quiet enough to think. Task Tracker is that board.

πŸ™‹ Who it's for

You are… What Task Tracker gives you
A developer working with coding agents Your agent plans the work, breaks it into subtasks, logs progress and completes tasks over MCP. You approve its changes in one tap and see everything on one board.
Privacy-first Everything local: one SQLite file, no account. Run the assistant on Ollama or LM Studio and nothing leaves your machine.
Easily overwhelmed by tools Four columns, no Save buttons, deadlines in plain words, and an assistant you can ask "What should I focus on today?", by typing or by voice.
An AI power user Humans, the assistant and agents all go through one data layer, so the rules always match. Plan on a timeline and drag to reschedule.

Who it's not for: teams that need shared boards and permissions, sync across devices through a cloud account, or enterprise project management with resource planning. Task Tracker is for individuals who want calm over features, local over cloud, and AI as a helper rather than a replacement.

🧘 Calm, defined

"Calm" isn't a mood here; it's a set of promises:

  • Four columns to start, not a workflow designer.
  • Everything autosaves. There's no Save button anywhere.
  • Deadlines read like a person wrote them: Due in 3h, Overdue by 2d.
  • Agents ask first. Their changes wait for your OK, spelled out in plain words, and you approve them in one tap.
  • The assistant proposes, you approve, and it can't delete anything.
  • Agents show up where you already look: on the board, live, with no extra dashboard to check.
  • Each reminder fires once, and a burst arrives as a single summary.
  • Errors are plain sentences with a next step, never a stack trace.
  • What you don't need is folded away: undated tasks, hidden columns and the archive stay out of sight until you ask.

Quick start

git clone https://github.com/Parv17k/tasktracker.git
cd tasktracker
npm install      # installs dependencies and builds the UI
npm start        # β†’ http://localhost:1717

That's it. No database to install and no config files. SQLite is built into Node 22.13+, so there's nothing native to compile either.

πŸ€– Work with your AI agents (MCP)

Task Tracker ships with a Model Context Protocol server, so your agent can keep track of its own work, or yours.

Claude Code

claude mcp add tasktracker -- node /absolute/path/to/tasktracker/mcp/index.js

Claude Desktop, Cursor, Windsurf and other MCP clients

{
  "mcpServers": {
    "tasktracker": {
      "command": "node",
      "args": ["/absolute/path/to/tasktracker/mcp/index.js"]
    }
  }
}

Then just ask:

"What's overdue across all my projects?" "Break task #3 into subtasks, tag it #backend and move it to In Progress." "Log what you just did on #12 and mark it complete."

All 19 MCP tools
Tool What it does
list_projects Every project with priority, tags, task counts per column and deadlines. A good first call
create_project New project with its own board, priority and tags
update_project Rename, re-icon, set priority, or add/remove tags
get_board Columns and tasks of one project (project: "website", fuzzy)
list_tasks Search across all projects or one: column, text, tag, due_within_days, overdue, archived
get_task Full details, including subtask ids
create_task Project, column, title, description, note, priority, start and due dates, subtasks, tags
update_task Change any field (due: "" / start: "" clear dates), add_tags / remove_tags
move_task Move by column name (fuzzy: "in prog" works) or id
complete_task Move to the done column, optionally appending a summary
archive_task Archive, or restore with archived: false
append_note Add a timestamped line to the note (great for progress logs)
add_subtasks Add checklist items
update_subtask Check, uncheck or rename a subtask
delete_subtask Remove a subtask
track_time Start or stop the time-spent timer
list_columns A project's columns with ids, hidden flags and the done column
list_tags Every tag with how many tasks and projects use it
get_request Whether a change request was approved, and the ids of anything it created

βœ‹ Agents ask first

By default, an agent can read everything but can't change your board on its own. Each write becomes a request in the πŸ€– Agent requests inbox:

  • A gentle toast tells you "Claude Code wants to make 3 changes"; nothing interrupts you more than that.
  • Each change is spelled out in plain words, with a checkbox. Untick what you don't want, then Apply, or Dismiss the lot.
  • The agent is told what happened (get_request), including the ids of anything it created, so it can carry on.
  • Trust an agent? Switch the inbox to Apply right away and its changes land directly, live on the board.

The MCP server works on the same SQLite file as the app, so agents can read your board even when the web server isn't running. When it is, open tabs update live within about half a second.

✨ The built-in assistant

Click ✨ in the top bar. Connect any OpenAI-compatible provider once (one-click presets for OpenAI, OpenRouter, Groq, Ollama and LM Studio), and your board gains an assistant.

πŸ’¬ Ask

  • Grounded answers: every question carries a compact snapshot of your projects, columns and tasks, with deadlines, start dates, priorities, tags, subtasks and tracked time. The project you have open comes first.
  • Streams as it thinks, with a Stop button. The conversation follows you between pages.
  • Clear when something's wrong: if the provider is down, the key is wrong or the URL is off, you get a plain sentence and a next step, never an error dump.

βœ… Act, with your approval

  • Ask it to create, move, reschedule, reprioritise, tag or complete tasks, add subtasks or notes, or set up projects.
  • It answers with an approval card listing each change in plain words. Untick anything you don't want, then Apply.
  • Every change is checked against the same rules as the board, applied all-or-nothing, and it can't delete anything.

πŸŽ™οΈ Talk

  • Tap the mic and speak. It stops listening when you pause.
  • Turn on read answers aloud πŸ”Š to hear the reply.
  • Asked by voice? The mic reopens after each answer, for a hands-free conversation. Proposed changes pause it so you can review them.
  • Uses your provider's speech models (e.g. Whisper) if you set them, or your browser's built-in speech.

πŸ”Œ Let agents do the work

  • A first-class MCP server turns Task Tracker into shared memory for your coding agent.
  • Agents plan (tasks and subtasks), report (timestamped notes) and finish (complete with a summary).
  • Their changes appear on your board within about half a second.
  • Humans, the chat and agents all go through one data layer, so the rules always match.
Asking Task Tracker what to focus on today: the assistant ranks tasks due in the next few hours, due today, and overdue
"What should I focus on today?" A real, unedited answer from a self-hosted open model, grounded in the board behind it.

Asking the AI to summarize a project from inside its board, in the RosΓ© Pine theme
"Summarize this project", asked from inside a board in the RosΓ© Pine theme. Also a real answer.

πŸ”’ What leaves your machine? Only when you ask: a summary of your tasks (and, by voice, your recording) goes to the provider you chose. Your API key is stored locally and never reaches the browser, which only ever sees …last4. Point it at Ollama or LM Studio and even that stays local.

🎯 Features

πŸ—‚οΈ Every project at a glance

Task Tracker home page with every project, its priority, tags and status at a glance

  • Totals and status breakdown for each project, with a progress ring, overdue and due-this-week counts
  • Priority and tags on projects: mark what matters most, and filter the home page by tag (work, personal, Q4…)
  • Coming up: everything due in the next 7 days across all projects; click a card to open that task
  • Drag projects to reorder them; create, edit, archive or delete them. New projects start with four columns, or copy another project's

πŸ—“οΈ Timeline: plan across time, drag to reschedule

A project's timeline: bars from start date to deadline, diamonds for deadlines, today marked, overdue items in red

Switch any board to Timeline. It's a Gantt chart without the clutter:

  • A bar from start to deadline, or a β—† when a task only has a deadline, grouped by column and coloured to match it
  • Drag to reschedule: move a bar, drag its ends to change dates, or pull a β—† out into a bar. Arrow keys work too, and times of day are kept
  • Today is always in view; overdue items are red with "Overdue 2d"; finished ones fade
  • Weeks or Months zoom, and the board's search, tag and deadline filters apply

The home-page timeline: one row per project with a diamond for every deadline, one project expanded to its tasks

On the home page, switch Projects to Timeline to see every project at once: one row each, with a β—† for every deadline, so busy weeks stand out. Expand a project to see and reschedule its tasks right there.

πŸ“‹ A board that adapts to you

A project board in the Paper theme with tags, priorities, deadlines and subtask progress

Columns your way

  • Default columns: Open β†’ In Progress β†’ Follow-up β†’ Done
  • Add, rename and recolour columns, drag them by the header to reorder, and choose which one means "done"
  • Removing a column that still has tasks asks first: move them elsewhere, or hide the column for later
  • Smooth drag & drop with clear grab handles

Rich, frictionless cards

  • Title, description, subtasks with a progress bar, and a lined note pad
  • Priority from Low to Urgent, and colour tags: click one to filter the board
  • Archive with one click (with Undo); restore or delete from the archive
  • Search finds text in any field, including tags

⏰ Deadlines that speak human

  • Pick a date with an optional time, or a preset: Today, Tomorrow, In 2 days, Next week
  • Cards read Due today, Due in 3h, Due next week or Overdue by 2d, updated live
  • An optional start date turns a task into a span on the timeline
  • Due this week and Overdue filters, and a start/pause time tracker on every task

⌨️ Keyboard-friendly quick add

Press N and type naturally:

Send invoice to Acme @fri !high #finance
  • @today @tomorrow @mon…@sun @nextweek @3d @2w @2026-12-01 set the deadline
  • !low !med !high !urgent set the priority, #finance adds a tag
  • / to search, Esc to close
Task detail panel with status, priority, deadline, start date, time spent, tags and subtasks
Every field autosaves. Status, priority, deadline, start date, timer, tags, subtasks and note live in one calm panel.

🏷️ Tags that stay tidy

  • Shared by tasks and projects, with suggestions as you type and a stable colour per tag
  • Names ignore case, so Design and design are one tag; unused tags disappear on their own
  • Manage tags to rename, recolour or delete one everywhere at once

πŸ“² Install it, and get reminders

Task Tracker is a Progressive Web App: click Install in the top bar (Chrome, Edge, or Safari's Add to Dock) and it gets its own window and Dock/taskbar icon. Turn on reminders from the πŸ”” bell:

Reminder When Adjustable
The day before at your morning time (default 9:00) on/off, time
The morning it's due at your morning time on/off
Before a due time for tasks with a time, e.g. 1 hour before on/off, 15 min to 1 day
When it becomes overdue at the due time, or the next morning for all-day tasks on/off
  • Works with the app closed: the local server sends reminders through the browser's push service, signed with keys generated on your machine. No account needed.
  • Calm by design: each reminder fires once, done tasks never remind you, and a burst (say, after your laptop wakes) arrives as one summary.
  • Click a notification to jump straight to that task.

Reminders while the app is closed need the Task Tracker server running and an internet connection for the browser's push service. Open windows also receive them over the local live-update stream.

🎨 Themes

Twenty-four themes designed for focus. Switch instantly from the brush icon; your choice applies everywhere and is remembered.

Old Money theme
Old Money Β· hunter green & brass
Midnight Ink theme
Midnight Ink Β· deep navy
Terminal theme
Terminal Β· neon green on black
RosΓ© Pine theme
RosΓ© Pine Β· soft rose on midnight
Sakura theme
Sakura Β· soft blush
Dracula theme
Dracula Β· purple after dark
Solarized theme
Solarized Β· precise and warm
Gruvbox theme
Gruvbox Β· retro and earthy
Bubblegum theme
Bubblegum Β· playful pink
Grayscale theme
Grayscale Β· no colour, no glare
Navy & Gold theme
Navy & Gold Β· golden highlights
Neon Orange theme
Neon Orange Β· glowing amber

Also included: Paper Β· New York Β· Nordic Frost Β· Sage Garden Β· Espresso Library Β· Graphite Β· Grayscale Dark Β· Crimson Β· Ivy Β· Cardinal Β· Sunset Orange Β· Harbor Gold

πŸ—οΈ How it works

flowchart LR
    subgraph clients[" πŸ‘₯ Clients "]
        direction TB
        UI["πŸ–₯️ <b>React UI</b><br/><small>Board Β· Timeline Β· Chat Β· Voice</small>"]
        AGENT["πŸ€– <b>AI Agent</b><br/><small>Claude Β· Cursor Β· any MCP client</small>"]
    end

    subgraph node["&nbsp;βš™οΈ Node.js&nbsp;"]
        direction TB
        API["⚑ <b>Fastify API</b><br/><small>server/index.js · REST + SSE</small>"]
        CHAT["✨ <b>Assistant</b><br/><small>chat.js · actions.js · voice</small>"]
        MCP["πŸ”Œ <b>MCP Server</b><br/><small>mcp/index.js Β· 19 tools</small>"]
        CORE["🧠 <b>Shared data layer</b><br/><small>server/db.js · rules &amp; validation</small>"]
        WATCH["πŸ‘€ <b>Change watcher</b><br/><small>PRAGMA data_version</small>"]
    end

    DB[("πŸ—„οΈ <b>SQLite Β· WAL</b><br/><small>~/.tasktracker/tasktracker.db</small>")]
    LLM["🧠 <b>Your LLM</b><br/><small>chat · speech-to-text · voice<br/>OpenAI · Groq · Ollama · LM Studio</small>"]

    UI -->|"HTTP Β· JSON<br/>optimistic updates"| API
    API -.->|"SSE Β· live updates"| UI
    AGENT <-->|"stdio Β· JSON-RPC"| MCP
    API --> CORE
    API --> CHAT
    CHAT --> CORE
    CHAT <-->|"OpenAI-compatible API<br/>streamed"| LLM
    MCP --> CORE
    CORE <-->|"~1 ms queries"| DB
    DB -.->|"writes from<br/>other processes"| WATCH
    WATCH -.->|"broadcast"| API

    classDef client fill:#eef2ff,stroke:#6366f1,stroke-width:2px,color:#1e1b4b
    classDef agent fill:#f5f3ff,stroke:#8b5cf6,stroke-width:2px,color:#2e1065
    classDef server fill:#ecfdf5,stroke:#10b981,stroke-width:2px,color:#064e3b
    classDef core fill:#fff7ed,stroke:#f97316,stroke-width:2.5px,color:#431407
    classDef watch fill:#f0f9ff,stroke:#0ea5e9,stroke-width:1.5px,stroke-dasharray:4 3,color:#082f49
    classDef db fill:#fefce8,stroke:#ca8a04,stroke-width:2.5px,color:#422006
    classDef llm fill:#fdf2f8,stroke:#db2777,stroke-width:2px,stroke-dasharray:5 3,color:#500724

    class UI client
    class AGENT agent
    class API,MCP,CHAT server
    class CORE core
    class WATCH watch
    class DB db
    class LLM llm

    style clients fill:transparent,stroke:#94a3b8,stroke-width:1px,stroke-dasharray:6 4,color:#64748b
    style node fill:transparent,stroke:#94a3b8,stroke-width:1px,stroke-dasharray:6 4,color:#64748b
Loading
  • One data layer (server/db.js) holds every business rule, shared by the API, the assistant and the MCP server, so humans and agents always behave the same way.
  • Grounded chat without tool calling: the server sends the model a compact, budgeted snapshot of your board, and the model proposes changes as a small structured block that the app validates and shows for approval. It works even with small local models. Your API key never reaches the browser.
  • Live sync without polling the API: the server watches SQLite's PRAGMA data_version and pushes changes from other processes to browsers over Server-Sent Events.
  • WAL mode lets the web app and an agent write at the same time.
  • Optimistic UI with fractional ordering means drag & drop, on the board or the timeline, never waits on the server.
✨ Ask: from your question to an answer, and changes you approve
sequenceDiagram
    autonumber
    actor You
    participant UI as πŸ–₯️ Browser
    participant API as ⚑ Fastify API
    participant DB as πŸ—„οΈ SQLite
    participant LLM as 🧠 Your LLM

    You->>UI: "What should I focus on today?" (typed or spoken)
    UI->>API: POST /api/chat (conversation + open project)
    API->>DB: active projects, columns, tasks
    API->>API: build a compact snapshot<br/>(local dates, due labels, priorities, tags)
    API->>LLM: system prompt + snapshot + conversation<br/>(your key is added here, server-side)
    LLM-->>API: streamed tokens
    API-->>UI: streamed text
    Note over UI: Answer appears word by word ✨<br/>and can be read aloud πŸ”Š
    opt the answer proposes changes
        UI->>API: preview the proposed changes
        API-->>UI: plain-language list, checked against the board's rules
        UI->>You: approval card: tick what you want
        You->>UI: Apply
        UI->>API: apply the approved changes
        API->>DB: one transaction, all or nothing
        API-)UI: board updates live
    end
Loading
⚑ Live sync: an agent's change appears on your board
sequenceDiagram
    autonumber
    participant AI as πŸ€– AI Agent
    participant MCP as πŸ”Œ MCP Server
    participant DB as πŸ—„οΈ SQLite
    participant API as ⚑ Fastify API
    participant UI as πŸ–₯️ Browser

    AI->>MCP: complete_task(id: 12, note: "Shipped βœ…")
    alt Ask me first (default)
        MCP->>DB: save a request for your approval
        MCP-->>AI: waiting for approval (request 7)
        Note over DB: You tap Apply in the inbox
        DB->>DB: append note + move to Done (one transaction)
    else Apply right away
        MCP->>DB: append note + move to Done (one transaction)
        MCP-->>AI: βœ“ Completed task 12 β†’ Done
    end
    loop every 500 ms
        API->>DB: PRAGMA data_version
    end
    DB-->>API: version changed
    API-)UI: SSE event: change
    UI->>API: GET /api/board
    API-->>UI: full board (~1 ms)
    Note over UI: Card glides into Done ✨<br/>no refresh needed
Loading
πŸ”” Reminders: from a deadline to your screen
sequenceDiagram
    autonumber
    participant REM as ⏰ Reminder engine
    participant DB as πŸ—„οΈ SQLite
    participant PUSH as ☁️ Browser push service
    participant SW as πŸ”” Service worker
    actor You

    loop every minute
        REM->>DB: open tasks with deadlines
    end
    REM->>REM: due and not yet sent?
    REM->>DB: log it (each reminder fires once)
    REM->>PUSH: Web Push, signed with local VAPID keys
    PUSH->>SW: deliver, even if the app is closed
    SW->>You: "Due in 30 min Β· Send proposal"
    You->>SW: click
    SW-->>You: opens that task
Loading
Layer Tech
Frontend React 19 Β· Vite Β· Tailwind CSS v4 Β· Radix UI Β· dnd-kit Β· Zustand Β· Sonner
Backend Node.js Β· Fastify Β· node:sqlite Β· web-push
AI Any OpenAI-compatible API: /chat/completions (streaming), /audio/transcriptions, /audio/speech Β· @modelcontextprotocol/sdk Β· Zod
App Web App Manifest Β· Service Worker Β· Push & Notifications Β· MediaRecorder & Web Speech
Configuration
Env var Default
PORT 1717 Web server port
HOST 127.0.0.1 Bound to localhost only by default
TASKTRACKER_DB ~/.tasktracker/tasktracker.db Shared by the web app and the MCP server

The AI provider (and optional voice models) is configured in the app (✨ β†’ settings) and stored in the same database.

REST API
Method Endpoint
GET /api/home Every project with stats, tasks due soon, and all tags
GET / POST /api/projects List or create projects
GET /api/projects/:id/board A project's columns and active tasks, with subtasks and tags
PATCH / DELETE /api/projects/:id Edit (incl. priority and tags), archive or delete a project
POST /api/projects/:id/move { index } to reorder
GET /api/timeline Active projects with their dated tasks, for the home-page timeline
GET /api/tasks?project=&q=&tag=&column=&overdue=&dueWithinDays=&archived= Search and filter
POST /api/tasks Create
PATCH /api/tasks/:id Update fields (incl. startAt, dueAt, tags), archive or restore
POST /api/tasks/:id/move { columnId, index }
POST /api/tasks/:id/complete Move to the done column
POST /api/tasks/:id/timer/start Β· /stop Time tracking
POST /api/tasks/:id/subtasks Add a subtask
PATCH / DELETE /api/subtasks/:id Update or delete a subtask
POST / PATCH / DELETE /api/columns[/:id] Manage columns (POST { projectId, … }, DELETE ?moveTo=<id>)
GET /api/tags Every tag with its colour and usage counts
PATCH / DELETE /api/tags/:id Rename or recolour a tag everywhere, or delete it
GET / PATCH /api/settings/reminders Reminder preferences
GET /api/push/key Public VAPID key for subscribing
POST /api/push/subscribe Β· /unsubscribe Register or remove a browser for push
POST /api/push/test Send a test notification
GET / PATCH /api/settings/llm AI provider (base URL, model, key, voice models). The key is write-only
GET /api/chat/models Models offered by the provider (also a connection test)
POST /api/chat { messages, projectId }, streams the reply as plain text
POST /api/chat/actions/preview Β· /apply Check, then apply, changes the assistant proposed
GET /api/proposals?status=pending|recent Change requests from agents
POST /api/proposals/:id/apply Β· /dismiss Approve (optionally { selected }) or dismiss a request
GET / PATCH /api/settings/agents { approval: "ask" | "auto" }
POST /api/chat/transcribe Raw audio body β†’ { text }
POST /api/chat/speech { text } β†’ audio
GET /api/events Server-Sent Events stream (change, reminder)

🧭 Roadmap

Task Tracker is young and moving fast. Here's where it's heading, and every item is open for contributors. Comment on an issue (or open one) to claim it.

βœ… Recently shipped

  • βœ‹ Agents ask first: MCP changes wait in an approval inbox (or apply right away, your choice)
  • πŸŽ™οΈ Voice: talk to the assistant and hear it answer, hands-free
  • βœ… Assistant actions with an approval card for every change, and plain-language errors
  • πŸ—“οΈ Timeline (Gantt) per project and across projects, with drag to reschedule and optional start dates
  • 🏷️ Tags on tasks and projects, and project priority
  • ✨ AI chat with any OpenAI-compatible provider, grounded in your board
  • πŸ—‚οΈ Multiple projects with a home page, drag-to-reorder projects and columns
  • πŸ“² Installable app with deadline reminders that work while it's closed
  • 🎨 Twenty-four themes

πŸ€– AI and agents

Idea What it means Status
Planning agent Watches your timeline and proactively proposes fixes: spread out a crowded week, move what's slipping, break big goals into tasks. Every change still goes through the approval card πŸ§ͺ Designing
Daily briefing A morning note, spoken or written: what's due, what's at risk, and a suggested plan for the day πŸ“‹ Planned
Weekly review What you finished, what slipped, and where your time went, from the timer data πŸ“‹ Planned
Undo for applied changes One click to roll back everything the assistant just applied πŸ™‹ Help wanted
Native tool calling Use the provider's function calling when available, with the approval card as the fallback πŸ™‹ Help wanted
Natural-language capture "Remind me to renew insurance next Friday, high priority, #bills" β†’ a fully filled task πŸ™‹ Help wanted
Risk radar Flags tasks likely to slip, from deadlines, subtask progress and how long similar tasks took πŸ§ͺ Exploring
Semantic search Find tasks by meaning, with local embeddings, so it works offline πŸ§ͺ Exploring
Remote MCP Streamable-HTTP transport, so agents on other machines can connect πŸ™‹ Help wanted

πŸ“‹ Planning and productivity

Idea Status
🎯 Goals: link tasks to longer-term goals and track progress toward them πŸ“‹ Planned
πŸ”— Task dependencies: "blocked by #12", drawn as links on the timeline πŸ§ͺ Exploring
πŸ” Recurring tasks: daily, weekly, monthly, or custom πŸ™‹ Help wanted
πŸ’Ύ Saved filters: a tag + deadline + search combination one click away πŸ™‹ Help wanted
πŸ—“οΈ Calendar view: a month grid of deadlines πŸ™‹ Help wanted
πŸ… Focus mode: one task, a Pomodoro timer, everything else hidden πŸ™‹ Help wanted
πŸ“„ Task templates for repeatable checklists πŸ™‹ Help wanted
πŸ”€ Move tasks between projects πŸ™‹ Help wanted

πŸ”„ Data and platforms

Idea Status
πŸ“₯ Import from Trello, Todoist and GitHub Issues πŸ™‹ Help wanted
πŸ“€ Export a board as Markdown or JSON, and one-click backups πŸ™‹ Help wanted
πŸ“± Phone access on your local network with HTTPS, so phones can install the app πŸ§ͺ Exploring
πŸ”„ Optional sync between your own devices, still with no cloud account πŸ§ͺ Exploring
⌨️ Command palette (⌘K) and a keyboard shortcuts sheet (?) πŸ™‹ Help wanted
🌍 Translations and an accessibility audit πŸ™‹ Help wanted

πŸ§ͺ Exploring: open design question Β· πŸ“‹ Planned: agreed direction Β· πŸ™‹ Help wanted: ready to pick up

πŸ› οΈ Development

npm run dev     # API on :1717 + Vite with hot reload on :5173
npm test        # data layer, reminders, tags, timeline, chat, actions and voice tests (node:test)
npm run build   # production build of the UI

🀝 Contributing

Contributions of every size are welcome, from fixing a typo to adding a theme or building the planning agent. If this is your first open-source contribution, even better: we'd love to help you land it.

  1. Read the Contributing Guide. It takes about 3 minutes.
  2. Pick something from the roadmap, look for issues labelled good first issue, or browse the ideas list.
  3. Fork, branch, code, and open a pull request.

Not sure where to start? Open an issue and say hi. πŸ‘‹

Please be kind, be patient, and assume good intent.

⭐ Support

If Task Tracker helps you stay focused, consider starring the repo. It helps others find it.

License

MIT Β© Parv Khatri

About

The local-first task board for you and your AI agents. Claude & Cursor work on it over MCP, the built-in assistant asks before changing anything, and it all stays on your machine.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages