Skip to content

zoltanpetrik/napirend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAPIREND

License: MIT TypeScript React Node.js

My daily-driver task manager - local-first, with time tracking and AI integration.

Napirend (pronounced "NAH-peer-end"): Hungarian for "agenda" or "daily schedule" - a fitting name for a task manager built to structure your day.

Why NAPIREND?

I searched everywhere for a great task manager with built-in time tracking, but every good option locked time tracking behind an unjustifiably expensive subscription.

So I built NAPIREND - the task manager I wanted but couldn't find:

  • Quality: Every detail refined until it met my own high standards.
  • Time Tracking built-in: Estimate hours, track actual time, see the difference.
  • Local Data Storage: Task data lives in a simple JSON file, no database setup required.
  • AI Ready: AI assistants can optionally access and manage your tasks.

What You Get

Task Board Collapsible groups with drag-and-drop reordering
Task Board demo
Time Tracking Per-task timer with estimated vs. actual hours
Time Tracking demo
Filtering Search tasks, filter by status or project
Filtering demo
Projects Color-coded labels to organize your work
Projects demo
Auto-assign If a task mentions a project, it is automatically assigned
Auto-assign demo
Quick Entry Add multiple tasks without touching your mouse
Quick Entry demo
Markdown Notes Record additional context for every task
Markdown Notes demo
Bulk Actions Select multiple tasks to move, update, or delete
Bulk Actions demo
MCP Server AI assistants can create, update, and track tasks
MCP Server demo
Real-time Sync AI task updates show up instantly in the browser
Real-time Sync demo
Click to expand full feature list
  • Task Management

    • Create tasks with inline input (Enter to add, stays focused for rapid entry)
    • Edit task titles inline (click to edit, Enter to save, Escape to cancel)
    • Delete tasks with confirmation dialog
    • Task properties
      • Title (max 200 characters, trimmed)
      • Description/notes (markdown, max 2000 characters)
      • Status: pending, in_progress, completed
      • Project assignment (optional)
      • Estimated hours (decimal, e.g., 2.5)
      • Order within group
    • Auto-project assignment: if title contains a project name, it's auto-assigned
    • Completed tasks show strikethrough styling
    • Notes badge indicator on tasks with descriptions
  • Time Tracking

    • Per-task start/stop timer with play/pause button
    • Timer display in HH:MM format (no upper limit, e.g., "105:30")
    • Timer state persists across page refresh (server-stored)
    • Multiple tasks can have running timers simultaneously
    • Display updates every 10 seconds while running
    • Estimated hours input per task
    • Group header shows spent/estimated time with percentage (e.g., "01:30/03:00 (50%)")
    • Auto-stop timer when marking task as completed
  • Groups (Sprints)

    • Create groups via navbar input
    • Rename groups inline (click name to edit)
    • Delete groups with confirmation (blocked if group has tasks)
    • Collapsible groups (click arrow to toggle)
    • Drag-and-drop reordering of groups
    • Task count per group
    • Aggregated time tracking per group (sum of all task times)
    • "Select All" button per group for bulk operations
  • Projects

    • Create projects with custom name and colors
    • Edit project name, background color, and text color
    • Delete projects (blocked if tasks reference it)
    • Color picker with native input and hex text input
    • Case-insensitive unique names
    • Alphabetically sorted
    • Manage via "Manage Projects..." modal in navbar
  • Filtering & Search

    • Text search (case-insensitive, matches task titles)
    • Multi-select status filter (checkboxes in dropdown)
    • Multi-select project filter (includes "Unset" option)
    • Filters combine with AND logic
    • Groups with no matching tasks are hidden when filters active
    • Task count display: "Showing X of Y tasks" when filtered
    • Clear button resets all filters
    • Sticky filter bar below navbar
  • Bulk Operations

    • Multi-select tasks via checkboxes
    • Bulk action bar (always visible)
    • Move selected tasks to a group
    • Set status for all selected tasks
    • Set project for all selected tasks
    • Bulk delete with confirmation dialog
    • Selection persists after move/status/project changes
    • Selection cleared after bulk delete
  • Drag and Drop

    • Reorder tasks within a group
    • Move tasks between groups
    • Reorder groups on the board
    • Drop indicator lines show insertion point
    • Visual feedback during drag (opacity, highlight)
    • Uses Atlassian's Pragmatic Drag and Drop library
  • UI/UX Features

    • Task details drawer (right-side offcanvas)
      • Markdown rendering with click-to-edit
      • Character count display
      • Opens on right-click of task row
    • Confirmation dialogs for destructive actions
    • Keyboard shortcuts
      • Enter: save/submit
      • Escape: cancel/close
    • Sticky header (navbar + filter bar + bulk action bar)
    • Responsive layout (vertical stacked groups)
  • Real-Time Sync

    • Server-Sent Events (SSE) for live updates
    • Automatic data refresh when changes occur
    • Works across browser tabs
    • MCP tool changes reflect instantly in UI
    • Auto-reconnection on connection loss (built into EventSource)
  • AI Integration (MCP Server)

    • Model Context Protocol server for LLM integration
    • Stdio transport for local usage (Claude Code on same machine)
    • HTTP transport for remote usage (Claude Code in a VM or on another machine)
    • Available tools:
      • list_groups: Get all task groups
      • list_projects: Get all projects
      • list_tasks: Get tasks (optionally by group)
      • get_task: Get a specific task
      • create_task: Create a new task
      • update_task: Update task fields
      • start_timer: Start time tracking
      • stop_timer: Stop time tracking
    • Default group resolution: "Inbox" group or first group
    • Configurable API base URL via environment variable
    • Task deletion intentionally not exposed for safety
  • Data Storage

    • Local JSON file (data/data.json)
    • Auto-created on first run
    • Pretty-printed with 2-space indentation

Quick Start

Prerequisites: Node.js 20+

git clone https://github.com/Zoltanpetrik/napirend.git
cd napirend
npm install
npm run dev

The tool is accessible at http://localhost:3030.

Your data is stored in data/data.json (see data/data.example.json for the format).

Environment variables (optional, all have sensible defaults):

Variable Default Description
PORT 3031 Backend server port
NODE_ENV development Set to production to serve built client
NAPIREND_API_BASE http://localhost:3031/api MCP server's API target

For production builds, see SPECS.md.

Roadmap

  • New groups added to the top - When creating a new group, place it at the top of the board instead of the bottom.

  • Auto-collapse completed groups - Groups where all tasks are completed should be collapsed by default.

  • Sprint rollover - Option when creating a new group to roll over unfinished work from the previous sprint. Non-pending tasks in the most recent group are marked as completed with "(wip)" appended to their title, estimation set to elapsed time (rounded to .1h), and cloned into the new group with the remaining estimation and description carried over.

  • Exclude unestimated tasks from group progress - Tasks without an estimation should not affect the percentage in the group header. Display should clarify that the percentage is based on estimated tasks only (e.g., "01:30/03:00 (50%) - 4/6 tasks estimated").

  • Pin Inbox below active sprint - Inbox should automatically stay as the second group. When a new sprint is created at the top, Inbox moves to position 2 rather than being pushed further down.

  • Auto-set in progress when starting timer - Starting a timer on a pending task should automatically set its status to in_progress.

MCP Integration

NAPIREND includes an MCP server so AI assistants like Claude can manage your tasks. Two transports are available:

Option 1: Stdio (local — Claude Code runs on the same machine)

Add this to your project's .mcp.json (or global config):

{
  "mcpServers": {
    "napirend": {
      "command": "npx",
      "args": ["tsx", "/absolute/path/to/napirend/mcp/index.ts"]
    }
  }
}

Option 2: HTTP (remote — Claude Code runs in a VM or on another machine)

The NAPIREND server exposes an HTTP MCP endpoint at /mcp on the same port as the REST API. Configure Claude Code with:

{
  "mcpServers": {
    "napirend": {
      "url": "http://<host-ip>:3031/mcp"
    }
  }
}

Usage

Make sure the NAPIREND server is running (npm run dev), then Claude can:

  • List and create tasks
  • Start/stop timers
  • Move tasks between groups
  • Update status and projects

Available MCP Tools

Tool Description
list_groups Get all task groups
list_projects Get all projects
list_tasks Get tasks (optionally filtered by group)
get_task Get a specific task by ID
create_task Create a new task
update_task Update task fields
start_timer Start time tracking
stop_timer Stop time tracking

Architecture

flowchart TB
    subgraph Browser
        React[React 19 + Vite]
    end

    subgraph AI[AI Assistant]
        LocalClaude[Claude - local]
        RemoteClaude[Claude - VM / remote]
    end

    subgraph MCP[MCP Server - stdio]
        MCPServer[mcp/index.ts]
    end

    subgraph Server[Express 5 :3031]
        API[REST API + SSE]
        HTTPMCP[HTTP MCP /mcp]
    end

    subgraph Storage
        JSON[(data.json)]
    end

    React <-->|HTTP| API
    API -.->|SSE broadcasts| React
    LocalClaude <-->|stdio| MCPServer
    MCPServer <-->|HTTP| API
    RemoteClaude <-->|HTTP| HTTPMCP
    HTTPMCP <-->|internal| API
    API <--> JSON
Loading

Tech Stack

Layer Technology Why
Frontend React 19 Latest and greatest
Backend Express 5 The one and only
Build Vite Fast HMR, zero-config TypeScript
Styling Bootstrap 5 Familiar look and feel
DnD Pragmatic DnD Atlassian's library: accessible, works reliably
Real-time SSE Simple, reliable, auto-reconnecting
AI MCP Turnkey solution for AI assistant integration

Detailed Documentation

Development started with a handwritten spec, then evolved through collaboration with AI into the following docs:

License

This project is licensed under the MIT License.

About

A local-first task manager with built-in time tracking and AI integration via MCP.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages